P
prepair.app
Пройти интервью →
EnglishУкраїнськаРусскийDeutsch

Junior Java BackendВопросы на собеседовании Java разработчика

Junior · без опыта / до 1 года

Собеседование Java-разработчика охватывает семантику языка, коллекции, многопоточность, Spring и умение рассуждать о JVM. Ниже — вопросы, которые задают чаще всего, каждый с эталонным ответом. Junior: базовая теория, определения и простые практические кейсы.

Попробовать — без регистрации
Готовим вопрос…

Темы для подготовки

Core Java и ООП
Collections Framework
Многопоточность
Spring Boot и Spring Data
JVM, GC и память
SQL и Hibernate

10 вопросов уровня Junior с ответами

1

В чём разница между == и equals() для объектов?

Ответ

== сравнивает ссылки — указывают ли две переменные на один объект в памяти. equals() сравнивает содержимое, если класс его переопределил; по умолчанию Object.equals сводится к тому же ==. Именно поэтому две строки, собранные в рантайме, дают false при == и true при equals(), и это самая частая ловушка на собеседовании по Java.

2

Чем интерфейс отличается от абстрактного класса?

Ответ

Абстрактный класс может хранить состояние и иметь конструкторы, он описывает, чем объект является; наследоваться можно только от одного. Интерфейс описывает, что объект умеет, и реализовать их можно много. С Java 8 у интерфейсов есть default-методы, поэтому практическое правило такое: общее состояние — абстрактный класс, общая способность — интерфейс.

3

Что такое автоупаковка и где она подводит?

Ответ

Автоупаковка — это автоматическое преобразование между примитивами и обёртками. Подводит она в двух местах: сравнение обёрток через == случайно работает для маленьких значений из-за кеша Integer от -128 до 127 и потом тихо перестаёт работать, а распаковка null-Integer бросает NullPointerException в строке, которая выглядит обычной арифметикой.

4

Объясните final, finally и finalize.

Ответ

Несмотря на схожие имена, они не связаны. final запрещает переприсваивание переменной, переопределение метода или наследование класса. finally — блок, который выполняется независимо от того, было исключение или нет, для освобождения ресурсов. finalize — метод, который сборщик мусора мог вызвать перед удалением объекта; он ненадёжен и объявлен устаревшим, вместо него try-with-resources.

5

Чем ArrayList отличается от LinkedList?

Ответ

ArrayList оборачивает расширяемый массив: доступ по индексу O(1), но вставка в середину сдвигает всё, что после неё. LinkedList — двусвязный список: вставка у известного узла O(1), но добраться до индекса n стоит n шагов, и каждый элемент несёт накладные расходы на указатели. На практике ArrayList выигрывает почти всегда, потому что локальность кеша важнее асимптотики на реальном железе.

6

Что на самом деле означает ключевое слово static?

Ответ

Static-член принадлежит классу, а не экземпляру: он существует в одном экземпляре независимо от количества объектов и доступен без создания объекта. Забывают о следствии — статическое поле это разделяемое изменяемое состояние на всё приложение, что удобно для констант и служит источником тяжёлых багов для всего, что меняется.

7

В чём разница между checked и unchecked исключениями?

Ответ

Checked наследуются от Exception, и компилятор заставляет их поймать или объявить; они описывают ситуации, из которых вызывающий может разумно восстановиться, например отсутствие файла. Unchecked наследуются от RuntimeException и сигналят об ошибках программиста — null, неверный аргумент. Unchecked для багов, checked умеренно, потому что принуждение обрабатывать обычно рождает пустые catch-блоки.

8

Каков контракт между `equals()` и `hashCode()`?

Ответ

Если два объекта равны, они обязаны возвращать одинаковый хеш-код; обратное не требуется. Нарушите — и HashMap перестанет работать: вы кладёте объект, ищете по равному ему и получаете null, потому что поиск ушёл в другую корзину. Поэтому переопределение одного без другого — баг, а не вопрос стиля.

9

Почему `String` в Java неизменяемый?

Ответ

Потому что он разделяемый. Литералы живут в пуле строк, и на один экземпляр может ссылаться много мест, так что изменяемая строка позволила бы одному держателю поменять значение у другого. Неизменяемость заодно делает строки потокобезопасными без синхронизации, позволяет кэшировать хеш-код и оставляет их безопасными для загрузки классов и параметров подключения, где поздняя подмена была бы дырой в безопасности.

10

Можно ли переопределить статический метод?

Ответ

Нет, его можно только скрыть. Переопределение разрешается во время выполнения по типу объекта, а статический метод — во время компиляции по типу ссылки. Поэтому подкласс с той же статической сигнатурой не заменяет родительский: выполнится тот, что соответствует объявленному типу, а не фактическому объекту, — ровно поэтому вызывать статику через ссылку на экземпляр не рекомендуют.

🦎

Прочитать ответы недостаточно

На собеседовании ты говоришь вслух под давлением. Кем задаст эти же вопросы, оценит каждый ответ и покажет, что именно подтянуть.

Пройти интервью Junior Java Backend →
Бесплатно · 3 интервью в месяц

Другие уровни — Java Backend

Middle Java BackendSenior Java BackendВсе вопросы Java Backend

Другие специализации

🔍Junior QA Manual🤖Junior QA Automation🐍Junior Python Backend🐘Junior PHP Backend🦫Junior Go Backend🟢Junior Node.js Backend💎Junior Ruby on Rails🟣Junior .NET Backend Developer🔷Junior C++🟨Junior JavaScript