4.4Kпросмотров
62.7%от подписчиков
6 марта 2026 г.
questionScore: 4.8K
Что спрашивают на собесах в 2026? 🤔 Принёс вам 3 горячих вопроса-пирожка (немного перефразированных с тем же смыслом и "сложностью"), налетайте: 1️⃣ Есть метод с @Transactional. Почему при вызове этого метода из другого бина транзакция работает, а при вызове из соседнего метода того же класса зачастую нет? Объясни, как это связано с прокси Spring и что с этим делают в продакшне 2️⃣ Будет ли считаться интерфейс функциональным, если в нём помимо одного абстрактного метода есть ещё один default метод? 3️⃣ Какой будет результат, если к строке "sPrInG sEcUrItY" применить цепочку функций lowFunc (делает lowercase) и uppFunc (делает UPPERCASE)? И чей метод apply в итоге сработает? lowFunc.andThen(uppFunc).apply("sPrInG sEcUrItY") Правильные ответы: (пишите свои варианты ответов в комменты, а потом возвращайтесь сюда) 1️⃣. @Transactional работает через Spring-прокси, то есть когда метод вызывают из другого бина, вызов проходит через прокси, и тот поднимает транзакцию А вот когда ты вызываешь метод сам у себя внутри того же класса, вызов идёт напрямую и эту прослойку обходит, поэтому транзакция может не стартовать, поэтому в реальном коде такие методы обычно выносят в отдельный сервис и вызывают уже через него. Еще один из способов решения - ставить @Transactional на публичные методы с бизнес логикой, чтобы транзакция создавалась. Либо явно использовать TransactionTemplate для управления транзакциями, так в коде будет понятнее где они создаются, но придется руками описывать. Тут важно понять, что аннотации в спринге по типу @Transactional, @Cacheable, @PreAuthorize и др. это не магия, они работают только там, где Spring реально может перехватить вызов 2️⃣. Да, главное чтобы абстрактный метод был один, default/static методы не считаются как абстрактные, методы Object тоже не ломают правило 3️⃣. В результате будет: "SPRING SECURITY", потому что цепочка andThen работает слева направо: • Сначала lowFunc делает все буквы строчными: "spring security"
• Затем uppFunc делает их заглавными: "SPRING SECURITY" Чей метод apply вызовется? Тут тонкий момент - вызовется метод apply у нового (промежуточного) объекта, который был возвращен последним вызовом .andThen(). Но при этом методы apply y lowFunc и uppFunc вызовутся внутри этого нового объекта друг за другом. Чуть подробнее: каждый andThen создает новый объект-обертку (лямбду), когда ты вызываешь .apply() в конце цепочки, ты дергаешь именно эту последнюю «обертку» P.S. Да, вопросы не супер сложные, достаточно базовые, и это не все вопросы с собеса, а только лишь часть. Но базу продолжают спрашивать и сейчас, ничего не изменилось. Ставьте 🔥если вопросы халява и хоть щас ответили бы и ❤️ если бы посыпались, посмотрим сколько нас