1. Спроектируйте TinyURL или bitly (сервис сокращения URL)
Как вы спроектируете сервис, который будет генерировать короткие псевдонимы для длинных URL?
Обсудите следующее:
- Как генерировать уникальные ID для каждого URL?
- Как бы вы генерировали уникальные ID в широких масштабах (тысячи запросов на сокращение URL, поступающие каждую секунду)?
- Как ваш сервис будет справляться с перенаправлениями?
- Как бы вы поддерживали кастомные короткие URL?
- Как удалить истекшие URL?
- Как отслеживать статистику кликов?
2. Спроектируйте YouTube, Netflix или Twitch (видеостриминговый сервис)
Такой сервис будет хранить и передавать петабайты данных. Вы должны объяснить, как эффективно хранить и распределять данные таким образом, чтобы огромное количество пользователей могло смотреть и делиться ими одновременно (например, представьте стриминг последнего эпизода «Игры престолов»).
Кроме того, обсудите следующее:
- Как бы вы записывали статистику о видео – например, общее число просмотров, лайки и дизлайки?
- Как пользователь сможет писать к видео комментарии (в реальном времени)?
3. Спроектируйте Facebook Messenger или WhatsApp (глобальный мессенджер)
Интервьюеры хотят знать:
- Как вы спроектируете диалоги между пользователями.
- Как вы сможете поддерживать групповые чаты.
- Что делать, когда пользователь не подключен к интернету.
- Когда отправлять уведомления.
- Можете ли вы обеспечить сквозное шифрование и как.
4. Спроектируйте Quora, Reddit или HackerNews (социальная сеть + доска объявлений)
Пользователи этих сервисов могут постить вопросы или делиться ссылками. Другие пользователи могут отвечать на вопросы или комментировать ссылки. Вот что должен уметь сервис:
- Вести статистику записей для каждого ответа – например, общее количество просмотров, лайки/дизлайки.
- Пользователи должны иметь возможность подписываться на других пользователей или темы.
- В их ленте должны отображаться самые популярные вопросы пользователей и темы, на которые они подписаны.
5. Спроектируйте Dropbox, Google Drive или Google Photos (глобальное хранилище файлов)
Объясните следующее:
- Как пользователи смогут загружать/просматривать/искать файлы или фотографии и делиться ими?
- Как вы будете отслеживать разрешения на обмен файлами?
- Как вы разрешите нескольким пользователям редактировать один и тот же документ?
6. Спроектируйте Facebook, Twitter или Instagram (социальную сеть с миллионом пользователей)
Интервьюерам интересно узнать, как вы будете проектировать следующие компоненты:
- Эффективное хранилище и поиск постов или твитов.
- Генерация ленты новостей.
- Социальный график (кто кого добавляет в друзей, или кто кого фолловит – особенно когда миллионы пользователей фолловят знаменитость)
Очень часто основное время на собеседовании интервьюеры посвящают проектированию ленты новостей.
7. Спроектируйте Uber или Lyft (райдшеринг)
Обсудите следующие вещи:
- Самые важные сценарии использования – когда пользователь запрашивает поездку и как эффективно связать его с водителями неподалеку.
- Как хранить миллионы местоположений для водителей, которые постоянно передвигаются.
- Как обрабатывать обновления местоположений водителя (миллионы обновлений каждую секунду).
8. Спроектируйте поисковой робот или автозаполнение
Для автозаполнения – когда пользователь печатает что-то в поисковой строке – вам нужно спроектировать сервис, который будет предлагать десять самых популярных запросов. Обсудите следующее:
- Как хранить предыдущие поисковые запросы.
- Как обновлять данные.
- Как найти лучшие совпадения.
- Как справляться с обновлениями и быстрой скоростью печатания пользователя.
Для поискового робота необходимо спроектировать масштабируемый сервис, который сможет анализировать веб-страницы и сохранять их содержимое в некоем специальном виде на сервере поисковой машины. Обсудите следующее:
- Как найти новые веб-страницы.
- Как приоритезировать веб-страницы, которые меняются динамически.
- Как удостовериться в том, что ваш робот не застрянет в одном домене.
9. Спроектируйте ограничитель запросов к API
Вам нужно разработать сервисы ограничения запросов, которые могут:
- Ограничивать количество запросов, которые компания может отправлять к API за определенное время – например, 15 запросов в секунду.
- Ограничение запросов должно работать для распределенной системы, поскольку API предполагает работу на кластере серверов.
- Как вы реализуете троттлинг?
10. Спроектируйте Yelp или Друзья/Места неподалеку
Этот сервис должен будет хранить локации для миллионов людей/мест. Обсудите следующее:
- Как пользователи смогут искать друзей/места неподалеку.
- В каком порядке расставлять места (на основе расстояния, отзывов).
- Как эффективно хранить информацию о локации в соответствии с плотностью населения (например, в одном квартале в Нью-Йорке может находиться больше заведений/людей, чем в маленьком городке)?
1. Спроектируйте TinyURL или bitly (сервис сокращения URL)
Как вы спроектируете сервис, который будет генерировать короткие псевдонимы для длинных URL?
Обсудите следующее:
2. Спроектируйте YouTube, Netflix или Twitch (видеостриминговый сервис)
Такой сервис будет хранить и передавать петабайты данных. Вы должны объяснить, как эффективно хранить и распределять данные таким образом, чтобы огромное количество пользователей могло смотреть и делиться ими одновременно (например, представьте стриминг последнего эпизода «Игры престолов»).
Кроме того, обсудите следующее:
3. Спроектируйте Facebook Messenger или WhatsApp (глобальный мессенджер)
Интервьюеры хотят знать:
4. Спроектируйте Quora, Reddit или HackerNews (социальная сеть + доска объявлений)
Пользователи этих сервисов могут постить вопросы или делиться ссылками. Другие пользователи могут отвечать на вопросы или комментировать ссылки. Вот что должен уметь сервис:
5. Спроектируйте Dropbox, Google Drive или Google Photos (глобальное хранилище файлов)
Объясните следующее:
6. Спроектируйте Facebook, Twitter или Instagram (социальную сеть с миллионом пользователей)
Интервьюерам интересно узнать, как вы будете проектировать следующие компоненты:
Очень часто основное время на собеседовании интервьюеры посвящают проектированию ленты новостей.
7. Спроектируйте Uber или Lyft (райдшеринг)
Обсудите следующие вещи:
8. Спроектируйте поисковой робот или автозаполнение
Для автозаполнения – когда пользователь печатает что-то в поисковой строке – вам нужно спроектировать сервис, который будет предлагать десять самых популярных запросов. Обсудите следующее:
Для поискового робота необходимо спроектировать масштабируемый сервис, который сможет анализировать веб-страницы и сохранять их содержимое в некоем специальном виде на сервере поисковой машины. Обсудите следующее:
9. Спроектируйте ограничитель запросов к API
Вам нужно разработать сервисы ограничения запросов, которые могут:
10. Спроектируйте Yelp или Друзья/Места неподалеку
Этот сервис должен будет хранить локации для миллионов людей/мест. Обсудите следующее: