Производительность
Сначала профиль: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Каждый отражает решение, которое ты принимаешь в реальном расследовании «сервис тормозит» — не определение для заучивания, а суждение, которое надо защитить числами.
Убедись, что связываешь измерительный цикл, потолок Amdahl, выбор scope, observer effect, статистическую отчётность и чтение flame graph — тот синтез, к которому вели отдельные уроки.
Профиль показывает топ-функцию на 12% общего CPU. Коллега предлагает героический рерайт, который сделает её в 8x быстрее. Прежде чем одобрить — какое число решающее и что оно говорит?
Flame graph показывает одну функцию с cum-time 80%, но self-time 2%, над единственным широким листом. Что это и где живёт фикс?
Микробенчмарк говорит, что новый хеш в 10x быстрее. Ты хочешь узнать, станет ли быстрее твой API. Какое измерение честно отвечает на это и почему?
Instrumentation-профайлер сообщает горячий Java-метод как 40 мс/вызов; sampling-профайлер — 8 мс/вызов для того же метода. Какой отражает production и что вызывает разрыв?
PR заявляет «на 15% быстрее» по одному staging-прогону. Второй инженер перезапускает тот же неизменённый код и видит разброс 7%. Как читать исходное заявление?
Flame graph показывает тонкие пики, разбросанные по всей ширине, без доминирующего листа, но p99 ужасный. Что говорит форма и что снимать дальше?
Сквозная линия юнита — одно расследование: квантифицируй жалобу, воспроизведи под реалистичной нагрузкой, сними baseline, читай ФОРМУ прежде имён и дай числам — не интуиции — назвать горячую точку. Потолок Amdahl решает, стоит ли фикс (доля важнее локального speedup); self vs cum-time решает, куда смотреть; выбор scope и observer effect решают, какому измерению верить; статистические baseline решают, реален ли «выигрыш»; а разбросанный flame graph говорит, что боттлнек off-CPU. Каждый неверный ответ выше — реальный способ, которым инженеры обманывают себя, оптимизируя не тот код.