Хотите дальше читать devby? 📝
Support us

Чего ждать от System Design. Испытание кругозором на входе в FAANG

Разработчик Сергей, который прошёл полный цикл собеседований в три компании FAANG, уже сделал подробный разбор алгоритмического и поведенческого интервью в Facebook, Amazon и Google.

В заключительной части он говорит о высокоуровневом испытании, требующем широкого кругозора, — System Design.

17 комментариев
Чего ждать от System Design. Испытание кругозором на входе в FAANG

Разработчик Сергей, который прошёл полный цикл собеседований в три компании FAANG, уже сделал подробный разбор алгоритмического и поведенческого интервью в Facebook, Amazon и Google.

В заключительной части он говорит о высокоуровневом испытании, требующем широкого кругозора, — System Design.

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

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

Примеры заданий

Вот примерные формулировки заданий на проектирование:

  1. Спроектируйте сервис создания коротких ссылок наподобие bitly.com.
  2. Популярное мобильное приложение. Требуется подсчитать ежедневный процент активных пользователей, у которых приложение падало с ошибкой.
  3. Популярный веб-сайт. Поле ввода для поиска по сайту. Требуется добавить показ подсказок с популярными поисковыми запросами по мере набора текста.

Как видите, вопросы очень открытые, но предполагается определённая схема ответа, и как обычно, времени на всё впритык. Обращу внимание на подводные камни. В первом вопросе будет проблемой добиться уникальности максимально коротких URL, генерируемых кластером машин. Во втором вопросе будет куча проблем вокруг повторных крэшей на одном устройстве, переинсталляции приложений, регулярное отсутствие интернета у мобильного телефона, сложность определения, что такое «активный пользователь», например, у мессенджера. Многие из этих проблем не кажутся проблемами, когда вы о них тут читаете, но их можно просто упустить из виду. В третьей задаче сразу всё сложно и проблем много.

«Научись польскому языку с Mondly — это легко!»

План ответа

Во-первых, начинаем с уточнения деталей. Правильно ли мы понимаем суть задачи, сколько предполагается посетителей в сутки, какой будет поток запросов, объёмы данных. На некоторые важные вопросы у собеседующего может не быть ответов, тогда делайте свою грубую оценку. Умение делать оценки и обосновывать их будет тоже учитываться.

Потом рисуем на специальном сайте высокоуровневую схему приложения. Обычно это блоки вида «мобильное приложение», «браузер», «балансировщик», «кластер бэкенд машин», «кластер машин с фронтендом», «распределённая база данных» и далее по вкусу и смыслу. Часто добавляются дополнительные специализированные базы данных, дополнительные веб-сервисы, кэши, очереди сообщений между ними и т. п. Как и в алгоритмическом интервью, желательно пояснять, что вы делаете и зачем, а не рисовать молча.

Далее прорисовываем детали с упором на те части, которые вам более знакомы. Можно выбрать фреймворк для фронтенда, выбрать язык и фреймворк для бэкенда. Для каждого узла схемы не забудьте нарисовать и пояснить, будет ли это одна копия или же кластер. Для очередей сообщений определитесь, как с ней будут общаться читатели — активно читать (long polling) или подписываться и получать уведомления о новых сообщениях. Часто собеседующий сам может вас спросить про детали, если ему покажется недостаточной их проработка.

Обязательно выберите тип базы данных (БД) и конкретный продукт этого типа. У меня был целый лист со шпаргалкой по выбору БД, так как большинство этих баз я видел только на картинке. Обязательно обоснуйте, почему у вас, скажем, реляционная БД, а не колоночная NoSQL. Почему выбрали MySQL, а не конкурента?

Пример обоснования выбора БД: 

«Я выбрал реляционную базу данных, потому что для нашего финансового сервиса крайне важно поддержание целостности данных; это будет MySQL, а не Oracle, потому что у неё лицензия сильно дешевле, а также у нас нагрузка предполагается не столь высокая».

Следующий этап — описать схему базы данных, описать схему данных в сообщениях очереди (если они есть).

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

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

Например, типичный сайт с кнопкой «лайкнуть пост» будет работать примерно так:

  1. Серия запросов от браузера загрузит фронтенд через балансировщик и кластер серверов фронтенда. Поясните, почему запрос попал на обработку именно серверу фронтенда, а не бэкенду.
  2. Пользователь кликает на иконке в браузере, от чего джаваскрипт фронтенда генерирует запрос, который проходит через балансировщик и попадает в кластер бэкенда.
  3. Бэкенд проверяет в реляционной базе, голосовал ли человек раньше, обновляет счётчик голосов. После этого возвращает новое значение счетчика браузеру.

