✻ Урок 13.4 · Тема 13: Финал: работа и собеседования
Пробное собеседование: инженер по нагрузочному тестированию
Содержание урока
Зачем это нужно
Я твой опытный коллега, и расскажу про своё первое собеседование. Я знал материал, но когда спросили «что такое p95», у меня во рту пересохло, и я выдал мешанину из трёх определений. Знать и уметь объяснить вслух, на время, под взглядом незнакомца это два разных навыка.
Урок тренирует ответ вслух: короткий, структурный, с цифрой. Ты пройдёшь пробное собеседование на роль инженера по нагрузочному тестированию: сорок один вопрос от простых фактов до задач (график, закон Литтла, отчёт), практическое задание и самооценку. Хороший ответ занимает тридцать секунд, три предложения и содержит цифру.
Шаг проекта: результатом станет файл самооценки ~/perf-lab/13-final/mock-perf.md: какие вопросы ты отвечаешь уверенно, а какие повторить.
Что нужно знать
Весь курс, но особенно: задержка и пропускная способность (8.1), очереди и закон Литтла (8.2), виды тестов (8.3), профиль и SLO (8.4), Locust (9.1 - 9.5), k6 (10.1 - 10.3), узкие места (11.1 - 11.5), отчёт и ёмкость (12.1, 12.3). Если на каком-то блоке вопросов ты «плывёшь», вернись в этот урок и перечитай нужный.
Картина целиком
Собеседование похоже на воронку. Этапы: рекрутёр, техническое интервью (вопросы и задачи вслух), иногда тестовое (урок 13.2), руководитель.
flowchart TD
A["Рекрутёр:<br/>кто ты, что ищешь"] --> B["Техническое интервью:<br/>вопросы и задачи"]
B --> C["Практика:<br/>график, расчёт, отчёт"]
C --> D["Разговор с руководителем:<br/>работа, команда, условия"]
D --> E["Оффер"]
Вопросы проверяют, знаешь ли ты теорию и умеешь ли говорить. Практика проверяет, умеешь ли применять: прочитать график, посчитать, найти ошибку в отчёте. Теоретики теряются на задаче, а практики не умеют объяснить решение, поэтому тренируй оба режима.
Теория
Что слушает интервьюер
Идеального ответа интервьюер почти не ждёт. Он слушает ход мысли (как ты рассуждаешь): идёшь ли от симптома к причине, честен ли о границах знаний. Вопросы идут от простого к сложному. Простые («что такое p95») ищут пробелы в основе. Средние («как ты искал узкое место») проверяют опыт, пусть учебный. Сложные («что бы ты сделал, если…») смотрят, как ты думаешь, и там нормально не знать готового ответа.
Главное: оценивают не только правильность, но и ход мысли.
Как же сделать свой ход мысли видимым?
Структура ответа: три шага и цифра
Растерянный отвечает потоком и теряет нить. Структурный: в три шага. Первый: суть одним предложением, например «p95 это значение, ниже которого лежат 95% замеров». Второй: пример с цифрой. Запросы по 30 мс и пять из ста по 2 с дают среднее около 130 мс, а p95 покажет две секунды. Третий: зачем, «поэтому SLO формулируют по перцентилям».
На вопросы про действия нужна другая схема: цель, шаги по порядку, критерий конца. Например: «Нахожу ступень, где ломается, и смотрю, какой маршрут растёт. Потом проверяю, занят ресурс или ждёт. Гипотезу проверяю одним изменением и сравниваю до и после».
Прикинь сам: тебя спросили «что такое throughput». Какие три шага ты проговоришь?
Например: «Это сколько запросов система обрабатывает в секунду (суть). На моём стенде около 20 RPS до насыщения (цифра). Смотрят вместе с задержкой: на пределе она растёт, а пропускная способность встаёт (зачем)». Цифра в каждом ответе показывает, что ты работал руками, а не пересказываешь учебник.
Главное: на вопрос о понятии отвечай «суть, пример с цифрой, зачем», на вопрос о действиях «цель, шаги, критерий конца».
Структура есть. Теперь вопрос времени.
Как держать время
Ответ занимает 30-90 секунд: короче кажется, что ты не понимаешь, длиннее двух минут теряется нить. Если интервьюер молчит, он ждёт, добавишь ли что-то. Скажи «могу углубиться в X» и остановись. Скорость тренируется на простых вопросах. Попробуй.
Вопросы выпадают случайно, таймер бежит на каждый ответ. Не успел или ошибся: отметь «не знал», итог покажет, что повторить.
Главное: ответ занимает 30-90 секунд, а скорость тренируют вслух на простых вопросах.
Но что делать, когда ответа просто нет?
Ответ «не знаю» и «не уверен»
Честное «не знаю» не катастрофа. Плохо замолчать или выдумывать уверенно. Хорошо сказать: «не знаю точно, но вот как бы я рассуждал и проверил». Не помнишь термин: «Название не вспомню, но суть такая…». Не работал с этим: «Предположу, что…, проверил бы так…». Понял вопрос неверно: уточни «вы про X или про Y?». Не уверен в цифре: «Порядок такой, но точное значение проверил бы». Ошибся и заметил: «Поправлюсь: я сказал…, правильно…». Инженеру на работе постоянно приходится говорить «не знаю, проверю», и тот, кто делает это конструктивно, ценится выше всезнайки.
Главное: на границе знаний говори «не знаю точно, но вот как бы проверил», не молчи и не выдумывай.
Теперь задачи, где надо говорить над картинкой.
Как читать график вслух
Задача «прочитай график» просит описать картинку и сделать вывод. Проговаривай по порядку: что на осях, что происходит, где точка перелома, какой вывод и что проверил бы дальше.
Ответ: «По горизонтали нагрузка от 5 до 30 RPS, по вертикали три показателя. До 20 RPS достигнутая нагрузка идёт за заданной, p95 почти плоский: система справляется. С 20 до 25 достигнутая нагрузка встаёт на потолок около 21, а p95 растёт примерно в пять раз: это насыщение, запросы встают в очередь. На 30 появляются ошибки: ожидание превысило таймаут. Вывод: предел около 20 RPS. Дальше смотрю, какой ресурс насыщается: CPU, пул или зависимость». Здесь есть оси, перелом, вывод и следующий шаг, и в каждом предложении цифра.
С расчётами так же: главное не число, а ход. Проговаривай «дано, формула, подставляю, получаю, проверка на здравый смысл». Верный ход с ошибкой в арифметике поправим, а верное число без хода не отличить от угадывания.
Главное: график и расчёт проговаривай по шагам с цифрой: ход важнее готового числа.
Осталось честно измерить, насколько ты готов.
Самооценка: как честно измерить себя
Оцени каждый вопрос. Два балла: ответил вслух за 30-90 секунд, структурно, с цифрой. Один: путался, не уложился или без цифры, перечитай урок. Ноль: не смог, вернись в урок. Итог в процентах от максимума: ниже 60% повторяй материал, 60-80% нормально для junior, выше 80% ты готов. Записывай результат в mock-perf.md, чтобы через неделю сравнить.
Главное: оценивай честно и повторяй блоки, где меньше 60%.
Вернёмся к распродаже: объяснить менеджеру «выдержим ли» за минуту, с цифрой, это тот же навык.
Практика
1. Подготовь файл самооценки
mkdir -p ~/perf-lab/13-final
cd ~/perf-lab/13-final
cat > mock-perf.md <<'EOF'
# Самооценка: собеседование по нагрузочному тестированию
Шкала: 2 = уверенно за 30-90 с с цифрой, 1 = путался, 0 = не смог.
| Блок | Вопросы | Баллы | Что повторить |
| --- | --- | --- | --- |
| A. Основы | 1-6 | | |
| B. Виды тестов и профиль | 7-12 | | |
| C. Locust и k6 | 13-18 | | |
| D. Узкие места | 19-24 | | |
| E. Процесс и отчёт | 25-29 | | |
| F. Задачи | 30-34 | | |
| G. Поведенческие | 35-41 | | |
EOF
Каждую сессию добавляй строку с датой и итогом. Файл пригодится: ты увидишь динамику.
2. Режим «вслух и на время»
Поставь таймер на телефоне. Правила: читаешь вопрос из банка ниже, закрываешь ответ, говоришь вслух за 30-90 секунд, потом открываешь и сравниваешь. Записывай себя на диктофон: услышишь паразиты («ну», «как бы», «типа») и места, где теряешь нить. Первые разы это неприятно, но самый быстрый способ улучшить речь.
# Таймер на 60 секунд в терминале (звук по окончании)
sleep 60 && printf '\a время\n'
Команда sleep 60 ждёт минуту, printf '\a' выдаёт звуковой сигнал терминала. && запускает вторую часть, только если первая завершилась без ошибки.
3. Практическое задание вживую: прочитай отчёт
Возьми свой отчёт из урока 13.2 (~/perf-lab/13-final/take-home/report.md) и попроси знакомого, чтобы он выбрал любую строку и спросил: «Как ты это измерил?» Ответь за минуту, показав файл. Если не смог, значит, цифра в отчёте не подкреплена: допиши в отчёт ссылку на источник (файл с результатом или скриншот).
Второй вариант задания, если некому спросить: возьми сводную таблицу из results/summary.txt и без подглядывания проговори вслух по схеме «оси, что происходит, перелом, вывод, следующий шаг».
4. Пройди банк вопросов
Перейди к разделу ниже. Для каждого блока сначала проговори ответ вслух, потом сверься. Отмечай баллы в mock-perf.md. Не пытайся пройти все 41 вопрос за раз: в одну сессию бери один-два блока (около 20 вопросов), остальные оставь на повторение через день-два.
5. Сессия на время
Когда пройдёшь все блоки по разу, устрой «боевую» сессию: возьми случайные 10 вопросов (виджет выше выбирает случайно), отвечай по 30 секунд без пауз. Затем запиши итог в файл:
echo "$(date +%F): сессия на время, 10 вопросов, знал 7, слабое: закон Литтла, coordinated omission" >> ~/perf-lab/13-final/mock-perf.md
$(date +%F) подставляет дату в формате ГГГГ-ММ-ДД. Так ты видишь прогресс и понимаешь, на что тратить время повторения.
Сломай и почини
Типичные провалы на собеседовании и как их чинить. Проверь себя: попробуй провалиться специально, чтобы запомнить, как это выглядит.
- Поток сознания. Задай себе вопрос «Как найти узкое место?» и говори две минуты без плана. Запиши и послушай: где потерял нить? Почини схемой «цель, шаги по порядку, критерий конца» и перезапиши за 60 секунд.
- Ответ без цифры. Ответь на «Что такое p95?» без единого числа. Теперь добавь пример «из 100 запросов 5 медленные» и сравни: насколько убедительнее?
- Угадывание вместо «не знаю». Выбери вопрос, на который не знаешь ответ (например, про HTTP/3), и ответь «уверенно». Затем переделай по схеме «не знаю точно, но вот как бы проверил» и почувствуй разницу в тоне.
- Ответ на другой вопрос. Попроси знакомого задать вопрос «в чём разница между нагрузкой и стрессом?» и поймать момент, когда ты отвечаешь на соседнее. Привычка переспросить «вы имеете в виду…?» исправляет это.
Тренируй собеседование с нейросетью: попроси её быть интервьюером. Но оценивай себя сам по шкале 0-1-2 из урока, а ответы нейросети на те же вопросы сверяй с банком ниже, а не принимай на веру.
ИИ в помощь
Нейросеть может сыграть интервьюера и дать тренировку в любое время, но верить её оценке и эталонным ответам вслепую нельзя. Общие правила: ИИ-помощник.
Задача: провести пробное собеседование.
Ты технический интервьюер на позицию junior-инженера по нагрузочному тестированию. Я знаю: Locust, k6,
метрики p95 и закон Литтла, Prometheus, Grafana, разбор узких мест на учебном стенде. Задавай по одному вопросу
и жди моего ответа. После ответа скажи, что в нём было хорошего, чего не хватало (цифра, пример, зачем),
и задай уточняющий вопрос. Через 8 вопросов дай итог: сильные места и темы для повторения. Не подсказывай
ответ до моей попытки.
Проверь ответ: сверь «правильные» ответы с банком вопросов урока и с теорией. Типичные ошибки: слишком мягкая оценка («отличный ответ!») и неточности в формулах и числах, поэтому проси назвать, чего не хватило.
Задача: составить план повторения по итогам.
Вот мои баллы по блокам вопросов (0, 1 или 2): <вставь таблицу>. Составь план повторения на неделю по дням,
по 40 минут в день. Для каждого дня: какие уроки курса перечитать и какие вопросы проговорить вслух.
Проверь ответ: сопоставь уроки с оглавлением курса: нейросеть может назвать несуществующие номера уроков. Типичная ошибка: план «выучить всё» без приоритета слабых блоков.
Не вставляй в тренировочные ответы данные реального работодателя.
Словарик урока
| Термин | Простыми словами |
|---|---|
| Техническое интервью | Этап собеседования, где тебя спрашивают по теме работы и дают задачи. |
| Ход мысли | То, как ты рассуждаешь вслух: интервьюер оценивает его не меньше, чем результат. |
| Структура ответа | Порядок: суть, пример с цифрой, зачем нужно. |
| Тайм-бокс ответа | Ограничение по времени: 30-90 секунд на ответ. |
| Самооценка | Честная оценка собственных ответов по шкале 0-1-2. |
| Практическая задача | Вопрос, где надо применить знание: прочитать график, посчитать. |
| Красный флаг | Признак слабого ответа, на который интервьюер обращает внимание. |
Вопросы с собеседований
Раздел для повторения: ответь вслух, потом открой ответ. Банк разделён на блоки от простого к сложному. Блоки A-B сдавай на скорость, блоки C-F с развёрнутым ходом мысли, блок G по схеме «ситуация, действие, результат». Баллы записывай в mock-perf.md.
Блок A. Основы
1. [junior] [часто] В чём разница между задержкой и пропускной способностью?
Ответ
Задержка (latency) это время одного запроса. Пропускная способность (throughput) это сколько запросов система обрабатывает в секунду. На низкой нагрузке пропускная способность растёт вместе с нагрузкой, задержка почти не меняется. На пределе пропускная способность выходит на потолок, а задержка растёт: запросы стоят в очереди.
Что хотят услышать: оба определения, связь через насыщение.
Красный флаг: считать их одним и тем же.
2. [junior] [часто] Что такое p95 и почему его используют вместо среднего?
Ответ
p95 это значение, ниже которого лежат 95% замеров. Среднее прячет хвост: если 5 из 100 запросов идут по 2 секунды, среднее выглядит хорошо, а каждый двадцатый запрос идёт долго. Поэтому SLO формулируют по p95 или p99.
Что хотят услышать: пример с цифрами, слово «хвост».
Красный флаг: «p95 это среднее по лучшим 95%».
3. [junior] Что такое RPS?
Ответ
Requests per second: число запросов в секунду. Измеряет интенсивность нагрузки. Важно различать заданную и достигнутую нагрузку: если сервис не успевает, достигнутый RPS ниже заданного.
Что хотят услышать: «в секунду», разница между заданным и достигнутым.
Красный флаг: путать с числом пользователей.
4. [junior] Что такое насыщение (saturation)?
Ответ
Состояние, когда ресурс (CPU, пул соединений, диск) занят почти полностью и не может принять больше работы. Признак: нагрузка растёт, а пропускная способность нет, задержка уходит вверх. Из-за насыщения график «хоккейная клюшка».
Что хотят услышать: признаки на графике и пример ресурса.
Красный флаг: «система просто тормозит».
5. [junior] Чем нагрузочное тестирование отличается от функционального?
Ответ
Функциональное проверяет, что система делает правильно (результат). Нагрузочное проверяет, как быстро и стабильно она это делает при многих запросах. Функциональный тест один запрос и проверка ответа, нагрузочный много запросов и метрики времени и ошибок.
Что хотят услышать: «правильно» против «быстро и стабильно под нагрузкой».
Красный флаг: «это одно и то же, только больше запросов».
6. [на скорость] Что такое SLO?
Ответ
Цель по качеству сервиса в числах: например, p95 меньше 300 мс и ошибок меньше 1%. По нему решают, прошёл ли тест.
Что хотят услышать: измеримая цель.
Красный флаг: «ориентир без цифр».
Блок B. Виды тестов и профиль нагрузки
7. [junior] [часто] Перечисли виды нагрузочных тестов и зачем каждый.
Ответ
Smoke: быстрая проверка, что всё работает. Load: ожидаемая нагрузка, проверка SLO. Stress: нагрузка выше нормы, поиск предела. Soak: умеренная нагрузка долго, поиск утечек. Spike: резкий скачок, проверка реакции на всплеск.
Что хотят услышать: пять видов и цель каждого.
Красный флаг: «load и stress одно и то же».
8. [junior] Как ты выбираешь нагрузку для теста?
Ответ
Перевожу бизнес-условия в RPS: сессии в пиковый час делю на 3600, умножаю на пик внутри часа и запас на рост, затем на число операций в сессии. Допущения называю явно. Лучше брать реальные данные из логов или метрик, если они есть.
Что хотят услышать: расчёт, запас, допущения.
Красный флаг: «взял 100 пользователей».
9. [junior] Что такое think time?
Ответ
Пауза между действиями пользователя. Реальный человек читает страницу, а не стреляет запросами подряд. Без think time нагрузка получается завышенной, а профиль неестественным.
Что хотят услышать: смысл паузы и влияние на нагрузку.
Красный флаг: «лишняя задержка, лучше убрать».
10. [middle] Открытая и закрытая модели нагрузки: в чём разница?
Ответ
Закрытая: фиксированное число пользователей, каждый шлёт новый запрос после ответа. Если система замедлилась, поток запросов сам уменьшается. Открытая: запросы приходят с заданной скоростью независимо от ответов, как в публичном сервисе. При замедлении очередь копится. Открытая честнее для публичных систем, закрытая ближе к внутренним с ограниченным числом клиентов.
Что хотят услышать: обратная связь, пример, когда какую.
Красный флаг: не знать, что закрытая модель «скрывает» перегрузку.
11. [middle] Как ты определяешь длительность ступени и теста?
Ответ
Ступень не меньше нескольких минут: надо пройти прогрев, а метрики собираются с шагом (скрейп раз в 5 секунд, окно rate минута). Значимы последние минуты ступени. Для soak часы: утечки видны на длинной дистанции.
Что хотят услышать: прогрев и шаг метрик.
Красный флаг: «30 секунд хватит».
12. [на скорость] Зачем нужен smoke перед большим прогоном?
Ответ
Проверить за минуту, что сценарий и стенд работают, прежде чем тратить час на большой прогон.
Что хотят услышать: дешёвая страховка.
Красный флаг: «лишний шаг».
Блок C. Locust и k6
13. [junior] [часто] Как в Locust описывается поведение пользователя?
Ответ
Классом, наследующим HttpUser, с задачами @task (методы, в которых вызывается self.client.get/post) и паузой wait_time. Веса задач задают долю операций. on_start выполняется при запуске пользователя (например, вход).
Что хотят услышать: HttpUser, @task, wait_time, on_start.
Красный флаг: «пишу цикл запросов в скрипте».
14. [junior] Как проверить в сценарии, что ответ правильный, а не просто 200?
Ответ
В Locust: catch_response=True и явная пометка r.failure(...) при неверном теле или статусе. В k6: check(res, {...}). Иначе тест считает успехом пустую страницу или ответ с ошибкой в теле.
Что хотят услышать: проверка тела и статуса.
Красный флаг: «проверяю только статус 200».
15. [junior] Как запустить Locust без интерфейса и сохранить результат?
Ответ
locust -f locustfile.py --host URL --headless -u 10 -r 2 -t 5m --csv results/run: 10 пользователей, прирост 2 в секунду, 5 минут, CSV-файлы с результатами.
Что хотят услышать: флаги --headless, -u, -r, -t, --csv.
Красный флаг: «только через браузер».
16. [middle] Что такое threshold в k6 и зачем?
Ответ
Условие прохождения по метрике, например http_req_duration: ['p(95)<300']. Если нарушено, k6 завершается с ненулевым кодом, и CI видит провал. Это превращает тест из «посмотреть» в автоматическую проверку SLO.
Что хотят услышать: критерий проходит или нет, код выхода, CI.
Красный флаг: «просто вывод в консоль».
17. [middle] Locust или k6: когда что?
Ответ
Locust: сценарии на Python, удобно, если команда пишет на Python, гибкие сложные пользовательские пути. k6: сценарии на JavaScript, лёгкий и быстрый генератор на Go, встроенные пороги, открытая модель (arrival rate), экспорт в Prometheus. Выбор зависит от команды, нагрузки и интеграции с CI.
Что хотят услышать: обоснованный выбор, не догма.
Красный флаг: «лучше тот, что я знаю, и не важно почему».
18. [middle] Как понять, что узкое место в генераторе нагрузки?
Ответ
Смотрю загрузку CPU генератора: если близко к 100%, а RPS не растёт и у сервиса ресурсы свободны, то упёрлись в генератор. Проверяю несколькими процессами или воркерами (распределённый Locust): если RPS вырос, это был генератор.
Что хотят услышать: метрики генератора, проверка экспериментом.
Красный флаг: «если RPS не растёт, сервер слабый».
Блок D. Узкие места
19. [junior] [часто] Как ты ищешь узкое место?
Ответ
Нахожу ступень, где ломается; смотрю, какой маршрут первым ухудшился; определяю, ресурс занят (CPU) или система ждёт (пул, база, зависимость); смотрю конкретные метрики; проверяю гипотезу одним изменением и сравниваю до и после.
Что хотят услышать: порядок от дешёвых проверок к дорогим, эксперимент.
Красный флаг: «сразу лезу в код».
20. [middle] Задержка растёт, CPU низкий. Что это может быть?
Ответ
Система ждёт, а не считает. Кандидаты: пул соединений к базе исчерпан, медленная внешняя зависимость (оплата), блокировки в базе, диск или сеть. Проверяю shop_db_pool_waiting, длительность запросов к зависимостям, pg_stat_activity.
Что хотят услышать: «ждёт», список кандидатов и метрик.
Красный флаг: «значит сервер слабый, добавить CPU».
21. [middle] Что такое N+1 и как его найти?
Ответ
Один запрос за списком и ещё N запросов по одному на каждый элемент. На небольших данных не заметно, на больших база тонет в мелких запросах. Находят по числу запросов на один HTTP-запрос (pg_stat_statements, логи) и лечат JOIN или пакетной выборкой.
Что хотят услышать: суть и признак в метриках.
Красный флаг: не уметь отличить от медленного одного запроса.
22. [middle] Как ты ищешь утечку памяти?
Ответ
Длинный soak-тест при постоянной нагрузке и график памяти процесса: рост без возврата признак утечки, его подтверждает рост удерживаемых объектов в профиле. Затем сужаю по маршрутам и смотрю профиль памяти. Отличаю от кэша, который растёт до предела и останавливается.
Что хотят услышать: длинный тест, форма графика, отличие от кэша.
Красный флаг: «по короткому прогону».
23. [middle] Почему нельзя менять несколько параметров за раз?
Ответ
Не поймёшь, что помогло и не навредило ли что-то другое. Меняю одно, повторяю ту же ступень, сравниваю таблицу до и после. Если меры заранее объявлены одним пакетом, это одно изменение: вклад каждой отдельно уже не оценивается.
Что хотят услышать: контролируемый эксперимент.
Красный флаг: «подкрутил всё, стало лучше».
24. [на скорость] Что показывает рост shop_db_pool_waiting?
Ответ
Запросы стоят в очереди за соединением: пул исчерпан, узкое место в пуле или в том, кто долго держит соединения.
Что хотят услышать: очередь за соединением.
Красный флаг: «база упала».
Блок E. Процесс и отчёт
25. [junior] [часто] Что должно быть в отчёте о нагрузочном тесте?
Ответ
Вывод сверху (что выдерживает, где ломается и почему, что рекомендуем), цель и критерии, метод (профиль, ступени), результаты (таблица и график), узкое место с доказательствами, рекомендации, проверка исправления до и после, ограничения, как повторить.
Что хотят услышать: вывод первым, доказательства, ограничения.
Красный флаг: «графики и логи».
26. [middle] Как встроить нагрузочный тест в CI?
Ответ
Короткий smoke или load-тест на каждый merge с порогами (threshold): провал блокирует выпуск. Долгие тесты по расписанию (ночью). Результаты сохраняю как артефакты и сравниваю с прошлым прогоном.
Что хотят услышать: пороги, разделение быстрых и долгих.
Красный флаг: «гоню часовой тест на каждый коммит».
27. [middle] Что такое ёмкость (capacity) и как её оценить?
Ответ
Максимальная нагрузка, при которой система укладывается в SLO. Определяю ступенчатым тестом: последняя ступень до нарушения критерия. Запас: ожидаемая нагрузка с коэффициентом роста и пика, сравниваю с ёмкостью, считаю запас.
Что хотят услышать: критерий, ступенчатый тест, запас.
Красный флаг: «максимальный RPS, который удалось выжать».
28. [middle] Результат теста плохой, а сроки поджимают. Что делаешь?
Ответ
Не скрываю. Сообщаю вывод с цифрами, показываю узкое место и варианты (быстрое смягчение и системное исправление) с оценкой эффекта и стоимости. Решение о сроках принимает владелец продукта, моя задача дать ему данные.
Что хотят услышать: честность, варианты, цифры.
Красный флаг: «подправил тест, чтобы прошёл».
29. [на скорость] Три предложения вывода отчёта: из чего состоят?
Ответ
Что выдерживает, где и почему ломается, что рекомендуем и какой эффект.
Что хотят услышать: три части.
Красный флаг: «введение, цель, метод».
Блок F. Задачи
30. [middle] Задача: в пуле 8 соединений, оплата отвечает за 0,4 с, заказов приходит 25 в секунду. Справится ли пул?
Ответ
Соединение занято около 0,4 с, пул пропускает 8 / 0,4 = 20 заказов в секунду. Приходит 25, значит очередь растёт: пул перегружен. Нужно либо уменьшить время удержания (вынести оплату из транзакции), либо увеличить пул (с оглядкой на лимит базы), либо ограничить поток.
Что хотят услышать: формула, число, вывод, варианты.
Красный флаг: «увеличить пул вдвое» без расчёта.
31. [middle] Задача (закон Литтла): сервис обрабатывает 40 запросов в секунду, среднее время запроса 0,25 с. Сколько запросов в среднем внутри системы?
Ответ
L = λ x W = 40 x 0,25 = 10 запросов. Если время вырастет до 1 с при той же нагрузке, внутри окажется 40: система не справится, если рабочих мест меньше.
Что хотят услышать: формула, число, смысл.
Красный флаг: не знать формулу.
32. [middle] Задача (график): RPS вышел на плато, p95 растёт, ошибок нет, CPU сервиса 30%. Что скажешь?
Ответ
Насыщение не по CPU: система ждёт. Кандидаты: пул БД, внешняя зависимость, блокировки. Проверю shop_db_pool_waiting, длительность вызовов оплаты, активные запросы в базе. Ошибок нет, потому что ожидание ещё не дошло до таймаута.
Что хотят услышать: вывод из сочетания признаков, следующий шаг.
Красный флаг: «добавить CPU».
33. [middle] Задача (расчёт профиля): 6000 сессий в час, пик 1,5x, запас 2x, в сессии 4 запроса. Какой RPS?
Ответ
Сессий в секунду: 6000 / 3600 x 1,5 x 2 = 5. Запросов: 5 x 4 = 20 RPS. Называю допущения (пик и запас) и предлагаю проверить по реальным логам.
Что хотят услышать: шаги вычисления, допущения.
Красный флаг: число без хода.
34. [middle] Задача (разбор отчёта): в отчёте «p95 стало лучше, поэтому исправление помогло», графика нет. Что скажешь?
Ответ
Недоказуемо: нет цифр, условий и сравнения. Попрошу таблицу до и после при одинаковых условиях (ступени, длительность, конфигурация), разброс между прогонами, что именно изменено. Без этого нельзя исключить влияние шума или другого фактора.
Что хотят услышать: требование доказательств, различие «стало» и «доказано».
Красный флаг: «верю на слово».
Блок G. Поведенческие вопросы
Здесь нет «правильного» факта, оценивают, как ты работаешь с людьми и ошибками. Отвечай по схеме «ситуация, что сделал ты, результат с цифрой». Истории бери из своего ~/perf-lab и из учебных расследований, выдумывать нельзя: уточняющий вопрос раскроет.
35. [junior] Расскажи про случай, когда твой тест показал плохой результат, а команда не хотела в него верить.
Ответ
Ситуация: тест показал p95 выше порога. Что делаю: проверяю свой тест (условия, генератор, разброс между прогонами), потом показываю данные: график, таблицу до и после, как повторить. Результат: либо нашли реальную проблему, либо я поправил тест.
Что хотят услышать: готовность проверить себя первым и показать воспроизводимые данные.
Красный флаг: «Я был прав, они не слушали».
36. [junior] Расскажи про свою ошибку в тесте или отчёте.
Ответ
Выбираю настоящую ошибку, например нагрузка шла с того же компьютера, где стоял стенд, и генератор упёрся в процессор раньше стенда. Как заметил (CPU генератора около 100%), что исправил, какую проверку добавил, чтобы не повторилось.
Что хотят услышать: спокойный разбор причины и проверка, которая закрывает класс ошибки.
Красный флаг: «У меня ошибок не было» или поиск виноватого.
37. [junior] Как ты объяснишь результат теста человеку, который не разбирается в нагрузке?
Ответ
Одно число и последствие для него: «выдержим 40 заказов в секунду, на акции ждём 70, значит, нужно добавить мощности (например, вторую копию сервиса, если проверка покажет, что узкое место так масштабируется) до ноября». График вместо таблицы, без терминов или с их расшифровкой в одну фразу.
Что хотят услышать: перевод на язык решений: что делать и к какому сроку.
Красный флаг: поток терминов без вывода.
38. [junior] Что ты сделаешь, если до релиза остался день, а тест показал, что порог не выполняется?
Ответ
Скажу об этом сразу и с цифрами, не буду подгонять порог. Предложу варианты: откатить изменение, выпустить с ограничением (включить на часть пользователей), починить за день, если причина понятна. Решение за владельцем продукта, моя задача дать данные и риск.
Что хотят услышать: честность, варианты вместо отказа, понимание, кто решает.
Красный флаг: «Подкручу порог, чтобы прошло».
39. [junior] Как ты разберёшься с незнакомой системой, если нужно за неделю подготовить тест?
Ответ
Сначала цель и SLO, потом схема системы (кто кого вызывает), метрики и логи, которые уже есть, один простой сценарий на пользовательском пути, smoke-прогон. Сложное добавляю после первого результата. Вопросы задаю тем, кто знает систему, но с готовым списком.
Что хотят услышать: план по шагам и готовность спрашивать.
Красный флаг: «Сначала прочту всю документацию».
40. [junior] Как ты поступишь, если разработчик не согласен с твоим выводом, что узкое место в его коде?
Ответ
Не спорю на словах: показываю данные (метрики, профиль, запрос, который тормозит) и предлагаю проверить гипотезу экспериментом, например повторить тест с исправлением. Если эксперимент не подтверждает вывод, я его меняю.
Что хотят услышать: опора на эксперимент и готовность поменять мнение.
Красный флаг: настаивание без данных.
41. [junior] Как ты используешь ИИ в работе?
Ответ
Как помощника, а не как замену себе. Прошу объяснить незнакомый вывод или флаг, набросать черновик сценария, запроса PromQL или отчёта, придраться к моему тексту. В запрос даю контекст и точный вывод, без секретов и данных клиентов. Ответ всегда проверяю: запускаю команду, смотрю --help, сверяю метрику с /metrics, считаю число сам. Что не могу объяснить своими словами, в работу не беру. Решения и ответственность за результат остаются у меня. Правила компании по ИИ соблюдаю.
Что хотят услышать: конкретные задачи, проверка ответов, защита данных, ответственность.
Красный флаг: «ИИ всё пишет, я только копирую», либо «никогда не пользуюсь» без причины, либо вставка рабочих логов с секретами в публичный чат.
Проверено на версиях
Locust 2.46, k6 2.3, Prometheus 3.15, стенд «Магазин» из project/shop. Числа в задачах и примерах учебные. Октябрь 2026.
Итог урока: ты умеешь
- Отвечать на технический вопрос по схеме «суть, пример с цифрой, зачем» за 30-90 секунд.
- Спокойно сказать «не знаю точно, но вот как бы проверил».
- Прочитать график вслух: оси, что происходит, перелом, вывод, следующий шаг.
- Решить расчётную задачу (закон Литтла, пул, профиль) с показом хода.
- Отличить признаки «ресурс занят» и «система ждёт» и назвать метрики для проверки.
- Объяснить каждую цифру в собственном отчёте.
- Оценить себя по шкале 0-1-2 и составить план повторения.
- Тренироваться на нейросети-интервьюере и проверять её оценки и ответы по банку вопросов.
Дальше: урок 13.5. Пробное собеседование: инженер мониторинга.
Проверь себя
Короткий тест по уроку: 10 вопросов из банка в 40. Засчитывается только полностью правильный ответ, порог 60%. Каждая новая попытка даёт другие вопросы, пока банк не закончится. Ответы видны после проверки.
Тест работает с включённым JavaScript.