Поради для початківця Java розробника. Підготовка до співбесіди — частина 2

В першій частині циклу ми розглянули важливість складання плану навчання, питання по Java Core і роботі з БД. У цій частині обговоримо питання в коментарях і поговоримо про двох популярних фреймворках: Spring і Hibernate.

Питання в коментарях

Про походження питань для підготовки

Всі вони були задані мені або моїм колегам на співбесідах на позицію Junior/Middle людьми з рівнем Middle/Senior/Lead. Проекти: два великих банку, стільниковий оператор, внутрішні кваліфікаційні співбесіди.

Питання придумував не я, і оцінювати їх якість без конкретного контексту має мало сенсу. Практично кожен із них прозвучав в цілому більше двох разів за весь час проходження співбесід. Якісь були в різних варіантах, але з одним підтекстом.

Навіщо джуну знати про <будь-яка технологія або принцип>?

Один з уроків, який можна винести з першої частини: очевидні речі є очевидними не для всіх. Відповідь на кожне з запитань для підготовки не потрібно знати як daily basis. Його потрібно знати, щоб обійти конкурентів на позицію в хорошій компанії. Навіть якщо пам'ять погана і через час забувається більшість вивченого матеріалу, то перед співбесідою має сенс ці знання освіжити.

Вибір стратегії при підготовці

В девелопменті можна виділити дві основні стратегії пошуку роботи:

а) Куди візьмуть, туди піду. Чим швидше почну отримувати досвід, паралельно підтягуючи відсутні знання, тим краще.
б) Куди піду, туди візьмуть. Плюси очевидні. Серед мінусів — більше часу на підготовку. В деяких випадках — значно більше.

Перша стратегія сильно домінує і давно себе зарекомендувала. Не всім подобаються складні цілі, і не кожному вони під силу. У кого-то сім'я, домашні турботи, сторонні заняття і банально колись викладатися на 150%. Та й, кажучи на чистоту, стратегія працевлаштування в нетоповые компанії має мало мінусів. Ну попадеться вам як-би-сеньйор в наставники, поробите деякий час ерундовое завдання виключно на вміння серфити Stack Overflow. Зате вже з зарплатою, досвід якої-ніякої в скарбничку капає, і вільного часу для самоосвіти більше.

Друга стратегія набагато консервативнішими: менше вільних годин у добі при підготовці, значно менше їх же в робочому дні на перших порах. Але прискорення на старті професійного розвитку більш якісне і, найчастіше, вища зарплата.
Судячи з коментарів до першої частини, дуже мало хто дотримується другої стратегії. Дуже мало хто навіть розглядає її як один з варіантів. Але це не добре і не погано, беремо ношу по собі.

«Що дозволено Юпітеру, не дозволено бику»

Техлиды і сеньйори не зобов'язані знати відповіді на всі питання для джуна. Вони більше не конкурують з півсотнею інших претендентів на місце, кожен з яких вирішує елементарні завдання і затинається на неелементарні. А той претендент, який не затнувся, просто бачив схожу задачу днями і плаває в інших темах.

Техлидов хантят місяцями і чіпляються за гарного, як за рятувальний круг. І, як я підозрюю, про хешмапах на співбесідах їх не питають. З джунами все більш сумно: компаній в середньостатистичному місті (не мегаполісі), готових взяти стажиста/джуна, — раз-два та й усе. А їздити в пошуках по містам на початковому етапі кар'єри — не завжди дозволена розкіш. Сидіти без роботи, природно, теж.

Претендуєш — відповідай

Компанії з цікавими проектами, крутий командою і високими зарплатами мають право вимагати знання не тільки якихось патернів розробки, але і алгоритмів, логічних завдань, синтаксису — та чого завгодно.

Тому про TreeMap, LinkedHashMap, роботі купи, стека, синхронізованих колекцій та іншої мало застосовуваної нудьзі можна і не знати. Йти туди, де прямим текстом у вакансії зазначено: «Про алгоритм не питаємо». При цьому пам'ятати, що не запитують найчастіше там, де немає великої конкуренції за місце: якщо почнуть багато питати не буде з кого вибирати.

До речі, твердження про необхідність відповідати за високої конкуренції однаково вірно для всіх рівнів. Єгор Бугаєнко в недавньому інтерв'ю розповідав , що на співбесіді в Amazon йому давали алгоритмічні задачі (архітекторові з більш ніж 20-річним досвідом), які він відмовився вирішувати. Співбесіда він не пройшов. А взяли когось, хто напевно поступається в якості профільних знань, але підготувався краще і вивчив потенційні питання. І кому, скажіть, від цього гірше?

