Плейбук по собеседованию System Design
System Design означает планирование крупной программной системы — того, как все части сочетаются друг с другом, чтобы обслуживать множество пользователей. В этом уроке мы шаг за шагом отрабатываем, как подходить к вопросу собеседования на эту тему. Мы научимся определять требования (что система долж
System Design похож на планирование целого города: дороги, которые несут поток машин, склады, где всё хранится, светофоры, которые поддерживают порядок движения, и ремонтные бригады, которые устраняют проблемы, — и всё для того, чтобы город продолжал работать гладко даже в час пик, когда все выходят одновременно.
- Требования и объём
- Ключевой навык этого урока: прежде чем проектировать систему, вы проясняете, что она должна делать (требования), что входит и что не входит (объём), какие допущения вы делаете и как выстроить чёткий ответ. Это как принять полный заказ в ресторане, прежде чем начать готовить.
- Компромисс
- Осознанный выбор между двумя вариантами, где у каждого есть плюс, но и своя цена. Идеального ответа нет — вы выбираете то, что подходит, и объясняете интервьюеру, что выигрываете и чем жертвуете. Как выбор между быстрым дорогим маршрутом и дешёвым медленным.
- Эксплуатационная метрика
- Число, которое можно измерить, чтобы понять, действительно ли решение работает, когда система запущена и обслуживает реальных пользователей (продакшен). Например: задержка (сколько времени занимает ответ), доля ошибок (доля запросов, которые завершаются неудачей), отставание очереди (сколько задач стоит в очереди), доля попаданий в кэш (как часто ответ уже готов в быстром временном хранилище) и другие.