Подборка вопросов

Highload на собеседовании

Вопросы, которые задают в крупных компаниях: что происходит с сервисом под нагрузкой и почему. Каждая тема опирается на основы — очереди на законе Литтла, consistent hashing на хеш-таблице, LSM на сортировке слиянием. Очереди, балансировку, кольцо хешей, ограничители частоты, LRU и фильтр Блума можно покрутить руками.

35вопросов
20Middle
15Senior
  1. 01Почему время ответа измеряют перцентилями, а не средним?

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

    Middle
  2. 02Почему при загрузке сервера 90% время ответа растёт в разы, хотя запас ещё есть?

    Запросы приходят неравномерно, и при высокой загрузке они ждут в очереди. Время ожидания растёт как ρ / (1 − ρ): при 50% загрузки ожидание равно времени обработки, при 90% — в 9…

    Middle
  3. 03Какие алгоритмы балансировки нагрузки вы знаете и когда какой лучше?

    Round robin — по кругу, хорош при одинаковых серверах и запросах. Least connections / least requests — тому, у кого меньше активных, учитывает медленные запросы и серверы. Power…

    Middle
  4. 04Как работает consistent hashing и зачем нужны виртуальные узлы?

    Ключи и узлы хешируются на одно кольцо; ключ принадлежит первому узлу по часовой стрелке. При добавлении или удалении узла переезжает только ~1/N ключей, а не почти все, как при…

    Middle
  5. 05Какие алгоритмы ограничения частоты запросов вы знаете?

    Token bucket — ведро на B жетонов пополняется со скоростью R; запрос забирает жетон, нет жетона — отказ. Допускает всплески до B, в среднем не больше R.

    Middle
  6. 06Что такое backpressure и как его реализовать?

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

    Middle
  7. 07Как устроен LRU-кэш и какие ещё бывают политики вытеснения?

    LRU выбрасывает то, к чему дольше всего не обращались. O(1) на операцию даёт пара хеш-таблица + двусвязный список: таблица находит узел, список хранит порядок использования.

    Middle
  8. 08Что такое фильтр Блума и где он применяется?

    Битовый массив и k хеш-функций. Добавление — выставить k бит; проверка — все k бит выставлены? Ответ «точно нет» или «возможно есть».

    Middle
  9. 09Почему удвоение числа серверов не удваивает пропускную способность?

    Масштабируется только параллельная часть работы. Закон Амдала: если 5% работы последовательны, ускорение не превысит 20× при любом числе узлов. А координация между узлами…

    Senior
  10. 10Как один сервер держит сотни тысяч одновременных соединений?

    Модель «поток на соединение» упирается в память стеков и переключения. Решение — неблокирующие сокеты + epoll: один поток спрашивает ядро «какие из 100 000 сокетов готовы?» и…

    Senior
  11. 11Как оценить, насколько кэш разгружает базу, и что будет, если он упадёт?

    Нагрузка на базу = поток × доля промахов. Рост hit ratio с 90% до 99% снижает нагрузку на базу в 10 раз. Обратная сторона: если база рассчитана только на промахи, падение кэша …

    Middle
  12. 12Зачем нужен пул соединений к базе и как выбрать его размер?

    Установка соединения — TCP, TLS, аутентификация, а в PostgreSQL ещё и новый процесс: миллисекунды и память. Пул держит готовые соединения и ограничивает их число.

    Middle
  13. 13Как в кластере выбирают лидера и что такое split brain?

    Лидером может стать только узел, за которого проголосовало большинство. Два большинства всегда пересекаются, поэтому в одном «сроке» (term) не бывает двух лидеров — это защищает…

    Senior
  14. 14Как найти самые популярные элементы в бесконечном потоке событий?

    Count-min sketch — таблица d × w счётчиков и d хеш-функций: при событии увеличиваем по одному счётчику в каждой строке, оценка частоты — минимум из d счётчиков. Только завышает, с…

    Senior
  15. 15Спроектируйте мессенджер с личными и групповыми чатами.

    Клиенты держат постоянное соединение (WebSocket) с шлюзами; сообщение пишется в хранилище, шардированное по chat_id, получает порядковый номер в чате и доставляется…

    Senior
  16. 16Спроектируйте распределённый rate limiter для публичного API.

    Состояние лимита — в общем быстром хранилище (Redis), проверка и списание — атомарно одним скриптом (Lua) или командой. Лимитер — в шлюзе или сайдкаре, до бизнес-логики.

    Senior
  17. 17Спроектируйте ленту новостей социальной сети.

    Главный выбор — когда собирать ленту. Fan-out on write: при публикации положить id поста в ленты всех подписчиков — чтение мгновенное. Fan-out on read: собирать при открытии из…

    Senior
  18. 18Спроектируйте сервис «топ-100 популярных запросов» за последний час и за день.

    Две дорожки: быстрая приближённая — потоковые агрегаторы считают топ по минутным окнам (count-min sketch + куча или Space-Saving) и сливают в топ за час; медленная точная …

    Senior
  19. 19Как генерировать уникальные идентификаторы в распределённой системе?

    Варианты: автоинкремент (просто, но одна точка и угадываемость), UUIDv4 (без координации, но случайный — плохо для B-дерева), UUIDv7 / Snowflake (время в старших битах — почти…

    Middle
  20. 20Спроектируйте сервис коротких ссылок.

    Чтений в 100 раз больше записей: редирект из кэша за миллисекунды, код — base62 от уникального числа (счётчик с выдачей диапазонов или Snowflake), хранилище key-value с…

    Middle
  21. 21Спроектируйте счётчик просмотров для видео с миллионами просмотров в минуту.

    Не делать UPDATE views = views + 1 на каждый просмотр: одна строка вирусного видео станет узким местом. События — в очередь, счётчики — агрегировать пачками в памяти и сбрасывать…

    Middle
  22. 22Как балансировщик понимает, что экземпляр сервиса нездоров?

    Активные проверки — балансировщик сам опрашивает /health; пассивные — следит за ошибками и задержками реальных запросов и выкидывает выбросы (outlier detection).

    Middle
  23. 23Что делать с горячими ключами, на которые приходится непропорционально большая нагрузка?

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

    Senior
  24. 24Как посчитать число уникальных посетителей за день при миллиардах событий?

    Точный подсчёт требует хранить все уникальные id. HyperLogLog оценивает их число с ошибкой ~0,8%, используя 12 КБ на любое количество — от тысячи до миллиардов.

    Senior
  25. 25Чем балансировщик L4 отличается от L7?

    L4 видит только IP и порты и распределяет соединения: быстро, дёшево, не понимает содержимого. L7 разбирает HTTP и распределяет запросы: маршрутизация по пути и заголовкам, TLS…

    Middle
  26. 26Как сервису пережить нагрузку выше его возможностей?

    При перегрузке лучше быстро отказать части запросов, чем медленно обслуживать все: иначе очереди растут, все запросы опаздывают, клиенты повторяют, и пропускная способность падает…

    Senior
  27. 27Какие проблемы бывают с Redis под высокой нагрузкой?

    Команды Redis выполняются в одном потоке — одна медленная команда (KEYS, большой HGETALL, долгий Lua) задерживает всех. Отсюда главные правила: не трогать большие структуры…

    Senior
  28. 28Пользователь сохранил изменения, обновил страницу — а изменений нет. Что происходит и как это исправить?

    Запись ушла в лидера, а чтение — на асинхронную реплику, которая ещё не догнала. Это нормальное поведение асинхронной репликации; приложение должно давать нужные гарантии само.

    Middle
  29. 29Какие бывают схемы репликации и чем они отличаются?

    С одним лидером — все записи через лидера, реплики повторяют его журнал. С несколькими лидерами — запись в любом дата-центре, конфликты разрешаются потом. Без лидера — клиент…

    Middle
  30. 30Как перешардировать данные без простоя?

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

    Senior
  31. 31Как выбрать ключ и стратегию шардирования?

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

    Middle
  32. 32Чем синхронная репликация отличается от асинхронной и что выбрать?

    Синхронная — лидер подтверждает запись, когда реплика её сохранила: потерь при падении лидера нет, но задержка записи растёт, а отказ реплики может остановить запись. Асинхронная…

    Middle
  33. 33Как бороться с хвостовыми задержками в распределённой системе?

    Хвосты неизбежны: сборка мусора, фоновые задачи, соседи по машине, переключения. При fan-out они становятся нормой. Главные приёмы — не ждать медленного: дублирующие запросы…

    Senior
  34. 34Как правильно настраивать таймауты и повторы запросов?

    Таймаут у каждого сетевого вызова — по p99.9 зависимости, а не «по умолчанию». Повторы — только идемпотентных операций, с экспоненциальной отсрочкой и джиттером, ограниченным…

    Middle
  35. 35Что такое zero-copy и почему Kafka так быстро отдаёт данные?

    Обычная отдача файла: диск → page cache → буфер приложения → буфер сокета → сеть: 4 копирования и 4 переключения режима. sendfile передаёт данные из page cache в сокет внутри ядра…

    Senior
Партнёр платформы

Разбор собеседования с sotto

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

Разбор собеседования