P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусскийDeutsch

Senior Java BackendВопросы на собеседовании Java разработчика

Senior · 5+ лет опыта

Собеседование Java-разработчика охватывает семантику языка, коллекции, многопоточность, Spring и умение рассуждать о JVM. Ниже — вопросы, которые задают чаще всего, каждый с эталонным ответом. Senior: архитектуру, трейд-оффы, менторство и принятие решений.

Попробовать — без регистрации
Готовим вопрос…

Темы для подготовки

Core Java и ООП
Collections Framework
Многопоточность
Spring Boot и Spring Data
JVM, GC и память
SQL и Hibernate

6 вопросов уровня Senior с ответами

1

Как диагностировать утечку памяти в долгоживущем JVM-сервисе?

Ответ

Сначала убедиться, что это утечка: смотреть heap после полной сборки на протяжении часов, потому что пила, возвращающаяся к базовой линии, утечкой не является. Затем снять heap dump и открыть в MAT — он покажет дерево доминаторов, то есть объекты с наибольшей удерживаемой памятью и того, кто на них ссылается. Обычные ответы: неограниченный кеш, ThreadLocal, не очищенный на пуловом потоке, или слушатели, которые регистрируются и никогда не отписываются.

2

Когда выбрать Saga вместо распределённой транзакции?

Ответ

Почти всегда, потому что двухфазный коммит требует поддержки от всех участников и держит блокировки через сеть, привязывая доступность всех сервисов к самому медленному. Saga выстраивает последовательность локальных транзакций с компенсирующими действиями: каждый сервис коммитит сам, а сбой запускает откат. Плата — компенсации нужно спроектировать, и существуют состояния, где наблюдатель увидит частичное выполнение.

3

Что меняет Project Loom в написании конкурентного кода?

Ответ

Виртуальные потоки делают блокировку дешёвой: поток, ожидающий ввод-вывод, больше не занимает поток ОС, поэтому модель «поток на запрос» масштабируется без реактивной обвязки. Практическое следствие — цепочки CompletableFuture и реактивные стеки, взятые исключительно ради неблокирующего кода, теряют смысл. Не меняется то, что synchronized может «пришпилить» виртуальный поток, а пулы, рассчитанные под потоки ОС, становятся неверной абстракцией.

4

Как выбрать между тюнингом GC и исправлением аллокаций?

Ответ

Сначала измерить скорость аллокации. Если приложение выделяет гигабайты в секунду, никакие настройки сборщика не спасут, и чинить надо код — мусор в горячем цикле, боксинг, защитные копии. Тюнинг GC уместен, когда аллокации разумны, но паузы не укладываются в целевую задержку, и тогда выбор обычно между G1 с целью по паузе и ZGC, если куча настолько большая, что G1 уже не справляется.

5

Команда хочет разрезать монолит на микросервисы. Что спросите до согласия?

Ответ

Какую проблему это решает, которую не решает граница модуля. Независимые деплои и независимое масштабирование — настоящие ответы, «микросервисы это современно» — нет. Дальше, готовы ли они к распределённым данным: никаких джойнов между сервисами, согласованность в конечном счёте и Saga вместо того, что раньше было одной транзакцией. И потянет ли эксплуатация, потому что десять сервисов с одним пайплайном и без трейсинга хуже монолита.

6

Как держать большую Java-кодовую базу пригодной к обновлению между LTS?

Ответ

Держать зависимости близкими к актуальным постоянно, а не отдельным проектом раз в три года — стоимость растёт быстрее линейной от того, насколько вы отстали. Избегать рефлексии во внутренности JDK, потому что именно она ломается об инкапсуляцию модулей. Иметь тесты, которым доверяешь настолько, чтобы поверить зелёному прогону, и обновляться в ветке, собирающейся на обеих версиях, чтобы миграцию можно было ревьюить, а не переживать как обрыв.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью Senior Java Backend →
Бесплатно · 3 интервью в месяц

Другие уровни — Java Backend

Junior Java BackendMiddle Java BackendВсе вопросы Java Backend

Другие специализации

🔍Senior QA Manual🤖Senior QA Automation🐍Senior Python Backend🐘Senior PHP Backend🦫Senior Go Backend🟢Senior Node.js Backend💎Senior Ruby on Rails🟣Senior .NET Backend Developer🔷Senior C++🟨Senior JavaScript