JavaRush /Java блог /Random UA /Посібник для майбутнього Java розробника. Співбесіда та к...
Fry
41 рівень
Львов

Посібник для майбутнього Java розробника. Співбесіда та кар'єра

Стаття з групи Random UA
Посібник для майбутнього Java розробника.  Співбесіда та кар'єра - 1 Сила - це річка, з якої можуть пити багато хто, і навчання джедаю - не єдина можливість зачерпнути з неї». — Люк Скайуокер Усі добірки книжок залишабося позаду. Що з них читати, що ні – вирішувати лише вам. Зараз у вас залишилася єдина мета: влаштуватися на роботу і побудувати кар'єру, не наступаючи на граблі. Остання стаття розділена на розділи: — До роботи — Співбесіда — Під час роботи У цій частині дуже багато моєї особистої думки, тому прошу не виривати фрази з контексту та ставитися до неї як до відвертої розмови зі старим приятелем:).

До роботи

Нижче – десяток найпопулярніших кліше, які виникають, коли душа тягнеться до програмування, але людині заважають ті чи інші обставини. Моє завдання — спробувати зупинити вашу недовірливість і налаштувати вас на позитивний спосіб мислення. Якщо ви читаєте цю статтю, ви далі, ніж ви думаєте! Ментально ви вже там, де потрібно, а якщо вже прочитали деякі книги, то півшляху вже пройдено. Тому перестаньте сумніватися, це доля слабких. Тільки вперед! Вже краще? Тоді поїхали! «У мене немає освіти» Коли я зовсім зелений вступав до академії однієї з великих аутсорсингових фірм, інтерв'юери мені мяко натякнули, що диплом їх взагалі не цікавить, тому питання були конкретні — щодо ОВП та базової Java. Звичайно, ви зустрінете вакансії, де наявність тих. освіти буде чіткою вимогою. Я лише хочу сказати, що його відсутність – це не перешкода у наші дні. Багато зарубіжних конторах просять BS/MS Computer Science чи, увага, relevant experience. Чи не переконливо? Можливо, вас надихне той факт, що технічної освіти немає у мене ;), але це абсолютно не завадило отримати досвід у великих компаніях. Запитайте мене зараз, як я зробив би, якби можна було перемотати плівку назад? Звичайно, пішов би в КПІ/НАУ, але не особливо сумував би, не вчинивши. Перестаньте паритися із цього приводу. Мине час — можна й о 40-й отримати скоринку, якщо вам захочеться, — а поки що сфокусуйтеся на тому, щоб стати junior розробником тут і зараз. «Там будуть люди розумніші за мене» Завжди будуть люди розумніші, тямущіші, гнучкіші, талановитіші, ніж ви, і будь-яка робота — не виняток. Цей факт не дає вам права відходити від мети. Можливо, десь на іншому кінці Земної кулі сидить маленький хлопчик з Японії, який множить і ділить числа швидше за вас, а якась бабуся з Чехії друкує на клавіатурі мобільного телефону швидше за будь-якого тінейджера. Але ж ви не замислюєтеся про це, правда? То чому тоді вас мають хвилювати люди, з якими ви працюватимете, коли влаштуєтеся? У чомусь ваші майбутні колеги вас перевершуватимуть, у чомусь вам програватимуть. Це нормально! Викреслюємо. «Мені здається, я не зможу» Ну, по-перше, ніхто не сказав, що буде легко, але це зовсім не означає, що ваша мета неможлива. Вам нічого не заважає просто спробувати, навіть якщо ви зараз працюєте бухгалтером або продавцем-консультантом. Приходьте після робочого дня та сідайте за навчання. Якщо через якийсь час ви бачите якийсь прогрес — це знак, що ви рухаєтеся у правильному напрямку. Не зупиняйтесь! Якщо вам це хоч трохи цікаво і вам це дається, тоді я не знаю жодного пункту, який міг би переконати мене в тому, що ви цього не варті. «Мене накриває ліньки» Лінь — це лише відсутність мотивації. Якщо ви помічаєте, що більшу частину вільного часу замість того, щоб навчатися і не відбиватися від курсу ви, тупо займаєтеся фігнею — я поспішаю повідомити вас про те, що, швидше за все, робота програміста — це не ваше. Принаймні не зараз. Деякі називають лінощі гріхом, хворобою, холерою сучасної доби разом з ожирінням. Залишіть цю справу кар'єрним істеричкам. На мій погляд, все навколо в цьому житті просякнуте ілюзією боротьби та конкуренції: хто вищий, хто сильніший, хто багатший. У кого машина крутіша, у кого в колективі зарплата більша, хто в спортзалі тисне штангу важче, хто з дівчат раніше вийшов заміж і завів дітей — від цього нудить, як від смердючого фаст-фуду. Люди перестали жити і радіти життю, слідуючи своїй мрії, промінявши свою зону комфорту на вибір між Pepsi та Coca-Cola. Для мене ліньки — це добре, це просто чудово. Це звичайна захисна функція вашого організму заощаджувати сабо та час на непотрібні йому речі. Людина створена бути вільною, тому якщо ви лінуєтеся - перестаньте намагатися піднімати вашу п'яту точку з дивана - можливо, вона зараз на своєму місці :). «Я йду туди через гроші» Якщо зібрати розробників і сказати: відтепер ваша зарплата буде 3-4к гривень для будь-якого рівня, а тестувальники як отримуватимуть ті ж рейти, так і залишаться, то питання буде в іншому: не те, скільки бомбардує, а те, скільки програмістів після цієї новини залишаться саме програмістами. Багато людей лізуть у ІТ через бабу. Зарплата у перекладі з баксів, сири та дорога дзеркалка. Скільки я не працював із людьми, завжди прослизали розмови з цього приводу. Я не кажу, що це погано, я лише хочу, щоб ви не намагалися вмовляти себе, що ви з чисто духовних цілей йдете, щоб змінити світ на краще. Перш ніж влаштуватись джуніором, я знав, які зарплати у сеньйорів, техлідів — та навіть у міддла, — і ці думки тільки надихали: я свого часу до роботи програмістом про такі цифри міг лише мріяти. Називайте ці речі своїми іменами та перестаньте цього соромитися. "Мені здається, це не моє" А чиє тоді? Ви знаєте, це легко перевірити. Відкрийте перший том Хортсмана і почніть читати, писати код із прикладів. Якщо вам не нудно і ви не тупцюєте на одному і тому ж розділі другий тиждень - відкиньте сумніви. Вивчення технічних спеціальностей – штука послідовна. Не можна перейти до B, не знаючи А, але ви завжди матимете шанс повернутися на голову назад і зміцнити фундамент. Наважуйтеся. "Таких як я багато" Завжди є конкурс на місце. Я не сперечаюся, наприклад, зараз тестувальників без досвіду ця цифра — 300-400, а то й більше на одне місце. Так, це гірка правда, але, з іншого боку, я навіть із такими показниками не можу знайти достатньо серйозного пункту. Та хоч 100500 на місце!! У вас завжди є можливість напрацювати досвід на своїх проектах: побудуйте якийсь сервіс, десткоп-програму, використовуйте весь стек, який знаєте — і ви вже набиваєте шишки, а решта, окрім розсилки свого резюме, нічого не роблять. «На моє резюме ніхто не відповідає» Продовження вищестоящого пункту. Швидше за все, для майбутніх айтішників без досвіду вміти написати гарне резюме — це добре, але коли на одну вакансію дуже багато людей, багато резюме один на одного дуже схожі: ти, звичайно, можеш надіслати фотку з декольте (якщо дівчина) чи написати багато технологій , які сам знаєш лише з вікіпедії І в тому, і в іншому випадку HR'у буде просто барабаном: якщо у вакансії проекту має бути людина, яка, приміром, знає AWS, то шукатимуть у резюме саме AWS. Візьміть до уваги ще такий важливий момент, як рекомендації колег. Це біль будь-якої людини, яка не має подібних знайомих, бо левову частку junior'ів забирають саме звідти (якщо людина за рекомендаціями — не ідіот, звичайно). Зазвичай на позицію junior беруть, підкреслюю, адекватну активну людину, яка готова вчитися, та навіть за їжу. І якщо такий кандидат провалиться, то скоріше наступним ви будете. Ну, а поки що інших співбесідують, у вас є багато напрямків, де можна круто прокачатися: open source, завдання в інтернеті, а може, і фріланс. "Я не пройду співбесіду/хочу в конкретну компанію" Так, швидше за все, перша співбесіда буде провалом, але той досвід, який ви отримаєте, безцінний. З кожною подальшою співбесідою ви будете впевненішими і винахідливішими. Як зараз пам'ятаю своє перше... Боже, що за нісенітницю я ніс?! Як було соромно йти після нього (я запам'ятав того упиря, що посміхався мені в обличчя), але коли прийшов додому і все обдумав, я зрозумів, що це був чудовий урок. Після нього всі наступні подібні заходи були просякнуті легкістю та впевненістю. Ніхто не помер, шукають таких, як я, отже, я підійду. Вірте у себе! Якщо ви хочете конкретно в певну компанію, то я думаю, що не відкрию вам популярний у нашому середовищі лайфхак, але все ж таки: перед тим, як організувати зустріч із цією конторою, пройдіть перед цим інтерв'ю у конкурентів. Можливо, вам запропонують те, від чого ви не відмовитеся, або умови будуть крутішими. Знаю одно: ви не пошкодуєте. «Мені і на цій роботі добре» Знаєте, є такий старий вислів: Le mieux est I'enneini du bien («Краще — ворог доброго»). Можливо, ваша робота — не найгірше місце, ну так, начальник — цап, та й що? Або, наприклад, третій рік без премії, зате стабільна зарплата, тим більше мені вже за 30. Якоюсь мірою воно, може, й так, тільки пам'ятайте, що життя у вас одне, і його не слід витрачати на розчарування, на уявний комфорт, коли довкола стільки всього цікавого, і всього життя не вистачить, щоб зрозуміти. Не бійтеся стати кращим, не бійтеся стати кращим. Не слухайте нікого, йдіть на мету наполегливо, якщо знаєте, що це те, чим ви дійсно хочете займатися. Не бійтеся змінюватись!

Співбесіда

За великим рахунком, ви можете знайти це все в інтернеті або питати у знайомих, але я вважаю, що зайвим не буде. Внизу приклад співбесіди на junior Java розробника таким, яким був він зараз, якби інтерв'юером був я. Питання можуть бути будь-якими, я лише спробував зібрати щось середнє по лікарні. Уявімо, що вам пощастило. Стандартна схема Крок 1. Вам дзвонить рекрутер, і ви домовляєтеся з нею про інтерв'ю, наприклад завтра на 11:00. Крок 2. Ви приходьте раніше, тому що 11:00 — швидше за все, час не для вас, а для розробників, у яких зарезервована якась кімната, в якій вас катуватимуть. Хорошим тоном будь-якого рекрутера попередитиме про це. Крок 3. Насправді, починаючи з кроку 3 всі пункти можна перемішувати, тому що співбесіди можуть проходити по-різному. Наприклад, тут вас можуть запитати про базові речі, звідки ви родом, чому у нас, і таке інше. Не виключено, що це може зробити сам HR, і звичайно ж, не виключено, що англійською. Право, це залежить від компанії. Крок 4. Вас запрошують до мітингуру, де у вас буде розмова з одним, двома, трьома людьми, один з яких буде або сеньйор, або техлід, який у майбутньому працюватиме з вами, серед інших можуть бути Scrum-майстер, інші розробники чи HR'ы. Вас співбесідують якийсь час, потім тиснуть руку та відпускають. Крок 5. Можливо, це буде наступного дня, а можливо, відразу після кроку 4 — у вас буде розмова з іноземним замовником (якщо така є), а може, він сам і проведе інтерв'ю. Як бачите, варіантів багато. Десь є замовники, десь ще є телефонне інтерв'ю. Це просто приклад. Приклад технічної співбесіди для Junior Java розробника Мені дуже шкода недорозробників, які читають щось розумне з метою втопити/задавити/попонтуватися перед претендентом на інтерв'ю. Якщо ви бачите, що перед вами така людина, і відчуваєте тиск і напругу з її боку, негайно посилайте її на три веселі, тому що після успішного проходження з цим кретином доведеться працювати. Не витрачайте свої дорогоцінні нерви. Інтерв'ю насамперед має проходити з метою дізнатися, що знає кандидат, а не те, чого він не знає. Звичайно, якщо вам потрібна людина, яка знає щось конкретне — питайте її, не мучите марними речами, які не використовуєте в проекті. Будьте людьми, зрештою! Внизу є приблизні питання, які можуть потрапити на інтерв'ю. 5 питань для кожної технології. OOP 1. Наведіть приклад поліморфізму із реального життя? У чому переваги? Недоліки? Напишіть простий код. 2. Що таке інтерфейс? Анотація класу? Навіщо потрібні інтерфейси, якщо можна тупо все класами писати (трохи провокації)? Те саме — і про абстрактний клас. Що таке default методи Java 8? 3. Побудуйте ієрархію класів на конкретному прикладі уявної бази даних або програми (там список різних класів робітників із бази даних) та взаємодію між ними (aggregation, composition). 4. Чим поєднання відрізняється від aggregation (is-a, has-a)? 5. Як можна обійти заборону на множинне спадкування в Java? JDK/JRE 1. Чим JDK відрізняється від JRE? Що таке JVM? 2. Що таке classpath і для чого він потрібний? Як, наприклад, завантажити інші класи в classpath? 3. Що ви знаєте про classloader? 4. Розкажіть про javadoc? Навіщо він потрібний? 5. Що таке JAR, WAR? Java Common 1. У чому відмінність статичних методів від нестатичних? Що таке final? 2. Що таке boxing-unboxing? byte b = 127, b + +, який результат і чому? 3. Що таке wrapper'и, навіщо це? 4. Що потрібно зробити, щоб створити свою анотацію? Що таке overriding/overloading? 5. Чому клас String final? Що робить метод intern()? Data Structures 1. Розкажіть про структуру Collections API Java? Ви вже встигли попрацювати із Stream API? 2. У чому різниця між ArrayList та LinkedList? Де краще використовувати ArrayList, а де LinkedList? 3. Розкажіть, як влаштована HashMap? У чому особливості роботи з TreeSet, HashSet? Маєте досвід з Guava колекціями? 4. Масиви в Java, приклад двовимірного масиву. 5. hashCode, equals з прикладу HashMap? Concurrency 1. Що таке процес? Потік? Як створити потік? Що таке syncronized? Як зрозуміти цей чи той шматок коду thread-safe? 2. Що таке Thread.sleep, а також wait, notify, yield? 3. Наведіть приклад deadlock? 4. Колекції під час роботи з багатопоточністю. 5. ThreadLocal і Atomic операції SQL/JDBC 1. На конкретному прикладі дістаньте з бази Users того, у якого salary більше, ніж 5000. 2. Приклади INNER JOIN, OUTER JOIN, Order By, Group By. 3. Навіщо потрібний JDBC Driver? приклади. 4. Розкажіть усе, що знаєте про ResultSet, кілька прикладів. 5. Напишіть просте DAO із застосуванням RS. JPA/Hibernate 1. У чому недоліки та переваги JPA? 2. Що таке EntityManager? Entity? 3. Критерії в JPA/Hibernate. 4. One-To-One, Many-To-Many у JPA/Hibernate 5. Як би ви зробабо JOIN у Hibernate? HQL? Spring 1. Що таке DI/IoC? Переваги. 2. Що таке Application Context? Bean? 3. Як бувають типи IoC ініціалізації? 4. Singleton, Prototype у Spring? Annotation-based Spring? 5. Життєвий цикл бінів? Init-method, destroy-method? @ PostConstruct, @ PostDeploy? Maven 1. Основні фази maven, життєвий цикл. 2. Як запускати maven із тестами, без тестів? Що таке archetype, mvn dependency? 3. Профайли в maven, як створювати, як запускати. 4. Що таке snapshot у maven? Central/Remote репозиторії? 5. Плагіни в mvn, принцип роботи, кілька прикладів. Algo 1. Поняття алгоритму, його швидкість, Big-O-Notation. 2. Як знайти середній елемент у LinkedList в один захід? 3. Напишіть примітивний Stack? У чому різниця між Stack та Queue? LIFO, FIFO? 4. Quick Sort, Merge Sort. 5. Напишіть програму, яка перевіряє, чи є число паліндромом. Згоден, може, планка загнута трохи більше у бік міддла, ніж джуніора, але я думаю, що така підготовка вам точно не завадить. Намагайтеся заглиблюватись у кожне питання. До речі, тут не вказано багато напрямів у Java, прошу врахувати.

Під час роботи

Тут є маленькі рекомендації для тих junior/middle розробників, які вже влаштувалися. Ці прості поради можуть стати вам у нагоді так само, як вони допомогли в свою чергу мені. Не будь упертим Перестаньте доводити свою точку зору, навіть якщо вона спокусливо близька до істини. Ви вже помітабо, що перебуваєте в суперечці довго, а значить, по той бік барикад — звичайний осел, який має лише дві думки: його і неправильне. У нас неймовірно багато впертих людей, які стоять на своєму до останнього, аби їх не похитнулося. І це не лише ваші колеги, вони просто скрізь — у маршрутці, у магазині, родичі, близькі друзі — від них не втекти та не втекти. З ними треба якось взаємодіяти, навіть якщо ти розумієш, що людина несе відкриту нісенітницю. Більше того, те саме може статися з вами. Згоден, прості речі можна пояснити навіть упертій людині, а якщо йдеться про архітектурні питання в проекті чи про особисту думку? Забудь про це барахло — будь гнучкішим. Я дуже поважаю людей, які можуть визнати, що вони помаболися у всіх на очах. Саме така якість стане вам у нагоді як молодшому фахівцеві — з відкритою людиною складно вступати в конфронтацію, тим більше коли вона визнає, що навчається і має право помилятися. Не запізнюйся Не важливо, це випробувальний термін або просто п'ятниця, на яку всі забивають і приходять до 11. Важливо інше: пунктуальність - це особливість професіонала, який заробляє собі зайві очки на рівному місці. А зайві бали людині без досвіду не завадять, чи не так? Намагайтеся не запізнюватися і йти з роботи, чесно пропрацювавши 8 годин. Не зловживай естімейт На жаль, дуже часта картина, в яку я в минулому колись вляпався сам. Розробник поставив собі 8-16 годин на виконання завдання та несподівано впорався за 3-4 години. Решту годин він витрачає на свій особистий час у вигляді настільного тенісу, як це було зі мною, або перегляду youtube та іншої розважання. З юридичного погляду — начебто й домовабося, але з людського ви позбавляєте себе дуже важливих речей: 1.Ви стоїте на місці, тому що заповнюєте зайвий час непотрібними речами; 2. Ви не розвиваєтеся, оскільки не повідомляєте про свій швидкий прогрес, ніхто і знати не знає, що ви справляєтеся із завданнями швидше, ніж очікували; 3. Ви починаєте постійно завищувати середню кількість часу на значення, це просто шлях у нікуди. Виділяй час на навчання Шанс відстати від паровоза нереально високий, тому май на увазі, що технології та нові версії дуже швидко розвиваються. Підписуйся на Java євангелістів нашого дня, читай Java дайджести та взагалі цікавися, вчи нове. Це допоможе тобі тримати марку та розвиватися. Допомагай іншим Не бійся допомагати іншим, навіть якщо вони такі зелені, як ти. По-перше, ти здорово зміцниш свої знання, по-друге, отримаєш повагу в очах інших, заразом допоможуть і тобі. У такій обстановці народжуються найкращі колективи, а також дуже швидке технічне та особистісне зростання. Займайся спортом. Май хобі Ні, серйозно. Мало того, що люди, які займаються спортом, виглядають і почуваються краще, то ще й робота мозку у них на висоті! Сколіоз, поперек, зайва вага, різні проблеми з внутрішніми органами - цілодобові посиденьки за комп'ютером навіть за межами роботи сприяють цьому. Якщо займатися спортом не виходить (у чому я сумніваюся), використовуйте маленькі лайфхаки: працюйте стоячи час від часу, виходьте на дві зупинки раніше і доходите до роботи пішки. Та й узагалі ходите більше пішки. Також є ризик перегоріти, якщо програмування займає набагато більше часу, ніж 40 годин на тиждень. На допомогу прийдуть особисті захоплення – наприклад, фотографія, музика тощо. Регулярно знаходите час для духовного. Балансуй в особистому житті Коли дівчина/дружина каже: «ноутбук або я», потрібно ґрунтовно задуматись, яке місце займає у вашому житті програмування. З іншого боку, починаючи свій шлях до IT, вам потрібно дохідливо пояснити другій половинці, що зараз вам потрібно дуже багато вчитися, щоб досягти більшого. Сподіваюся, вони зрозуміють. Ну, а ви намагайтеся балансувати та правильно розподіляти свій час. Виходь за межі Будьте проактивними, якщо відчуваєте, наприклад, що можете поділитися знаннями чи у вас є цікаві теми, чому б не організувати маленькі курси всередині компанії для інших? Не бійтеся брати участь у великих Open Source проектах, якщо знаєте, як можна допомогти. Хочете написати гру, соціальний проект чи іншу ідею — робіть, робіть, робіть! Не стійте на місці, завжди шукайте шляхи, де можна розвиватися. Будь конкурентним Спостерігайте за новими тенденціями, будьте в курсі трендів, які відбуваються у Java спільноті. Наприклад, не буде зайвим, якщо ви рідко, іноді, будете моніторити Java вакансії на DOU, але не для того, щоб уникнути роботи, а для того, щоб знати, які технології залишаються актуальними, а що потихеньку пропадає з ринку . Також намагайтеся проходити курси на Coursera, Udacity і т.д., вивчайте нові горизонти. І навіть англійська: намагайтеся дивитися улюблені фільми/серіали в оригіналі з субтитрами, щоб підтягнути розмовний, скачайте кілька цікавих додатків для вивчення мови (наприклад LinguaLeo), та й, зрештою, сходіть на курси.

Висновок

Ну ось, мій маленький проект на DOU добігає кінця. Дорогі друзі, я щиро бажаю вам влаштуватися на роботу і сподіваюся, що все, що було описано мною за ці 7 статей, буде цінним посібником для вас, навіть для тих, хто вже працює розробником Java. Майбутні джуніори, пам'ятайте, що немає нічого неможливого, і якщо ви дійсно натиснете, у вас неодмінно все вийде. Я хочу, щоб ви нарешті визначабося, чи це ваше, чи розробабо докладний план навчання і холоднокровно його слідували. Не засмучуйтесь, якщо натомість отримуєте тишу, - це все тимчасово, головне - вірити і в жодному разі не збиватися з курсу, а вчитися, вчитися і ще раз вчитися. Велику подяку я хотів би висловити команді DOU за редагування великої кількості матеріалу та за надання мені головного ефірного часу у понеділок. DOU – це класне ком'юніті, яке вже перестало бути просто сайтом для українських айтішників. Також я хотів би сказати спасибі всім коментаторам, які читали мої статті з діагоналі і виривали фрази з контексту. Без вас статті не виглядали б так цікаво :) Нехай прибуде з вами Сила! Оригінал статті взято з DOU
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