10 самых популярных вопросов и ответов на собеседовании

Опубликовано: 15 Июня, 2021

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

Вы можете по-разному разговаривать с разными интервьюерами. Из-за отсутствия опыта в построении крупномасштабной системы и открытого характера раунда проектирования системы многие кандидаты борются с этим раундом. Не только младшие и средние разработчики, но и опытные разработчики чувствуют себя некомфортно в раунде системного проектирования. Если вы готовитесь к этому раунду, мы рекомендуем вам прочитать блог How to Crack System Design Round in Interview ?.

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

1. Разработайте службу сокращения URL-адресов (TinyURL).

Служба сокращения URL-адресов позволяет пользователям вводить длинный URL-адрес, а затем возвращает более короткий уникальный URL-адрес. Например bit.ly и TinyURL. Эти службы генерируют короткий URL-адрес, если пользователь дает длинный URL-адрес, а если пользователь дает короткий URL-адрес, он возвращает исходный длинный URL-адрес.

Что нужно обсудить и проанализировать:

  • Учитывая длинный URL-адрес, служба должна сгенерировать более короткий и уникальный псевдоним.
  • Когда пользователь нажимает короткую ссылку, служба должна перенаправить на исходную ссылку.
  • Рассмотрите возможность масштабирования, если каждую секунду приходят тысячи запросов на сокращение URL.
  • Перенаправления дескрипторов службы.
  • Поддержка настраиваемых коротких URL-адресов.
  • Отслеживайте статистику кликов.
  • Удалить просроченные URL.
  • Система должна быть высокодоступной.

При разработке этой услуги вам необходимо учитывать три вещи.

  1. API (REST API) - обсудите, как клиент будет следовать подходу к взаимодействию со службой вместе с балансировщиком нагрузки, который является внешним интерфейсом службы.
  2. Уровень приложения - обсудите, как рабочий поток или хосты, которые будут принимать длинный URL-адрес, генерировать крошечный URL-адрес и как он будет хранить оба URL-адреса в базе данных.
  3. Уровень сохраняемости - база данных

2. Создайте YouTube / Netflix (глобальный сервис потокового видео).

Разработайте сервис потокового видео, такой как Youtube / Netflix, где пользователь может загружать / просматривать / искать видео. Служба должна быть масштабируемой, чтобы большое количество пользователей могло одновременно смотреть и публиковать видео. Я буду хранить и передавать петабайты и петабайты данных.

Что нужно обсудить и проанализировать:

  • Подход к записи статистики о видео, например, общее количество просмотров, голосов за / против и т. Д.
  • Добавление комментариев к видео в реальном времени.

Составные части:

  1. OC - облака, такие как AWS, OpenConnect, которые действуют как сеть доставки контента.
  2. Backend- База данных
  3. Клиент - любое устройство для использования Youtube / Netflix.

3. Создайте Facebook Messenger или WhatsApp (глобальный чат).

Что нужно обсудить и проанализировать:

  • Подход для обмена текстовыми сообщениями один на один между пользователями.
  • Подход к расширению дизайна для поддержки групповых чатов.
  • Доставлено и прочитано состояние
  • Какие действия необходимо предпринять, если пользователь не подключен к Интернету.
  • Всплывающее уведомление
  • Отправка мультимедиа, например изображений или других документов
  • Подход к обеспечению сквозного шифрования сообщений.

4. Дизайн Quora / Reddit / HackerNews (социальная сеть + доска объявлений)

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

Что нужно обсудить и проанализировать:

  • Подход к записи статистики каждого ответа, такой как количество просмотров, голосов за / против и т. Д.
  • Параметры подписки должны быть там, чтобы пользователи могли подписываться на других пользователей или темы.
  • Генерация новостной ленты, что означает, что пользователи могут видеть список самых популярных вопросов от всех пользователей и тем, за которыми они следят, на своей временной шкале.

5. Разработайте поисковый ввод вперед

