> Как происходит запрос на обработку файла (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Поведенческие вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Короткий ответ

Запрос на обработку файла обычно проходит через HTTP handler, который принимает multipart/form-data или ссылку на объект в хранилище. Дальше backend сохраняет файл во временное или постоянное хранилище, ставит задачу в очередь и возвращает идентификатор для отслеживания статуса. Обработка выполняется асинхронно воркерами, а результат фиксируется в базе и доступен через отдельный endpoint.

Пример по STAR

В одной из команд мы столкнулись с тем, что синхронная обработка загружаемых файлов блокировала HTTP-сервер и приводила к таймаутам при пиковой нагрузке. Ситуация: пользователи загружали CSV-файлы размером до нескольких гигабайт, а handler пытался распарсить и провалидировать их прямо в запросе. Задача: сделать загрузку отзывчивой и устойчивой к сбоям. Действие: я предложил разделить поток на приём файла и асинхронную обработку. Handler стал стримить файл в S3-совместимое хранилище, создавать запись в базе со статусом pending и публиковать сообщение в очередь. Воркеры на Go читали задачу, скачивали файл, обрабатывали его чанками и обновляли статус на done или failed. Для идемпотентности использовал уникальный file_id и проверку статуса перед повторной обработкой. Результат: время ответа на загрузку снизилось до сотен миллисекунд, а количество таймаутов упало практически до нуля.

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

Начните с того, что запрос на обработку файла - это не монолитный процесс, а пайплайн из нескольких этапов. Опишите входную точку: HTTP handler, gRPC-метод или событие из очереди. Затем расскажите про валидацию: размер, MIME-тип, антивирус, проверка прав доступа. После этого объясните, как файл попадает в хранилище: стриминг, multipart, pre-signed URL. Далее - постановка задачи в очередь и асинхронная обработка воркерами. Обязательно упомяните идемпотентность, ретраи, dead letter queue и мониторинг. В конце добавьте, как клиент узнаёт о результате: polling, webhook или WebSocket. Если есть опыт с конкретными инструментами, приведите пример, но не углубляйтесь в детали реализации без запроса.

Что проверяет интервьюер

Интервьюер хочет увидеть, что вы понимаете разницу между синхронной и асинхронной обработкой, умеете проектировать отказоустойчивые пайплайны и знаете, как работать с большими файлами без нагрузки на память. Также проверяется навык декомпозиции: способность разбить задачу на этапы и объяснить, где могут возникнуть узкие места. Важно показать знание идемпотентности, ретраев, очередей и мониторинга. Для senior-уровня ожидается, что вы упомянете trade-off между latency и throughput, а также стратегию масштабирования воркеров.

Типичные ошибки

Часто кандидаты описывают только синхронную обработку в handler и не упоминают очередь. Другая ошибка - игнорирование идемпотентности и повторной обработки при ретраях. Некоторые забывают про валидацию и безопасность, например, проверку MIME-типа и ограничение размера. Также плохо, когда не сказано, как клиент получает результат. И наконец, отсутствие мониторинга и алертов на застрявшие задачи снижает оценку на senior-уровне.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью