Вопросы для собеседования тимлида
Готовый набор для интервьюера: 36 вопросов с тезисами эталонного ответа, практический кейс, рубрика и план встречи.
На собеседовании тимлида хорошо работает схема на 60 минут: 3-4 устных вопроса по стеку, практический кейс, проектирование для middle и выше и вопросы кандидата. Ниже вопросы по грейдам из базы Техпрогона: у каждого тезисы, которые должен назвать сильный кандидат.
Всего в базе по этой роли 223 устных вопросов с чек-листом ответа.
Как построить техсобес на 60 минут
0-5 мин
Знакомство
Кто вы, формат встречи, кандидат коротко о себе и последнем проекте.
5-20 мин
Вопросы по стеку
3-4 устных вопроса из набора ниже. Сверяйте ответ с тезисами.
20-45 мин
Практический кейс
Ситуация из работы. Важно, как кандидат рассуждает и что уточняет.
45-55 мин
Проектирование
Для middle и выше: система или решение целиком. Для junior: ещё вопросы.
55-60 мин
Вопросы кандидата
Что спросил кандидат, тоже сигнал: интерес к задачам и команде.
Junior: 12 вопросов
Основы: как устроено и зачем. Хватит 3-4 вопросов на встречу.
Расскажите, как вы проводите встречи один на один с командой.
Что хотим услышать
- Частота и длительность, кто ведёт повестку
- Темы: проблемы, развитие, обратная связь, а не статус
- Общий документ с повесткой и договорённостями
- Регулярность: не отменять, переносить
- Пример, как 1:1 помогла заметить проблему рано
Если ответил, копните глубже
Объясните разницу между вертикальным и горизонтальным масштабированием и когда что выбирать.
Что хотим услышать
- Вертикальное: мощнее машина, код не меняется, есть предел и единая точка отказа
- Горизонтальное: больше узлов, нужен stateless или распределённое состояние
- Stateless-сервисы приложения масштабируют горизонтально в первую очередь
- БД часто сначала масштабируют вертикально и репликами, шардирование позже
- Горизонтальное даёт отказоустойчивость, но добавляет сложность
Если ответил, копните глубже
Перед тобой код на ревью. Скажи вслух, что здесь не так - по убыванию важности. Читай вслух, как на ревью: сначала что делает код, потом что сломано.
Что хотим услышать
- debounce создаётся заново на каждом рендере - откладывание не работает
- нужен useMemo или useRef, чтобы функция пережила рендер
- нет отмены отложенного вызова при размонтировании
- q не экранирован через encodeURIComponent
- нет отмены предыдущего запроса - остаётся гонка
- проще перенести задержку в эффект с зависимостью от value
Если ответил, копните глубже
Назовите ваши сильные стороны.
Что хотим услышать
- Две-три стороны, а не список из десяти
- Каждая подкреплена примером
- Стороны связаны с вакансией
- Нет пустых слов вроде «стрессоустойчивый, коммуникабельный» без доказательств
- Уверенно, без хвастовства
Если ответил, копните глубже
Что вы как тимлид делегируете команде, а что оставляете себе? Приведите примеры.
Что хотим услышать
- Делегирую развивающее: архитектура модулей, демо, разбор инцидентов
- Делегирую повторяющееся: релизы, дежурства, отчёты
- Оставляю кадровое: оценки, зарплаты, увольнения
- Ответственность за результат остаётся у меня
- Пример, как делегирование вырастило человека или сняло узкое место
Если ответил, копните глубже
Зачем в системе очередь сообщений? Приведите примеры.
Что хотим услышать
- Асинхронность: пользователь не ждёт долгой работы
- Сглаживание пиков: очередь копит, консьюмеры разбирают
- Развязка сервисов: продюсер не знает о получателях
- Ретраи при временных сбоях получателя
- Цена: eventual consistency, дубли, мониторинг отставания
Если ответил, копните глубже
Перед тобой код на ревью. Скажи вслух, что здесь не так - по убыванию важности. Читай вслух, как на ревью: сначала что делает код, потом что сломано.
Что хотим услышать
- сокет не закрывается - нет функции очистки, утечка на каждом монтировании
- roomId не в зависимостях - при смене комнаты подписка остаётся на старой
- setMessages читает messages из замыкания - всегда пустой массив, сообщения затирают друг друга
- нужна функциональная форма setMessages((prev) => [...prev, msg])
- у li нет key
- нет обработки ошибок сокета и разрыва соединения
Если ответил, копните глубже
Какие у вас слабые стороны?
Что хотим услышать
- Назвал реальную слабость, а не штамп
- Слабость не критична для роли
- Рассказал, что делает, чтобы её компенсировать
- Есть пример прогресса
- Коротко, без самобичевания
Если ответил, копните глубже
Расскажите, как вы помогли кому-то в команде вырасти.
Что хотим услышать
- Исходная точка человека и его цель
- Как определили разрыв и цели
- Какие задачи, менторство и обратную связь дали
- Сложности по пути и как с ними справились
- Результат: новый уровень, роль, конкретные достижения
Если ответил, копните глубже
Перед тобой код на ревью. Скажи вслух, что здесь не так - по убыванию важности. Читай вслух, как на ревью: сначала что делает код, потом что сломано.
Что хотим услышать
- ошибка проглатывается и превращается в null - вызывающий код падает на result.id
- нет проверки res.ok: 500 не попадёт в catch
- console.log вместо отправки в мониторинг
- пользователь не узнает, что заказ не сохранился
- повтор отправки может создать второй заказ - нужна идемпотентность
- catch без разбора типа ошибки: сеть, отмена и ошибка сервера смешаны
Если ответил, копните глубже
Перед тобой код на ревью. Скажи вслух, что здесь не так - по убыванию важности. Читай вслух, как на ревью: сначала что делает код, потом что сломано.
Что хотим услышать
- div вместо form и button - нет отправки по Enter, нет клавиатуры, нет доступности
- у полей нет label, type, name и autocomplete; пароль виден
- нет Content-Type: application/json - сервер не разберёт тело
- нет проверки ответа: редирект произойдёт и при неверном пароле
- нет обработки ошибки сети и блокировки кнопки на время запроса
- alert вместо сообщения рядом с полем
Если ответил, копните глубже
Перед тобой код на ревью. Скажи вслух, что здесь не так - по убыванию важности. Читай вслух, как на ревью: сначала что делает код, потом что сломано.
Что хотим услышать
- key по индексу - при удалении состояние полей съезжает на соседние
- нужен стабильный key из данных - todo.id
- defaultValue делает поле неконтролируемым, изменения никуда не сохраняются
- onRemove принимает индекс, а не идентификатор - ломается при сортировке и фильтрации
- у кнопки нет доступного имени - символ × скринридер не прочитает
- нет обработки пустого списка
Если ответил, копните глубже
Middle: 12 вопросов
Практика: почему так, какие компромиссы, что ломается.
Продакт приносит всё новые фичи, а команда жалуется, что каждая задача тонет в легаси, и релизы постоянно ломаются. Что вы сделаете?
Что хотим услышать
- Собрать данные: где тормозим, откуда инциденты, сколько времени уходит на починки
- Перевести на язык бизнеса: сроки, деньги, риски
- Составить регистр долга с ценой и стоимостью исправления, выбрать главное
- Договориться с продактом о постоянной доле ёмкости на долг
- Встраивать рефакторинг в фичи, которые трогают проблемный код
- Показывать эффект: lead time, инциденты, и пересматривать долю
Если ответил, копните глубже
Расскажите, по какому плану вы будете вести секцию system design на 60 минут.
Что хотим услышать
- Начинаю с уточнения функциональных требований и явно фиксирую, что не делаем
- Уточняю нефункциональные требования: масштаб, задержка, доступность, консистентность
- Делаю грубую оценку RPS и объёмов и использую её в решениях
- Описываю API и модель данных, выбираю хранилище под паттерн доступа
- Рисую высокоуровневую схему и прохожу по ней путь запроса
- Оставляю время на узкие места, отказы, масштабирование и мониторинг
Если ответил, копните глубже
Сравни CSR, SSR, SSG и ISR. Когда что выберешь?
Что хотим услышать
- CSR: пустой HTML, всё в браузере, дёшево, плохо для SEO и первого экрана; для кабинетов
- SSR: HTML на каждый запрос, свежие данные и SEO, нагрузка на сервер и TTFB
- SSG: HTML при сборке, CDN, самый быстрый, данные устаревают
- ISR: статика с фоновой пересборкой, компромисс скорости и свежести
- Гидрация нужна после SSR и SSG, до неё страница не интерактивна
- Пример выбора по типам страниц одного продукта
Если ответил, копните глубже
Почему вы ищете новую работу?
Что хотим услышать
- Причина через цель, а не через бегство
- Ни слова негатива о текущем работодателе
- Показано, что на текущем месте был рост и результаты
- Связка с этой вакансией
- Коротко: до минуты
Если ответил, копните глубже
Мидл приходит и говорит, что давно работает как сеньор и хочет повышения. Вы так не считаете. Ваши действия.
Что хотим услышать
- Выслушать: какие примеры он приводит, как понимает ожидания
- Сравнить с матрицей компетенций на конкретных примерах
- Честно назвать разрыв: что именно не хватает
- Составить план: стретч-задачи, срок пересмотра, критерии
- Поддерживать и сверяться на 1:1, при выполнении продвигать повышение
Если ответил, копните глубже
Какие стратегии кеширования вы знаете и как выбрать подходящую?
Что хотим услышать
- Cache-aside: приложение само читает и заполняет кеш, самый частый вариант
- Read-through: кеш-слой сам загружает данные при промахе
- Write-through: синхронная запись в кеш и БД, свежий кеш, медленнее запись
- Write-behind: асинхронная запись в БД, быстро, риск потери
- Выбор зависит от соотношения чтения и записи и цены устаревших данных
Если ответил, копните глубже
Как ты проводишь код-ревью? На что смотришь в первую очередь?
Что хотим услышать
- Сначала понимаю задачу и читаю описание PR
- Порядок: корректность и краевые случаи, безопасность, архитектура, производительность, читаемость, тесты
- Стиль оставляю линтеру и форматтеру
- Комментарии про код, а не про человека, с объяснением почему и предложением
- Помечаю важность: блокирующее или nit
- Отмечаю удачные решения, отвечаю быстро
Если ответил, копните глубже
Почему вы считаете себя middle-разработчиком?
Что хотим услышать
- Показал самостоятельность: вёл задачу сам от требований до прода
- Привёл пример фичи, которую довёл целиком
- Упомянул работу с неясными требованиями
- Есть результат с цифрой
- Не завысил и не принизил себя
Если ответил, копните глубже
Вам нужно нанять трёх бэкенд-разработчиков за квартал, процесса найма в команде нет. Как вы его выстроите?
Что хотим услышать
- Профиль позиции: проблема, задачи на полгода, обязательные навыки, грейд и вилка
- Этапы и что проверяет каждый: скрининг, техника, system design или кейс, финал
- Рубрики и подготовка интервьюеров, независимые отзывы
- Воронка и конверсии: сколько откликов нужно, где искать, роль рекрутера
- Сроки обратной связи кандидатам и опыт кандидата
- Разбор после найма: что сработало, где провал в воронке
Если ответил, копните глубже
Объясните CAP-теорему на практическом примере.
Что хотим услышать
- Три свойства: консистентность (линеаризуемость), доступность, устойчивость к разделению
- Разделение неизбежно, выбор CP или AP делается в момент разделения
- Пример CP: система с лидером и кворумом отказывает в записи без большинства
- Пример AP: корзина или лайки принимают запись, позже сливают
- C в CAP не равна C в ACID; PACELC про задержку в нормальном режиме
Если ответил, копните глубже
Расскажи, что такое Feature-Sliced Design и как в нём устроен проект.
Что хотим услышать
- Три уровня: слои, слайсы, сегменты
- Слои сверху вниз: app, pages, widgets, features, entities, shared
- Импорт только из нижележащих слоёв, слайсы одного слоя не импортируют друг друга
- Публичный API слайса через index.ts, без глубоких импортов
- Фича = действие пользователя, сущность = объект предметной области
- Правила проверяются линтером (Steiger)
Если ответил, копните глубже
Джун выкатил миграцию, которая уронила прод на 40 минут. Что вы сделаете во время инцидента и после?
Что хотим услышать
- Во время: организовать реагирование, откат, статус, без поиска виноватых
- Поддержать джуна: он, скорее всего, в стрессе
- После: blameless-разбор, почему миграция смогла уронить прод
- Системные действия: проверка миграций, стенд, ревью, откатываемость
- Задачи с ответственными и сроками, контроль выполнения
- Разговор с джуном: что вынес, без наказания
Если ответил, копните глубже
Senior: 12 вопросов
Глубина и опыт: границы подходов, решения в продакшене.
Два сеньора неделю спорят, как делать новый сервис, блокируют PR друг друга, команда ждёт. Что вы сделаете?
Что хотим услышать
- Поговорить с каждым отдельно: аргументы, интересы, что важно
- Вывести спор из PR в отдельное обсуждение с критериями решения
- Сравнить варианты по критериям: риски, сроки, поддержка; при необходимости прототип с таймбоксом
- Если согласия нет, принять решение самому или через архитектора и объяснить
- Зафиксировать решение в ADR, договориться о правилах на будущее
Если ответил, копните глубже
Спроектируйте мессенджер с личными и групповыми чатами, доставкой в реальном времени и историей.
Что хотим услышать
- Требования: личные и групповые чаты до 1 000 участников, доставка онлайн и офлайн (push), история, статусы «доставлено» и «прочитано»; порядок сообщений в чате; медиа и сквозное шифрование вне рамок
- Оценка нагрузки: 50 млн DAU по 40 сообщений ≈ 2 млрд в сутки ≈ 20 000 RPS записи, в пике ~60 000; 10 млн одновременных соединений, ~100 000 на gateway → ~100 gateway; 2 млрд × 200 байт ≈ 400 ГБ в сутки, ~150 ТБ в год без реплик
- API: WebSocket: send {chat_id, client_msg_id, text}, ack {msg_id}, события new_message, read; HTTP: GET /chats/{id}/messages?before=...
- Данные: чаты и участники в PostgreSQL, сообщения в Cassandra/ScyllaDB с ключом партиции chat_id и сортировкой по msg_id, реестр user_id → gateway в Redis с TTL
- Компоненты: gateway-серверы с соединениями, сервис сообщений (сохранить, присвоить id, разослать), сервис присутствия, push-сервис для офлайн, очередь для фан-аута в группах
- Узкие места: большие группы (фан-аут через очередь), дубли при переотправке (client_msg_id для идемпотентности), переподключения и догрузка пропущенного, горячие чаты, падение gateway
Если ответил, копните глубже
Спроектируй веб-клиент мессенджера как в Telegram Web: список чатов, переписка, отправка текста и фото, статусы «отправлено/прочитано», «печатает». Пройди этапы: требования, оценка нагрузки, API, данные, компоненты, узкие места.
Что хотим услышать
- Требования: список чатов, история, отправка, статусы, «печатает», уведомления, офлайн и плохая сеть
- Оценка: тысячи чатов, длинная история, в групповом чате десятки сообщений в секунду, долгоживущая вкладка
- API: WebSocket для событий (message.new, typing, read), REST для истории с курсором вверх, загрузка файлов отдельно
- Данные: сообщения по чатам с клиентским id, нормализация, IndexedDB для кеша и офлайн-очереди
- Компоненты: ChatList, ChatWindow с виртуализацией в обратном порядке, Composer, MessageBubble
- Узкие места: порядок и дедупликация, переподключение с догрузкой пропущенного, батчинг обновлений, утечки памяти, позиция скролла при подгрузке истории
Если ответил, копните глубже
Вы претендуете на senior. Расскажите о себе.
Что хотим услышать
- Назван масштаб: команда, нагрузка, пользователи или деньги
- Есть решения, которые повлияли дальше своего кода
- Есть метрики результата
- Упомянуто влияние на команду: менторинг, процессы, ревью
- Уложился в 2 минуты, не утонул в деталях
Если ответил, копните глубже
Вы отдали мидлу ведение интеграции с партнёром. За два дня до срока выясняется, что половина не сделана. Что вы сделаете сейчас и потом?
Что хотим услышать
- Сейчас: оценить ущерб и варианты, сообщить стейкхолдерам о риске сразу
- Помочь, а не забрать: вместе приоритизировать, при необходимости подключить людей
- Не искать виноватого при команде
- Потом: разбор с мидлом, что пошло не так: задача, полномочия, синхронизации
- Признать свою часть: где мне нужно было сверяться чаще
- Изменить подход: вехи, ранние сигналы, уровень делегирования
Если ответил, копните глубже
Спроектируйте ленту новостей соцсети: пользователь подписан на других и видит их посты, новые сверху.
Что хотим услышать
- Требования: публикация поста, подписка, лента с пагинацией; порядок по времени (ранжирование вне рамок или упрощённо); лента грузится < 200 мс, допустима задержка появления поста в секунды
- Оценка нагрузки: 100 млн DAU, 10 открытий ленты в день ≈ 10 000 RPS чтения, в пике ~30 000; 10 млн постов в сутки ≈ 100 RPS записи; при 200 подписчиках в среднем ≈ 20 000 вставок в ленты в секунду
- API: POST /posts; GET /feed?cursor=...&limit=20; POST /users/{id}/follow
- Данные: посты в шардированной БД по author_id, граф подписок отдельно, готовые ленты как списки id постов в Redis (последние ~500), медиа в S3
- Компоненты: сервис постов, очередь событий публикации, fan-out воркеры, сервис ленты, кеш постов, CDN для медиа
- Узкие места: аккаунты-звёзды (гибрид on write + on read), неактивные пользователи (не раскладывать, собирать при входе), пагинация курсором, память Redis, удаление и редактирование постов
Если ответил, копните глубже
В команде PR висят на ревью по три дня. Как бы ты это исправил?
Что хотим услышать
- Измерить: время до первого ревью и до мержа, размер PR
- Маленькие PR и стеки PR, шаблон описания
- Автоматизация в CI: линтер, типы, тесты, превью-стенды
- Договорённость о сроке реакции и слоты для ревью в дне
- CODEOWNERS и распределение ревьюеров, чтобы не было узкого горлышка
- Парное программирование для сложных задач
Если ответил, копните глубже
Чем, по-вашему, резюме senior должно отличаться от резюме middle?
Что хотим услышать
- Акцент на масштаб и влияние, а не на список фич
- Метрики бизнес-эффекта
- Лидерство: менторинг, процессы, архитектурные решения
- Компактность: старый опыт свёрнут
- Понимание, что резюме под роль, а не под всё сразу
Если ответил, копните глубже
Сеньор на ревью пишет коллегам резкие комментарии вроде «это бред, перепиши». Двое джунов пожаловались. Как вы дадите ему обратную связь?
Что хотим услышать
- Подготовиться: собрать конкретные примеры комментариев, не пересказывая, кто пожаловался
- Наедине и вскоре, а не на ревью через полгода
- По SBI: ситуация, конкретные комментарии, влияние на джунов и скорость команды
- Спросить его взгляд и причины, выслушать
- Договориться о правилах ревью и конкретном изменении
- Вернуться к теме через 2-3 недели и отметить прогресс
Если ответил, копните глубже
Как вы обосновываете выбор технологии или подхода на секции system design? Приведите пример.
Что хотим услышать
- Называю 2-3 альтернативы, а не одну
- Связываю выбор с требованиями и оценкой нагрузки
- Явно называю цену выбранного варианта
- Говорю, при каком условии решение пересмотрю
- Не называю технологию без причины
Если ответил, копните глубже
Когда ты сознательно оставишь дублирование кода вместо общей абстракции?
Что хотим услышать
- DRY про дублирование знания, а не похожих строк
- Если куски меняются по разным причинам или для разных команд, их лучше не объединять
- Неправильная абстракция обрастает флагами и связывает модули
- Правило трёх: выносить общее, когда паттерн повторился и стабилизировался
- Абстракцию дешевле ввести позже, чем разобрать неудачную
Если ответил, копните глубже
Продакт пообещал клиенту запуск через месяц, а команда оценивает работу в два с половиной месяца. Ваши действия.
Что хотим услышать
- Проверить оценку: декомпозиция, допущения, риски, что можно распараллелить
- Выяснить у продакта, что клиенту действительно нужно к дате
- Подготовить варианты: MVP к дате, полная версия позже, что отрезать
- Обсудить с продактом и при необходимости с руководителем, решение принять вместе
- Зафиксировать договорённость и показывать прогресс еженедельно
- Договориться на будущее: срок клиенту называется после оценки
Если ответил, копните глубже
Практический кейс
Кейс: сеньор срывает сроки и токсичен
Сильный сеньор третий спринт срывает сроки, грубит на ревью и стендапах, двое из команды жалуются. Без него сложно: он знает биллинг лучше всех. Ваши действия.
Эталон, тесты и таймер открываются интервьюеру в живом моке
Рубрика оценки: 1-4 балла
Критерии рассуждения для кейса. Ставьте балл по каждому пункту, сумма показывает картину лучше, чем «понравился или нет».
Уточнил цель и контекст
Для кого, зачем, какие ограничения по срокам и ресурсам
Задал вопросы до решения
Не бросился решать по первому впечатлению
Предложил подход и альтернативы
Назвал 2 варианта и почему выбрал один
Назвал метрики и риски
Как поймёт, что решение сработало, что может пойти не так
Довёл до конкретного плана
Шаги, ответственные, сроки
Опирался на свой опыт
Пример из реальной работы, а не пересказ учебника
Принял возражение и поправился
Без спора ради спора
Мок-собес без регистрации для интервьюера
Хотите проверить кандидата на задаче с эталоном и рубрикой? Так работает живой мок в Техпрогоне.
Кандидат готовится в Техпрогоне и на задаче открывает ступень «Живой мок».
Он присылает вам ссылку. Вы открываете её без регистрации.
У вас условие, эталон, рубрика, уточняющие вопросы и таймер.
Вы ставите оценки и вердикт, кандидат сразу видит результат.
Для интервьюера бесплатно. Ссылку создаёт кандидат на тарифе Рывок
Наборы для других ролей
Готовитесь к собесу сами? Подготовка к собеседованию: Тимлид / руководитель