Подготовка к System Design Interview
В последнее время этап System Design Interview становится все популярнее. Нередко этап SD назначают даже тем, кто идет на позицию мидла. Тут конечно, возникает закономерный вопрос: зачем и нафига? А это для того, что бы посмотреть уровень инженерной экспертизы, умение выбирать технологии под задачу и аргументировать решения.
Периодически провожу интервью-секцию по дизайну систем и у меня есть что сказать тем, кто к ней готовится.
Практика
-
Начните с проектирования систем, с которыми вы уже знакомы или работали. Анализируйте текущие решения и ищите возможности для оптимизации.
-
Проектируйте популярные сервисы, такие как YouTube, Tinder или шахматные платформы. После этого изучите реальные кейсы и подходы компаний, чтобы понять, насколько ваши идеи совпадают с реальностью.
-
Решайте архитектурные задачи (kata’s) на ресурсах типа Architectural Katas. Они предлагают отличные сценарии, хотя готовых ответов нет, что стимулирует самостоятельную работу над решением.
-
Участвуйте в описании архитектуры вашего проекта на работе. Пишите Architecture Decision Records (ADR), документируйте ключевые решения и обсуждайте их с командой.
Общение - Присоединяйтесь к сообществам и каналам, посвящённым системному дизайну. Вовлекайтесь в обсуждения, делитесь своими идеями и учитесь у других.
-
Узнайте, есть ли на вашей работе архитектурный комитет, и постарайтесь стать его участником. Это отличная возможность получить опыт работы с крупными проектами и принимать важные решения.
-
Обсуждайте архитектурные решения с вашим архитектором. Понимание принятых ранее решений поможет вам развить критическое мышление и научиться обосновывать свои предложения.
Теория
-
"Книга с кабанчиком" - Высоконагруженные приложения М. Клеппман
-
Посещайте ресурс ByteByteGo, где сложные концепции объясняются простыми словами и наглядными примерами.
-
Паттерны корпоративных приложений М. Фаулер
Интервью
-
Не бросайтесь сразу в проектирование. Внимательно прочитайте задачу, соберите требования, узнайте какая нагрузка предполагается.
-
Задавайте вопросы, уточняйте требования и скоуп задачи.
-
Регулярно сверяйте проектируемую архитектуру с требованиями. Оценивайте, насколько она соответствует функциональным и нефункциональным требованиям, учитывает ли исключительные случаи и потоки данных.
Вот и все, удачи на интервью! Пиши в комментариях, что можете посоветовать тому, кто готовится проходить интервью по system design. Делитесь своим опытом.