Как реализованы асинхронные процессы в приложении
Что проверяют
От системного аналитика ждут не синтаксиса async/await, а понимания, какие процессы в системе идут не в реальном времени и как вы описываете это в требованиях. Следом обычно спрашивают, что увидит пользователь, если обработка зависла, и как система поймёт, что сообщение пришло дважды.
Как отвечать
Возьмите процесс из своего проекта и разберите его по пунктам:
- почему асинхронно: операция долгая или зависит от внешней системы, например отчёт или платёж. Синхронный вызов упирается в таймауты и связывает доступность систем;
- механизм: брокер сообщений (Kafka, RabbitMQ), вебхук от внешней системы, опрос статуса или пакетная задача по расписанию. Для API типичная схема: запрос возвращает
202 Acceptedи идентификатор, статус запрашивают отдельным методом или получают уведомлением; - статусы: у сущности есть жизненный цикл, например «создан, в обработке, выполнен, ошибка», и диаграмма состояний с разрешёнными переходами;
- контракт: формат сообщения, обязательные поля, версия. Для событий удобна спецификация AsyncAPI, для REST OpenAPI, схемы в JSON Schema;
- гарантии: брокеры обычно дают доставку «хотя бы один раз», значит нужен ключ идемпотентности и правило обработки дубля. Порядок в Kafka гарантируется только внутри партиции, поэтому важно, по какому ключу пишутся сообщения;
- ошибки: сколько повторов, с каким интервалом, куда уходит сообщение после последней попытки (DLQ) и кто его разбирает.
Покажите артефакты: диаграммы последовательности и состояний (PlantUML, draw.io), описание контракта. Если в проекте всё было синхронно, честно скажите это и опишите, какой процесс перевели бы в асинхронный режим и почему.
Где спотыкаются
Отвечают как разработчик: промисы, потоки, ExecutorService. Для аналитика это мимо, спрашивают про взаимодействие систем.
Описывают только успешный сценарий. Нет статуса «ошибка», нет таймаута, нет правила для повторного сообщения, и эти вопросы потом решает разработчик на свой вкус.
Забывают про итоговую согласованность: пользователь нажал «оплатить», а баланс обновится через несколько секунд. Не описали это в требованиях к интерфейсу, и в первый же день получили баг.