Раздел подготовки

Производительность: вопросы для собеседования QA

Performance-блок проверяет, понимает ли QA пользовательскую скорость, ограничения системы и разницу между симптомом и причиной.

23 вопросов 4 базовых 3 уровня: Junior, Middle, Senior

Что закрывает этот раздел

Подготовиться к вопросам по performance testing и диагностике производительности.

  • объяснять основные метрики
  • видеть узкие места
  • понимать LCP, INP и CLS

С чего начать

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

  1. В чём разница между нагрузочным и стрессовым тестированием?
  2. Что QA важно знать про нагрузочное тестирование?
  3. Какие базовые метрики и smoke-проверки производительности вы используете?
  4. Что проверите в первую очередь, если после выкладки выросло время ответа API?

Вопросы и ответы

В чём разница между нагрузочным и стрессовым тестированием?

Middle

Нагрузочное тестирование проверяет систему под ожидаемой рабочей нагрузкой: измеряем latency, throughput, error rate и стабильность. Цель — подтвердить, что система выдерживает реальный трафик.

Стрессовое тестирование доводит систему до предела и за его пределы, чтобы выявить точку отказа, поведение при деградации и способность к восстановлению. Также существуют: soak testing (длительная нагрузка для выявления утечек памяти), spike testing (резкий скачок нагрузки).

Из практики: при стресс-тесте отдельно оцениваю поведение после превышения предела — восстанавливается ли система автоматически или зависает. Graceful degradation важнее, чем просто высокий порог.

Частые ошибки

  • Смешивают понятия, считая load и stress синонимами: на самом деле один измеряет параметры при рабочих нагрузках, другой – выносливость за пределами проектных значений.
  • Не проводят стресс-тестирование, думая, что достаточно нагрузочного: без стресс-тестов неизвестно поведение системы при аномальных ситуациях (что важно для планов отказоустойчивости).

Дополнительные вопросы

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

Что QA важно знать про нагрузочное тестирование?

Middle

Нужно чётко определить цели: метрики (p95/p99 latency, throughput, error rate), профиль нагрузки (ramp-up, пиковая нагрузка, продолжительность) и пороги приемлемости по SLO.

Перед запуском: репрезентативные тестовые данные, изолированное окружение, мониторинг ресурсов (CPU, RAM, БД). Инструменты: k6, JMeter, Gatling, Locust (Python).

Из практики: ценность нагрузочного теста — не красивый отчёт, а конкретный ответ: при какой нагрузке система начинает деградировать и как именно (ошибки, тормоза, падение).

Частые ошибки

  • Нет корреляции/параметризации.
  • Смешивают профили в одном прогоне.

Дополнительные вопросы

  • Как построите графики ответа?
  • Как находите бутылочные горлышки?

Какие базовые метрики и smoke-проверки производительности вы используете?

Middle

Для базовой оценки производительности смотрю: время отклика ключевых операций (p50, p95, p99), пропускная способность (RPS), процент ошибок под нагрузкой.

Smoke-проверка производительности: запускаю 1–5 виртуальных пользователей и проверяю, что p95 не превышает установленный порог (например, 500ms для API). Инструменты: k6, JMeter, Gatling, Lighthouse для фронтенда.

Из практики: даже простой smoke-тест производительности на каждом деплое помогает заметить деградацию до релиза. Рост p95 на 30% — уже сигнал для расследования.

Частые ошибки

  • Сравнивают результаты на разных стендах без нормализации.
  • Нет контрольных точек.

Дополнительные вопросы

  • Какие инструменты используете?
  • Как зафиксировать baseline?

Что проверите в первую очередь, если после выкладки выросло время ответа API?

Middle

Сравню новую и предыдущую версии: запросы к базе, внешние вызовы, настройки кэша и конфигурацию окружения.

Проверю медленные участки через трассировку и метрики по эндпоинту, чтобы локализовать узкое место.

Из практики: часто проблема не в коде, а в конфигурации или изменившемся профиле нагрузки.

Частые ошибки

  • Пытаются оптимизировать вслепую без замеров.

Дополнительные вопросы

  • Какие данные нужно собрать до отката релиза?

Какие виды нагрузочного тестирования бывают?

Middle

Load — обычная ожидаемая нагрузка. Stress — выше нормальной, ищем точку отказа. Soak (endurance) — длительная под обычной нагрузкой, ищем утечки и накопительные эффекты. Spike — резкие скачки. Scalability — как ведёт при горизонтальном/вертикальном масштабировании.

Дополнительно — capacity и volume для проверки на больших объёмах данных.

Из практики: всегда нужны load и stress. Soak делают перед мажорным релизом. Spike — для систем с пиковой нагрузкой (распродажи, события).

Частые ошибки

  • Делать только load и не проверять, где система ломается.
  • Запускать stress без подготовленного мониторинга.

Дополнительные вопросы

  • Чем capacity отличается от scalability?
  • Какие инструменты популярны?

Какие метрики снимать в нагрузочном тесте?

Middle

Со стороны клиента: время отклика (p50, p95, p99), throughput (запросов в секунду), error rate. Со стороны сервера: CPU, RAM, диск, сеть, GC pauses, размер пула соединений, длина очередей.

Со стороны БД: long-running queries, lock waits, replication lag, размер connection pool. Со стороны кеша/брокера — hit rate, length of queues.

Из практики: фокус на перцентилях (p95, p99), не на среднем. Среднее скрывает долгий хвост, который ощущает 1-5% пользователей.

Частые ошибки

  • Смотреть только на среднее.
  • Не собирать серверные метрики.

Дополнительные вопросы

  • Что такое long tail latency?
  • Какие инструменты APM популярны?

Какие инструменты для нагрузочного тестирования?

Middle

Классика: JMeter (GUI, много плагинов), Gatling (DSL на Scala/Kotlin, отчёты), Locust (Python, скрипты), k6 (JS, современный CLI и cloud-режим).

Также: artillery, wrk, ab (Apache Bench для простых случаев). Для распределённой нагрузки — JMeter в распределённом режиме, k6 cloud, Locust workers.

Из практики: для нового проекта чаще выбирают k6 (легко писать, удобно интегрировать в CI) или Gatling (хорошие отчёты, для серьёзных команд). JMeter жив, но многословен.

Частые ошибки

  • Запускать нагрузку с одного хоста с маленькой сетью.
  • Не учитывать стоимость самого нагрузочного агента.

Дополнительные вопросы

  • Чем k6 удобнее JMeter?
  • Что такое distributed load testing?

Что такое профайлинг и когда его делать?

Middle

Профайлинг — это снятие данных о том, где приложение тратит CPU/память/время: какие функции вызываются, как долго работают, где GC, где блокировки.

Инструменты: pprof (Go), JVM Flight Recorder + JFR, async-profiler (Java), Chrome DevTools Performance (JS), py-spy (Python).

Из практики: профайлинг применяют когда тесты показывают деградацию, но непонятно где. Снимают перед и после изменений, сравнивают.

Частые ошибки

  • Профайлить долго — большой объём данных.
  • Доверять микробенчмаркам в JIT-языках без warmup.

Дополнительные вопросы

  • Что такое flame graph?
  • Чем sampling профайлер отличается от instrumenting?

Что такое percentile и зачем p95/p99?

Middle

Перцентиль — это значение, ниже которого попадает указанный процент измерений. p95 — 95% запросов быстрее этого значения, 5% медленнее.

Важны хвостовые перцентили (p95, p99, p99.9) — они показывают «долгий хвост», который не виден в среднем. Один пользователь из ста — это часто десятки тысяч пользователей в продакшен-системе.

Из практики: SLO/SLA обычно ставят на p95 или p99: «99% запросов отвечают за <500мс». Среднее по этой же выборке может быть 100мс — и казаться отличным.

Частые ошибки

  • Игнорировать p99 — пропускают серьёзные UX-проблемы.
  • Усреднять перцентили по разным сервисам — нельзя.

Дополнительные вопросы

  • Чем p99 отличается от max?
  • Как мониторить p99 в проде?

Что такое bottleneck и как его найти?

Middle

Bottleneck — узкое место, ограничивающее производительность системы. Часто это CPU одного сервиса, медленные запросы к БД, ограниченный пул соединений, медленная сеть.

Поиск: при нагрузочном тесте смотрят, что упирается в потолок раньше других. Если CPU 95% — это компонент. Если CPU 30%, а отклик растёт — внешний (БД, сеть).

Из практики: «спасает» правильная инструментация. Без APM/трассировки в распределённой системе bottleneck ищется как иголка в стоге сена.

Частые ошибки

  • Оптимизировать не bottleneck — улучшения не дают эффекта.
  • Без мониторинга гадать на кофейной гуще.

Дополнительные вопросы

  • Что такое distributed tracing?
  • Чем helps Amdahl's law?

Чем нагрузочное тестирование отличается от мониторинга в проде?

Middle

Нагрузочное — синтетическое: контролируемые сценарии, заданная нагрузка, ищем характеристики и пределы. Мониторинг в проде — наблюдение реального трафика, реальных пользователей, метрики SLO.

Идеально иметь оба: нагрузочное даёт уверенность перед релизом, мониторинг — реальную картину после.

