Перейти к основному содержимому

Дорожная карта подготовки к собеседованию по System Design (10 самых важных концепций)

Раскрытие информации: Этот пост содержит партнерские ссылки; я могу получить вознаграждение, если вы приобретете продукты или услуги по ссылкам в этой статье.

image_credit - codemia.io

Привет, друзья! Если вы готовитесь к собеседованиям по программированию, но не знаете, как подойти к важной теме System Design, и ищете пошаговое руководство, правильный подход, советы и вопросы, то вы попали по адресу.

В этой статье я поделюсь полным руководством по успешному прохождению собеседований по System Design.

Рынок труда в сфере разработки программного обеспечения просто пылает! Особенно если у вас есть несколько лет опыта.

И в мире разработки ПО, если вы претендуете на роль старшего инженера, лида, архитектора или более высокую должность, System Design — самый востребованный навык, а значит, один из важнейших этапов всего процесса.

Если вы провалите этот этап, остальное не будет иметь значения. Но если вы справитесь, это может означать повышение зарплаты как минимум на десятки тысяч долларов в год.

Так как же блестяще пройти этап System Design? Вот что я делал при подготовке к собеседованиям в Facebook, Google и Amazon, и это сработало довольно хорошо.

Я в итоге создал для себя чек-лист, который помог мне пройти большинство этапов. Если вы последуете похожему пути, вы сможете разработать то, что подойдет и вам.

Однако, прежде чем углубляться в детали, что такое собеседование по System Design? Что именно интервьюеры ожидают от кандидатов?

How to Crack System Design Interviews


Что ожидается на собеседовании по System Design?

Первый шаг подготовки к собеседованию по System Design — понять, что от вас ожидается. Как только вы это узнаете, вы сможете выстроить свою стратегию подготовки, чтобы соответствовать этим ожиданиям.

Итак, вот ключевые ожидания от вас на собеседовании по System Design:

  1. Вы должны уметь проектировать систему, которая удовлетворяет заданным требованиям и хорошо масштабируется, например, спроектировать Twitter, спроектировать торговый автомат или разработать агрегатор торговых позиций.
  2. Ваш проект должен быть расширяемым и не ограничивать добавление новых функций.
  3. Вы должны уметь сравнивать различные альтернативы и выбирать наиболее оптимальную. Например, какая база данных наиболее важна, какой протокол использовать, какой подход к масштабированию системы наилучший и т.д.
  4. Вы должны знать основы, актуальные с точки зрения System Design, такие как:
    • Балансировщики нагрузки
    • API
    • Кэши
    • Базы данных
    • Сетевые протоколы
    • Очереди сообщений
    • CDN
    • Общие сведения о ML и Big Data
    • Теорема CAP
    • Мониторинг и аналитика

Это на самом деле основные темы System Design, которые должен знать каждый разработчик. Если вы знаете эти темы, вы обязательно хорошо справитесь с собеседованием.

Кстати, не пугайтесь количества тем. Большинство хороших курсов по System Design, например, Система подготовки к собеседованию по System Design от CodeKarle на Udemy или Grokking the System Design Interview на DesignGurus.io охватывают все эти темы. Этот курс от Design Gurus помог более 60 000 подписчиков успешно пройти собеседование по System Design (SDI).


Как подготовиться к собеседованию по System Design?

Хотя за последние пару лет многое изменилось, собеседование по System Design также изменилось: теперь больше внимания уделяется API, производительности и микросервисам.

Так или иначе, вот простой четырехэтапный процесс, который поможет вам блестяще пройти любой этап System Design не только в этом году, но и в будущем.

  1. Освойте основные концепции System Design: масштабируемость, согласованность, кэширование, шардирование баз данных, репликацию и т.д.
  2. Учитесь у технологических гигантов, читая их блоги, например, Uber и Netflix.
  3. Практикуйтесь в вопросах System Design, таких как проектирование YouTube, WhatsApp и т.д., на сайтах вроде Codemia.io, где содержится более 120 задач по System Design. Это Leetcode для System Design.
  4. Практикуйтесь и проходите пробные собеседования (например, tryExponent, Codemia.io, Bugfree.ai или DesignGuru).

