Какие функции добавляли в микросервисы на Java
Что проверяют
Работали ли вы с микросервисами руками или знаете их по статьям. Интервьюеру важна ваша личная роль и то, понимаете ли вы, зачем выбран каждый инструмент. Следом почти всегда просят разобрать одну функцию подробно: как устроена, что ломалось, как вы это заметили.
Как отвечать
Не перечисляйте стек, расскажите про две-три функции и в каждой держите одну схему: бизнес-задача, ваше решение, результат. Каркас может выглядеть так:
- контекст: что за сервис, какой домен, сколько сервисов вокруг, на чём написан. Например, Spring Boot 3 на Java 21;
- сама функция: «расчёт стоимости доставки», «выгрузка статусов в личный кабинет», «идемпотентный приём платежей». Какой контракт, REST или события в Kafka, как хранили данные, как меняли схему через Flyway или Liquibase;
- надёжность: таймауты и
CircuitBreakerиз Resilience4j на вызовах соседей, повторная доставка сообщений и защита от дублей, transactional outbox, если нужно было атомарно записать в базу и отправить событие; - наблюдаемость и тесты: метрики через Micrometer и Actuator, трассировка через Micrometer Tracing или OpenTelemetry, интеграционные тесты на Testcontainers;
- результат: что изменилось в цифрах. Время ответа, число инцидентов, частота релизов.
Цифры нужны ваши, из мониторинга или задач. Если не помните точно, так и скажите: «порядок такой, точнее не назову».
Если с микросервисами вы не работали, не придумывайте. Расскажите про модульный монолит или учебный проект, где выделили сервис, и честно скажите, что пробовали только локально, а чего не видели на проде.
Где спотыкаются
Отвечают набором технологий: Eureka, Config Server, Gateway. Это не функции, и первый же вопрос «зачем Eureka, если сервисы в Kubernetes» ставит в тупик: там обнаружение даёт DNS самого кластера.
Говорят «мы сделали» и не могут отделить свою часть от командной.
Повторяют расхожие утверждения, не проверив их. Например, что Spring Cloud Config сам меняет настройки без перезапуска. Без вызова /actuator/refresh или Spring Cloud Bus приложение новых значений не увидит, а поля с @Value обновятся только в бинах с @RefreshScope.