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