System Design Interview и как к ним подготовиться

Рис.1 “Заглавное изображение”
  • На какие продемонстрированные кандидатом умения обращают внимание интервьюеры
  • Как эти умения оцениваются
  • Как может подстраиваться сложность собеседования прямо под кандидата, чтобы точнее оценить его уровень
  • Как можно подготовиться к прохождению интервью

Критерии оценки кандидатов

  • Как кандидат формализовал задачу — если говорить кратко, то это про понимание того, какую систему надо спроектировать и какие к ней есть требования. Обычно мы в начальных условиях даем достаточно требований для базового понимания, но для того, чтобы не попасть впросак требуется ряд уточнений и вопросы кандидата очень показательны в этом плане
  • Как кандидат понял и прочертил границы системы — а именно что входит и не входит в границы задачи. Характерной чертой хорошо выстроенных границ является понимание основных сценариев работы системы и четко формализованного API
  • Как кандидат уловил основной поток работы нашей системы + отобразил через какие компоненты системы он проходит. В зависимости от типа задачи в автоматизируемом процессе может быть как закопано много сложности, так и наоборот почти никакой.
  • Как кандидат проработал концептуальную схему. В моем мире концептуальная схема состоит из
    — классов кубиков, из которых состоит система (или Architecture Building Blocks (ABB) из TOGAF)
    — моделей данных, которые хранятся в этих кубиках и/или путешествуют между ними
  • Как кандидат проработал реальную схему. По-факту, это выбор для каждого кубика конкретного представителя (или Solution Building Block (SBB) из TOGAF). Здесь кандидат может продемонстрировать крутой кругозор и умение аргументировать свои решения
  • Когда выбраны конкретные кубики, то можно уже обсуждать то, как получившаяся схема учитывает вопросы масштабирования под нагрузку. Этот момент хорошо прорабатывают или практики, что многое видели в своей жизни, или теоретики, которые очень хорошо подкованы в проблемах распределенных и высоконагруженных систем
  • В финале можно посмотреть на получившуюся схему и оценить насколько она читаема, то есть пригодна для передачи информации о спроектированной системе. Если без автора схема нечитаема, то это плохой знак.

Уровни оценок

  • Junior — этот уровень можно зачастую выбить просто обладая логическим мышлением и имея теоретический/практический опыт в разработке
  • Middle — этот уровень уже требует некоторого опыта в проектировании (или вдумчивого штудирования всяких книг и курсов по System Design Interview)
  • Senior — этот уровень требует большого опыта в проектировании, а зачастую и широкого кругозора
  • Senior+ — этот уровень используется редко (мало таких умельцев) и показывает условно эталонный навык или умение в отдельном критерии

Интегральная оценка

  • Junior — обладает хорошей логикой, может собрать решение, которое будет работать в случае happy path и не слишком высокой нагрузки. Человек сам проектировать не может. Может решать хорошо декомпозированные и специфицированные задачи обычно в рамках сервиса/модуля. Для роста требуется сильная команда вокруг, относительно несложные задачи на взаимодействие систем + дальнейшее теоретическое обучение.
  • Middle — может самостоятельно решать задачи внутри приложения, а также проектировать небольшие доработки в распределенных системах по образу и подобию (обычно в рамках общепринятого в команде подхода). Самостоятельно спроектировать что-то новое без присмотра не сможет, поэтому требуется наличие сильного инженера, который будет ревьювить решения. Для роста нужны сложные задачи + ментор.
  • Senior — может сам проектировать решения в рамках зоны ответственности команды (возможно не одной).
    Для роста нужны новые вызовы.

Уровни сложности собеседования

Как лучше готовиться к собеседованию

Теоретические материалы

Практические материалы

  • The System Design Primer — конкретно часть про System Design Exercises, которые можно порешать
  • Architectural Katas by Neal Ford — ката с архитектурными задачами, правда без ответов, но примеры задач хорошие
  • Hacking the Software Engineer Interview by TianPan — ресурс для подготовки к интервью с примерами, которые стоит порешать
Рис.2 “Шаблон задачи”

--

--

--

Director of digital ecosystem development department at Tinkoff. Bachelor at applied math, Master at system analysis, Postgraduate studies at economics.

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alexander Polomodov

Alexander Polomodov

Director of digital ecosystem development department at Tinkoff. Bachelor at applied math, Master at system analysis, Postgraduate studies at economics.

More from Medium

Do you perform reviews?

The SOLID Principles

A Succession of Great Literature on Software Design Patterns

Best Practices in Test-Driven Development: Overview