Как ответить
В последнем проекте — маркетплейсе электроники — я отвечал за бэкенд модуля заказов и платежей. Команда состояла из 10 разработчиков, я занимал позицию middle. В мои задачи входило проектирование и реализация REST API, работа с PostgreSQL и Redis, интеграция с внешним платежным шлюзом через Kafka, а также оптимизация производительности.
Конкретно я делал:
- Проектирование схемы БД для заказов, корзины и истории операций. Использовал миграции на Flyway, нормализовал данные, но добавил несколько материализованных вью для отчетов.
- Реализация эндпоинтов для создания, оплаты и отмены заказов. Ввел версионирование API через заголовки, добавил пагинацию и фильтрацию.
- Интеграция с платежным шлюзом — синхронные запросы для создания платежа через REST и асинхронное получение коллбэков через Kafka. Настроил ретраи и dead-letter queue.
- Кэширование часто запрашиваемых данных (список товаров в заказе) через Redis с TTL 5 минут. Это снизило нагрузку на БД на 40%.
- Тестирование — юнит-тесты (JUnit + Mockito) на 80% покрытия, интеграционные тесты с Testcontainers для проверки работы с БД и Kafka.
- Code review — проверял каждую вторую пулл-реквесту команды, обращал внимание на обработку ошибок, читаемость и соблюдение конвенций.
Пример задачи, которой я горжусь: переписал тяжелый запрос получения заказов с вложенными товарами с N+1 на один запрос с джойнами и оконными функциями. Время выполнения упало с 2.3 секунд до 120 мс при 50 тыс. заказов. Для этого пришлось оптимизировать индексы и денормализовать одно поле.
Также я участвовал в архитектурных обсуждениях: предлагал разбить монолит на модули по bounded context (заказы, платежи, доставка) и помогал оформлять ADR-документы.