Втрачено час на листування, мінімальну підготовку, відвідування офісу — стрес до і осад у вигляді неприємного відчуття після. І якщо архітекторам всі дороги відкриті («куди піду, туди візьмуть» в більшості випадків), то у джунов ставки в кілька разів вище: тільки що було три шанси влаштуватися на хорошу позицію в рідному місті, а ось їх залишилось вже два. Пора починати збирати валізи.

Вибирайте стратегію обдумано і слухайте тільки близьких вам за світоглядом і духу людей. «Не кожен рада цінний, але кожен озвучений неспроста».

Приступимо до тем і питань.

Spring

Фреймворк, без знання основ якого вас практично нікуди не візьмуть. Лякає на старті всіх, хто ніколи його не бачив, і частіше за все із-за нерозуміння його основних цілей та механізмів роботи. Це і не дивно: на просторах інтернету перетинаються тонни як зовсім свіжою, так і безнадійно застарілої інформації. А можливість сконфігурувати один і той же механізм роботи декількома абсолютно різними способами ще більше ускладнює вивчення.

Про все перерахованому можу сказати одне: все приходить з досвідом. Я зупинився на наступному підході: вибрати один-два модуля Spring для детального вивчення, а в інших розібратися поверхнево. Під детальним вивченням мається на увазі вивчення реальних прикладів на гіті, за яким слід власна реалізація практичної задачі з запам'ятовуванням або записом використовуються в процесі анотацій.

На сайті Spring є дуже непогана документація з описом всіх нутрощів і популярні приклади реалізації певного функціоналу.

Зазвичай, коли на співбесіді справа доходить до Spring, відбувається приблизно такий діалог:

Іноді будуть питати прямо: чи знаєте, наприклад, Spring Data? Якщо знаєте на достатньому для обговорення рівні, вважайте, що пощастило. Якщо немає, завжди можна чесно сказати, що розумієте їх суть і необхідність використання, бачили приклади коду, але самостійного застосування не було. І заздалегідь подбати про те, щоб це було правдою: подивитися і поверхнево вникнути в роботу будь-якого спрингового модуля доведеться в будь-якому випадку. Питання тільки в тому, наскільки глибоко.

Про що мене часто запитували:core data, mvc.
Трохи рідше— boot, security.
Про що не запитали ні разу за весь час:aop, test.
Це статистичні дані, не більше.

Поділ за рівнями джуновости досить умовне.

Недоджун (він же претендент на стажування) і молодший джун — поверхневі знання про модулях спринга і будь за що відповідає. Вивчити їх роботу на практиці і надані можливості конфігурації.

Міцний джун — спринговый код і конфіги бентежити не повинні. Бачимо анотацію та розуміємо, що вона з конкретного модуля і потрібна для таких цілей, і які кроки необхідно зробити, якщо знадобиться змінити певну логіку.

Далі упереміш небагато питань, пов'язаних з перерахованими темами (тільки ті, які повторювалися):

Hibernate

Спочатку я хотів об'єднати теми Spring і Hibernate в одну, але в підсумку вирішив не створювати хаос у відносно структурованому підході. Після студіювання статей про те, що це за фреймворк і які його функції, обов'язково погуглите різницю між JPA, Spring Data JPA і Hibernate. І обов'язково зрозумійте її, це сильно спростить процес розуміння взаємодії Spring і Hibernate.

Питання:

Звичайно, як і будь-фреймворку, люблять питати, для чого він потрібен і в яких випадках можна обійтися без нього. Розібратися в цій темі завжди буде корисно.

P. S. Дякую всім, хто дочитав. Значить, хоч якась користь, але буде. У третій частині постараюся розкрити всі теми.


Ілюстрація Дарини Скульской


Попередня стаття:Поради для початківця Java розробника. Підготовка до співбесіди — частина 1

Опубліковано: 14/10/19 @ 10:00
Розділ Різне

Рекомендуємо:

C++ дайджест #20: CppCon 2019, Open Sourcing STL від MSVC
Шпаргалка з кібербезпеки для розробників
LocaleBro — локалізація Android - і iOS-додатків без зайвої роботи
UX Guide: як уникнути юзабіліті-помилок в продукті
Зустрічі 1:1. Чому не працює такий простий і зрозумілий інструмент