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