Мок-собес · 27 августа 2026

Систем-дизайн: сервис бронирования авиабилетов

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

Длительность

57 мин уложились в час, не успели два блока

Фаз в собесе

11 от границ скоупа до фидбэка

Тем на подготовку

16 блоки A–P

Условия задачи — это не фон, а список будущих вопросов

Пять дополнительных условий в постановке — заготовленные крючки. Каждое из них интервьюер разворачивает в отдельный deep dive. Проговорить их вслух в начале и вернуться к каждому по ходу.

01

Структура собеса

Таймкоды — из записи. Бюджет — рекомендованный на час

1
00:00–00:01

Условие и границы скоупа

Прочитать задачу вслух и сразу отсечь лишнее: «Мы проектируем только пользовательскую часть? Кабинет авиакомпании и менеджера не трогаем?» Первое, что оценивают, — не бросился ли кандидат проектировать всё сразу.

2–3 мин
2
в условии

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

Выписать пользовательский флоу списком и держать на виду. По ходу собеса возвращаться к нему и вычёркивать закрытые пункты — в записи это делалось трижды и работало.

3–5 мин
3
00:01–00:08

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

Ядро первой трети. Спрашивает кандидат, интервьюер отвечает как продакт. Здесь закладываются все дальнейшие решения — каждое НФТ потом должно всплыть как обоснование технологии.

7–8 мин
4
00:08–00:14

Расчёт нагрузки

Считать вслух: 1000 DAU × 10 запросов ÷ 100 000 с ≈ 0,1 RPS, трафик ≈ 2 МБ/с. Здесь стоял главный капкан собеса — средний RPS против пикового. Сошлись на 1000 RPS в пике.

4–5 мин
5
00:14–00:31

Верхнеуровневая архитектура

Схема поблочно с проговариванием: клиент → CDN → балансировщик → SSR-ноды → API Gateway → микросервисы поиска и фильтрации → Redis → Postgres, отдельно Payment-сервис во внешнюю платёжную систему.

10–12 мин
6
00:31–00:38

Выбор технологий

Каждая технология — только вместе с «почему». Прозвучало: SSR ради SEO, React из-за рынка найма при росте команды, RTK в хосте и Context с React Query в микрофронтах, Module Federation, Nginx, TypeScript.

5–7 мин
7
00:38–00:45

Архитектура фронтенда

Отдельный запрос интервьюера: компоненты, страницы, слои. Ответ — FSD и слоистая структура плюс разнесение страниц: поиск на SSR, детальная карточка и оплата на клиенте.

5–7 мин
8
00:45–00:47

Безопасность

Коротко и списком: CSP против XSS, HTTPS, токены против CSRF, CDN как щит от DDoS. Блок небольшой, но его отсутствие замечают.

2–3 мин
9
00:47–00:50

API и сущности

GET на поиск, GET на фильтрацию (интервьюер подводит к тому, что их надо объединить), GET на детальную карточку, POST на оплату. JSON поверх HTTPS, между микросервисами gRPC. Сущности не успели.

5–7 мин
10
00:50–00:56

Deep dive по узкому месту

Интервьюер берёт одно из условий и давит вглубь: «API отвечает 10 секунд, первые результаты готовы за 500 мс». Раскрутка шла четырьмя слоями — ленивая подгрузка, виртуализация, пагинация, стриминг. Ответ, к которому вели: Server-Sent Events.

8–10 мин
11
00:56–00:57

Закрытие

Что не успели, вопросы кандидата, договорённость о фидбэке.

2 мин

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

Десять пунктов за семь минут — рабочий темп. Справа — ответ интервьюера.

  1. DAU 1000
  2. Частота на пользователя 10 в день
  3. География несколько стран
  4. Сезонность нет
  5. Платформы Chrome + mobile
  6. SEO нужен
  7. Безопасность нужна
  8. Дизайн свой, кит обсуждаем
  9. Стадия MVP + рост
  10. Авторизация вне скоупа
02

Вопросы

Жирным — то, что реально прозвучало в записи

Спрашивает кандидат

Сбор требований

Молчаливый кандидат на систем-дизайне проигрывает по умолчанию. Эти вопросы задают в первые десять минут.