Служба Typeahead позволяет пользователям вводить некоторые запросы и на основе этого предлагать наиболее популярные элементы поиска, начиная с того, что набрал пользователь.

Что нужно обсудить и проанализировать:

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

6. Создайте Dropbox / Google Диск / Google Фото (глобальный сервис для хранения и обмена файлами).

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

Что нужно обсудить и проанализировать:

  • Подход к загрузке / просмотру / поиску / обмену / загрузке файлов или фотографий с любого устройства.
  • Сервис должен поддерживать автоматическую синхронизацию между устройствами, т.е. после обновления файла на одном устройстве он должен синхронизироваться на всех устройствах.
  • В системе должно присутствовать свойство ACID (атомарность, согласованность, изоляция и долговечность).
  • Подход к отслеживанию разрешения на совместное использование файлов.
  • Разрешение нескольким пользователям редактировать один и тот же документ.
  • Система должна поддерживать хранение файлов размером до 1 ГБ.

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

Разработайте масштабируемую службу Web Crawler, которая собирает информацию ( сканирование) со всей сети и извлекает сотни миллионов веб-документов.

Что нужно обсудить и проанализировать:

  • Подход к поиску новых веб-страниц.
  • Подход к расстановке приоритетов веб-страниц, которые динамически меняются.
  • Убедитесь, что поисковый робот не неограничен в том же домене.

8. Создайте Facebook, Twitter или Instagram.

Вы должны разработать социальный медиа - С й р миллиарды пользователей. Большая часть интервьюера тратит время на обсуждение службы создания новостной ленты в этих приложениях.

Особенности, которые следует учитывать:

  • Некоторые из конкретных функций Twitter / Facebook / Instagram будут поддерживаться.
  • Контроль конфиденциальности каждого твита или сообщения.
  • Пользователь должен иметь возможность публиковать твиты, а также система должна поддерживать ответы на твиты / группировку твитов по разговорам.
  • Пользователь должен иметь возможность видеть трендовые твиты / сообщения.
  • Прямая переписка
  • Упоминания / теги.
  • Пользователь должен иметь возможность подписаться на другого пользователя.

Что нужно анализировать:

  • Система должна уметь обрабатывать огромный объем трафика для миллиардов пользователей.
  • Количество подписчиков
  • Сколько раз твит был добавлен в избранное.

Составные части:

  • Генерация новостной ленты.
  • Социальный граф (дружеское общение между пользователями или кто за кем следует? - особенно, когда миллионы пользователей следят за знаменитостью )
  • Эффективное хранение и поиск сообщений или твитов.

9. Дизайн Uber или Lyft (служба совместного использования).

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

Архитектура: монолитные / микросервисы (сервис в реальном времени, интерфейс (приложение) и база данных)

Что нужно проанализировать и обсудить:

  • Серверная часть в основном обслуживает трафик мобильных телефонов. Приложение Uber общается с серверной частью по мобильным данным.
  • Как работает система диспетчеризации (система диспетчеризации привода - это данные GPS / местоположения )? Как эффективно согласовать запрос пользователя с ближайшими драйверами?
  • Как карты и маршруты работают в Uber? Как рассчитывается ETA?
  • Эффективный подход к хранению миллионов географических местоположений для водителей / гонщиков, которые всегда в движении.
  • Подход к обработке миллионов обновлений местоположения драйверов.
  • Диспетчерская служба в основном построена с использованием Node.js
  • Сервисы: Сервисы бизнес-логики в основном написаны на Python.
  • Базы данных: Postgres, Redis, MySQL.

10. Разработайте ограничитель скорости API (Github)

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

Что нужно проанализировать и обсудить:

  • Ограничение количества запросов, которые объект может отправить к API в пределах временного окна, например, двадцать запросов в секунду.
  • Ограничение скорости должно работать для распределенной установки, поскольку API-интерфейсы доступны через группу серверов.
  • Как управлять дросселированием (мягкое и жесткое дросселирование и т. Д.).

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