Привет всем! Мы потратили несколько часов на просмотр многих веб-сайтов, таких как Blind, LeetCode, Glassdoor, CareerCup, 1point3acre и т. Д., Чтобы найти наиболее частые вопросы на собеседовании по дизайну системы Facebook.
Из-за огромного объема контента мы суммировали самые популярные вопросы с их объяснениями в видеоряде, состоящем из двух частей, чтобы поделиться ими с большой аудиторией, и каждый может извлечь из них пользу. 🙂
Мы надеемся, что эта серия видеороликов и ресурсы в их полях с описанием помогут вам в вашем путешествии по подготовке и успешному прохождению собеседований по системному дизайну в различных технологических компаниях, таких как Facebook, Google, Apple, Amazon, LinkedIn и т. Д.
Часть 1
Часть 2
Интервью по системному дизайну в Facebook
- Этот 45-минутный раунд также известен как раунд пиратских интервью в Facebook.
- В этом раунде вы должны продемонстрировать свои дизайнерские способности. Задаваемые вопросы проектирования системы обычно более открыты и редко требуют кодирования. Большую часть времени уходит на обсуждение и рисование на доске.
- Цель собеседования - оценить способность кандидата решить нетривиальную задачу проектирования системы. Таким образом, интервьюер задаст вам общую проблему дизайна и оценит ваше решение.
- Ссылка на вакансию в Facebook о процессе собеседования по разработке программного обеспечения: https://www.facebook.com/careers/life/preparing-for-your-software-engineering-interview-at-facebook
Дизайн ленты новостей Facebook
Новостная лента является неотъемлемой частью пользовательского опыта Facebook. Он отображает обновления от друзей и страниц, за которыми следит пользователь, в прокручиваемой ленте. В вопросе «Создание ленты новостей Facebook» разработайте следующие ключевые функции и их API.
- Пользователи Facebook должны видеть новостную ленту, содержащую сообщения и статусы своих друзей и страниц, на которые они подписаны.
- Они могут публиковать и лайкать статусы, которые могут содержать текст, изображения и видео.
- Они могут отправлять запросы в друзья другим пользователям и подписываться на другие страницы.
Дополнительные ресурсы:
- Образовательная статья по созданию новостной ленты Facebook
- Статья InterviewBit в Design Twitter
- Статья в блоге о высокой масштабируемости
Разработка поиска статуса в Facebook
Facebook предоставляет панель поиска в верхней части своей страницы, чтобы пользователи могли искать сообщения, статусы, видео и другие формы контента, опубликованные их друзьями и страницами, на которые они подписаны. В этом вопросе
- Разработайте сервис, позволяющий пользователям искать статусы, опубликованные на Facebook их друзьями и на страницах, на которые они подписаны.
- Учтите, что эти статусы будут содержать только текст для этого конкретного вопроса.
Дополнительные ресурсы:
- Образовательная статья о разработке поиска в Twitter
- Разработка Twitter: создание полного индекса твитов
Живое комментирование дизайна
Этот вопрос не имеет отношения к живым видео. Этот вопрос связан с активной подачей комментариев в режиме реального времени внизу каждого сообщения. Таким образом, в этом вопросе
- Разработайте внутреннюю часть системы, которая может давать возможность комментировать публикации в Facebook в режиме реального времени.
- Пользователи должны иметь возможность видеть новые комментарии в режиме реального времени к сообщениям, видимым перед их экраном.
Дополнительный ресурс:
- Разработка Facebook: комментирование в реальном времени
Создайте Facebook Messenger или WhatsApp
Разработайте внутреннюю часть системы обмена сообщениями, которая позволяет пользователям отправлять друг другу мгновенные сообщения.
- Поддержка разговоров 1: 1 между двумя пользователями.
- Отслеживайте онлайн или офлайн статус пользователей.
- Если остается время, обсудите более сложные функции, такие как групповые беседы и push-уведомления.
Дополнительные ресурсы:
- Образовательная статья о разработке Facebook Messenger
- Facebook Engineering: Создание мобильной инфраструктуры для Messenger
- Facebook Engineering: Project LightSpeed
- Статья InterviewBit о Design Messenger
Дизайн Instagram
Instagram - это мобильная социальная сеть с самым высоким рейтингом, в которой пользователи могут загружать и обмениваться фотографиями и видео со своими подписчиками. В ходе интервью мы разработаем более простую версию Instagram со следующими функциями:
- Пользователи могут загружать и обмениваться фотографиями.
- Они могут подписаться на других пользователей.
- Ставьте лайки фотографиям, размещенным в Instagram.
- Пользователи Instagram должны получать прокручиваемую ленту фотографий, которые публикуют пользователи, на которых они подписаны.
Дополнительные ресурсы:
- Образовательная статья по созданию Instagram (бесплатно)
- Образовательная статья о разработке новостной ленты Facebook
- Статья в блоге о высокой масштабируемости
- Instagram Инженерия: делаем Instagram.com быстрее
Сервер проектирования Proximity
В Facebook серверы близости используются для обнаружения близлежащих достопримечательностей, таких как места и события, которые затем рекомендуются пользователям. В этом вопросе разработайте серверную часть службы со следующими функциями:
- Пользователи могут добавлять, обновлять и удалять места.
- Учитывая местоположение, выраженное широтой и долготой, пользователи могут запрашивать все ближайшие места на заданном расстоянии.
- Одним из необязательных ответов на этот вопрос является также запрос событий в определенном месте в определенное время. По сути, это добавляет к проблеме третье измерение времени.
Дополнительные ресурсы:
- Образовательная статья по проектированию Proximity Server
- Интересные места (POI) с использованием GeoHash
Предложения по типу дизайна
Google прогнозирует и предлагает список запросов с автозаполнением на основе символов, которые мы уже ввели в поле поиска. Эти предложения называются предложениями с опережением ввода, и они помогают улучшить взаимодействие с пользователем и лучше сформулировать их поисковые запросы. Таким образом, в этом вопросе:
- Разработайте сервис, который предлагает десять самых популярных поисковых запросов на основе символов, уже введенных пользователем в поле поиска.
- Для простоты предположим, что популярность запроса может определяться частотой поиска по запросу в прошлом.
Дополнительные ресурсы:
- Образовательная статья о предложениях по проектированию напечатанного текста
- Статья InterviewBit о дизайне поиска с опережением ввода
Дизайн настроек конфиденциальности в Facebook
В Facebook мы можем установить разные уровни конфиденциальности для публикуемых нами сообщений. Мы можем сделать каждую публикацию видимой для определенного набора пользователей, таких как публика, друзья, друзья друзей и т. Д.
- Разработайте сервис, который позволит пользователю указывать различные уровни конфиденциальности для публикации, чтобы она была видна только определенной группе пользователей на Facebook.
- Чтобы обсуждение было простым, реализуйте только два уровня конфиденциальности: «Публичный» и «Друзья».
- Более сложные уровни, такие как друзья друзей и пользовательские группы, можно обсудить ближе к концу интервью, если останется время.
Дизайн Top N песен
Этот вопрос очень похож на разработку системы для топ-N трендовых тем. В этом вопросе:
- Разработайте серверную часть сервиса, чтобы получить N лучших песен для пользователя за последние X дней.
- Для простоты предположим, что популярность песни может определяться частотой ее прослушивания в прошлом.
Дополнительный ресурс:
- Видео на YouTube о разработке главной задачи K (Heavy Hitters)
Разработка веб-сканера
Как и многие поисковые системы, Google использует программу Web Crawler для сканирования всемирной паутины. Он загружает и индексирует все веб-страницы, чтобы они были доступны для поисковых запросов, отправленных пользователями.
- Разработайте серверную часть веб-сканера. Имея список исходных веб-страниц, он должен загрузить все веб-страницы и проиндексировать их для последующего поиска.
- Служба должна обрабатывать повторяющиеся веб-страницы, чтобы сохранялись уникальные 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. Итак, следите за нами, чтобы получать уведомления, когда будет опубликована наша следующая статья из этой серии. Спасибо за чтение!