327 Питань на співбесіду java developer - become java senior
327 питань на співбесіду Java Developer
Ти не повіриш, який цінний матеріал мені частенько підкидають початківці розробники.
Один з таких - величезний список питань по Java, які можна почути на співбесіді, причому для всіх рівнів, Junior / Middle / Senior. Підтверджую - мені частенько ставили ці питання, та й я сам, в ролі інтерв'юера, їх ставив.
Так як я часто про схожий списку говорив, то вирішив поділитися з тобою. Навряд чи ти на просторах рунета знайдеш більш повний і детальний варіант.
Велике спасибі моєму учневі @Alexander Metelchenko з а наданий список.
До речі, чималу частину цих питань покриває email-курс JavaRanger і JavaEEHunter. Так само, це відмінний інструмент перевірити свої знання з JavaSE / EE. SQL і web.

Зміст:
Типи даних, змінні, оператори, цикли, масиви
- Скільки ключових слів зарезервовано мовою, що це за слова, які з них не використовуються?
- З яких символів може складатися ім'я змінної (коректний ідентифікатор)?
- Що значить слово «ініціалізація»?
- На які основні групи можна поділити типи даних?
- Які примітивні типи ви знаєте? Назвіть розмірність в байтах для кожного типу.
- Що ви знаєте про перетворення примітивних типів даних, чи є втрата даних, чи можна перетворити логічний тип?
- Якими значеннями инициализируются змінні за замовчуванням?
- Як передається значення змінної (за посиланням / значенням)?
- Що ви знаєте про функції main, які обов'язкові умови її визначення?
- Які логічні операції і оператори ви знаєте?
- У чому різниця короткої і повної схеми запису логічних операторів?
- Що таке таблиця істинності?
- Що таке тернарний оператор вибору?
- Які унарні операції ви знаєте?
- Яка арифметична операція виконується при побітового зсуві вправо / вліво?
- Яка роль і правила написання оператора вибору?
- Які цикли ви знаєте, в чому їх відмінності?
- Що таке «ітерація циклу»?
- Які параметри має цикл for, чи можна їх не поставити?
- Який оператор використовується для негайної зупинки циклу?
- Який оператор використовується для переходу до наступної ітерації циклу?
- Що таке масив?
- Які види масивів ви знаєте?
- Що ви знаєте про класи оболонках?
- Що таке автоупаковка (boxing / unboxing)?
ООП (зміст)
Винятки (зміст)
- Дайте визначення поняттю «виключення»
- Яка ієрархія винятків.
- Можна / чи потрібно обробляти помилки jvm?
- Які існують способи обробки виключень?
- Про що говорить ключове слово throws?
- У чому особливість блоку finally? Чи завжди він виповнюється?
- Чи може бути жодного блоку catch при відлові винятків?
- Могли б ви придумати ситуацію, коли блок finally не буде виконано?
- Чи може один блок catch відловлювати кілька винятків (з одного і різних гілок наслідувань)?
- Що ви знаєте про оброблюваних і не оброблюваних (catched / uncatched) винятки?
- У чому особливість RuntimeException?
- Як написати власне ( «призначене для користувача») виняток? Якими мотивами ви будете керуватися при виборі типу виключення: checked / unchecked?
- Який оператор дозволяє примусово викинути виняток?
- Чи є додаткові умови до методу, який потенційно може викинути виняток?
- Чи може метод main вибровіть виняток у поза і якщо так, то де буде відбуватися обробка даного виключення?
- Якщо оператор return міститься і в блоці catch і в finally, який з них «головніший»?
- OutOfMemoryError
- SQLException і поцікавитися, воно chekced або unchecked і нормально чи це на думку кандидата.
- Що таке Error? В якому випадку використовується Error. Наведіть приклад Error'а.
- Яка конструкція використовується в Java для обробки винятків?
- Чи можливе використання блоку try-finally (без catch)?
- Припустимо, є блок try-finally. У блоці try виникло виключення і виконання перемістилося в блок finally. У блоці finally теж виникло виключення. Яке з двох винятків "випаде" з блоку try-finally? Що трапиться з другим винятком?
- Припустимо, є метод, який може викинути IOException і FileNotFoundException в якій оследовательності повинні йти блоки catch? Скільки блоків catch буде виконано?
Колекції (зміст)
Рядки (зміст)
- Які «строкові» класи ви знаєте?
- Які основні властивості «строкових» класів (їх особливості)?
- Чи можна успадкувати строковий тип, чому?
- Дайте визначення поняттю конкатенація рядків.
- Як перетворити рядок в число?
- Як порівняти значення двох рядків?
- Як перевернути рядок?
- Як працює порівняння двох рядків?
- Як обрізати прогалини в кінці рядка?
- Як замінити символ в рядку?
- Як отримати частину рядка?
- Дайте визначення поняттю «пул рядків».
- Який метод дозволяє виділити підрядок в рядку?
- Як розбити рядок на підрядка по заданому разделителю?
- Який метод викликається для перетворення змінної в рядок?
- Як дізнатися значення конкретного символу рядка, знаю його порядковий номер у рядку?
- Як знайти необхідний символ в рядку?
- Чи можна синхронізувати доступ до рядка?
- Що робить метод intern ()?
- Чим відрізняються і що спільного у класів String, StringBuffer і StringBuilder?
- Як правильно порівняти значення рядків двох різних об'єктів типу String і StringBuffer?
Потоки введення / виведення (зміст)
Потоки виконання / багатопоточність (зміст)
- Дайте визначення поняттю «процес».
- Дайте визначення поняттю «потік».
- Дайте визначення поняттю «синхронізація потоків».
- Як взаємодіють програми, процеси та потоки?
- В яких випадках доцільно створювати кілька потоків?
- Що може статися якщо два потоки будуть виконувати один і той же код в програмі?
- Що ви знаєте про головне потоці програми?
- Які є способи створення і запуску потоків?
- Який метод запускає потік на виконання?
- Який метод описує дію потоку під час виконання?
- Коли потік завершує своє виконання?
- Як синхронізувати метод?
- Як примусово зупинити потік?
- Дайте визначення поняттю «потік-демон».
- Як створити потік-демон?
- Як отримати поточний потік?
- Дайте визначення поняттю «монітор».
- Як призупинити виконання потоку?
- В яких станах може прібиватьпоток?
- Що є монітором при виклику нестатичних і статичного методу?
- Що є монітором при виконанні ділянки коду методу?
- Які методи дозволяють синхронізувати виконання потоків?
- Який метод переводить потік в режим очікування?
- Яка функціональність методів notify і notifyAll?
- Що дозволяє зробити метод join?
- Які умови виклику методу wait / notify?
- Дайте визначення поняттю «взаємне блокування».
- Чим відрізняються методи interrupt, interrupted, isInterrupted?
- В якому випадку буде викинуто виключення InterruptedException, які методи можуть його викинути?
- Модифікатори synchronized і volatile
- пакет java.util.concurrent
- Які ви знаєте способи запустити деяку дію в окремому потоці?
- Які ви знаєте способи припинити виконання потоку?
- Які ключові слова Java, пов'язані з багатопоточність Ви знаєте?
- Є деякий метод, який виконує операцію i ++. Мінлива i типу int. Передбачається, що код буде здійсняться в багатопотокової середовищі. Чи слід синхронізувати блок?
- Що служить в якості mutex, якщо метод оголошений synchronized?
- Чи можна викликати в різних потоках два synchronized методу одного і того ж об'єкта?
- Що використовується в якості mutex, якщо метод оголошений static synchronized? Чи можна створювати нові кземпляри класу, поки виконується static synchronized метод?
- Поясніть, що таке deadlock? Наведіть приклад коду, який демонструє deadlock.
- Які особливості використання методу wait? За яких умов потік може вийти з режиму очікування?
- Припустимо в методі run виник RuntimeException, який не був спійманий. Що трапиться з потоком? Чи є спосіб дізнатися про те, що Exception стався (не укладаючи все тіло run в блок try-catch)? Чи є спосіб відновити роботу потоку після того як це сталося?
- Які стандартні інструменти Java ви б використовували для реалізації пулу потоків?
SQL, JDBC (зміст)
JSP (зміст)
Servlet (зміст)
Web (зміст)

А ти знаєш відповіді на всі питання для Java Interview?
Пригадую що здається був на п'яти інтерв'ю в п'яти різних компаніях, і тільки в одній серії я бачив питання на кшталт «що означає ключове слово synchronized».
Але яке це має значення? Хіба потрібен великий досвід проходження або проведення інтерв'ю щоб зрозуміти що вміння відповідати на питання з цього поста далеко не говорить про те що кандидат вміє програмувати, так само як і вміння кандидата програмувати далеко не обов'язково дозволить йому відповісти на ці питання?
Ви ж шукаєте людини який буде писати код, навіщо ж його питати визначення класу? Це все одно як шукати людину яка буде стріляти з рушниці, і замість того щоб попросити його постріляти, питати його про балістики кулі і просити його назвати всі складові ударно-спускового механізму.
Просто я чув історії про те як абсолютно безглузді особистості зазубрювали книги і їх брали на Сеніор джава девелоперів, а також і інші історії про осудних програмістів які не могли пройти інтерв'ю бо вони не пам'ятали якісь визначення. Я раніше не міг зрозуміти як так, але бачачи список питань в цьому пості я бачу що це можливо.
Георгій,
Багато з чим згоден.
Я б пояснив це так:
1. Чи потрібен не тільки кодер, який пише код, скільки людина, яка приймає правильні рішення. Без знання теорії ці рішення завжди будуть невірні. Якщо кодер не може пояснити що таке synchronized, то якої якості многопоточного додатки він напише?
2. Слід і першого, програмісти, які добре знають теорію найчастіше пишуть хороший код і приймають правильні вислови (але не завжди).
Програмісти вміють писати код, і не знають теорії частіше пишуть поганий код і приймають неправильні рішення (але не завжди).
Працює банальна статистика - замовники знижують ризики роздобути «корявого» програміста.
3. Які практичні завдання можна питати скажімо у Junior, він же кілька сот рядків написав за своє життя? Залишається тільки теорія. Якщо він її знає - то навчитися і писати код.
4. Ніхто не скасовує тестові практичні завдання, їх так само задають. На інтерв'ю на позицію Java Teach Lead 70% часу я вирішував практичні завдання з кодом. Решту часу - обговорювали архітектурні питання. Зі списку в статті запитали чи не більше 3-5 питань.
5. Що б відповідати на такі питання, я завжди роблю так. Уявляю що у мене є замовник і бюджет на 100.000 $, як я буду відбирати людей що б не занапастити проект?
Я говорю не про те що «чув», так як це ніяк не докази, а про те як мене собвеседовалі (більше 40 разів) і як я поговорив.
До всіх співбесід готуюся мінімум 2 тижні. І так, це 100% іспит, нещадний.
так в гуглі все можна знайти)