Частые ошибки:

  • Забыть упомянуть, что вам нужна не одна машина, а кластер.
  • Забыть про фронтенд (забыть его нарисовать или забыть про существование запросов к его серверам).
  • Забыть про балансировщик.
  • Забыть про кэш.

У разных компаний FAANG в основном похожие требования к проектированию. Но у Amazon, кроме обычного проектирования, было и дополнительное смешанное интервью: проектирование с кодированием. Это неожиданный формат, где мне приходилось писать псевдокод для веб-сервиса, описывающий решение задачи. Было немного и алгоритмического (базовые вещи), и взаимодействие с клиентами сервиса. Например, итеративно решались вопросы недоверия клиенту, пытающемуся читерить, добавлялась асинхронность обработки длительных запросов от клиента. Всё это лишь псевдокод, надо показать правильные намерения и принципиальную возможность решить задачу указанным вами способом.

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

ВЫУЧИТЬ НОВЫЙ ЯЗЫК

Полезные ссылки

CAP-теорема (очень полезно почитать, если вы не слышали о ней раньше)

Официальное видео от Amazon «Amazon System Design Preparation (SIP)»

Стороннее демо-интервью «Amazon System Design Interview: Design Parking Garage»

Стороннее демо-интервью «Facebook System Design Interview: Design Twitter»

Послесловие

Надеюсь, мой опыт собеседований, описанный в данной серии статей, кому-нибудь пригодится, чтобы вдохновиться, трезво оценить силы и пройти этот путь с успехом. В конечном итоге выучить недостающее и натренироваться проходить интервью вполне реально. Я убеждён, что знания, приобретённые в процессе подготовки, обогащают нас как специалистов в computer science. Если задуматься, то можно ли считаться хотя бы начинающим специалистом в computer science человеку, который не может решать таких задач по алгоритмизации? И можно ли в наше время интернета считаться опытным специалистом человеку, который не способен решать такие задачи по проектированию?

Три компании — 0 офферов. История программиста который уволился ради FAANG
Три компании — 0 офферов. История программиста, который уволился ради FAANG
По теме
Три компании — 0 офферов. История программиста, который уволился ради FAANG
«Лютый трэш». Чего ждать от behavioral interview в FAANG
«Лютый трэш». Чего ждать от behavioral interview в FAANG
По теме
«Лютый трэш». Чего ждать от behavioral interview в FAANG
Разбор секции алгоритмов от айтишника которого собесили в Google Amazon Fb
Разбор секции алгоритмов от айтишника, которого собесили в Google, Amazon, Fb 
По теме
Разбор секции алгоритмов от айтишника, которого собесили в Google, Amazon, Fb
Поведенческое собеседование в Meta (Facebook): какие вопросы и для чего задают как подготовиться
Поведенческое собеседование в Meta (Facebook): какие вопросы и для чего задают, как подготовиться
По теме
Поведенческое собеседование в Meta (Facebook): какие вопросы и для чего задают, как подготовиться

«Научись польскому языку с Mondly — это легко!»

Помогаете devby = помогаете ИТ-комьюнити.

Засапортить сейчас.

Читайте также
8 онлайн-курсов и интенсивов для Product Manager (февраль, 2024)
8 онлайн-курсов и интенсивов для Product Manager (февраль, 2024)
8 онлайн-курсов и интенсивов для Product Manager (февраль, 2024)
Собрали проверенные онлайн-курсы и интенсивы для Product Manager. В этой подборке: курсы от действующего PM в Microsoft, актуальная специализация по управлению продуктами в сфере AI, курсы для начинающих специалистов и лайфхаки как проходить собеседования на позицию продакта.
2 комментария
Как очистить Mac? Лучшие  платные приложения для macOS (март 2024 г.)
Как очистить Mac? Лучшие платные приложения для macOS (март 2024 г.)
Как очистить Mac? Лучшие платные приложения для macOS (март 2024 г.)
Чем просканировать накопившийся за время работы мусор на диске вашего в Мака и навести порядок? Рассказываем о 7 платных приложениях для очистки macOS, на которые, на наш взгляд, стоит обратить внимание.
6 комментариев
11 лучших сертификаций Coursera, чтобы освоить новую специальность (август, 2023)
11 лучших сертификаций Coursera, чтобы освоить новую специальность (август, 2023)
11 лучших сертификаций Coursera, чтобы освоить новую специальность (август, 2023)
Проанализировали Coursera в поисках лучших профессиональных программ на 2023 год, прохождение которых позволит получить востребованную специальность. Рассказываем, на какие направления обратить внимание и как сертификация Coursera помогает изменить вашу карьеру.
1 комментарий
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
12 онлайн-курсов по языку Java для новичков и профессионалов (август, 2023)
Java по-прежнему входит в список самых популярных языков программирования. Вместе с Digitaldefynd мы составили список курсов по Java, которые подойдут как новичкам, так и людям с опытом программирования, чтобы освоить этот востребованный язык.

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

