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

#18 Сеньор в 23? Собеседование Middle Backend разработчика

Учебное backend-собеседование о проектировании масштабируемого сервиса отчётов для интернет-магазина. Разбор проходит путь от HTTP-контракта до БД, очередей, CQRS и профессионального развития кандидата.

Источник: Отсобеседование

Открыть на YouTube

Таймлайн

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

Публичное учебное собеседование middle backend-разработчика строится вокруг проектирования сервиса отчётов для интернет-магазина. Участники обсуждают контракт API, форматы CSV/HTML/PDF, структуру контроллеров и стратегий, пагинацию, работу с большой базой, репликацией, кэшем, предагрегацией и асинхронной генерацией отчётов. В финале Дмитрий рассказывает о самообучении, переходе от C++ к C#, интересе к Scala и функциональному программированию, книгах, CQRS/DDD и пользе open source.

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

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

  • Перед проектированием отчётов уточняйте типы отчётов, требуемую свежесть данных, фильтры, объём результата и необходимость пагинации: это определяет API и архитектуру.
  • Для небольшого числа предопределённых отчётов можно выделять отдельные обработчики или стратегии; универсальный DSL оправдан лишь при действительно большом и меняющемся наборе сценариев.
  • Offset-пагинация может давать пропуски и дубли при появлении новых строк, а на тяжёлых выборках становится дорогой; в обсуждении предлагают cursor-подход по дате создания или ID последней записи.
  • Тяжёлые отчёты не стоит строить на основной базе, обслуживающей пользовательские операции: рассматриваются read-replica, заранее подготовленные read-модели, материализованные представления и обновление по событиям.
  • Репликация даёт задержку данных; для read-after-write нужно явно выбирать master либо временно закреплять чтения за master после записи, а не считать реплику всегда актуальной.
  • Длительные отчёты разумно генерировать в фоне через очередь, хранить подготовленный результат отдельно и повторно использовать его для одинаковых запросов; полезны ключ идемпотентности, кэш и throttling.
  • Одни и те же агрегированные данные можно отдавать с разной детализацией по ролям, а развитие навыков Дмитрий связывает с практикой, изучением чужого кода, code review и вкладом в open source.

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