Skip to content

Тестовое задание Python разработчика в команду ООО "ИНФО СФЕРА" повышенного уровня

Notifications You must be signed in to change notification settings

isphere-ru/python-dev-test-task-lvl2

Repository files navigation

Тестовое задание для Python разработчика команды ООО "ИНФО СФЕРА"

Описание

Реализовать сервис, который обходит произвольный сайт с глубиной до depth (2-10, задается аргументом depth) и сохраняет html, url и title страницы в хранилище.

Примеры сайтов:

  • https://ria.ru
  • http://www.vesti.ru
  • http://echo.msk.ru
  • http://tass.ru/ural
  • https://lenta.ru
  • и любой другой, на котором есть ссылки

Оптимизировать прогрузку по потреблению памяти и по времени. Замерить время выполнения и потребление памяти загрузки.

При depth=0 необходимо сохранить html, title, url исходного веб-сайта.

На каждом depth=i+1 качаем страницы ссылок с i страницы (то есть глубина 2 это - главная, ссылки на главной и ссылки на страницах ссылок с главной).

CLI

  • По URL сайта и глубине обхода загружаются данные.
  • По URL сайта из хранилища можно получить n прогруженных страниц (url и title).

Пример:

spider.py load http://www.vesti.ru/ --depth 2
>> ok, execution time: 10s, peak memory usage: 100 Mb
spider.py get http://www.vesti.ru/ -n 2
>> http://www.vesti.ru/news/: "Вести.Ru: новости, видео и фото дня"
>> http://www.vestifinance.ru/: "Вести Экономика: Главные события российской и мировой экономики, деловые новости,  фондовый рынок"

Требования

  • Язык реализации python3.7+
  • Использование классов, ООП
  • Выбор хранилища произвольный (PostgreSQL/Redis/ElasticSearch и любой другой на ваш выбор)
  • Стек технологий произвольный
  • Выбор библиотек произвольный
  • Решение оформить как проект на любом git-сервисе
  • Описать в README.md установку, запуск, python и другие зависимости для запуска

Было бы большим плюсом

  • Использование асинхронности/параллельности
  • Использование алгоритмов и структуры данных, оптимально подходящих под данное задание так и на уровне Python, так и в БД
  • Оптимизация полученного решения по скорости/памяти
  • Docker multistage build
  • Написать тесты при помощи pytest/unittest и любой другой на ваш выбор

Оценка решения

Приоритет факторов при оценивании решения:

  • Оптимальность, надежность и отказоустройчивость
  • Архитектура полученного решения
  • Скорость решения поставленной задачи (сколько часов, дней, недель понадобилось для разработчику)
  • Качество и чистота предоставляемого кода на python
  • Количество решенных доп. задачи (из раздела с плюсом)

Как начать выполнение тестового задания?

Для выполнения задания лучше всего использовать данный репозиторий как шаблон, для чего просто перейдите по этой ссылке.

Данный репозиторий уже содержит Dockerfile, docker-compose.yml и Makefile для быстрого запуска приложения силами docker (нет необходимости устанавливать python и пр. локально). Всё, что необходимо - это установленные локально docker и docker-compose. После клонирования репозитория просто выполните docker-compose up -d и/или натравите PyCharm на docker-compose - и можно приступать к написанию полезного кода.

Результат выполнения

  • Ссылку на репозиторий с вашей реализацией необходимо отправить нашему HR или TeamLead, от которого вы получили ссылку на данный репозиторий.

  • Приложение должно успешно запускаться после выполнения:

$ git clone ...
$ make build
$ docker-compose up -d
$ docker-compose run --rm app ./app
  • Проходить все тесты (при их наличии).

Если для запуска приожения потребуется другой набор команд - обязательно отразите это в файле README.md вашего репозитория.

Если в процессе выполнения у вас возникнут какие-либо неразрешимые вопросы - создайте соответствующий issue в данном репозитории. На вопросы касательно деталей реализации ("А лучше так и так?") - вероятнее всего вы получите ответ "Как вы посчитаете правильнее".

About

Тестовое задание Python разработчика в команду ООО "ИНФО СФЕРА" повышенного уровня

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published