Владимир Маслов — System Design. Как построить распределенную систему и пройти собеседование

Владимир Маслов — System Design. Как построить распределенную систему и пройти собеседование

Вступление

Обзор раздела: Владимир расскажет о System Design, его значении в собеседованиях и процессе создания распределенных систем.

System Design: Что это такое?

  • System Design - часть интервью на собеседованиях и процесс создания систем.
  • Необходимо обратить внимание на ключевые аспекты при построении распределенных систем.
  • Много полезных лайфхаков для успешного прохождения собеседований.

Роль дизайна системы в собеседованиях

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

Суть системного дизайна

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

Что такое дизайн системы?

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

Популярные ошибки на собеседованиях

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

Подготовка к собеседованию

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

Заключение

Обзор раздела: Владимир поделился информацией о системном дизайне, его значении в собеседованиях и процессе создания распределенных систем.

Виды дизайна системы

Обзор раздела: В этом разделе рассматривается различные виды дизайна системы и требования к ним.

Архитектура системы

  • Разработка системы может включать не только архитектуру, но и требования к ней.
  • Дизайн системы зависит от типа компании и ее потребностей.
  • Может быть запрос на создание нового сервиса или добавление функциональности в существующий.
  • Примеры популярных систем включают Netflix, Twitter, GitHub и другие.

Различные фичи и сервисы

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

Градации системного дизайна

  • Системный дизайн может иметь различные градации в зависимости от компании.
  • Некоторые компании могут проводить интервью по алгоритмам после интервью по системному дизайну.
  • Каждое интервью уникально и не имеет единого правильного ответа.

Рисование архитектуры системы

Обзор раздела: В этом разделе рассматривается процесс рисования архитектуры системы на собеседовании.

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

Уникальность каждого интервью

Обзор раздела: В этом разделе обсуждается уникальность каждого интервью по системному дизайну.

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

Роль интервьюера и ошибки при проектировании систем

Обзор раздела: В этом разделе рассматривается роль интервьюера и распространенные ошибки, совершаемые при проектировании систем.

Роль интервьюера

  • Интервьюер выбирает вопросы из списка и ведет собеседника по определенной структуре.
  • Зависимо от грейда кандидата, подход к проведению интервью может быть разным.
  • Коммуникация с интервьюером играет важную роль для успешного прохождения собеседования.

Ошибки при проектировании систем

  • Частая ошибка - попытка сразу приступить к проектированию сложной системы без предварительного общения с интервьюером.
  • Необходимо учиться задавать вопросы на собеседованиях и уточнять требования к системе.
  • Собеседование состоит из нескольких этапов, таких как сбор требований, вычисление нефункциональных требований, дизайн компонентов и т.д.

Структура собеседования

Обзор раздела: В этом разделе рассматривается структура собеседования и важные этапы, которые нужно пройти.

Этапы собеседования

  1. Сбор требований: определение основных глаголов, описывающих функциональность системы.
  1. Вычисление нефункциональных требований: определение ограничений и входных/выходных данных.
  1. Высокоуровневый дизайн: определение модели данных и общей архитектуры системы.
  1. Детализация компонентов: углубленное проектирование отдельных компонентов системы.
  1. Обсуждение ботлнеков и трейдов: анализ сложностей и возможностей системы.

Сигналы на собеседовании

Обзор раздела: В этом разделе рассматриваются сигналы, которые интервьюер хочет увидеть на собеседовании.

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

Ошибки при проектировании систем

**

Введение в функциональные требования

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

Определение возможностей системы

  • Необходимо узнать, какие возможности есть у системы.
  • Записывайте все требования на доске и старайтесь упорядочить их.
  • Уточняйте, какие из этих требований будут реализованы.

Функциональные требования для примера Uber

  • Пример: создание системы заказа такси (Uber).
  • Система должна позволять заказывать такси и расчет максимального тарифа.
  • Детали и ограничения могут зависеть от конкретной системы.

Роль интервью в определении требований

  • Интервью с заказчиком помогает уточнить требования.
  • Важно определить, какие конкретно требования будут реализованы.
  • Необходимо донести историю до конца, чтобы избежать ошибок в проектировании.

Нефункциональные требования и системные характеристики

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

Уточнение деталей и оценка стоимости

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

Нефункциональные требования и системные характеристики

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

Получение системных требований

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

Значимость технических характеристик

  • Понимание различий между техническими характеристиками важно для проектирования системы.
  • Пример: разница между доступом к данны

Полезность изучения процесса создания Инстаграма

Обзор раздела: В этом разделе говорится о полезности изучения процесса создания социальной сети Инстаграм и примере расчетов, связанных с ее развитием.

Процесс создания Инстаграма

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

Расчеты и ограничения при разработке системы

Обзор раздела: В этом разделе рассказывается о необходимости правильных расчетов и учете ограничений при разработке системы.

Правильные расчеты и ограничения

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

Полезные ресурсы для изучения архитектуры

Обзор раздела: В этом разделе рассказывается о полезных ресурсах для изучения архитектуры систем.

Ресурсы для изучения архитектуры

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

Ограничения и тестирование системы

Обзор раздела: В этом разделе говорится о необходимости учета ограничений при проектировании системы и проведении ее тестирования.

Ограничения и тестирование

  • Система имеет св

Кэширование и использование компонентов

