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