Вернуться в видеотеку

Собеседование Python-разработчика: идемпотентность и Transactional Outbox

Кандидат решает системно-дизайнерскую задачу об обработке платёжных инструкций из брокера и гарантиях доставки. Затем интервьюер обсуждает с ним легаси и обоснование рефакторинга, а кандидат уточняет проект, команду и ожидания от Senior Python-разработчика.

Источник: Python Mentor

Открыть на YouTube

Таймлайн

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

Реальное интервью начинается с архитектурной задачи: сервис получает платёжную инструкцию из брокера, обновляет балансы с учётом комиссии и отправляет результат в другой брокер. Кандидат предлагает идемпотентного consumer, транзакцию БД, блокировки счетов и Transactional Outbox. Интервьюер уточняет порядок подтверждения сообщений, возможные дубли при падении после отправки и работу relay-воркеров с select for update skip locked. Обсуждаются статусы сообщений, повторная доставка и альтернатива через Change Data Capture и Debezium. Затем беседа переходит к работе с легаси, обоснованию рефакторинга перед бизнесом и реальной вакансии: набор сервисов для customer success, ожидание ownership и несколько открытых Senior Python-ролей.

Затронутые темы

Что взять на заметку

  • Идемпотентный consumer должен учитывать повторную доставку и хранить состояние обработки сообщения.
  • Изменение балансов и запись в Outbox выполняются в одной транзакции БД.
  • Подтверждение доставки в брокер и фиксация статуса Outbox нельзя считать одной атомарной операцией: при падении возможна повторная отправка.
  • Relay-воркеры могут брать записи Outbox конкурентно через SELECT FOR UPDATE SKIP LOCKED, но для окна между успешной публикацией и фиксацией статуса нужна дедупликация или идемпотентность у получателя: одних статусов недостаточно.
  • Рефакторинг легаси нужно обосновывать рисками, стоимостью поддержки и ожидаемой пользой для бизнеса.

Рекомендуем посмотреть

1:35:29
BackendMiddle

Мок-интервью Middle Python-разработчика: блокировки и асинхронность

Кандидат рассказывает о логистическом проекте и проектирует конкурентный доступ к ресурсам. Интервьюер проверяет блокировки базы данных, FastAPI, асинхронные драйверы и подход к использованию AI на собеседовании.

1:26:29
BackendSenior

Мок-интервью по System Design: платёжный кошелёк

Кандидат проектирует кошелёк с пополнением, выводом и переводами между пользователями. Интервьюер проверяет расчёт нагрузки, консистентность, идемпотентность и обработку сбоев внешних платёжных систем.

1:51:13
BackendMiddle

Python мок-интервью: rate limiting, Redis и конкурентность

Живое мок-собеседование для Python-бэкендера: кандидат проектирует rate limiter, разбирает GIL и конкурентность, затем обсуждает архитектуру асинхронного сервиса транскрибации видео, очереди, Celery и масштабирование.