1. Концепции System Design

Любое собеседование по System Design обязательно потребует от вас создания базового высокоуровневого проекта для той системы, которую вы пытаетесь построить. Некоторые компоненты обязательно понадобятся. Запомните эти компоненты.

Вот некоторые из них:

1. Балансировщик нагрузки

Вы не можете создать распределенную систему без балансировщика нагрузки для распределения входящих запросов между различными узлами. Это обеспечивает правильное использование ресурсов и отсутствие единой точки отказа в вашей системе. Вот как это делает Nginx.

Изучая балансировщик нагрузки, также полезно узнать об API Gateway и тщательно понять разницу между балансировщиком нагрузки и API Gateway, что очень важно с точки зрения собеседования. Мне уже пару раз задавали этот вопрос на собеседованиях.


2. Кэширование

Если вы когда-либо занимались повышением производительности, то знаете, что кэширование — это, вероятно, первое, что приходит на ум.

В большинстве систем есть много операций чтения, когда пользователи часто обращаются к некоторой информации, но редко ее обновляют.

Имеет смысл кэшировать эту информацию таким образом, чтобы ее можно было легко получить без обращения к базе данных.

Думайте о низкой задержке.

Также, в зависимости от сценария использования, вам может потребоваться хранить наиболее часто запрашиваемую или самую свежую информацию. Поэтому изучите различные политики вытеснения, такие как LRU (наименее недавно использовавшееся).

Если хотите узнать больше, курс ByteByteGo System Design содержит много информации о стратегиях кэширования и эффективном использовании кэшей.

System Design interview guide


3. База данных

База данных — один из важнейших навыков, поскольку большинство реальных приложений, которые вы будете создавать, будут использовать какое-либо хранилище данных, например реляционную базу данных или NoSQL.

Фактически, не может быть системы без какой-либо формы хранения данных. Будь то файлы, изображения, информация о продуктах, финансовые транзакции или просто сбор всех данных из различных взаимодействий пользователей для последующей аналитики.

Все требует баз данных. Так что читайте об этом. Узнайте, что важно при выборе базы данных, читайте о SQL/NoSQL, шаблонах запросов и о том, как теорема CAP может влиять на компромиссы.

Сандип хорошо объяснил это в своем курсе по System Design на Udemy. Если хотите узнать больше, можете обратиться к нему.

how to prepare for system design interviews


4. Очереди сообщений

Иногда нашей системе необходимо выполнять некоторые задачи, которые не обязательно делать немедленно, или их результат не влияет на путь пользователя.

В таких случаях вместо того, чтобы делать вызов службы и ждать ответа, имеет смысл просто записать сообщение в очередь, чтобы оно могло быть выполнено позже.

Это также известно как асинхронный обмен сообщениями, который является основой для многих микросервисов.

Что, если вам нужно вставить информацию в базу данных, и массовая вставка может быть более эффективной? Имеет смысл просто отслеживать эти вставки в очереди сообщений и выполнить одну массовую вставку вместо сотен вставок по одному для оптимизации ресурсов.

Хорошее знание очередей сообщений, таких как RabbitMQ, ActiveMQ и Apache Kafka, необходимо любому разработчику, и эта тема хорошо освещена в курсе Educative.io Grokking Modern System Design for Software Engineers & Managers. Если вы хотите узнать не только об очередях сообщений, но и о других важных темах System Design, это один из ресурсов, которым я лично пользуюсь.

System Design interview guide


5. CDN

Когда ваши пользователи географически распределены, доставка контента за разумное время становится настоящей проблемой.

CDN позволяют хранить копии данных в различных дата-центрах, расположенных ближе к пользователям, чтобы уменьшить задержку.

Вот короткое видео о том, как это делает Akamai.

