Как долго решал задачу по оптимизации джобы
Что проверяют
Не само число дней, а как вы распределили время: сколько ушло на поиск причины, сколько на исправление и проверку, и умеете ли оценивать такие задачи. Параллельно смотрят, мерили ли вы до и после. Следом спросят, чем искали узкое место и что помешало сделать быстрее.
Как отвечать
Нужна своя история и свои цифры. Каркас:
- контекст: что делала джоба (Spring Batch,
@Scheduled, Quartz), на каких объёмах, сколько шла и почему это стало проблемой, например перестала укладываться в ночное окно; - диагностика: какими инструментами искали причину: JFR и JDK Mission Control, async-profiler, логи SQL с временем выполнения,
EXPLAINмедленных запросов, GC-логи. Назовите, что нашли; - исправление: типичные находки для Java-джоб: N+1 в Hibernate, вставка по одной строке вместо JDBC batch (
hibernate.jdbc.batch_size, при этом генерация ключейIDENTITYбатчинг вставок отключает), чтение всей таблицы в память вместо постраничного или курсорного ридера, неудачный размер chunk; - сроки по фазам: например, «три дня на воспроизведение и профилирование, два на правки, неделя на прогон на копии прод-данных и выкатку». Если оценка сорвалась, скажите почему и что изменили в подходе;
- результат: время до и после, как замеряли, что стало с нагрузкой на базу.
Если такой задачи не было, не выдумывайте историю. Возьмите ближайший реальный случай, пусть это медленный запрос или долгий тест, расскажите его тем же каркасом, а потом коротко опишите, как подошли бы к джобе: сначала замер, потом профилировщик и только после этого правки.
Где спотыкаются
Называют эффектные цифры без базы: «ускорил в четыре раза», но не могут сказать, на каком объёме и чем мерили. Такие ответы разваливаются на первом уточнении.
Начинают сразу с решения и пропускают диагностику. Слушатель делает вывод, что оптимизация шла наугад: добавили потоки и кэш, и повезло.
Отвечают «за день» или «месяц» без пояснений. Короткий срок без деталей звучит как мелкая задача, длинный как потерянный контроль, если не показать, на что ушло время и когда вы подняли вопрос с командой.