|
||
---|---|---|
.. | ||
README.md |
README.md
Anagram microservice
Задача
Разработать микросервис на Go для группировки слов по анаграммам с возможностью обработки больших объемов данных.
Основные требования
-
REST API
Реализовать HTTP API со следующими эндпоинтами:
POST /api/v1/anagrams/group - группировка массива слов
GET /api/v1/anagrams/groups/{id} - получение результата по ID задачи
GET /api/v1/health - проверка состояния сервиса
-
Входные данные
{
"words": ["ток","рост","кот","торс","Кто","фывап","рок"],
"case_sensitive": false
}
- Выходные данные
{
"task_id": "uuid-string",
"status": "completed",
"result": [
["ток","кот","Кто"],
["рост","торс"],
["фывап"],
["рок"]
],
"processing_time_ms": 15,
"groups_count": 4
}
-
Архитектура и производительность
Использовать паттерн Clean Architecture
Реализовать пул горутин для обработки больших массивов (>10k слов)
Добавить кэширование результатов (in-memory)
Поддержка конкурентной обработки нескольких запросов
-
Обработка больших данных
Поддержка потоковой обработки для массивов >100k элементов
Возможность загрузки данных из файла (CSV, JSON)
-
Мониторинг и логирование
Структурированное логирование (logrus/zap)
Трейсинг запросов
Graceful shutdown
-
Тестирование
Unit тесты с покрытием >80%
Integration тесты
Benchmark тесты для алгоритма группировки
Тестирование нагрузки
-
API дополнения
POST /api/v1/anagrams/upload - загрузка файла со словами
GET /api/v1/anagrams/stats - статистика обработанных запросов
DELETE /api/v1/anagrams/cache - очистка кэша
-
Обработка ошибок
Валидация входных данных
Rate limiting
Timeout для долгих операций
Возврат детальных ошибок в JSON формате
Критерии оценки:
Качество и читаемость кода
Архитектурные решения
Производительность алгоритма
Обработка edge cases
Покрытие тестами
Документация API (Swagger/OpenAPI)
Monitoring и observability