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

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

Это интересный раунд и обычно может длиться от 15 минут до часа. Вопросы могут быть одним из

  • Проблема, которую они пытаются решить (построение системы реального времени)
  • Одна из платформ, которая недавно стала известной или находится в тренде (создание Whatsapp, Facebook)
  • Некоторая классическая проблема, которая известна и уже решена (масштабирование, сервис-дизайн и т. Д.)

Хочу еще раз отметить, что это раунд системного проектирования. У вас должны быть некоторые предварительные знания / опыт работы с Системой и с тем, как собрать ее вместе Дизайн. Вам повезло, если вы нашли Apple. Интервьюер сосредоточит внимание на этих моментах. И это может варьироваться от компании к компании. Скажем, сетевая компания сосредоточится на низком уровне понимания системы, сетевых протоколов и т. Д., Тогда как компания электронной коммерции сосредоточится на масштабировании, производительности и т. Д.

Вот некоторые моменты, которые следует учитывать.

  • Мыслительный процесс
  • Понимание предметной области и набор навыков
  • Системное управление и производительность
  • Нагрузка и масштабирование
  • Двусмысленность
  • Альтернативы и конкуренты

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

Процесс мышления

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

Шаги здесь могут быть

  • Проектирование архитектуры высокого уровня, набросайте важные компоненты и связи между ними.
  • Определите свои компоненты и проверьте поток информации от одного компонента к другому
  • Решите для базового варианта использования
  • Добавьте сложности на основе обсуждения с интервьюером (скажем, система должна масштабироваться с нагрузкой)
  • Крепко возьмитесь за некоторые компоненты и погрузитесь глубже. Это выиграет вам время
  • Держитесь подальше от модного слова и будьте уверены

Понимание предметной области и набор навыков

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

Допустим, вы разрабатываете инструмент для сокращения URL - вас могут попросить об этом

  • Какой алгоритм вы будете использовать для сокращения
  • Какой язык и базу данных вы будете использовать
  • Какой будет у тебя стек
  • Может ли быть альтернативный стек? Можете ли вы его переделать?
  • Сравнение стеков и языков

Загрузить и масштабировать

Пока вы решили базовый вариант использования. В зависимости от типа системы и некоторых других ограничений ваше решение способно обработать x запросов. Интервьюер попросит вас масштабировать. Точки фокусировки

  • Масштабирование сервера приложений
  • Масштабирование сервера базы данных
  • Масштабируемая инфраструктура
  • Тип решения REST, SOA, микросервисы
  • Масштабирование в реальном времени

Не будьте слишком расплывчаты. Вы должны быть уверены в том, что говорите. Здесь можно проверить глубину.

Управление системой и производительность

  • Как вы будете управлять своим приложением и контролировать его.
  • Как вы можете повысить производительность вашей системы.
  • Хотели бы вы использовать какие-либо сторонние сервисы, такие как PAAS, BAAS, IAAS
  • Безопасность
  • Соблюдение законов
  • логирование
  • Нагрузка и производительность в реальном времени
  • Отладка
  • Разработка и развертывание
  • Непрерывная интеграция

Неясности

  • Допустим, вы разместились в облаке (AWS). И вы получили уведомление о том, что ваш экземпляр требует технического обслуживания. Как вы справитесь с простоями? (Запланированные события в AWS для инстансов ec2)
  • Один из ваших компонентов отключается. Какой будет план восстановления.
  • Что-то не работает в производстве, что вы будете делать.

То, как быстро вы восстановите свою систему, будет вашим плюсом.

Альтернативы и конкуренты

  • Кто ваши конкуренты
  • Какая может быть альтернатива
  • Они делают это по-другому, почему бы нам не

Как подготовиться?

Как будто вы освоили алгоритм на практике. Это может быть тяжелая тренировка, и короткого пути нет. Придется много читать. Вы должны ответить: «Есть много решений, и какое решение я бы предпочел».

  • Макет дизайна. Создайте макет дизайна вместе с другом или самостоятельно на самом базовом уровне. Это может быть полноценное приложение, прототип или диаграмма UML.
  • Контрольный показатель. Здесь вы должны узнать кое-что о производительности и инструментах.
  • Стек и инструменты. Вы должны быть уверены в своем стеке и используемом инструменте.
  • Альтернативы. Попробуйте найти альтернативы и сравните их.
  • Открытый исходный код. Здесь нужно копнуть глубже. Они следуют стандартам и дисциплине, с которыми нужно хорошо разбираться.
  • Практика - здесь нет слов, вам нужно это делать.

Некоторые ссылки

Последняя мысль

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

Удачи!