Обзор раздела: В этом разделе обсуждается важность кэширования и использования компонентов при проектировании системы.

Различие между кэшированием и использованием компонентов

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

Значение практического опыта

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

Оценка и масштабирование системы

  • Оценка возможности экономии ресурсов при выборе компонентов является важным шагом.
  • Балансировка нагрузки и масштабирование - ключевые аспекты при проектировании больших систем.

Кэширование данных

  • Кэширование может быть полезным для хранения горячих и холодных данных.
  • Закэшированные данные о пользователях или транзакциях могут улучшить пользовательский опыт.

Важность компромиссов и знания DNS

  • При выборе компонентов необходимо найти баланс.
  • Знание DNS и его применение в системах также является важным.

Разработка сервисов для миллионов пользователей

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

Теоретические основы и релизы

Обзор раздела: В этом разделе обсуждаются теоретические основы проектирования систем и релизы.

Принцип компромисса при выборе компонентов

  • Невозможно достичь всех целей сразу, поэтому необходимо найти компромиссы при выборе компонентов.
  • Балансировка нагрузки и кэширование - важные аспекты при проектировании систем.

Знание DNS и релизы

  • Знание DNS может

Подготовка к собеседованию

Обзор раздела: В этом разделе рассказывается о том, как подготовиться к собеседованию по системному дизайну.

Методы подготовки

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

Рекомендуемые материалы

  • YouTube канал Мартина Клиппа Мартина - полезные видео о системном дизайне.
  • Список литературы, рекомендованный Мартином Клиппом Мартином.
  • Курс "Грокаем System Design" от Grokking the System Design Interview.
  • Книги "Сложный подход к сложным интервью" и "Финансовые системы".

Дополнительные ресурсы

  • Хардкорный подход - классный roadmap от ютубера.
  • Каналы на YouTube с полезными материалами по системному дизайну.
  • Статья от Яндекса на Хабре о системном дизайне.
  • Пост на Бланде с советами по прохождению интервью.

Изучение системного дизайна

Обзор раздела: В этом разделе рассказывается о способах изучения системного дизайна.

Рекомендации для изучения

  • Курс "Грокаем System Design" от Grokking the System Design Interview.
  • Книги "Сложный подход к сложным интервью" и "Финансовые системы".
  • Хардкорный подход - классный roadmap от ютубера.

Дополнительные ресурсы

  • Каналы на YouTube с полезными материалами по системному дизайну.
  • Статья от Яндекса на Хаб

Подборки на GitHub для изучения дизайна систем

Обзор раздела: В этом разделе говорится о том, как найти подборки на GitHub, которые содержат материалы по изучению дизайна систем.

Поиск подборок на GitHub

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

Изучение книг и блогов

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

Практика и собеседования

  • Лучший способ практиковаться в дизайне систем - это участие в собеседованиях, где интересуются этой областью.
  • Рекомендуется найти кого-то, кому также интересен дизайн системы, и провести тестовое собеседование.
  • Также можно присоединиться к различным сообществам и проектам, где можно обсуждать и практиковаться в дизайне систем.

Заключение

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

Вопросы из зала

Обзор раздела: В этом разделе рассказывается о возможности задавать вопросы после доклада.

Задавание вопросов

  • После доклада есть возможность задать вопросы спикеру.
  • Можно задать конкретный вопрос или запросить помощь в выполнении задачи на работе.

Заключение

  • Возможность задавать вопросы после доклада позволяет получить дополнительную информацию и помощь от спикера.

Обсуждение дизайн системы

Обзор раздела: В этом разделе обсуждается, какую дизайн систему выбрать и как извлечь полезный опыт из книги "Кабанчик".

Выбор дизайн системы

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

Дальнейшее обсуждение

  • Предлагается продолжить обсуждение в дискуссионной группе для более подробного анализа.
Video description

Подробнее о Java-конференциях: — весной — JPoint: https://jrg.su/gTrwHx — осенью — Joker: https://jrg.su/h7yvG4 — — System Design давно и прочно вошел в практику собеседований в популярные западные компании и стартапы. Сейчас этот вид собеседований начинают активно применять крупные российские компании — здесь его называют архитектурной секцией, или дизайном систем. System Design позволяет оценить навыки кандидатов уровня senior и выше по части практического опыта, общих знаний и технологического кругозора, а также умения проектировать сервисы и работать с требованиями. Неудивительно, что в последнее время опытные разработчики активно интересуются дизайном систем: это видно и по коллегам-разработчикам, и по чатам, и по собеседованиям, и по различным «книжным клубам». Вот только для прохождения собеседования недостаточно просто прочитать популярную «книжку с кабанчиком» — матерых теоретиков интервьюер сразу разглядит на собеседовании. В докладе Владимир раскроет принципы, по которым строятся собеседования по System Design в Big Tech, и даст рекомендации, которые помогут кандидатам успешно пройти этот раунд. Эти знания пригодятся разработчикам и в работе, особенно если они занимаются высоконагруженными проектами. ЦА: разработчики уровня senior/lead с бэкграундом в бэкенд-разработке, которые хотят прокачать скилл проектирования систем и интересуются собеседованиями в Big Tech компании из РФ и Запада. Презентация к докладу: https://squidex.jugru.team/api/assets/srm/a9e2ee88-4b5b-4315-8163-226fe8a555ef/vladimir-maslov.pdf