Топ-10 вопросов на собеседованиях для разработчиков

  • 29 aug. 2018, 10:53
  • 513

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 или Друзья/Места неподалеку

Этот сервис должен будет хранить локации для миллионов людей/мест. Обсудите следующее:

  • Как пользователи смогут искать друзей/места неподалеку.
  • В каком порядке расставлять места (на основе расстояния, отзывов).
  • Как эффективно хранить информацию о локации в соответствии с плотностью населения (например, в одном квартале в Нью-Йорке может находиться больше заведений/людей, чем в маленьком городке)?