5.4 KiB
Секция системного дизайна в Тинькофф
Обсуждаем проектирование системы. Во время секции предложим Вам разработать дизайн системы по набору требований.
Как проходит секция
Вам будет предложен набор функциональных требований к системе. В течение часа Вам предстоит формализовать задачу, спроектировать API системы, оценить нагрузку и необходимые мощности, спроектировать модели и потоки данных.
Для визуализации процесса проектирования используется онлайн-доска Sketchboard. Для упрощения работы с обширной палитрой данного инструмента в ходе секции рекомендуется пользоваться только элементами раздела Software Sketching.
Один из наших сотрудников выступил на конференции ArchDays 2021 с докладом "Дизайн секции как проверка навыков проектирования систем на собеседованиях", в котором он подробно рассказал про то, как выглядит интервью по дизайну систем, что на нем оценивается и зачем все это надо. Расшифровка выступления доступна в статье на Medium.
Материалы для подготовки
Сайты:
- System Design Primer — базовые темы и упражнения по дизайну систем, а также упражнения по объектно-ориентированному анализу и проектированию.
- Architectural Katas — множество примеров архитектурных задач.
- System Design Interview и как они оцениваются - описание ожиданий от кандидатов на разные уровни проектирования, шаблон задачи и материалы для самобучения
- Публичное System Design Interview на конференции C++ Russia 2022 - интервью по системному дизайну, которое мы провели для того, чтобы показать как оно может выглядеть
- Как подготовиться и пройти System Design Interview - описание фреймворка прохождения System Design Interview, ожиданий на каждом шаге, от сбора требований до масштабирования под нагрузку. И самое приятное - материалы для самообучения для каждого из шагов в рамках этого фреймворка
Книги:
- Wiegers "Software Requirements. Third Edition" - про требования к ПО
- Eyskens "Software Architecture for Busy Developers" - про trade-offs в архитектуре
- Tannenbaum "Computer Networks" - про компьютерные сети и как система связана с пользователям, а ее компоненты между собой
- Tannenbaum "Distributed Systems" - классика по распределенным системам и тому, зачем они нужны и как с ними быть
- Hohpe "Enterprise Integration Patterns" - классика про подходы к интеграции приложений между собой
- Kleppmann "Designing Data-Intensive Applications" - классика про приложения, интенсивно работающие с данными
- Khononov ""Learning DDD"" - про подход к пониманию того, а что ПО собственно делает и как разделить зоны ответственности
- Petrov "Database Internals" - про то, как работают базы данных
- Ibryam "K8s Patterns" - про орекстрацию рабочих нагрузок (преимущественно stateless)
- Google "Building secure and reliable systems" - про то, как проектировать надежные и безопасные системы и дальше с ними жить долго и счастливо
- Google "SRE Book" - про подходы к эксплуатации систем и обеспечению их надежности
- Google "SRE Workbook" - про подходы к эксплуатации систем и обеспечению их надежности