Скоуп

  • Проектируем только пользовательскую часть или ещё кабинеты авиакомпаний?
  • Нужна ли авторизация и личный кабинет с историей бронирований?
  • Платёжная система своя или сторонняя?
  • Мобильное приложение в скоупе или только веб?

Нагрузка и рост

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

География и локализация

  • Один город, страна или несколько стран?
  • Разные валюты, языки, часовые пояса?
  • Где физически пользователи — от этого зависят регионы CDN?

Платформы и качество

  • Какие браузеры поддерживаем, какая минимальная версия?
  • Доля мобильного трафика? Мобильный веб или PWA?
  • Нужны ли требования по доступности?
  • Есть ли целевые метрики скорости — Core Web Vitals, TTFB?

Продукт и команда

  • Нужна ли SEO-индексация страниц поиска и направлений?
  • Свой дизайн или готовый UI-кит?
  • Размер фронтенд-команды и сроки?
  • Есть ли легаси, с которым надо жить?

Данные

  • Кто владелец данных о рейсах — свои агрегаторы или внешние провайдеры?
  • Насколько часто меняется цена и доступность?
  • Какое допустимое время устаревания данных в кэше?

Спрашивает интервьюер

Проверка глубины

Вопросы идут не по списку, а по слабым местам того, что кандидат нарисовал и произнёс.

Прозвучало в этой записи

  • Ты посчитал 1 RPS. А если все 1000 активных пользователей придут одновременно?
  • Поиск и фильтрация — это два разных микросервиса?
  • Почему ты выбрал SSR? Мы это не обсудили.
  • Почему React, а не что-то другое?
  • Проект будет расти — в чём тогда минусы Context как хранилища?
  • А архитектура на фронте? Компоненты, страницы, слои?
  • Какие страницы рендерим на сервере, какие на клиенте и почему?
  • Чем отличается запрос на получение и на фильтрацию? Их можно объединить?
  • Запрос идёт 10 секунд, первый результат готов за 500 мс. Ждёшь все 10?
  • Чем будешь догружать остальные результаты?
  • Как работает виртуализация, по какому принципу?
  • Каким образом бэкенд вернёт часть данных? По какому принципу вторая часть?
  • Чтобы отдать страницу пагинации, бэк всё равно сходит в БД за всей тысячей — снова 10 секунд. Как быть?

Не успели, но задают на таком же собесе

  • Цена изменилась, пока пользователь заполнял данные пассажиров. Что показываем?
  • Пользователь нажал «оплатить» дважды. Как не спишем деньги дважды?
  • Как связать фильтры и URL, чтобы результат можно было переслать ссылкой?
  • Что рендерим для поисковых роботов, если данные генерируются под запрос?
  • Как кэшируешь результаты поиска, если цена живёт минуты?
  • Сервис авиакомпании недоступен — падаем целиком или деградируем?
  • Как измеряешь, что стало быстрее? Какие метрики снимаешь?
  • Какие сущности и какая модель данных на фронте?
  • Как организуешь работу нескольких команд в одной кодовой базе?

Вопросы кандидата в конце

  • Как у вас реально проходит проектирование — есть дизайн-ревью, RFC?
  • Кто принимает решение по выбору технологий?
  • Какие узкие места сейчас в вашей системе?
03

Где просели

Семь мест, каждое с готовым исправлением

08:11

Средний RPS вместо пикового

Посчитал 0,1 RPS и остановился. Интервьюер: «Тысяча активных может сделать запрос одновременно — у тебя всё упадёт».

Как надоВсегда два числа: средний RPS и пиковый с коэффициентом на всплеск — рассылка, акция, утро понедельника.

32:35

Технологии без обоснования

SSR появился на доске молча, «почему» прозвучало только после прямого вопроса интервьюера.

Как надоКаждый блок схемы проговаривать формулой «беру X, потому что требование Y».

09:38

Бандл на 20 МБ

Цифра взята на глаз и утянула за собой весь расчёт трафика. Для такого сервиса реалистичный ориентир — сотни килобайт на первый экран.

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

33:51

Микрофронты в MVP

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

