playground/anagram-microservice
“Smyshlyaev.IO” 75d2d36f64 anagram 2025-08-26 01:18:19 +03:00
..
README.md anagram 2025-08-26 01:18:19 +03:00

README.md

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. Входные данные

{
    "words": ["ток","рост","кот","торс","Кто","фывап","рок"],
    "case_sensitive": false
}
  1. Выходные данные
{
    "task_id": "uuid-string",
    "status": "completed",
    "result": [
    ["ток","кот","Кто"],
    ["рост","торс"],
    ["фывап"],
    ["рок"]
    ],
    "processing_time_ms": 15,
    "groups_count": 4
}
  1. Архитектура и производительность

    Использовать паттерн Clean Architecture

    Реализовать пул горутин для обработки больших массивов (>10k слов)

    Добавить кэширование результатов (in-memory)

    Поддержка конкурентной обработки нескольких запросов

  2. Обработка больших данных

    Поддержка потоковой обработки для массивов >100k элементов

    Возможность загрузки данных из файла (CSV, JSON)

  3. Мониторинг и логирование

    Структурированное логирование (logrus/zap)

    Трейсинг запросов

    Graceful shutdown

  4. Тестирование

    Unit тесты с покрытием >80%

    Integration тесты

    Benchmark тесты для алгоритма группировки

    Тестирование нагрузки

  5. API дополнения

    POST /api/v1/anagrams/upload - загрузка файла со словами

    GET /api/v1/anagrams/stats - статистика обработанных запросов

    DELETE /api/v1/anagrams/cache - очистка кэша

  6. Обработка ошибок

    Валидация входных данных

    Rate limiting

    Timeout для долгих операций

    Возврат детальных ошибок в JSON формате


Критерии оценки:

Качество и читаемость кода

Архитектурные решения

Производительность алгоритма

Обработка edge cases

Покрытие тестами

Документация API (Swagger/OpenAPI)

Monitoring и observability