Что выделяет кандидата на собеседовании по системному дизайну, и что может испортить его собеседование? Бывает очень досадно, когда собеседование с многообещающим кандидатом заканчивается тем, что он упускает из виду какой-то жизненно важный аспект решения. Не менее разочаровывающим является чувство тревоги, когда вы, как кандидат, покидаете собеседование и не знаете, произвели ли вы наилучшее впечатление.
С такими вопросами, как «Дизайн Twitter», собеседования по проектированию систем могут показаться неопределенными, расплывчатыми и почти разговорными по своей природе. В то же время интервьюеры оценивают ваши технические знания, чтобы понять, насколько хорошо вы знакомы с созданной вами системой. Кандидату на собеседование может показаться, что он жонглирует множеством мячей, и трудно понять, какие из них вы совершенно точно не можете позволить себе уронить.
В этой статье мы обсудим некоторые распространенные ошибки, которые встречаются на собеседованиях по проектированию систем, и дадим несколько советов, как их избежать.
Давайте погрузимся в работу!
Мы рассмотрим:
- Что ищет интервьюер?
- 1. Невозможность понять функциональные и нефункциональные требования.
- 2. Не выявление неисправностей, точек отказа и их решений.
- 3. Невозможность рассмотреть компромиссы для различных решений
- 4. Недостаточная или избыточная коммуникация
- 5. Отсутствие обоснования проектных решений
- 6. Пропуск высокоуровневого проектирования
- Подведение итогов и следующие шаги
- Что ищет интервьюер?
- 1. Невозможность понять функциональные и нефункциональные требования
- 2. Не выявление неисправностей, точек отказа и решений.
- 3. Невозможность учесть компромиссы для различных решений
- 4. Недостаточная или избыточная коммуникация
- 5. Отсутствие обоснования проектных решений
- 6. Пропуск высокоуровневого проектирования
- Подведение итогов и следующие шаги
- Продолжайте изучать темы проектирования систем на сайте Educative
- Начать обсуждение
Что ищет интервьюер?
Прежде всего, давайте поговорим о том, что интервьюеры хотят знать о вас. Когда интервьюеры задают вам вопрос о проектировании системы, они ищут не только работающее решение и хорошие коммуникативные навыки.
Интервьюеры также хотят получить ответы на следующие вопросы:
Сколько различных решений может методично предложить этот человек?
Может ли он провести анализ «за» и «против» различных подходов?
Какова глубина его ответов?
Думает ли этот человек о сроке службы системы и о том, как она будет развиваться по мере увеличения количества пользователей и данных?
Может ли этот человек объяснить различные сценарии из конца в конец на конкретных примерах?
Важно отметить, что не каждый интервьюер будет оценивать ваши сильные стороны, используя приведенные выше вопросы! Рассматривайте эти вопросы как общие рекомендации для контекстуализации ответов, когда вы будете практиковаться в решении вопросов по проектированию систем. Вы хотите, чтобы интервьюер по возможности мог дать однозначный ответ на эти вопросы.
Теперь давайте перейдем к некоторым распространенным «красным флажкам», которые интервьюеры видят во время собеседований по проектированию систем!
1. Невозможность понять функциональные и нефункциональные требования
Выяснение функциональных и нефункциональных требований к системе — одна из первых вещей, которые вы должны выяснить у интервьюера.
- Функциональные требования включают в себя основные функции, предлагаемые системой, и необходимы для создания конечного продукта, отвечающего ожиданиям конечных пользователей. Эти требования необходимы для того, чтобы ваша система функционировала.
- Нефункциональные требования сосредоточены на ожиданиях производительности и на том, насколько ваш конечный продукт соответствует ожидаемым стандартам. Эти требования не являются необходимыми для функционирования вашей системы.
Вопросы на собеседовании по проектированию системы часто намеренно расплывчаты, и вы обязаны найти информацию, необходимую для реализации вашего проекта. Когда кандидаты переходят к проектированию решения, не задавая достаточно уточняющих вопросов, они могут сделать предположения о том, как должна функционировать и работать система.
Если ваш интервьюер не предлагает достаточно информации, не стесняйтесь спросить: «Каковы функциональные и нефункциональные требования к системе, которую мы проектируем?».
Потратьте время, чтобы точно выяснить, какие компоненты должна включать ваша система и каковы ее ожидаемые характеристики.
2. Не выявление неисправностей, точек отказа и решений.
Наверное, следует присудить награду первому, кто спроектирует систему, которая никогда не дает сбоев. Практически во всех системах есть узкие места, и все проекты систем могут иметь какие-то неисправности или уязвимости, которые могут привести к полному отказу системы.
Конечно, «полный отказ системы» может быть несколько драматичным, но это сделано для того, чтобы подчеркнуть важность знания слабых мест вашей системы. Как разработчик системы, вы должны уметь находить решение для непереходных, постоянных проблем, иначе система откажет сама.
Знание этих недостатков означает, что вы можете заранее спланировать меры по обеспечению отказоустойчивости для возвращения системы в режим 100% доступности. Обязательно представьте решение (или несколько решений) для точек отказа, чтобы показать интервьюеру, что вы рассматриваете проект со всех возможных сторон.
Рассмотрение неисправностей и точек отказа может открыть дискуссию о том, станет ли пропускная способность проблемой в будущем. Если вы обнаружили, что конструкция вашей системы может выйти из строя при интенсивных нагрузках, спросите у интервьюера, какова предполагаемая нагрузка для этой системы, прежде чем думать о том, как сделать систему более масштабируемой.
Примечание: Некоторые из самых больших (и наиболее распространенных) уязвимостей системы, которые следует искать, связаны с обработкой и вводом данных пользователем (например, лазейки в системе безопасности, SQL-инъекции).
3. Невозможность учесть компромиссы для различных решений
Существует бесчисленное множество возможных решений, которые вы могли бы предложить на вопрос собеседования по проектированию системы, и есть вероятность, что вы не сможете учесть компромиссы для всех из них. Однако вы не хотите совершить ошибку, не рассмотрев ни одного компромисса.
У каждой системы есть сильные и слабые стороны. Обязательно учитывайте масштабируемость, доступность, ремонтопригодность и надежность различных решений.
4. Недостаточная или избыточная коммуникация
Во время собеседования интервьюер оценит вашу способность общаться с другими людьми. Насколько хорошо вы умеете работать в команде? Если вы все время молчите, не задавая вопросов и не обращаясь за обратной связью к интервьюеру, это может создать впечатление, что вы не склонны к сотрудничеству или независимы до крайности. С другой стороны, вы рискуете доминировать в разговоре или перегружать собеседника информацией, не относящейся к делу.
Обе эти проблемы можно решить с помощью практики. Когда вы практикуетесь в решении проблем проектирования системы, попробуйте провести себя или кого-то другого через ваше решение. Даете ли вы им достаточно времени, чтобы задать вопросы? Ясны ли и лаконичны ваши объяснения?
Наконец, убедитесь, что вам удалось выполнить следующее:
Определить проблему
Определить все ограничения
Определить функции, необходимые для проектирования системы
Определите наиболее важные компоненты, чтобы расставить приоритеты.
Коммуникация — это искусство, которым нелегко овладеть!
5. Отсутствие обоснования проектных решений
Потратьте время на то, чтобы тщательно сформулировать ход мыслей, стоящих за вашим выбором.
Вы должны быть в состоянии объяснить, почему вы приняли то или иное дизайнерское решение. Неспособность обосновать проектное решение — одна из самых серьезных ошибок, которые можно допустить на собеседовании по проектированию системы, поскольку это может создать впечатление, что вы не знаете, что делаете.
Помните, что одна из основных целей интервьюера, проводящего собеседование по проектированию системы, — это выяснить ход ваших мыслей и понять, как вы принимаете решения. Они будут задавать вам вопросы о том, почему вы предпочли одну технологию другой или о других аспектах вашей системы. Они хотят знать, что, по вашему мнению, является наиболее подходящим решением для данной проблемы и почему.
По этой причине крайне важно ознакомиться с как можно большим количеством различных технологий и моделей проектирования систем. Один из способов почувствовать себя комфортно, говоря об этих технологиях и паттернах проектирования, — объяснить их нетехническому специалисту так, чтобы это имело смысл.
6. Пропуск высокоуровневого проектирования
Переход сразу к деталям — одна из ошибок, которая может привести к понижению уровня. Понижение уровня происходит, когда вы претендуете на работу определенного уровня, но не соответствуете требованиям, предъявляемым к уровню, на который вы претендуете. Так, например, если вы подали заявку на должность старшего SWE, а на собеседовании отвечали на вопросы SWE среднего уровня, вам могут предложить должность этого уровня.
Поэтому сначала обязательно обсудите детали проектирования системы высокого уровня. Важно убедиться, что в начале собеседования вы не переходите сразу к низкоуровневым аспектам проектирования системы.
- Высокоуровневое проектирование (ВУП) подразумевает перевод потребностей клиента в решение, которое включает в себя общий дизайн системы, архитектуру программного обеспечения, базы данных, платформы, сервисы, компоненты и модули. На этом уровне вы думаете о взаимосвязи между различными частями вашей системы.
- Низкоуровневое проектирование (LLD) фокусируется на компонентах вашего проектного решения и обычно включает подробное описание каждого компонента, принцип работы функциональной логики различных модулей и другие спецификации для удовлетворения потребностей вашего клиента или бизнеса.
Примечание: Опытные системные дизайнеры сосредоточатся не только на различных программных компонентах и их взаимодействии друг с другом, но и на всем времени жизни системы и ее развитии. Они будут думать о том, как сделать системы более эффективными, устойчивыми и масштабируемыми.
Подведение итогов и следующие шаги
Хотя мы рассмотрели несколько ошибок, которых следует избегать во время собеседований по проектированию систем, самая большая ошибка, которую следует избегать, — это отсутствие подготовки. Чем больше вы практикуетесь в решении вопросов по проектированию систем, тем легче вам будет инстинктивно смотреть на свои решения с разных сторон. Такой образ мышления не только поможет вам придумать лучшие, более творческие решения, но и поможет найти способы эффективной поддержки и сопровождения этих решений.
Обучение системному проектированию — это не только один из самых эффективных способов повысить свою ценность как инженера-программиста, но и один из лучших способов доказать, что вы готовы к более высоким должностям. Итак, если вы инженер-программист, который задается вопросом, какой следующий шаг сделать в своей карьере, попробуйте изучить системное проектирование! Educative является ведущим экспертом в области системного проектирования, и мы уделяем большое внимание постоянному обновлению наших учебных ресурсов, чтобы предоставить вам самые лучшие и актуальные курсы.
Счастливого обучения!
Чтобы начать изучать эти и другие концепции, ознакомьтесь с курсом Educative «Grokking Modern System Design».
Продолжайте изучать темы проектирования систем на сайте Educative
- Полный набор инструментов для современного системного проектирования
- Полное руководство по прохождению собеседования по системному проектированию в 2022 году
- Диаграммы и паттерны архитектуры программного обеспечения
Начать обсуждение
На какие еще распространенные вопросы собеседования по системному проектированию следует обратить внимание? Была ли эта статья полезной? Сообщите нам об этом в комментариях ниже!