Как надо«На старте монолит, готовый к выделению микрофронтов. Граница, по которой режу, — больше двух команд».

51:32

Не дожал прогрессивную выдачу

Главный deep dive: перебрал ленивую подгрузку, виртуализацию и пагинацию, но до стриминга не дошёл — SSE назвал сам интервьюер.

Как надоБэкенд отдаёт результаты порциями по мере готовности через Server-Sent Events, фронт дорисовывает список.

56:41

Тайм-менеджмент

17 минут на верхнеуровневую схему — в итоге не успели ни API целиком, ни сущности, ни Web Vitals.

Как надоВслух объявлять бюджет: «на схему беру 10 минут, дальше иду в API».

15:23

Доска не синхронизировалась

Несколько минут ушло на «ты видишь квадратик?» — рисунок не долетал до собеседника.

Как надоПроверять инструмент до начала и при первом же сбое переключаться на демонстрацию экрана.

04

Темы на подготовку

Шестнадцать блоков — под материалы базы знаний

A

Методология систем-дизайна

Функциональные и нефункциональные требования, чек-лист вопросов, расчёт DAU → RPS → трафик, средний против пикового, оценка размера бандла, MVP против масштабирования, как вести доску и держать время.

B

Рендеринг

CSR, SSR, SSG, ISR и когда что. Потоковый SSR и Suspense, гидратация и её виды, React Server Components, Next.js и Remix, TTFB, FCP, LCP, выбор стратегии на каждую страницу.

C

Сеть, CDN, кэширование

CDN и edge, регионы. HTTP-кэш: Cache-Control, ETag, stale-while-revalidate. Слои кэша от клиента до Redis, инвалидация. Балансировщики и алгоритмы: round-robin, least connections, sticky sessions. Nginx.

D

Проектирование API

REST-дизайн ресурсов, объединение поиска и фильтрации, пагинация offset против cursor и keyset, сортировка и фильтры в query, идемпотентность и идемпотентные ключи для оплаты, версионирование, GraphQL, gRPC, паттерн BFF.

E

Прогрессивная выдача и реалтайм

Server-Sent Events, WebSocket, long polling, HTTP chunked и потоковые ответы, стриминг разметки. Когда что выбирать и чем платишь за каждый вариант.

F

Большие списки на фронте

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

G

Состояние и клиентский кэш

React Query и SWR: staleTime, инвалидация, рефетч, дедупликация. RTK и RTK Query, границы применимости Context, когда серверный кэш заменяет глобальный стор, нормализация данных.

H

Архитектура фронтенда

FSD и слоистые архитектуры, микрофронтенды и Module Federation, границы разрезания и цена решения, монорепозитории, дизайн-система, критерии перехода от монолита.

I

Изменяющиеся данные

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

J

Безопасность фронтенда

XSS и Content Security Policy, CSRF и токены, HTTPS и HSTS, cookie и SameSite, хранение токенов, защита от DDoS и ботов, что означает PCI DSS для фронта, персональные данные пассажиров.

K

Производительность

Core Web Vitals, разделение бандла и ленивые чанки, preload, prefetch, preconnect, оптимизация изображений и форматы, шрифты, бюджет производительности, профилирование React.

L

Мультистрановость

i18n и подходы к переводам, валюты и форматирование, часовые пояса и время вылета, поддомены против подпапок, hreflang и региональный SEO, юридические различия по странам.

M

SEO для SPA

Индексация клиентского рендеринга, SSR и пререндер, метатеги и Open Graph, sitemap и robots, микроразметка Schema.org, посадочные страницы направлений.

N

Надёжность и деградация

Таймауты, ретраи и экспоненциальная задержка, circuit breaker, graceful degradation при недоступном провайдере, error boundaries, фолбэки и заглушки, обработка частичных ответов.

O

Наблюдаемость

RUM и синтетика, Sentry и трекинг ошибок, логи и трассировка на фронте, продуктовые метрики, A/B-эксперименты и фичефлаги.

P

Адаптивность и доступность

Desktop и mobile в одном приложении, responsive против adaptive, тач-интерфейсы, клавиатурная навигация, семантика и ARIA для списка результатов и панели фильтров.