Вопросы на собеседовании — 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)
:::tip Уровень материалов в энциклопедии
Примеры ориентированы на 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), запрет наследования класса / переопределения метода | ООП, 141 |
Поток: start() или run()? | start() — JVM создаёт новый поток и вызывает run(); прямой run() — обычный вызов метода в текущем потоке | JVM и потоки |
synchronized и volatile? | synchronized — взаимное исключение + видимость; volatile — видимость без блокировки, без атомарности i++ | 23, 298 |
| immutable? | Объект, состояние которого после создания не меняется; String, правильно спроектированный record / final-поля | Типы, 300 |
| interface и abstract class? | Интерфейс — контракт, множественное наследование типов; abstract — частичная реализация, поля состояния, один родитель-класс | ООП |
| Stream API? | Декларативные операции над коллекциями: промежуточные (filter, map) ленивые, терминальные (collect) запускают цепочку | 295 |
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 — разные параметры | ООП, 141 |
| 13–18 | interface, default methods, abstract | Контракт + default с Java 8; abstract class — общий код и поля | ООП, 300 |
| 17 | String / StringBuilder / StringBuffer | String immutable; StringBuilder — однопоточная сборка; StringBuffer — synchronized legacy | Строки |
| 19–20 | O(1) в массиве и ArrayList | Индекс → смещение в памяти; у ArrayList амортизированная O(1) для get | Массивы, 24 |
| 21 | Autoboxing | int ↔ Integer автоматически; кэш -128…127 для Integer | Типы, 3 |
| 22 | final | Класс, метод, переменная — разные эффекты | ООП, 141 |
| 23–24 | Mutable / immutable | Immutable: final поля, нет сеттеров, защитная копия коллекций | 15, 300 |
| 25–30 | Collections, List, Map, Set | Иерархия Collection; HashMap — hash + equals; HashSet — обёртка над Map | Коллекции |
| 31–36 | Exception, try/catch, checked/unchecked | Иерархия Throwable; try-with-resources для AutoCloseable | 21, 211 |
| 37–42 | Thread, process, lifecycle, start/run | Процесс — ОС; поток — внутри JVM; состояния NEW, RUNNABLE, … | 23, 298 |
| 43–45 | Daemon, shutdown hook | Daemon не держит JVM; hook — код при завершении | 23 |
| 46–50 | sync, volatile, deadlock, race | Блокировка монитора; volatile — видимость; deadlock — циклическое ожидание lock | 23, 298 |
ITVDN 250+ — блоки Junior
| Блок ITVDN | Примеры вопросов | На что опереться | Главы |
|---|---|---|---|
| Общие | Паттерны проектирования | Singleton, Factory, Strategy — назначение, не заучивать 23 названия | ООП / SOLID, паттерны |
| Java Core | JVM, JDK, bytecode, OOM | OOM: heap и metaspace; читать текст исключения и стектрейс | 1, 23, 21 |
| Java Core | JavaBean, immutable, pass-by-value | В Java передаётся копия ссылки; объект меняется через ссылку | 26, 15, 16 |
| ООП | SOLID, overload/override, super, this | Кратко по буквам S-O-L-I-D; super — родитель, this — текущий объект | 18, 16 |
| ООП | abstract, interface, static, nested | static — принадлежит классу; nested — класс внутри класса | 18, 141 |
| String | пул, equals, StringBuilder | Литералы в string pool; == для строк почти всегда ошибка | 296, 15 |
| Enum | ordinal, switch | ordinal хрупок при изменении порядка констант | Конструкции §Enum |
| Collections | ArrayList / LinkedList / HashMap | Сложность операций; hashCode+equals для ключей Map | 24, 231 |
| Object | equals/hashCode, clone, instanceof | Контракт: равные объекты → одинаковый hash; record генерирует equals | 18 |
| Exceptions | checked/unchecked, try-with-resources | try (Stream s = ...) закрывает ресурс автоматически | 21, 211 |
| Многопоточность | Thread/Runnable, wait/notify | wait/notify только внутри synchronized на том же мониторе | 23, 298 |
| Stream API | Stream, lazy | Промежуточные операции не выполняются без terminal | 295 |
| Hibernate / JPA | entity, cascade | @Entity — таблица; cascade — каскад операций на связях | 293, 22 |
ITVDN — Middle / Senior (кратко)
| Тема | Что обычно проверяют | Где в энциклопедии |
|---|---|---|
| Агрегация и композиция | «часть» живёт отдельно и вместе с целым | ООП, паттерны |
| Java 8+ | лямбды, Stream, Optional | 295, 11 |
| Classloader, memory areas | загрузка классов, heap, stack, metaspace | 23, 15 |
| Ковариантность, casting | приведение типов, ClassCastException | ООП, 19 |
| Unchecked в фреймворках | Spring оборачивает checked в runtime-исключения | 21, 27 |
ConcurrentHashMap, JMM | видимость между потоками, пулы | 23, 298 |
| GC, профилирование, модули 9+ | G1/ZGC на словах; jcmd/heap dump — 302 | 23, 121, 300 |
| Spring, микросервисы, Kafka | вне «чистого Core» | 27, 110 |
Вопросы уровня Senior (CAP, Kubernetes, распределённые транзакции) выходят за рамки Core Java — см. Spring, экосистема, Инфраструктура.
Чего нет в «чистом Core»
| Тема | Глава |
|---|---|
| Spring Boot, REST, Security | 27, практика 271–274 |
| Hibernate, JPA, JDBC | 22, 293 |
| Maven / Gradle, CI | 12, 292 |
| Микросервисы, брокеры | 110 |
На позицию Java backend часто спрашивают Core и Spring — готовьте оба блока.
Советы по подготовке
Говорите вслух. Определение без примера звучит заученно. Одна строка кода или сценарий («два ключа с одинаковым hash в HashMap…») повышает доверие.
Признавайте границы. «В проде PostgreSQL, детали G1 смотрю в 23» — нормальный ответ для Junior.
Legacy. Если спрашивают Date — в новом коде java.time (11, 300).
Spring отдельно. Цепочка 271 → 272 → 274 → 303 — типичный REST-стек на собеседовании.
Рекомендуемый порядок повторения
- Основы → Типы → Конструкции → ООП
- Исключения → Коллекции → Строки
- JVM и потоки → Асинхронность
- Stream API → Современный синтаксис
- Чек-лист — закрыть пробелы
- Опционально: Spring Boot, диагностика JVM
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Основы Java - устройство JDK/JVM, модель компиляции и базовые принципы платформонезависимого выполнения. Java — это объектно-ориентированный язык программирования общего назначения, который работает на принципах «напиши один раз, запускай в любом месте». Набор советов, правил, принципов и обычаев в разработке на этом языке. История Java — от проекта Green и Oak до OpenJDK, LTS-релизов и современной платформы (модули, records, виртуальные потоки). Библиотеки, фреймворки, инструменты сборки, тестирования, развёртывания и мониторинга. Что такое пакет и пакетная структура, как собираются проекты на Java. Справочник-шпаргалка по конфигурациям в Java — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс — раздел. Гайд по установке и настройке с написанием первой программы и её запуском. Практические примеры — консольные утилиты, композиция классов в мини-игре и первое Swing-приложение. Точки останова, пошаговое выполнение, панели Variables и Call Stack — практика отладки в IntelliJ IDEA. Кавычки, точки, запятые, скобки и прочие знаки препинания. Это полный справочник всех ключевых слов языка Java, включая основные, контекстные и зарезервированные слова.Основы языка Java
Что требуется знать перед началом изучения языка программирования Java
Рекомендации по разработке на Java
История языка Java
Экосистема Java-приложений
Структура и сборки Java-проектов
Справочник по конфигурациям в Java
Первая программа на Java
Простые приложения на Java
Отладка Java-кода в IDE
Синтаксис и пунктуация в Java
Ключевые слова в Java