Code Monkey home page Code Monkey logo

go-core's People

Contributors

nastybits avatar

Watchers

 avatar

go-core's Issues

Хранение документов в виде бинарного дерева

Для быстрого поиска документов требуется хранить их в виде бинарного дерева. Для дерева должны быть определены операции вставки и поиска элемента.

Нарисовать своё представление схемы пакетов окончательной версии Интернет-поисковика. Схема должна содержать связи между пакетами в виде стрелок, указывающих направление зависимости (стрелка указывает на зависимость). Схема должна быть представлена в виде картинки, которую умеет показывать Гитхаб.

  • Реализовать бинарное дерево поиска с операциями вставки и поиска элементов
  • Переделать хранилище документов на использование дерева.
  • Использовать поиск по дереву вместо бинарного поиска при поиске документов по ID индекса.
  • Написать функции удаления элемента и разворота списка так, чтобы успешно выполнялись соответствующие тесты.

Переписать поисковик в ООП-стиле

Поскольку наш поисковик хранит состояние, то логичнее представить его как объект.

Разработать структуру данных для сервера поисковика. Предлагается создать отдельный исполняемый пакет, в котором была бы разработана структура данных и методы для приложения-сервера.

То есть отдельный пакет именно для службы поисковика. Этот исполняемый пакет становится ядром системы и точкой входа для пользователя: он должен вызывать сканирование сайтов, обработку поисковых запросов из консоли и т.д.

Переписать функции поисковика в виде методов. Функции сканирования документов, работы с хранилищем документов и обработки поисковых запросов должны быть реализованы в виде методов сервера. Естественным образом должны исчезнуть все глобальные переменные.

ДЗ #3: Подключение поискового робота через интерфейс

  • Создать интерфейс для поискового робота. Интерфейс должен называться Scanner и содержать один лишь метод Scan с
    сигнатурой, идентичной имеющемуся методу пакета «crawler»
  • Подключить поисковый движок к поисковому роботу через интерфейс.
  • Создать пакет-«заглушку». Пакет, который бы реализовывал интерфейс Scanner, но выдавал жёстко закодированные данные.

Сохранение данных поиска в файле.

Для повторного использования полученных сканером данных требуется сохранить их в файле и восстановить при запуске программы. При этом после запуска поисковый движок всё равно должен отдать команду на сканирование сайтов, но до окончания сканирования он должен отдавать данные, загруженные из файла.

  • Разработать механизм записи полученных от сканера данных в файл. Это должен делать поисковый движок по окончании сканирования сайтов. Формат представления данных для хранения выбирайте на своё усмотрение.
  • Загрузка данных из файла при старте поискового движка. Эти данные должны использоваться для поисковой выдачи до окончания сканирования сайтов.
  • (Дополнительное) Разработать имитацию файловой системы в оперативной памяти и написать модульные тесты для сохранения и загрузки данных из файлов используя созданную имитацию файловой системы.

Это стандартный приём тестирования, когда внешняя зависимость подменяется имитацией. Для этого ваша ФС в памяти должны реализовать контракт интерфейса, который использует ваша программа для работы с внешней зависимостью. В данном случае – интерфейс файловой системы.

ДЗ #4: Разработка быстрого поискового индекса

Для быстрого поиска слов в документах используется обратный индекс (ru.wikipedia.org). Поскольку индекс отсортирован, то для можно воспользоваться бинарным поиском для ускорения поисковой выдачи.

**Создать обратный индекс для документов. Разместить индекс в пакете «index».** 

Теперь поисковый робот должен передавать документы на индексирование. Проиндексированные документы должны храниться в объекте из пакета «index». Документы должны быть представлены в виде структуры данных. При этом для каждого документа нужно добавить его номер – поле в структуре данных вместе с URL и Title.
Массив документов должен быть отсортирован по номерам, используя сортировку из стандартной библиотеки.

**Переделать метод поисковой выдачи на использование индекса.** 

Для поиска по индексу поисковый движок должен импортировать поисковый индекс из пакета «index» как зависимость и искать по индексу, а не по массиву документов. Поиск по индексу должен выдавать номера документов (поле в структуре данных документа).

**Использовать бинарный поиск по массиву документов (по номерам документов).** 

Можно воспользоваться стандартной библиотекой или написать свою реализацию.

Написать тесты для поисковика

Для будущей безопасной переработки кода нужно покрыть тестами бизнес-логику системы.
Написать тесты для пакета поискового робота, индекса и движка

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.