#18 Сеньор в 23? Собеседование Middle Backend разработчика
Учебное backend-собеседование о проектировании масштабируемого сервиса отчётов для интернет-магазина. Разбор проходит путь от HTTP-контракта до БД, очередей, CQRS и профессионального развития кандидата.
Отсобеседование
Открыть на YouTube- Опубликовано на YouTube:
- Просмотры на YouTube: 48,1 тыс.
- Лайки на YouTube: 1,2 тыс.
Таймлайн
Коротко о видео
Публичное учебное собеседование 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.