Вопросы на собеседовании — Core Java
Эта страница — карта подготовки к собеседованию по языку Java (без Spring и DevOps). Полные разборы — в указанных главах; здесь — тема, что обычно ждут услышать и ссылка "копнуть глубже".
Материал удобно использовать как "тренажёр устных ответов" — открываете строку таблицы, проговариваете определение, короткий пример и ограничение.
Как пользоваться
- Пройдите рекомендуемый порядок по энциклопедиям — хотя бы один раз с примерами кода.
- Откройте внешний список (JavaRush / ITVDN) и отмечайте пункты: "могу объяснить вслух" / "нужно перечитать".
- Закройте пробелы по чек-листу самопроверки.
- На собеседовании отвечайте структурой: определение → пример → ограничение или типичная ошибка.
Источники для сверки формулировок:
- JavaRush: Top-50 Java Core, часть 1 (ООП, синтаксис)
- JavaRush: Top-50, часть 2 (коллекции, исключения)
- JavaRush: Top-50, часть 3 (многопоточность)
- ITVDN: 250+ вопросов по Java (Junior / Middle / Senior)
Примеры ориентированы на Java 17+ (LTS): java.time, records, pattern matching, virtual threads. На собеседовании могут спрашивать и legacy (Date, Vector) — в разделе они упомянуты в контексте "что устарело".
Шпаргалка — десять вопросов, которые встречаются чаще всего
| Вопрос | Суть ответа (30 секунд) | Где углубиться |
|---|---|---|
| JVM, JDK, JRE? | JDK — компилятор и инструменты; JRE — среда только для запуска (устарело как отдельная поставка); JVM — виртуальная машина, исполняет bytecode | Основы, JVM |
== и equals? | == сравнивает ссылки (для объектов) или значения (примитивы); equals — логическое равенство, переопределяют вместе с hashCode | ООП, Строки |
ArrayList или LinkedList? | ArrayList — быстрый доступ по индексу O(1), медленная вставка в середину; LinkedList — вставка O(1) при известном узле, медленный random access | Коллекции |
| checked и unchecked? | Checked — обязаны обработать или throws (IOException); unchecked — наследники RuntimeException, компилятор не заставляет | Исключения |
final? | Константа ссылки (объект можно менять внутри, если поля не final), запрет наследования класса / переопределения метода | ООП, Ключевые слова в Java |
Поток: start() или run()? | start() — JVM создаёт новый поток и вызывает run(); прямой run() — обычный вызов метода в текущем потоке | JVM и потоки |
synchronized и volatile? | synchronized — взаимное исключение + видимость; volatile — видимость без блокировки, без атомарности i++ | JVM, память и потоки, Асинхронность в Java |
| immutable? | Объект, состояние которого после создания не меняется; String, правильно спроектированный record / final-поля | Типы, Современные конструкции Java |
| interface и abstract class? | Интерфейс — контракт, множественное наследование типов; abstract — частичная реализация, поля состояния, один родитель-класс | ООП |
| Stream API? | Декларативные операции над коллекциями: промежуточные (filter, map) ленивые, терминальные (collect) запускают цепочку | Stream API в Java |
JavaRush Top-50 — навигация с подсказками
| № | Тема | Что сказать интервьюеру | Где читать |
|---|---|---|---|
| 1 | Особенности Java | ООП, переносимость bytecode, GC, многопоточность, богатая стандартная библиотека | Основы, JVM, ООП |
| 2–4 | Наследование, инкапсуляция, полиморфизм | IS-A, скрытие полей, вызов метода по типу объекта (динамическая диспетчеризация) | ООП |
| 5–6 | Конструктор, Object | Инициализация состояния; у всех классов корень — java.lang.Object | Конструкции, ООП |
| 7–8 | Локальные и поля экземпляра | Локальные — внутри метода; поля — у объекта; static — у класса | Конструкции |
| 9–12 | Модификаторы, override, сигнатура, overload | public/protected/...; override — та же сигнатура в наследнике; overload — разные параметры | ООП, Ключевые слова в Java |
| 13–18 | interface, default methods, abstract | Контракт + default с Java 8; abstract class — общий код и поля | ООП, Современные конструкции Java |
| 17 | String / StringBuilder / StringBuffer | String immutable; StringBuilder — однопоточная сборка; StringBuffer — synchronized legacy | Строки |
| 19–20 | O(1) в массиве и ArrayList | Индекс → смещение в памяти; у ArrayList амортизированная O(1) для get | Массивы, Коллекции в Java |
| 21 | Autoboxing | int ↔ Integer автоматически; кэш -128…127 для Integer | Типы, Справочник по Java |
| 22 | final | Класс, метод, переменная — разные эффекты | ООП, Ключевые слова в Java |
| 23–24 | Mutable / immutable | Immutable: final поля, нет сеттеров, защитная копия коллекций | Типы данных и переменные в Java, Современные конструкции Java |
| 25–30 | Collections, List, Map, Set | Иерархия Collection; HashMap — hash + equals; HashSet — обёртка над Map | Коллекции |
| 31–36 | Exception, try/catch, checked/unchecked | Иерархия Throwable; try-with-resources для AutoCloseable | Обработка исключений в Java, Иерархия классов исключений в Java |
| 37–42 | Thread, process, lifecycle, start/run | Процесс — ОС; поток — внутри JVM; состояния NEW, RUNNABLE, … | JVM, память и потоки, Асинхронность в Java |
| 43–45 | Daemon, shutdown hook | Daemon не держит JVM; hook — код при завершении | JVM, память и потоки |
| 46–50 | sync, volatile, deadlock, race | Блокировка монитора; volatile — видимость; deadlock — циклическое ожидание lock | JVM, память и потоки, Асинхронность в Java |
ITVDN 250+ — блоки Junior
| Блок ITVDN | Примеры вопросов | На что опереться | Главы |
|---|---|---|---|
| Общие | Паттерны проектирования | Singleton, Factory Method, Abstract Factory, Prototype, Strategy, Iterator, Command, Observer, Facade, Proxy, Mediator, Memento, Chain of Responsibility, Builder, Bridge, Composite, Decorator, Adapter — назначение, не заучивать 23 названия | ООП / SOLID, паттерны, большой гид на Java, практика на Java (122-140) |
| Java Core | JVM, JDK, bytecode, OOM | OOM: heap и metaspace; читать текст исключения и стектрейс | Основы языка Java, JVM, память и потоки, Обработка исключений в Java |
| Java Core | JavaBean, immutable, pass-by-value | В Java передаётся копия ссылки; объект меняется через ссылку | JavaBeans - компонентная модель, Типы данных и переменные в Java, Основные конструкции языка Java |
| ООП | SOLID, overload/override, super, this | Кратко по буквам S-O-L-I-D; super — родитель, this — текущий объект | Объектно-ориентированное программирование в Java, Основные конструкции языка Java |
| ООП | abstract, interface, static, nested | static — принадлежит классу; nested — класс внутри класса | Объектно-ориентированное программирование в Java, Ключевые слова в Java |
| String | пул, equals, StringBuilder | Литералы в string pool; == для строк почти всегда ошибка | Строки в Java, Типы данных и переменные в Java |
| Enum | ordinal, switch | ordinal хрупок при изменении порядка констант | Конструкции §Enum |
| Collections | ArrayList / LinkedList / HashMap | Сложность операций; hashCode+equals для ключей Map | Коллекции в Java, Массивы в Java |
| Object | equals/hashCode, clone, instanceof | Контракт: равные объекты → одинаковый hash; record генерирует equals | Объектно-ориентированное программирование в Java |
| Exceptions | checked/unchecked, try-with-resources | try (Stream s = ...) закрывает ресурс автоматически | Обработка исключений в Java, Иерархия классов исключений в Java |
| Многопоточность | Thread/Runnable, wait/notify | wait/notify только внутри synchronized на том же мониторе | JVM, память и потоки, Асинхронность в Java |
| Stream API | Stream, lazy | Промежуточные операции не выполняются без terminal | Stream API в Java |
| Hibernate / JPA | entity, cascade | @Entity — таблица; cascade — каскад операций на связях | Hibernate и JPA — практический старт, Работа с базами данных из Java |
ITVDN — Middle / Senior
| Тема | Что обычно проверяют | Где в энциклопедии |
|---|---|---|
| Агрегация и композиция | "часть" живёт отдельно и вместе с целым | ООП, паттерны |
| Java 8+ | лямбды, Stream, Optional | Stream API в Java, История языка Java |
| Classloader, memory areas | загрузка классов, heap, stack, metaspace | JVM, память и потоки, Типы данных и переменные в Java |
| Ковариантность, casting | приведение типов, ClassCastException | ООП, Особенности и расширения языка Java |
| Unchecked в фреймворках | Spring оборачивает checked в runtime-исключения | Обработка исключений в Java, Spring Framework |
ConcurrentHashMap, JMM | видимость между потоками, пулы | JVM, память и потоки, Асинхронность в Java |
| GC, профилирование, модули 9+ | G1/ZGC на словах; jcmd/heap dump — JVM в проде — jcmd, дамп памяти и JFR | JVM, память и потоки, Справочник по конфигурациям в Java, Современные конструкции Java |
| Spring, микросервисы, Kafka | вне "чистого Core" | Spring Framework, Экосистема Java-приложений |
Вопросы уровня Senior (CAP, Kubernetes, распределённые транзакции) выходят за рамки Core Java — см. Spring, экосистема, Инфраструктура.
Чего нет в "чистом Core"
| Тема | Глава |
|---|---|
| Spring Boot, REST, Security | Spring Framework, практика Первая программа на Spring Framework–JWT и OAuth2 Resource Server в Spring Boot |
| Hibernate, JPA, JDBC | Работа с базами данных из Java, Hibernate и JPA — практический старт |
| Maven / Gradle, CI | Структура и сборки Java-проектов, Gradle — практический старт |
| Микросервисы, брокеры | Экосистема Java-приложений |
На позицию Java backend часто спрашивают Core и Spring — готовьте оба блока.
Советы по подготовке
Говорите вслух. Определение без примера звучит заученно. Одна строка кода или сценарий ("два ключа с одинаковым hash в HashMap…") повышает доверие.
Признавайте границы. "В проде PostgreSQL, детали G1 смотрю в JVM, память и потоки" — нормальный ответ для Junior.
Legacy. Если спрашивают Date — в новом коде java.time (История языка Java, Современные конструкции Java).
Spring отдельно. Цепочка Первая программа на Spring Framework → Spring Security — практический старт → JWT и OAuth2 Resource Server в Spring Boot → Ошибки REST — @Valid и @ControllerAdvice — типичный REST-стек на собеседовании.
Рекомендуемый порядок повторения
- Основы → Типы → Конструкции → ООП
- Исключения → Коллекции → Строки
- JVM и потоки → Асинхронность
- Stream API → Современный синтаксис
- Чек-лист — закрыть пробелы
- Опционально: Spring Boot, диагностика JVM
Шаблон ответа, который нравится интервьюеру
Для большинства вопросов по Core Java отлично работает структура из трёх шагов:
- Короткое определение термина.
- Мини-пример из практики или 2-3 строки кода.
- Ограничение, типичная ошибка или компромисс.
Пример для "чем HashMap отличается от TreeMap":
HashMapдаёт быстрый доступ по хешу без сортировки ключей;TreeMapхранит ключи в отсортированном виде;- если нужен упорядоченный вывод, берут
TreeMap, если важнее скорость и порядок не нужен, чаще выбираютHashMap.
Что часто недоговаривают кандидаты
| Вопрос | Частая недосказанность | Что стоит добавить |
|---|---|---|
equals и hashCode | Говорят только про equals | Уточнить контракт: равные объекты обязаны иметь одинаковый hash |
volatile | Описывают как "ускоряет" | Пояснить, что это про видимость, не про атомарность |
ArrayList vs LinkedList | Только Big-O из учебника | Добавить, что cache locality у ArrayList часто даёт выигрыш в реальном CPU |
| Checked / unchecked | Только определения | Добавить, где на практике используют runtime-исключения |
Мини-блок "кодом, а не словами"
Если просят объяснить тему, короткий фрагмент кода обычно сильно усиливает ответ:
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("A", 2); // ключ тот же, значение заменилось
System.out.println(map.get("A")); // 2
По этому примеру легко и уверенно объяснить:
- ключи в
Mapуникальны; - повторный
putперезаписывает значение; - поведение связано с
equalsиhashCode.
Как связать Core Java с backend-интервью
На практике backend-собеседование часто строится как цепочка:
- Core Java.
- Коллекции и многопоточность.
- Spring и REST.
- База данных и интеграции.
Поэтому полезно сразу держать мосты к следующим разделам:
- Spring Boot — первый API
- Ошибки REST — @Valid и @ControllerAdvice
- JPA и Hibernate
- JVM в проде — jcmd, дамп памяти и JFR