50 вопросов Junior Java с ответами 2026
Собеседование Java Junior строится вокруг нескольких блоков: основы языка и ООП, коллекции, исключения, многопоточность, JVM, базы данных. В 2026 году список стандартных вопросов стабилен. Разбираем 50 самых частых с ответами — используйте как чек-лист.
Основы Java и ООП
1. В чём разница между JDK, JRE и JVM?
JVM (Java Virtual Machine) — виртуальная машина, выполняет байткод. JRE (Java Runtime Environment) — JVM + стандартные библиотеки для запуска Java-программ. JDK (Java Development Kit) — JRE + компилятор и инструменты разработки.
2. Что такое платформонезависимость Java?
Java-код компилируется в байткод, который выполняет JVM. JVM реализована для разных ОС, поэтому один и тот же байткод работает на Windows, Linux, macOS — «Write once, run anywhere».
3. Что такое ООП и его 4 принципа?
Объектно-ориентированное программирование. Принципы: инкапсуляция (скрытие данных), наследование (переиспользование кода), полиморфизм (один интерфейс — разные реализации), абстракция (упрощение сложности через модели).
4. В чём разница между abstract class и interface?
Abstract class может содержать реализованные методы, поля, конструктор. Класс наследует только один abstract class. Interface — контракт из абстрактных методов (с Java 8 — default-методы). Класс реализует несколько интерфейсов.
5. Что такое полиморфизм?
Способность объектов разных классов обрабатываться через единый интерфейс. Compile-time полиморфизм — перегрузка методов (overloading). Runtime — переопределение методов (overriding) при наследовании.
6. В чём разница между overloading и overriding?
Overloading — несколько методов с одинаковым именем, но разными параметрами в одном классе (compile-time). Overriding — переопределение метода родителя в классе-наследнике (runtime).
7. Что такое `final` в Java?
`final` переменная — нельзя переприсвоить. `final` метод — нельзя переопределить. `final` класс — нельзя унаследовать (например, `String`).
8. Что такое `static`?
`static` означает принадлежность классу, а не экземпляру. `static` поле — одно на всех экземпляров. `static` метод — вызывается без создания объекта.
9. В чём разница между `==` и `equals()`?
`==` для объектов проверяет, что это один и тот же объект в памяти. `equals()` — проверяет равенство по значению (метод нужно переопределить в своём классе).
10. Что такое `hashCode()` и зачем переопределять вместе с `equals()`?
`hashCode()` возвращает числовой хеш объекта. Контракт: если `a.equals(b)`, то `a.hashCode() == b.hashCode()`. Коллекции HashMap/HashSet используют хеш для размещения. Нарушение контракта ломает поведение коллекций.
Строки и примитивы
11. Почему String неизменяем (immutable)?
После создания строку нельзя изменить. Операции создают новый объект. Это обеспечивает безопасность (строки часто используют как ключи) и позволяет кэшировать хеш.
12. Что такое String Pool?
Область в JVM, где хранятся строковые литералы. Одинаковые литералы указывают на один объект. Поэтому `"abc" == "abc"` — true, но `new String("abc") == new String("abc")` — false.
13. Чем `StringBuilder` отличается от `StringBuffer`?
Оба изменяемые аналоги String. `StringBuilder` — несинхронизированный, быстрее, используют в одном потоке. `StringBuffer` — синхронизированный, потокобезопасный, медленнее.
14. Что такое boxing и unboxing?
Boxing — автоматическое преобразование примитива в объект-обёртку (`int` → `Integer`). Unboxing — обратное. Происходит автоматически, но может вызвать `NullPointerException` при unboxing null.
Коллекции
15. Что такое Java Collections Framework?
Набор интерфейсов и классов для работы с коллекциями: `List`, `Set`, `Map`, `Queue`. Основные реализации: `ArrayList`, `LinkedList`, `HashSet`, `TreeSet`, `HashMap`, `TreeMap`.
16. В чём разница между ArrayList и LinkedList?
`ArrayList` — массив. Быстрый доступ по индексу O(1), медленная вставка в середину O(n). `LinkedList` — двусвязный список. Медленный доступ O(n), быстрая вставка/удаление в произвольном месте O(1) при уже известном узле.
17. Как работает HashMap внутри?
HashMap — массив «вёдер» (buckets). При `put(key, value)` вычисляется хеш ключа, определяется ведро. Коллизии решаются цепочкой (LinkedList или TreeMap при длинных цепочках с Java 8). Средняя сложность O(1).
18. В чём разница между HashMap и TreeMap?
`HashMap` — неупорядоченный, O(1) доступ. `TreeMap` — хранит ключи в отсортированном порядке (красно-чёрное дерево), O(log n) операции.
19. В чём разница между HashSet и TreeSet?
`HashSet` — неупорядоченный, O(1). `TreeSet` — ключи в порядке, O(log n). Аналогично HashMap vs TreeMap.
20. Что такое Iterator?
Интерфейс для последовательного обхода коллекции: `hasNext()`, `next()`, `remove()`. Используется в `for-each`. `ConcurrentModificationException` возникает при изменении коллекции во время итерации.
Исключения
21. В чём разница между checked и unchecked исключениями?
Checked (проверяемые) — компилятор требует обработки (`IOException`, `SQLException`). Unchecked — `RuntimeException` и наследники — не требуют явной обработки (`NullPointerException`, `ArrayIndexOutOfBoundsException`).
22. Что такое `try-with-resources`?
Конструкция для автоматического закрытия ресурсов, реализующих `AutoCloseable`. Вызывает `close()` после блока try, даже при исключении:
```java
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
// работа с файлом
}
```
23. Зачем создавать собственные исключения?
Для более точного описания ошибок в предметной области: `UserNotFoundException`, `InsufficientFundsException`. Позволяет обрабатывать ошибки по смыслу, а не по техническому типу.
Многопоточность
24. Что такое Thread и Runnable?
`Thread` — класс для создания потоков. `Runnable` — функциональный интерфейс с методом `run()`. Предпочтительнее реализовывать `Runnable` (не ограничивает наследование) и передавать в `Thread`.
25. Что такое `synchronized`?
Ключевое слово для синхронизации: только один поток выполняет синхронизированный блок/метод одновременно. Предотвращает race condition, но снижает производительность.
26. Что такое `volatile`?
Гарантирует видимость изменений переменной между потоками — значение всегда читается из основной памяти, а не из кэша потока. Не решает проблему атомарности операций.
27. Что такое deadlock?
Ситуация, когда два потока ждут ресурсов, удерживаемых друг другом, и оба заблокированы. Решение: фиксированный порядок захвата блокировок, `tryLock()`, избегание вложенных блокировок.
28. Что такое `ExecutorService`?
Высокоуровневое API для управления пулом потоков. Вместо создания `Thread` вручную — задачи отправляют в `ExecutorService`. `Executors.newFixedThreadPool(N)` — пул из N потоков.
JVM и память
29. Как устроена память JVM?
Heap — для объектов и массивов. Stack — для локальных переменных и вызовов методов каждого потока. Method Area (MetaSpace с Java 8) — метаданные классов. Heap делится на Young Generation и Old Generation.
30. Что такое Garbage Collector?
Автоматически освобождает память объектов, на которые больше нет ссылок. Различные алгоритмы: Serial, G1 (дефолтный с Java 9), ZGC. GC вызывает «stop-the-world» паузы.
31. Что такое `finalize()`?
Устаревший метод, вызываемый GC перед удалением объекта. Не рекомендуется — поведение непредсказуемо, deprecated с Java 9. Вместо него — `try-with-resources` или `Cleaner`.
Функциональное программирование (Java 8+)
32. Что такое lambda в Java?
Анонимная реализация функционального интерфейса: `(a, b) -> a + b`. Упрощает код, устраняет анонимные классы.
33. Что такое Stream API?
Цепочка операций над коллекциями: `list.stream().filter(...).map(...).collect(...)`. Ленивые операции (не выполняются до терминальной). Не изменяет исходную коллекцию.
34. Что такое Optional?
Обёртка для значения, которое может отсутствовать. Альтернатива явным проверкам на null. `Optional.of(value)`, `Optional.empty()`, `orElse()`, `ifPresent()`.
35. Что такое `Comparator` и `Comparable`?
`Comparable` — интерфейс класса для естественной сортировки (`compareTo()`). `Comparator` — внешний компаратор, задаёт порядок без изменения класса: `Comparator.comparing(Person::getAge)`.
Базы данных и SQL
36. Что такое JDBC?
Java Database Connectivity — стандартный API для работы с реляционными БД. `Connection`, `PreparedStatement`, `ResultSet`. ORM (Hibernate) работает поверх JDBC.
37. В чём разница между `Statement` и `PreparedStatement`?
`PreparedStatement` — предварительно компилированный запрос с параметрами. Защищает от SQL-инъекций и быстрее при многократном выполнении.
38. Что такое транзакция и ACID?
Транзакция — набор операций, выполняемых как единое целое. ACID: Atomicity (всё или ничего), Consistency (данные остаются корректными), Isolation (транзакции изолированы друг от друга), Durability (завершённые транзакции сохраняются).
Spring Boot
39. Что такое Spring IoC и Dependency Injection?
IoC (Inversion of Control) — объекты не создают зависимости сами, их предоставляет контейнер. DI — конкретный способ реализации IoC: зависимости «внедряются» через конструктор, сеттер или поле.
40. Что такое `@Bean`, `@Component`, `@Service`, `@Repository`?
`@Bean` — явное объявление бина в `@Configuration`-классе. `@Component` — базовая аннотация для автоматического обнаружения бина. `@Service` и `@Repository` — специализации `@Component` для сервисного и DAO слоёв.
41. Что такое `@Autowired`?
Аннотация для автоматического внедрения зависимости. Spring находит подходящий бин и внедряет его. Предпочтительный способ — через конструктор, а не через поле.
42. Что такое REST Controller в Spring?
`@RestController` = `@Controller` + `@ResponseBody`. Методы возвращают данные напрямую (JSON/XML), а не представление. `@GetMapping`, `@PostMapping`, `@PathVariable`, `@RequestBody`.
Прочее
43. Что такое `equals()` и `hashCode()` контракт?
Если объекты равны по `equals()`, у них должен быть одинаковый `hashCode()`. Обратное не обязательно. Нарушение контракта ломает HashMap, HashSet, другие хеш-структуры.
44. Что такое enum в Java?
Перечисление — тип с фиксированным набором значений: `enum Status {ACTIVE, INACTIVE}`. Enum может иметь поля, методы, конструктор. Потокобезопасен, подходит для singleton.
45. Что такое generics?
Параметризованные типы: `List<String>`, `Map<K, V>`. Обеспечивают типобезопасность на уровне компиляции, убирают необходимость cast.
46. Что такое wildcard `<?>` в generics?
Неизвестный тип. `<? extends T>` — тип T или его подтип (для чтения). `<? super T>` — тип T или его предок (для записи). PECS: Producer Extends, Consumer Super.
47. Что такое `Serializable`?
Маркерный интерфейс, позволяющий сериализовать объект (превратить в поток байт). `serialVersionUID` — идентификатор версии класса для десериализации.
48. Что такое default method в интерфейсе?
С Java 8 интерфейсы могут содержать реализации методов через `default`. Позволяет добавлять методы в интерфейс без нарушения существующих реализаций.
49. В чём разница между `ArrayList.remove(int index)` и `ArrayList.remove(Object o)`?
Первый удаляет по индексу, второй — первое вхождение объекта. Для списка Integer нужна осторожность: `list.remove(Integer.valueOf(5))` vs `list.remove(5)`.
50. Что такое record в Java (Java 14+)?
Компактный способ объявления неизменяемого класса-данных: `record Point(int x, int y) {}`. Автоматически генерирует конструктор, геттеры, `equals()`, `hashCode()`, `toString()`.
FAQ
Что спрашивают на собеседовании Java Junior в Яндексе и Сбере?
Яндекс — алгоритмические задачи + глубина по Core Java. Сбер — вопросы по Spring, базам данных, транзакциям. Подготовка: собеседование junior-разработчика.
Нужно ли знать Spring Boot для junior-позиции?
Базовое понимание IoC, Dependency Injection, REST Controller — ожидается. Глубокое знание Spring Security, Spring Data JPA — плюс, но не обязательно.
Как готовиться к алгоритмическому блоку на Java?
LeetCode Easy — 30–50 задач на Java. Знать коллекции: когда использовать HashMap vs TreeMap, PriorityQueue, ArrayDeque. Оценивать сложность O(n).
Обязательно ли знать многопоточность junior-у?
Базово — да: что такое `Thread`, `synchronized`, `volatile`, `ExecutorService`. Глубоко (lock-free, `CompletableFuture`) — уровень middle.
Что читать для подготовки к Java-собеседованию?
«Core Java» Кея Хорстмана (тома 1–2), Effective Java Блока, практика на LeetCode + JavaRush.