Java — один из самых «строгих» языков по требованиям на собеседованиях. На junior-позиции ожидают глубокого понимания ООП, коллекций и базовой многопоточности. Вот 50 вопросов, которые задают реально.
Как подготовиться к собеседованию junior
Базовый Java (вопросы 1–15)
1. Чем Java отличается от других языков?
Принцип WORA (Write Once Run Anywhere) — код компилируется в байт-код JVM, который работает на любой платформе. Строгая статическая типизация. Автоматическое управление памятью (GC).
2. Что такое JVM, JRE, JDK?
JVM — виртуальная машина, исполняющая байт-код. JRE = JVM + стандартные библиотеки (для запуска приложений). JDK = JRE + компилятор и инструменты разработки.
3. Что такое примитивные типы в Java?
`byte, short, int, long, float, double, char, boolean`. Хранятся в стеке, не являются объектами. Их обёртки — `Integer, Double` и т.д. (автобоксинг).
4. В чём разница между `==` и `equals()`?
`==` сравнивает ссылки (один ли объект в памяти). `equals()` сравнивает содержимое — если переопределён в классе. Для строк всегда используйте `equals()`.
5. Что такое `String Pool`?
Область памяти (часть Heap), где JVM хранит строковые литералы. Строки с одинаковым значением ссылаются на один объект в пуле. `new String("abc")` создаёт объект вне пула.
6. Почему `String` неизменяем?
Безопасность (строки используются в ключах HashMap, URL), возможность кешировать `hashCode`, потокобезопасность. Для изменяемых строк — `StringBuilder` (однопоточный) или `StringBuffer` (многопоточный).
7. Что такое `final`, `finally`, `finalize()`?
`final` — модификатор: нельзя переопределить метод / наследовать класс / переприсвоить переменную. `finally` — блок в try/catch, выполняется всегда. `finalize()` — метод GC перед удалением объекта (устарел в Java 9+).
8. Что такое `static`?
Принадлежит классу, а не экземпляру. `static` поле — одно на все объекты. `static` метод — вызывается без создания объекта. `static` блок — инициализация при загрузке класса.
9. Что такое автобоксинг?
Автоматическое преобразование между примитивами и их обёртками: `int → Integer`, `double → Double`. Обратное — автораспаковка (unboxing). Внимание: `Integer a = 127; Integer b = 127; a == b` → true (кешируются), но `Integer a = 128; Integer b = 128; a == b` → false.
10. Что такое varargs?
Переменное число аргументов: `void method(String... args)`. Внутри метода `args` — массив.
11. Что такое `instanceof`?
Проверяет, является ли объект экземпляром класса или его подкласса. `if (obj instanceof String s)` — с pattern matching (Java 16+).
12. Что такое ковариантность возвращаемого типа?
Переопределённый метод может возвращать подтип того, что возвращает метод родителя.
13. Что такое `Object` в Java?
Базовый класс для всех классов. Ключевые методы: `equals()`, `hashCode()`, `toString()`, `getClass()`, `clone()`, `wait/notify`.
14. Контракт `equals` и `hashCode`?
Если `a.equals(b) == true`, то `a.hashCode() == b.hashCode()`. Обратное необязательно. Нарушение этого контракта ломает HashMap и HashSet.
15. Что такое `try-with-resources`?
Синтаксис для автоматического закрытия ресурсов: `try (InputStream is = ...) { }`. Ресурс должен реализовывать `AutoCloseable`.
ООП и паттерны (вопросы 16–25)
16. Четыре принципа ООП — с примерами на Java?
Инкапсуляция: `private` поля + геттеры/сеттеры. Наследование: `extends`. Полиморфизм: переопределение методов, `@Override`. Абстракция: `abstract class`, `interface`.
17. Чем `abstract class` отличается от `interface`?
Abstract class может иметь состояние (поля), конструктор, реализованные методы. Interface (Java 8+) может иметь `default` методы, но не состояние. Класс может реализовывать несколько интерфейсов, но наследоваться только от одного класса.
18. Что такое `default` методы в интерфейсах?
Java 8+: методы с реализацией в интерфейсе. Нужны для обратной совместимости — добавить метод в интерфейс без ломания реализаций.
19. Что такое паттерн Builder?
Создаёт сложный объект пошагово. Используется в Lombok (`@Builder`), StringBuilder. Решает проблему телескопических конструкторов.
20. Что такое паттерн Singleton?
Гарантирует единственный экземпляр класса. Реализации: eager initialization, lazy initialization, double-checked locking, enum Singleton (предпочтительно в Java).
21. Что такое паттерн Factory Method?
Интерфейс для создания объектов, но подкласс решает, какой класс инстанциировать. Отделяет создание объекта от его использования.
22. Что такое паттерн Observer?
Объект (subject) ведёт список подписчиков (observers) и уведомляет их об изменениях. Основа событийной модели Java (`EventListener`).
23. SOLID — что это?
S — Single Responsibility, O — Open/Closed, L — Liskov Substitution, I — Interface Segregation, D — Dependency Inversion. Для junior достаточно объяснить S и D.
24. Что такое DI (Dependency Injection)?
Зависимости передаются объекту извне, а не создаются внутри. Упрощает тестирование. Основа Spring Framework.
25. Что такое Generic-типы?
Параметризованные типы: `List<String>`, `Map<K, V>`. Обеспечивают типобезопасность на этапе компиляции, устраняют необходимость кастов.
Коллекции (вопросы 26–35)
26. Иерархия коллекций Java?
`Collection` → `List` (ArrayList, LinkedList), `Set` (HashSet, TreeSet, LinkedHashSet), `Queue`. `Map` — отдельная иерархия (HashMap, TreeMap, LinkedHashMap).
27. Чем `ArrayList` отличается от `LinkedList`?
ArrayList — массив: O(1) доступ по индексу, O(n) вставка в середину. LinkedList — двусвязный список: O(n) доступ по индексу, O(1) вставка в начало/конец.
28. Как работает `HashMap`?
Хеш-таблица: ключ → `hashCode()` → индекс корзины. Коллизии — связный список или красно-чёрное дерево (Java 8+, если > 8 элементов в корзине). Capacity по умолчанию 16, load factor 0.75.
29. Чем `HashMap` отличается от `LinkedHashMap` и `TreeMap`?
HashMap — нет гарантии порядка. LinkedHashMap — сохраняет порядок вставки. TreeMap — сортирует по ключу (натуральный порядок или Comparator).
30. Что такое `ConcurrentHashMap`?
Потокобезопасная альтернатива HashMap. В Java 8 использует сегментную блокировку (на уровне bucket), что эффективнее `synchronized`.
31. Чем `HashSet` отличается от `TreeSet`?
HashSet — O(1) операции, нет гарантии порядка. TreeSet — O(log n) операции, элементы отсортированы.
32. Что такое `Iterator`?
Интерфейс для перебора коллекции. Методы: `hasNext()`, `next()`, `remove()`. `for-each` работает через `Iterable` → `Iterator`.
33. Что такое `Comparable` vs `Comparator`?
`Comparable` — естественный порядок, реализуется классом (`compareTo`). `Comparator` — внешний компаратор, передаётся в `sort`. Comparator гибче: можно сортировать по разным полям.
34. Что такое `Collections.unmodifiableList`?
Возвращает обёртку над списком, запрещающую модификацию. Мутирующие методы бросают `UnsupportedOperationException`. Не то же самое, что immutable list — оригинал всё ещё изменяем.
35. Что такое `Optional`?
Контейнер, который может содержать значение или быть пустым. Альтернатива `null`. Методы: `isPresent()`, `get()`, `orElse()`, `map()`, `ifPresent()`.
Многопоточность и JVM (вопросы 36–45)
36. Что такое `Thread` и `Runnable`?
`Thread` — класс потока. `Runnable` — функциональный интерфейс с методом `run()`. Предпочтительнее реализовывать `Runnable` и передавать в `Thread`, чтобы сохранить возможность наследования.
37. Что такое `synchronized`?
Ключевое слово для блокировки: только один поток может выполнять синхронизированный блок/метод одновременно. Используется для защиты общих ресурсов.
38. Что такое `volatile`?
Гарантирует видимость изменений переменной другим потокам (читается из памяти, а не из кеша процессора). Не гарантирует атомарность.
39. Что такое `deadlock`?
Ситуация, когда два потока ожидают ресурс, захваченный друг другом. Решение: упорядочить захват ресурсов, использовать `tryLock` с таймаутом.
40. Что такое `ExecutorService`?
Фреймворк для управления пулом потоков. `Executors.newFixedThreadPool(n)`. Задачи передаются через `submit()` или `execute()`.
41. Что такое `Future` и `CompletableFuture`?
`Future` — результат асинхронной операции. `get()` блокирует до завершения. `CompletableFuture` (Java 8+) — неблокирующие цепочки: `thenApply`, `thenCompose`, `allOf`.
42. Что такое JVM и Heap?
JVM выполняет байт-код. Heap — область памяти для объектов. Делится на Young Generation (новые объекты) и Old Generation (долгоживущие). GC собирает мусор в Young чаще.
43. Что такое Garbage Collector?
Автоматически освобождает память от недостижимых объектов. Виды: Serial, Parallel, G1 (по умолчанию в современных JVM), ZGC.
44. Что такое `ClassLoader`?
Загружает классы в JVM. Три стандартных: Bootstrap (rt.jar), Extension, Application. Иерархия: сначала проверяет родительский, потом свой.
45. Что такое JIT-компиляция?
Just-In-Time: JVM компилирует часто исполняемый байт-код в нативный машинный код во время выполнения. Ускоряет выполнение «горячих» участков кода.
Spring и практика (вопросы 46–50)
46. Что такое Spring IoC Container?
Инверсия управления: не объект создаёт зависимости, а контейнер их внедряет. Бины управляются Spring: создаются, настраиваются, уничтожаются.
47. Что такое Bean в Spring?
Объект, управляемый Spring IoC Container. Создаётся через `@Component`, `@Service`, `@Repository`, `@Controller` или `@Bean` в `@Configuration`.
48. Что такое `@Autowired`?
Аннотация для внедрения зависимостей. Spring находит подходящий бин и внедряет его. Предпочтительный способ — внедрение через конструктор.
49. Что такое `@RestController`?
Комбинация `@Controller` + `@ResponseBody`. Методы возвращают данные напрямую (обычно JSON), не представление.
50. Что такое JPA и Hibernate?
JPA (Jakarta Persistence API) — спецификация ORM для Java. Hibernate — популярная реализация JPA. `@Entity`, `@Table`, `@Column` — маппинг классов на таблицы БД.
FAQ
Нужен ли Spring для junior Java?
Желательно — большинство вакансий подразумевают Spring Boot. Базовые концепции IoC, DI, REST контроллеры — обязательно.
Стоит ли учить Java 21 LTS features?
Records, sealed classes, pattern matching — полезно упомянуть на интервью. Покажет, что следите за языком.
---