Расскажите про опыт оптимизации
Что проверяют
Отличаете ли вы оптимизацию по замерам от оптимизации по ощущениям. За вопросом стоит проверка: умеете ли вы найти узкое место инструментом, объяснить, почему оно узкое, и вовремя остановиться, когда выигрыш перестал окупать усложнение кода.
Как отвечать
Держите одну историю и ведите её по шагам: симптом, гипотеза, замер, изменение, повторный замер.
- симптом: не «было медленно», а метрика: вырос p99 у ручки, сервис упирается в CPU, память растёт до срабатывания лимита;
- инструмент:
pprofс профилями cpu, heap, block и mutex,go tool trace, бенчмаркиgo test -bench . -benchmem, логи сборщика мусора; - находка: что конкретно показал профиль, а не что вы подозревали;
- результат: числа до и после на одном и том же нагрузочном профиле.
Находки, о которых в Go можно говорить уверенно: лишние аллокации в горячем пути (предвыделение через make([]T, 0, n), strings.Builder вместо склейки в цикле), уход значений в кучу из-за интерфейсов, компиляция регулярного выражения внутри цикла, сериализация на каждый запрос, конкуренция за общий мьютекс, N+1 обращений к базе.
func BenchmarkEncode(b *testing.B) {
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_ = Encode(payload)
}
}Сильный финал: сказать, чем пожертвовали (читаемость, инвалидация кеша) и какие гипотезы профиль не подтвердил.
Где спотыкаются
Называют круглые проценты без методики. «Ускорил на 30%» тянет вопросы, чем мерили, на какой нагрузке и сколько было прогонов, и заученная история рассыпается. Честные цифры своего бенчмарка вместе с названием инструмента звучат сильнее красивых.
Второе: оптимизируют до профилирования. В Go это выглядит как горутины и кеш поверх кода, который ждёт базу. Параллелизм добавляет переключения, гонки и конкуренцию за ресурс, а время всё так же уходит в запрос без индекса.
Третье: путают пропускную способность с задержкой и приводят среднее. Среднее прячет хвост, а пользователь живёт как раз в хвосте, поэтому говорить нужно про перцентили. Отдельно спросят про кеш: он меняет семантику, и вопрос про устаревшие данные придёт обязательно.