Skip to content

Instantly share code, notes, and snippets.

@olegvg
Last active June 15, 2023 10:37
Show Gist options
  • Save olegvg/c724c4d2022ca48325f0d4ad20ca7ca0 to your computer and use it in GitHub Desktop.
Save olegvg/c724c4d2022ca48325f0d4ad20ca7ca0 to your computer and use it in GitHub Desktop.

Тестовое задание #1. Senior Python Developer.

Антифрод-приложение

Задание

Необходимо разработать приложение, которое:

  1. Имеет на входе таблицу iptable в БД PostgreSQL. При этом, данные в таблицу постоянно добавляются из сторонних источников, но не модифицируются и не удаляются. Схема таблицы:
  • user_id - пользователь
  • ip_address - IPv4 адрес
  • date — время добавления записи. При этом, таблица имеет ограничение uniq(user_id, ip_address)
  1. Производит аналитику по пересечению пользователей с одинаковыми ip (правила пересечения см. ниже).
  2. Реализует web-сервис (REST API), который на основе двух user_id сообщает о том, есть ли между ними взаимосвязь с максимально высокой скоростью (миллисекунды).

Для определения того, что пользователи взаимосвязаны, должно соблюдаться условие: у них есть два и более одинаковых ip_address из различных сетей /24, например:

  • 1.2.3.4 и 1.2.4.5 это разные подсети и, если у обоих пользователей есть оба эти адреса, то пользователи взаимосвязаны;
  • 1.2.3.4 и 1.2.3.5 это одна подсеть и пользователей нельзя считать взаимосвязанными.

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

Использование вероятностных структур данных допустимо, precision и recall rate обсуждаемы. В любом случае, cервер должен хранить информацию о связках ip и пользователя между перезапусками, для этого можно использовать БД sqlite, PostgreSQL и иные самодостаточные хранилища данных / способы обеспечения персистентности.

Объем уникальных user_id + ip_address гарантированно превышают объем RAM.

Требований к модели хранения данных нет, допустимо применять хэштаблицы с промежуточными значениями, не соблюдать нормализацию данных (для достижения скорости).

Порядок выполнения
  1. Необходимо подготовить краткое словесное описание предполагаемого алгоритма и архитектурного решения.
  2. Оценить время, необходимое на разработку, в человеко-часах собственной работы.
  3. Обсудить первые 2 пункта с инженером Работодателя.
  4. Разработать приложение.
  5. Покрыть приложение автотестами (объём обсуждаем).
  6. Предоставить человекочитаемые дампы БД/персистентных хранилищ после выполнения автотестов, но перед очисткой/инициализацией :-)
  7. Представить доступ к задеплоенному REST-сервису проверки взаимосвязи IP-адресов.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment