Технологічні рішення
Технологічні рішенняСАНТА-КЛАРА, Каліфорнія — 10 січня 2025 року — Компанія GlobalLogic Inc., що є частиною...
GlobalLogic оголосила про партнерство з Nokia для прискорення впровадження передових 5G...
GlobalLogic надає унікальний досвід і експертизу на перетині даних, дизайну та інжинірингу.
Зв'яжіться з намиУ цій колонці хочемо поділитись власним досвідом у проведенні технічного інтерв’ю зокрема з технології Java.
Перш за все, визначимось з питанням, для чого ми проводимо інтерв’ю? Аби зрозуміти технічний рівень кандидата та оцінити його Soft Skills. Це може бути не так важливо для Trainee чи Junior спеціалістів, але надважливо для Senior, Lead чи менеджерів. Ще одна ціль інтерв’ю – перевірити чи підходить людина команді ментально.
Які бувають формати інтерв’ю? Часто поділяють на структуроване та неструктуроване.
Структуроване інтерв’ю – це стандартний список запитань, які ви задаєте співрозмовнику, отримання відповідей та формування свого фідбеку.
Неструктуроване інтерв’ю – це коли ви просите співрозмовника розповісти деталі щодо свого попереднього професійного досвіду, тобто з чим він працював на попередніх проєктах, і вже з цієї отриманої інформації будуєте свої наступні запитання. У кожного з цих підходів є свої мінуси та плюси.
До структурованого інтерв’ю досить легко звикнути. Більш того, такий формат дозволяє швидко зібрати та надати формальний фідбек, який потрапить у внутрішню базу компанії. Проблема цього підходу у тому, що досить важко покрити всі теми під час однієї бесіди, адже це займає багато часу. Також, таке інтерв’ю вважають надто формальним і часто називають монотонним та нецікавим.
Неструктуроване інтерв’ю є більш неформальне, тому викликає позитивні враження у кандидата. Важливим є також той факт, що його потрібно проводити з досвідченим та сильним інженером. Проте, провести неструктуроване інтерв’ю якісно та зрозуміти рівень кандидата складніше, тому що у вас немає наперед готового сценарію та списку запитань.
На наш погляд, варто поєднати сильні якості обох підходів, та спробувати проводити структуроване інтерв’ю у манері неструктурованого, старатись зробити його цікавим та навчитись розуміти й оцінювати не лише те, що кандидат знає, а і те, як він думає. Ще дуже важливо навчитись слухати не лише те, що вам відповідають – звертайте увагу не тільки на коректність, а ще й на чіткість формулювань та структуру відповіді.
Поговоримо про стандартні секції в інтерв’ю:
Гадаю, що одна з найважливіших частин це, безпосередньо, технічне інтерв’ю. Наведемо кілька прикладів питань, які я та моя команда ставимо під час бесіди. Зауважимо, що питання для різних рівнів спеціалістів можуть відрізнятись за глибиною занурення у тему – це нормально.
Перша тема, це – OOP. Зазвичай запитуємо про основні принципи та агрегацію композиції, тобто головні поняття з ООР. Ці питання рекомендуємо ставити всім, проте будьте готові, що ви отримаєте різні відповіді.
Наприклад, молоді спеціалісти повинні знати про ці принципи. Але той факт, що вони їх вивчають означає серйозність їхнього ставлення до інтерв’ю. ООР це фундамент Java розробки й кандидати повинні розуміти головні принципи роботи з елементами та яким чином вони можуть допомогти.
Приклад цікавого запитання – запитання про поліморфізм. Іноді буває, що кандидат розуміє що це, вміє ним користуватися та, можливо, навіть застосовує поліморфізм на практиці, проте не може доступно пояснити та розказати про його плюси, а це досить тривожний дзвіночок, особливо якщо інтерв’ю з Senior-спеціалистом.
Запитання по Java 8 та пізніші версії можна теж ставити всім, а особливо техлідам та архітекторам.
Часто буває, що вони зосереджуються на архітектурі та дизайні, але забувають слідкувати за розвитком технології. Наприклад, досі використовують Java 6, хоча Java 8 вийшла більше ніж 6 років тому. Інші приклади запитань можна побачити на зображенні вище.
Ще одне з обов’язкових запитань для всіх незалежно від рівня та мов програмування, якими кандидат пише, це – колекції, тобто структури даних. Можна розпочати з питання про список та множину (List, Set), fifo/lifo та про асоціативний масив.
Наприклад, пропонуємо кандидатам основні структури даних (в java це list, set, queue, set) та очікуємо, що вони знатимуть ці структури даних та зможуть пояснити чим вони відрізняються.
Хороше запитання: чим відрізняється список від кількості?
Популярна відповідь – кількість не дозволяє дублікатів, а список дозволяє. Насправді це далеко не ключова відмінність списку від множини. Основне це те, що елементи у списку зберігаються в тому порядку, в якому ви їх додаєте. Саме цими властивостями можна пояснити методи, які ви потім спостерігаєте у структурах даних. В список можна по індексу додати елемент, а в set – не можна, тому що set не гарантує порядку, і поняття індексу там немає сенсу. Ось в цьому полягає основна особливість.
Ще один приклад – HashMap. Чому це питання цікаве?
Практично всі розпочинають з кошиків (buckets), відповідаючи, що коли ми по hash-коду отримуємо bucket, то виникають певні нестикуванняколізії. Це стандартна відповідь. Мені ж тут цікаво запитати де ж ті самі buckets зберігаються. Кандидати, зазвичай, відповідають, що вони зберігаються в масиві. Далі запитую наступне: у нас є hash-код, і як же нам у масивах цих кошиків визначити індекс buckets, в які ми ці елементи додамо?
Тут є дві варіанти:
Питання з Concurrency до Middle-спеціалістів ставляться рідко, бо люди на цих позиціях впевнено себе почувають у цій темі. Розпитувати у них деталі є беззмістовним. А от у Senior та Lead – краще запитати. Знання Concurrency для Senior є обов’язковим.
Серед популярних питань – про синхронізацію та що означає volatile. Всі ці запитання дають вам можливість зрозуміти наскільки добре люди розбираються у суті речей.
Далі, важливо з кандидатом поговорити про бази даних. Знову ж таки, це запитання для спеціалістів всіх рівнів, проте з молодими фахівцями варто подискутувати лише про базові речі, типу SQL. Middle, Senior та Tech Lead фахівців радимо запитати про теорему (обов’язково), чим відрізняються реляційні бази даних від не реляційних, коли та які саме застосовувати. Про SQL теж можна запитувати, але при необхідності.
Запитання такого роду допомагають зрозуміти, наскільки глибоко людина розбиралась з технологіями, наскільки добре у неї структуровані дані в голові, та як вона мислить.
Про JVMGC у Middle рекомендуємо запитувати на рівні загальних знань, а от для Senior та Tech Lead варто поставити більш конкретні питання. Проте, якщо у вас не вимогливий до перфомансу додаток, ці питання не є ключовими.
Ще один дуже важлива навичка, особливо для Senior та Team Lead, це – troubleshooting.
Це вміння зрозуміти в чому проблема, під’єднатися до неї моніторинг-інструментом (наприклад, Java Mission Control), зібрати дані та успішно розв’язати проблему на продакшені.
По Framework варто запитувати те, що використовується на проєкті. Можна також розпитати про те, на який фреймворк хотів би інженер перейти. Важливо запитати для чого придумали Spring, яку проблему він вирішує, на якому шаблоні він побудований, тощо. Гарний приклад питання на Spring – життєвий цикл bin в контейнері.
Сподіваюсь, що ці поради допоможуть вам зробити інтерв’ю цікавими та результативними.
Бажаєте дізнатись більше про інтерв’ю? Тоді вам будуть цікавими такі статті:
Якщо ви прагнете знайти однодумців та продуктивного нетворкінгу, то запрошуємо долучитись до технічних спільнот, де крім спілкування на вас чекають вебінари та інший професійний контент: