🧪 Тестовое задание — Python Backend
Спасибо за отправленное резюме и за интерес к Хайсу! Мы проанализировали твои квалификации и опыт работы, и чтобы получить более полное представление о твоих навыках, предлагаем пройти тестовое задание.
Это задание составлено так, чтобы продемонстрировать навыки, которые мы используем в работе каждый день. Если у тебя возникнут вопросы или понадобится дополнительная информация — не стесняйся обращаться к нам.
Удачи!
🧠 Задача: DummyMessenger
Напишите два файла на Python:
- Первый файл — сервер
DummyMessenger
- Второй файл — клиент, тестирующий скорость работы
DummyMessenger
📡 Сервер
Сервер должен быть реализован с использованием асинхронного фреймворка (например, aiohttp
, FastAPI
и др.).
При запуске:
- Инициализирует базу данных
- Создает таблицу сообщений, если она не существует
Эндпоинты:
POST /
Получает JSON-сообщение с: - именем отправителя - текстом сообщения
Действия сервера: - Сохраняет сообщение в БД - Возвращает JSON с последними 10 сообщениями, включая текущее
Ответ должен содержать:
- Имя отправителя
- Текст сообщения
- Дату отправки
- Порядковый номер сообщения
- Количество сообщений от текущего пользователя
🕓 Дата, порядковый номер и счетчик сообщений должны вычисляться в момент сохранения и записываться в БД.
⚠️ Ключевые требования:
- В ответе не должно быть сообщений, полученных после текущего запроса
- В ответе не должно быть пропусков
- Порядковые номера сообщений не должны совпадать
- У одного пользователя не должно совпадать количество сообщений
Такие ситуации могут возникнуть при асинхронной/параллельной обработке — предусмотрите защиту с помощью инструментов БД.
🤖 Клиент
Клиент должен:
- Поддерживать запросы к нескольким репликам сервера
- (например: два URL с разными портами)
- Отправлять сообщения от случайных пользователей (10 имен в списке)
- Работать с 50 асинхронными корутинами
- Каждая отправляет 100 последовательных запросов
- Всего 5000 запросов
В конце клиент должен подсчитать:
- Общее время выполнения всех 5000 запросов
- Среднее время на один запрос
- Общую пропускную способность (requests/sec)
📤 Что предоставить
- 📁 Открытый репозиторий на GitHub
- Файлы: сервер + клиент
- Все зависимости (например,
requirements.txt
) - 📘
README.md
, в котором описано: - Как воспроизвести результаты
- Как запустить 2 реплики сервера
- Как запустить клиента
- Любая дополнительная информация, которая поможет в тестировании
🛠️ Технологии и инструменты (рекомендации)
FastAPI
/aiohttp
asyncio
,aiohttp
(для клиента)- Любая СУБД: PostgreSQL, SQLite, etc.
- SQL-блокировки, транзакции, уникальные индексы — для предотвращения коллизий