System Design интервью
System Design
На этом этапе нужно спроектировать гипотетическую систему. Без опыта очень сложно или невозможно.
Подготовка
Егор Бирюков предлагает оптимизировать следующие умения:
- понимать задачу
- уточняющими вопросами и предположениями определять скоуп и функциональные и не очень требования
- набросать от руки нагрузку и требования к технологиям
- набросать быстро высокоуровневую архитектуру, не погружаясь в детали
- понять, где нас ожидает главная сложность, определить возможные решения
- (самое главное) вслух, громко и четко говорить о трейд-оффах.
В процессе подготовки важно:
- Научиться вмещать процесс в 45-55 минут
- Научиться соблюдать определённый порядок
- Научиться для больших задач отделять важное от неважного
- Научиться брать на себя и проявлять инициативу
Подготовка происходит так:
- Изучить книгу Understanding Distributed Systems
- Изучить книгу Кабан - Designing Data-Intensive Applications - опционально
- Пройти курс Grokking the System Design Interview
- Прочитать книгу System Design Interview – An insider's guide
- Пройти мок-интервью на нужном языке (обязательно)
План интервью с таймером:
- Требования и вопросы: задача, пользователи, нагрузка и т.д. — 5-10 минут
- Estimations: storage, нагрузка на сеть и т.д. — 5 минут - Высокоуровневый дизайн: квадраты со стрелками. Цели, результаты, потенциально узкие места, трейд-оффы — 10 минут
- Глубокое погружение: некоторые части системы — 20 минут
- Завершение: что получилось, как расти, как запускать — 5-10 минут
СОВЕТ
Постоянно показывать «инженерное мышление»: минусы, трейдофы, решения в терминах требований. Минимум конкретных технологий, можно упомянуть опыт.
Ссылки
- System Design Primer — GitHub
- My System Design Template — topcat, LeetCode (2019)
- System Design Interview — YouTube Channel (2020)
- System Design CheatSheet — Никита Субботин