faang-caliber-engineer
faang-caliber-engineer
-2

Меня просили задизайнить в разных компаниях

distributed counter of requests in REST API make paid rest api (all clients rest requests should charge the client) tickets reservation system Instagram (photo sharing service with news feed) how to migrate data from Skype for business into Ms teams

1art
1art
3

Невероятно полезная информация.

vivkine
vivkine
-3

Так надо бы кое что сказать и о том как выполнялся сам дизайн. Проблемы, решения.
А то пока получается как в детской песенке:
"Какой хороший я и песенка моя."

ddd111
ddd111
2

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

sup
sup
1

Зависит от опыта. Фаанги спрашивают задизайнить распределенную систему, но не каждый имеет опыт именно в этом(это не значит, что опыт плохой, просто другой). Плюс формат ответа предполагает, что вы зададите вопросы и прикините числа, запросы в секунду, кол-во инстансов, необходимое место в хранилище идт.
Такой опыт совсем не у каждого, часто это так выглядит "а закинем в облако оно заскейлит". Так что приходится немного потренить именно такой формат.

sergey-dev
sergey-dev
0

Название статьи уже сменили на менее кликбейтное и ближе к реальности. :) Без "самое сложное интервью".

Но со следующим автором (@sup) я тоже согласен. Опыт очень тут помогает, но опыт весьма специфический требуется.

Дорофей Пролесковский
Дорофей Пролесковский Head of Product в Kontur
-3

Стоит вспомнить, что Дима Королёв организует System Design Meetup, на котором всему этому можно научиться:
https://twitter.com/SysDesignMeetup

Максим Около-Кулак
Максим Около-Кулак
-3

Привет! Как думаешь, откуда минусы?

Anonymous
Anonymous Much Wow Very Engenieer в t.me/it_destruct
-2

На UI (mobile, web) эта часть обычно сильно проще, чем на vanilla SWE.
Ну оно и понятно, многих проблем, вроде масштабируемости, в принципе там не существует.

sergey-dev
sergey-dev
0

А когда нанимают мобильных разработчиков на Senior позицию, то им не дают по-вашему system design интервью?

У вас есть информация про это?

Anonymous
Anonymous Much Wow Very Engenieer в t.me/it_destruct
0

Дают, и на фронт-энд тоже дают. Просто по моему субъективному ощущению эти систем дизайн вопросы проще, причем на порядок.
Основной упор на vanilla SWE system design идет на масштабируемость и отказоустойчивость - в каком месте на мобилках или вебе это нужно? кроме каких-нибудь бесконечных списков/feed-ов c ленивым рендерингом (а-ля sliding window) я например ничего не могу придумать.

vivkine
vivkine
2

Конечно System Design это уровень Seniors или Architects. Тут важен и experiense, и background, и профессиональный кругозор разработчика.
Опыт, как правило, узкий. В определённой сфере.
Можно, конечно, поднатаскаться на трейнигах как проходить такие интервью. Однако опытный интервьюер будет видеть что перед ним школьник.
Поэтому важным является хорошее классическое образование в Computer Science. И если оно есть то и опыт приобретается намного быстрее и эффективнее.
Респектабельные компании часто требуют от претендентов степени магистра в Computer Science, a бокалавров даже не приглашают на интервью.

Micah Teeuws
Micah Teeuws
2

бокал.авров никто не приглашает без справки от нарколога
Вот бакалавров можно...

1art
1art
2

Порекомендуйте English тичер please, очень хочу shine в обществе!

faang-caliber-engineer
faang-caliber-engineer
-1

У меня диплом БГУ.
I don't have master of computer science.
Uber, Amazon, Meta, Uber invited me before...

Anonymous
Anonymous - в Будзьма!
0

Если не знаете как ответить, тогда можно сходить на 15+ суточный Workshop туда, где самые опытные и ответственные люди.

Anthony Marchenko
Anthony Marchenko
2

System Design (от Alex A. из CocoaHeads Belarus)

https://www.educative.io/courses/grokking-the-system-design-interview – классика https://www.youtube.com/playlist?list=PLMCXHnjXnTnvo6alSjVkgxV-VH6EPyvoX – плейлист от братьев индусов, но качество материала хорошее и смотреть интересно https://github.com/donnemartin/system-design-primer – бэкенд гайд по system design https://dataintensive.net – Книга «с кабанчиком» https://courses.systeminterview.com/courses/system-design-interview-an-insider-s-guide – курс по system design и отзыв на него https://github.com/checkcheckzz/system-design-interview – How to prepare system design questions for an IT company https://www.freecodecamp.org/news/systems-design-for-interviews/ – System design Interview Questions https://www.youtube.com/watch?v=ZgdS0EUmn70 – просто какой-то видос