Вопрос на собеседовании · Java-разработчик
Как работает @Transactional и в каких случаях он молча не работает?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
Обычно Spring реализует @Transactional через прокси: прокси перехватывает внешний вызов метода, открывает транзакцию, вызывает бизнес-код и затем делает commit или rollback. Поэтому важен не только факт аннотации, но и путь вызова метода.
Типичная ловушка — self-invocation: один метод класса напрямую вызывает другой метод того же объекта, и вызов не проходит через прокси. По умолчанию rollback обычно происходит для unchecked-исключений; правила для других исключений задают явно.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
Сервис сохраняет заказ и позиции заказа в одном публичном transactional-методе. Если сохранение позиции завершается ошибкой, вся операция откатывается. Отправку письма лучше вынести из транзакции через надёжное событие, а не ждать сеть с открытой транзакцией.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Что такое propagation REQUIRES_NEW?
- Какой уровень изоляции используется?
- Почему private-метод с аннотацией может не сработать?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с опорой.
Mira