Шпаргалка Java · Senior

Компактная шпаргалка «триггер-вопрос → готовый короткий ответ» для быстрого повторения перед собесом уровня Senior по всем ключевым темам Java-разработки, с цветовой кодировкой карточек по риску (база / частое / ловушка).

Что внутри — разделы

  1. 01 Java Core и Collections
  2. 02 JVM под нагрузкой
  3. 03 Многопоточность
  4. 04 Spring
  5. 05 PostgreSQL
  6. 06 Kafka
  7. 07 Архитектура микросервисов
  8. 08 Обмен между сервисами и кэш
  9. 09 DevOps и эксплуатация
  10. 10 Безопасность
  11. 11 Наблюдаемость и инциденты
  12. 12 AI в продакшене и зрелость
  13. 13 Алгоритмы и структуры данных
  14. 14 System Design кейсы
  15. 15 Live-coding и разбор кода
  16. 16 Топ-30 Senior-ловушек
  17. ⏱ Если осталось 5 минут

Примеры карточек

Формат шпаргалки: триггер-вопрос → готовый короткий ответ. Ниже — открытые примеры; все карточки по всем разделам — в полной версии.

Java Core и Collections

Что такое happens-before?

Частичный порядок над действиями (чтение, запись, захват и освобождение блокировки): если A предшествует B по этому порядку, все результаты A видны в B. Порядок транзитивен.

Java Core (ловушка)

Даёт ли synchronized по локальному объекту видимость между потоками?

Нет. Барьер компилятор поставит, но связи happens-before не возникает: этот монитор больше никто не берёт. Синхронизация работает, только когда потоки берут один и тот же монитор.

Многопоточность

Что такое pinning виртуальных потоков?

Виртуальный поток застрял на carrier thread и не отдаёт его. Бывает внутри synchronized и в нативных вызовах: носитель заблокирован, пул носителей быстро исчерпывается. В Java 24 pinning на synchronized убрали.

JVM под нагрузкой (ловушка)

Поставили целевую паузу 50 мс на G1 — что будет?

Молодых сборок станет втрое больше, а пропускная способность упадёт примерно на 20 процентов. G1 честно ужимает молодое поколение, чтобы уложиться в заданную цель.

Spring (ловушка)

REQUIRES_NEW внутри существующей транзакции при пуле на 10 соединений?

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

PostgreSQL

Что такое переполнение счётчика транзакций?

Счётчик транзакций (XID) 32-битный, поэтому старые версии строк VACUUM должен замораживать — иначе после переполнения они оказались бы «из будущего» и стали невидимыми. На подходе к пределу PostgreSQL перестаёт выдавать новые XID и отклоняет пишущие транзакции, пока VACUUM не заморозит старые строки. Раньше для этого базу запускали в однопользовательском режиме.

Kafka (ловушка)

Бывает ли доставка ровно один раз из Kafka в базу?

Нет, это миф. Гарантия действует только между темами Kafka. Для базы нужна идемпотентность по бизнес-ключу: двухфазной фиксации в Kafka нет.

Микросервисы / устойчивость

Каков правильный порядок обёрток отказоустойчивости?

Снаружи повтор, под ним Circuit Breaker, затем TimeLimiter, а Bulkhead — самый внутренний. Так каждая попытка повтора проходит через Circuit Breaker и учитывается, а после его открытия оставшиеся попытки сразу получают отказ. Если повтор внутри, вся серия выглядит для Circuit Breaker одним вызовом, и он открывается с опозданием.

Полная шпаргалка — все триггер-вопросы по всем 17 разделам с ответами и цветокодом (база / частое / ловушка) — в JavaJub Pro.

› новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться