
Как пройти System Design Interview
Как подготовиться и как вести себя на секции

Как подготовиться и как вести себя на секции
Как подготовиться и как вести себя на секции
Technical Director & Fellow, Т-Технологии
Курирую наши System Design Interview
Провожу интервью по проектированию систем
План выступления
Формализация и границы системы
Основные потоки и концептуальная схема
Реальная схема и масштабирование под нагрузку
Советы и рекомендации для дальнейшего изучения
От условия задачи до дополнительных вопросов
Что кандидат делает до того, как начнёт рисовать
Формализация задачи
Задача даётся с функциональными требованиями
И с нефункциональными
Дальше — фаза уточняющих вопросов
И только потом первая линия на доске
ATAM и желаемые характеристики
High availability и data consistency
High throughput и scalability
Auditability
Метод анализа компромиссов — ATAM
Как система соединяется с окружением
Границы системы и её API
Files, Database, API, Messaging
API бывает REST/OpenAPI, RPC, GraphQL, AsyncAPI
Рисовать можно в C4, UML, BPMN, IDEF0, DFD
И описывать домены через DDD
От основных сценариев до реальных технологий
Основные потоки и компоненты системы
Сначала основной сценарий
Потом исключительные потоки
Компоненты появляются по мере проработки
Схема растёт вместе с разговором
Концептуальная и реальная схема
Сначала концептуальная схема и её проверка
Потом выбор конкретных технологий
И желаемые архитектурные характеристики
Дальше — масштабирование под нагрузку
Как пройти секцию и что почитать
Советы для успешного прохождения интервью
Помнить о времени — секция идёт около часа
Не начинать проектировать сразу
Проговаривать ход мысли и быть самостоятельным
Говорить уверенно только о том, что знаешь
Что забрать с собой
Требования уточняются до первой линии на доске
Границы системы — это стиль интеграции и нотация
Схема растёт итеративно от happy path
Технологии выбираются под характеристики
А время — ограничение, с которым надо считаться
Книги и ресурсы из финальной части доклада
Вигерс «Software Requirements», Эйскенс «Software Architecture for Busy Developers»
Таненбаум «Computer Networks» и «Distributed Systems»
Хоуп «Enterprise Integration Patterns», Клеппман «Designing Data-Intensive Applications»
Хононов «Learning DDD», Петров «Database Internals», Ибрям «K8s Patterns»
polomodov.tech
Все слайды и ссылки — в Telegram-канале
Александр Поломодов, Technical Director & Fellow, Т-Технологии
@book_cube