Вопросы и ответы
Короткие и практические ответы на инженерные вопросы по backend-разработке, архитектуре и эксплуатации сервисов.
Все вопросы
7 вопросовКогда JVM инициализирует класс и запускает static-блок?
Загрузка класса ещё не означает выполнение static-кода: инициализация запускается только при активном использовании.
JavaJVMSeniorПочему после redeploy приложение может удерживать старый ClassLoader?
Достаточно ссылки из живого объекта родительского загрузчика на объект или класс старого web-приложения.
JavaConcurrencyJVMMiddleПочему volatile не делает counter++ потокобезопасным?
volatile даёт видимость, но инкремент остаётся последовательностью чтения, вычисления и записи.
JavaJVMSeniorПочему один и тот же класс может не приводиться к самому себе?
В JVM тип определяется не только полным именем класса, но и ClassLoader-ом, который его определил.
SpringCoreDISeniorПочему @Transactional не срабатывает в конструкторе или @PostConstruct?
В этот момент Spring ещё работает с исходным объектом, а AOP-proxy обычно появляется позже в lifecycle Bean-а.
JavaConcurrencyJuniorЧем Thread.start() отличается от прямого вызова run()?
start() создаёт новый путь выполнения, а run() остаётся обычным вызовом метода в текущем потоке.
JavaConcurrencyJVMMiddleПочему поток может не увидеть изменение обычного поля?
Без happens-before у JVM и процессора нет обязанности немедленно публиковать запись другому потоку.