Из практики: некоторые проблемы видны только под продакшен-трафиком (определённые комбинации запросов, патологические пользователи). Поэтому мониторинг — не замена тестам, а дополнение.

Частые ошибки

  • Полагаться только на мониторинг — ловите проблемы постфактум.
  • Полагаться только на нагрузочное — пропустите реальные паттерны.

Дополнительные вопросы

  • Что такое RUM (Real User Monitoring)?
  • Чем chaos engineering дополняет это всё?

Что такое chaos engineering?

Middle

Chaos engineering — это практика намеренного внесения сбоев в систему (упадёт сервис, потеряется пакет, замедлится диск) для проверки, что система выдержит реальные неполадки.

Принципы: эксперимент в проде или близко к проду, минимальный blast radius, явные гипотезы, наблюдение метрик. Инструменты: Chaos Monkey, Litmus, Gremlin.

Из практики: подходит для зрелых команд с хорошим мониторингом. На раннем этапе важнее наладить базовое тестирование и наблюдаемость.

Частые ошибки

  • Устроить хаос без мониторинга — катастрофа.
  • Запускать chaos на проде в час пик.

Дополнительные вопросы

  • Что такое game day?
  • Чем blameless culture помогает chaos engineering?

Какие сценарии тестировать для frontend-производительности?

Middle

Core Web Vitals: LCP (Largest Contentful Paint), INP (отзывчивость), CLS (стабильность раскладки). Также TBT (Total Blocking Time), TTFB (Time To First Byte).

Тестируют на медленных сетях (slow 3G), на слабых устройствах (mobile CPU 4x slowdown в DevTools), на холодном и тёплом кешах.

Из практики: главное — измерять real-user metrics в проде (RUM). Lab-метрики (Lighthouse) показывают потенциал, RUM — реальность.

Частые ошибки

  • Полагаться только на Lighthouse — он на мощной машине быстрый.
  • Не учитывать мобильный CPU и сеть.

Дополнительные вопросы

  • Что такое INP и почему именно его используют для оценки отзывчивости?
  • Как мониторить Web Vitals в проде?

Как поймать утечку памяти на сервере?

Middle

Признак: RSS/heap растёт со временем при стабильной нагрузке, в какой-то момент OOM. Снимают heap snapshot (или dump) в нескольких точках и сравнивают — кто прирастает.

В Java — JFR, jmap, MAT. В Go — pprof. В Node.js — Chrome DevTools или heapdump. В Python — tracemalloc, objgraph.

Из практики: запускают soak-тест на час-два, ловят рост. Чаще всего виновники — кеши без TTL, listeners без unsubscribe, забытые connections.

Частые ошибки

  • Считать, что GC всё уберёт — не уберёт удерживаемые ссылки.
  • Делать снимок один раз — нужно сравнить минимум два.

Дополнительные вопросы

  • Что такое RSS vs heap?
  • Какие самые частые источники утечек в Node.js?

Что такое APM (Application Performance Monitoring)?

Middle

Системы мониторинга, отслеживающие метрики производительности в проде: latency, throughput, ошибки, трассы запросов. Datadog, New Relic, Dynatrace, Elastic APM, Prometheus + Grafana.

APM обычно подключают агентом в приложение — он автоматически собирает данные.

Из практики: незаменимо для production-поддержки. Без APM приходится копаться в логах вручную.

Частые ошибки

  • Считать, что APM заменяет логирование.
  • Не настраивать дашборды и алерты — данные есть, но не смотрят.

Дополнительные вопросы

  • Что такое distributed tracing?
  • Чем OpenTelemetry полезен?

Что такое distributed tracing?

Middle

Распределённая трассировка: каждый запрос получает trace_id, который передаётся через все сервисы. В UI видна цепочка: API → сервис A → БД → сервис B.

Стандарт — OpenTelemetry. Backends: Jaeger, Zipkin, Tempo. Часто интегрируется с APM.

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

Частые ошибки

  • Не пробрасывать trace_id через все сервисы — трасса рвётся.
  • Игнорировать span overhead — каждый span стоит.

Дополнительные вопросы

  • Что такое span?
  • Чем context propagation помогает?

Что такое SLI, SLO, SLA?

Middle

SLI — Service Level Indicator: измеряемая метрика (доступность, latency). SLO — Service Level Objective: внутренняя цель (99.9% времени availability). SLA — Service Level Agreement: договор с клиентом + штрафы.

Error budget = 100% - SLO. Если SLO 99.9%, у вас 0.1% бюджета ошибок в месяц (~43 минуты).

