Использовали ли автоматизированные инструменты для генерации кода
Что проверяют
Насколько осознанно вы используете генерацию: знаете ли, что происходит под капотом, где она окупается и где создаёт проблемы. Следом обычно спрашивают про подводные камни конкретного инструмента или про то, как вы проверяете код, который написал не человек.
Как отвечать
Стройте ответ на своём опыте: инструмент, какую задачу он решал, как встроен в сборку, на что вы наткнулись и что получили в итоге. Цифры (сколько кода ушло, насколько меньше времени уходит на рутину) нужны ваши, а не шаблонные.
Инструменты, которые уместно назвать в Java-проекте:
- Lombok: процессор аннотаций, который вмешивается в компиляцию и дописывает геттеры, конструкторы,
@Builder. Удобно, но это зависимость от внутренностейjavac; - MapStruct: генерирует маппинг DTO в сущности на этапе компиляции, без рефлексии, несовпадение полей видно при сборке;
- OpenAPI Generator,
protocдля gRPC, генерация jOOQ по схеме базы: код из контракта или схемы, подход contract-first; - Spring Initializr: каркас проекта, разовая генерация;
- ИИ-ассистенты в IDE: сейчас про них спрашивают почти всегда. Хороший ответ описывает правила: код проходит ревью как чужой, покрывается тестами, секреты и закрытый код в подсказки не уходят.
Покажите и инженерную сторону: сгенерированный код лежит в target/generated-sources или build/generated, собирается плагином Maven или Gradle и в репозиторий не коммитится. Для простых DTO с Java 16 есть record, и часть задач Lombok отпадает сама.
Если опыта мало, скажите честно и опирайтесь на то, что было: генерация кода в IDE, record, MapStruct на пет-проекте. Это лучше выдуманного опыта: о нём тут же спросят подробно.
Где спотыкаются
Ставят @Data на JPA-сущность. Сгенерированные equals, hashCode и toString трогают ленивые связи, отсюда лишние запросы, LazyInitializationException и проблемы с прокси Hibernate.
Правят сгенерированный код руками. При следующей сборке правки молча исчезают, менять нужно спецификацию или настройки генератора.
Хвалят инструмент без минусов. Интервьюер ждёт хотя бы один компромисс: время сборки, отладка кода, которого нет в исходниках, привязка к версии компилятора.