Привет всем! Мы потратили несколько часов на просмотр многих веб-сайтов, таких как Blind, LeetCode, Glassdoor, CareerCup, 1point3acre и т. Д., Чтобы найти наиболее частые вопросы на собеседовании по дизайну системы Facebook.

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

Мы надеемся, что эта серия видеороликов и ресурсы в их полях с описанием помогут вам в вашем путешествии по подготовке и успешному прохождению собеседований по системному дизайну в различных технологических компаниях, таких как Facebook, Google, Apple, Amazon, LinkedIn и т. Д.

Часть 1

Часть 2

Интервью по системному дизайну в Facebook

  1. Этот 45-минутный раунд также известен как раунд пиратских интервью в Facebook.
  2. В этом раунде вы должны продемонстрировать свои дизайнерские способности. Задаваемые вопросы проектирования системы обычно более открыты и редко требуют кодирования. Большую часть времени уходит на обсуждение и рисование на доске.
  3. Цель собеседования - оценить способность кандидата решить нетривиальную задачу проектирования системы. Таким образом, интервьюер задаст вам общую проблему дизайна и оценит ваше решение.
  4. Ссылка на вакансию в Facebook о процессе собеседования по разработке программного обеспечения: https://www.facebook.com/careers/life/preparing-for-your-software-engineering-interview-at-facebook

Дизайн ленты новостей Facebook

Новостная лента является неотъемлемой частью пользовательского опыта Facebook. Он отображает обновления от друзей и страниц, за которыми следит пользователь, в прокручиваемой ленте. В вопросе «Создание ленты новостей Facebook» разработайте следующие ключевые функции и их API.

  1. Пользователи Facebook должны видеть новостную ленту, содержащую сообщения и статусы своих друзей и страниц, на которые они подписаны.
  2. Они могут публиковать и лайкать статусы, которые могут содержать текст, изображения и видео.
  3. Они могут отправлять запросы в друзья другим пользователям и подписываться на другие страницы.

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья по созданию новостной ленты Facebook
- Статья InterviewBit в Design Twitter
- Статья в блоге о высокой масштабируемости

Разработка поиска статуса в Facebook

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

  1. Разработайте сервис, позволяющий пользователям искать статусы, опубликованные на Facebook их друзьями и на страницах, на которые они подписаны.
  2. Учтите, что эти статусы будут содержать только текст для этого конкретного вопроса.

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья о разработке поиска в Twitter
- Разработка Twitter: создание полного индекса твитов

Живое комментирование дизайна

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

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

Пояснение к видео

Дополнительный ресурс:
- Разработка Facebook: комментирование в реальном времени

Создайте Facebook Messenger или WhatsApp

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

  1. Поддержка разговоров 1: 1 между двумя пользователями.
  2. Отслеживайте онлайн или офлайн статус пользователей.
  3. Если остается время, обсудите более сложные функции, такие как групповые беседы и push-уведомления.

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья о разработке Facebook Messenger
- Facebook Engineering: Создание мобильной инфраструктуры для Messenger
- Facebook Engineering: Project LightSpeed
- Статья InterviewBit о Design Messenger

Дизайн Instagram

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

  1. Пользователи могут загружать и обмениваться фотографиями.
  2. Они могут подписаться на других пользователей.
  3. Ставьте лайки фотографиям, размещенным в Instagram.
  4. Пользователи Instagram должны получать прокручиваемую ленту фотографий, которые публикуют пользователи, на которых они подписаны.

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья по созданию Instagram (бесплатно)
- Образовательная статья о разработке новостной ленты Facebook
- Статья в блоге о высокой масштабируемости
- Instagram Инженерия: делаем Instagram.com быстрее

Сервер проектирования Proximity

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

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

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья по проектированию Proximity Server
- Интересные места (POI) с использованием GeoHash

Предложения по типу дизайна

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

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

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья о предложениях по проектированию напечатанного текста
- Статья InterviewBit о дизайне поиска с опережением ввода

Дизайн настроек конфиденциальности в Facebook

В Facebook мы можем установить разные уровни конфиденциальности для публикуемых нами сообщений. Мы можем сделать каждую публикацию видимой для определенного набора пользователей, таких как публика, друзья, друзья друзей и т. Д.

  1. Разработайте сервис, который позволит пользователю указывать различные уровни конфиденциальности для публикации, чтобы она была видна только определенной группе пользователей на Facebook.
  2. Чтобы обсуждение было простым, реализуйте только два уровня конфиденциальности: «Публичный» и «Друзья».
  3. Более сложные уровни, такие как друзья друзей и пользовательские группы, можно обсудить ближе к концу интервью, если останется время.

Пояснение к видео

Дизайн Top N песен

Этот вопрос очень похож на разработку системы для топ-N трендовых тем. В этом вопросе:

  1. Разработайте серверную часть сервиса, чтобы получить N лучших песен для пользователя за последние X дней.
  2. Для простоты предположим, что популярность песни может определяться частотой ее прослушивания в прошлом.

Пояснение к видео

Дополнительный ресурс:
- Видео на YouTube о разработке главной задачи K (Heavy Hitters)

Разработка веб-сканера

Как и многие поисковые системы, Google использует программу Web Crawler для сканирования всемирной паутины. Он загружает и индексирует все веб-страницы, чтобы они были доступны для поисковых запросов, отправленных пользователями.

  1. Разработайте серверную часть веб-сканера. Имея список исходных веб-страниц, он должен загрузить все веб-страницы и проиндексировать их для последующего поиска.
  2. Служба должна обрабатывать повторяющиеся веб-страницы, чтобы сохранялись уникальные URL-адреса.

Пояснение к видео

Дополнительные ресурсы:
- Образовательная статья по разработке веб-сканера
- LeetCode Discuss: веб-сканер, который будет сканировать Википедию
- Основы разработки системы: разработка веб-краулера

Материал для подготовки к вышеуказанным вопросам

Узнайте больше о целях проектирования, оценках масштаба, общем обзоре проекта и подробной схеме архитектуры этих проблем в следующих видеороликах:

Часть 1: https://www.youtube.com/watch?v=hykjbT5Z0oE

Часть 2: https://www.youtube.com/watch?v=Hq8pZ8G2Lm8

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

Безлимитный план Educative.io [💰 10% скидка для первых 100 пользователей]
Членство в TryExponent.com [💰 Ограниченное по времени предложение 10%]

👩‍💻 Курс собеседования по лучшему дизайну системы
🚀 Полный курс собеседования по SWE [💰 Ограниченное по времени предложение 10%]
🙋‍♀️ Руководство по поведенческому собеседованию [💰 Специальная скидка]
📚 Рекомендуемая книга по подготовке к собеседованию (на Amazon)

Эта статья является частью серии собеседований по системному дизайну в Facebook. Итак, следите за нами, чтобы получать уведомления, когда будет опубликована наша следующая статья из этой серии. Спасибо за чтение!





Раскрытие информации и отказ от ответственности