Из практики: error budget — основа SRE. Если бюджет потрачен — фокус на стабильность, не на новые фичи.

Частые ошибки

  • Установить SLO 100% — невозможно поддерживать.
  • Не следить за бюджетом ошибок.

Дополнительные вопросы

  • Что такое burn rate?
  • Чем SLO отличается от SLA?

Что такое caching и какие стратегии?

Middle

Кеш — хранение результата вычисления для повторного использования. Стратегии: cache-aside (приложение управляет), read-through (кеш сам подгружает), write-through (запись в кеш и БД), write-behind (записать в кеш, БД асинхронно).

Также: TTL (время жизни), eviction policies (LRU, LFU, FIFO).

Из практики: 80% производительности часто решается правильным кешированием. Но кеш — источник багов «вижу старые данные».

Частые ошибки

  • Кешировать всё подряд без понимания TTL и инвалидации.
  • Полагать, что кеш — это всегда быстрее.

Дополнительные вопросы

  • Что такое cache stampede?
  • Чем Redis отличается от Memcached?

Что такое CDN и как его тестировать?

Middle

CDN (Content Delivery Network) — распределённая сеть серверов, кеширующих статику близко к пользователю. Cloudflare, Fastly, CloudFront, Akamai.

Тестируют: время отклика из разных регионов (с помощью webpagetest, lighthouse), правильность cache headers, инвалидацию (purge), fallback при сбое CDN.

Из практики: для пользователей в дальних регионах CDN снижает latency с секунд до миллисекунд. Важно проверять, что критичные ассеты попадают в CDN.

Частые ошибки

  • Полагать, что CDN решает всё — динамический контент не кешируется.
  • Не следить за hit rate.

Дополнительные вопросы

  • Что такое cache invalidation на CDN?
  • Чем edge worker полезен?

Что такое database connection pool?

Middle

Pool соединений с БД, переиспользуемый приложением. Открытие нового соединения дорого (TCP, TLS, auth), а pool позволяет переиспользовать.

Параметры: max_size, min_idle, timeout. PgBouncer — внешний pooler для Postgres.

Из практики: pool size = около (cores * 2 + effective_disk) для CPU-bound операций. Слишком большой pool — больше блокировок в БД, не быстрее.

Частые ошибки

  • Ставить pool size 100+ без понимания.
  • Открывать соединение на каждый запрос.

Дополнительные вопросы

  • Что такое PgBouncer transaction mode?
  • Чем connection pool отличается от thread pool?

Что такое CPU profiling vs memory profiling?

Middle

CPU profiling показывает, где тратится время процессора: какие функции, как часто. Sampling (раз в N мс) vs instrumenting (на каждый вызов).

Memory profiling: что выделяет память, где утечки, какие объекты живут долго. Heap dumps, allocation tracking.

Из практики: для оптимизации производительности — CPU. Для борьбы с OOM и leaks — memory. Часто запускают оба, чтобы получить полную картину.

Частые ошибки

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

Дополнительные вопросы

  • Что такое flame graph?
  • Чем pprof отличается от async-profiler?

Что такое Lighthouse и какие метрики он показывает?

Middle

Lighthouse — инструмент аудита веб-страниц от Google. Показывает: Performance, Accessibility, Best Practices, SEO. В Performance — Core Web Vitals (LCP, INP, CLS).

Запускают в DevTools, CLI или CI (lighthouse-ci). Даёт оценку 0-100 и конкретные рекомендации.

Из практики: lab-метрики (Lighthouse) показывают потенциал на чистой машине. Real-user metrics (RUM) — реальный опыт. Нужны оба.

Частые ошибки

  • Гнаться за 100 в Lighthouse любой ценой.
  • Не различать lab и RUM-метрики.

Дополнительные вопросы

  • Что такое RUM?
  • Чем lighthouse-ci полезен?

Что такое кэширование? Где оно реализуется — на клиенте или сервере?

Middle

Кэширование — хранение результата прошлой операции, чтобы не вычислять/получать его снова. В HTTP кэш может быть на клиенте (браузер), промежуточном узле (CDN, прокси), серверной стороне (Redis, in-memory).

Управляется заголовками: Cache-Control, ETag, Last-Modified, Expires. Сервер диктует политику, клиент/CDN следуют.

Из практики: основные баги — кэшируется то, что не должно (приватные данные), или не кэшируется то, что могло бы (статика). Решается явной политикой Cache-Control.

Частые ошибки

  • Кэшируют ответы с приватной информацией в публичном CDN.
  • Забывают про инвалидацию — пользователь видит «старые» данные.

Дополнительные вопросы

  • Что такое ETag и If-None-Match?
  • Чем public кэш отличается от private?