diff --git a/anagram-microservice/README.md b/anagram-microservice/README.md new file mode 100644 index 0000000..97d5d4f --- /dev/null +++ b/anagram-microservice/README.md @@ -0,0 +1,113 @@ +## 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 \ No newline at end of file