{% embed https://www.youtube.com/watch?v=l6X_IxyGHHU %}


6. Аналитика и мониторинг

Это необходимо в каждой создаваемой системе. Это скрытое требование: никто не упоминает его при сборе требований, но каждый интервьюер этого ожидает.

Пользователь вошел или вышел? Добавил товар в избранное? Платеж не прошел? Это все информация для нас! При любом важном событии мы генерируем событие и сохраняем его в очереди сообщений.

Вы можете выполнять аналитику в реальном времени или просто сбрасывать данные в кластер Hadoop для последующего использования. Кроме того, если вызов API регулярно завершается ошибкой или ваши серверы вот-вот исчерпают ресурсы, разве не хотели бы вы узнать об этом заранее?

Хорошее знание инструментов, таких как Grafana, Prometheus, может помочь вам с аналитикой и мониторингом, а также произвести впечатление на интервьюера.

Алекс Сюй также поделился хорошей информацией о мониторинге в своей книге и курсе ByteByteGo. Вы также можете обратиться к ним.


7. Сетевые протоколы

В зависимости от требований и типа передаваемого контента вам может потребоваться принять решение о том, какой сетевой протокол использовать. Изучите различные сетевые протоколы, такие как TCP и UDP, когда они актуальны и какие компромиссы могут потребоваться.

Первый шаг — узнать обо всех этих концепциях. И под "знать концепции" я подразумеваю не только теоретические знания, но и практический опыт использования того, что и когда применять.

Вам нужно знать такие вещи, как:

  1. Какой вариант лучше выбрать для данного случая.
  2. Какие компромиссы необходимо учитывать при принятии этих решений?
  3. Лучшие практики для определенных случаев.

Чтобы узнать об этом, я рекомендую пройти этот курс по System Design от CodeKarle, который охватывает все вышеперечисленное на конкретных примерах из реального мира.

Ultimate guide for system design interviews


2. Учитесь у технологических гигантов, таких как Uber и Netflix

Это, вероятно, не поможет в краткосрочной перспективе. Но в долгосрочной перспективе, чтобы стать экспертом в System Design, лучше всего читать технические блоги различных технологических компаний и смотреть, как они решают различные технические проблемы.

Это даст ясную картину реальных проблем, с которыми они сталкиваются, и того, как они их решают.

Понимание этих вещей поможет вам стать лучше в System Design и быть в курсе последних инноваций в технологиях.

Некоторые из лучших блогов для чтения:

  1. Блог Facebook Engineering
  2. Технический блог Netflix
  3. Инженерный блог Uber

Если вы не любите читать и предпочитаете смотреть, вы также можете присоединиться к онлайн-курсам, созданным бывшими сотрудниками FAANG, такими как Mastering the System Design Interview от Frank Kane (бывший менеджер по найму в Amazon). Это один из лучших ресурсов для изучения System Design для собеседований.

best online course to learn System Design


3. Решайте часто задаваемые вопросы по System Design

Очевидный способ начать подготовку! Знание основ, безусловно, важно, но этого недостаточно!

Самый простой способ начать практику — посмотреть на часто задаваемые вопросы и их решения.

Большинство собеседований по System Design вращаются вокруг 5–6 часто задаваемых вопросов, и если вы знаете их решения, вы, скорее всего, пройдете это собеседование.

Самые распространенные вопросы (с решением, нажмите на ссылку, чтобы увидеть решение, если застрянете):

  1. Как спроектировать Twitter?
  2. Как спроектировать систему чата, такую как WhatsApp или Facebook Messenger
  3. Как спроектировать Ticketmaster?
  4. Как спроектировать эффективную парковку?
  5. Системный дизайн WhatsApp
  6. Системный дизайн Airbnb
  7. Системный дизайн Uber
  8. Системный дизайн Tinyurl

Если вам нужны ресурсы для решения этих вопросов, которые не только дают решение, но и объясняют основные концепции и подход к решению задач System Design, то этот высоко оцененный курс от CodeKarle обсуждает большинство из этих примеров и еще несколько задач, которые помогли многим людям пройти собеседования в такие компании, как Google, Facebook, Microsoft, Amazon и др.

how to crack software design interviews


4. Практика (пробные собеседования)

Практика, практика, практика! Я сказал "практика"? В интернете много ресурсов. Я поделился несколькими, которые подробно обсуждают одни из самых популярных задач по System Design.

Как только вы пройдете через несколько из них, вы начнете замечать закономерности и скоро сможете самостоятельно находить решения.

Вам также следует лучше понять, как проектируются системы в вашей организации. Как другие команды делают это? Какие факторы они учитывают?

Следующий лучший шаг — практиковаться с другом. Обязательно пройдите несколько пробных собеседований перед реальным собеседованием, чтобы избежать распространенных, но легко предотвратимых ошибок.

Поскольку шансы попасть в такие компании, как Google и Meta, редки, вы должны подготовиться как можно лучше, и пробные собеседования действительно важны. Они позволяют увидеть ваш реальный уровень подготовки перед реальными собеседованиями.

В то же время важно, чтобы ваше пробное собеседование имитировало реальное. Для этого я рекомендую вам присоединиться к сайтам, таким как tryExponent, Codemia.io, Bugfree.ai, Designgurus.io или другим, которые позволяют пройти пробное собеседование с реальными экспертами.

Codemia.io — это как Airbnb для пробных собеседований и карьерного коучинга. Он связывает соискателей с опытными интервьюерами из FAANG, которые дают бесценную обратную связь, готовя вас к реальным собеседованиям.

Многие мои друзья, читатели, коллеги, а также многочисленные соискатели уже воспользовались преимуществами этой платформы.

Что выделяет Codemia?

  1. Доступность: Средняя стоимость сессии значительно ниже по сравнению с другими платформами.
  2. Экспертные интервьюеры: Ветераны FAANG и ведущих компаний приносят многолетний опыт, давая бесценные отзывы, которые действительно имеют значение.
  3. Прямое общение: Соискатели могут напрямую общаться с интервьюерами, чтобы решить любые вопросы или проблемы, такие как обмен опытом или перенос встречи, что обеспечивает лучшую подготовку для обеих сторон.
  4. Инструменты "все в одном": Meetapro предоставляет вам необходимые инструменты для эффективной сессии собеседования, включая возможность записи для последующего просмотра.

Вот почему я настоятельно рекомендую добавить Codemia.io в ваш путь подготовки для достижения наилучших результатов. Вы можете узнать больше об этом.

best place to prepare for system design interview


Распространенные ошибки, которых следует избегать на собеседовании по System Design

Есть две важные вещи, которые вы можете сделать, чтобы добиться успеха в жизни: делать то, что делают успешные кандидаты, и избегать ошибок тех, кто потерпел неудачу. Вот некоторые из наиболее распространенных ошибок, которые я видел:

  1. Не вести собеседование.
  2. Не задавать вопросы.
  3. Неправильно структурировать собеседование.
  4. Не хватать времени.
  5. Не учитывать требования.
  6. Не рассматривать все альтернативные варианты дизайна.

Всех этих ошибок можно легко избежать, проведя несколько пробных собеседований с кем-то, кто хорошо знает System Design. И засекайте время. Цель должна состоять в том, чтобы решить задачу за 40 минут, включая время на обсуждение.

Что ж, на этом все, друзья. **С помощью этого 4-этапного процесса вы скоро будете готовы блестяще пройти любое собеседование по System Design! Надеюсь, это станет хорошей отправной точкой. Удачного обучения!

Для пробных собеседований вы также можете посетить сайт Exponent, который предлагает индивидуальный коучинг и занятия для очного обучения, а также бесплатный сервис Pramp, предоставляющий парные собеседования для разработчиков по структурам данных и System Design.

free System Design Mock interviews

Если вам нужен другой вариант, DesignGuru также проводит пробные собеседования, которые стоят около $239, и вы получаете возможность пройти собеседование с экспертами и бывшим инженером Facebook, основателем DesignGuru.io.


Лучшие ресурсы для подготовки к собеседованию по System Design

Если вам нужно больше ресурсов, таких как книги и онлайн-курсы, для подготовки к собеседованию по System Design, вот мои рекомендации:

Спасибо, что дочитали эту статью. Если вам понравилась эта дорожная карта собеседования по System Design, вопросы, советы и ресурсы, пожалуйста, поделитесь ею с друзьями и коллегами, которые готовятся к техническим собеседованиям.

Если у вас есть вопросы или отзывы, напишите заметку.

Источникdevto