Girl in IT-wolrd

Everything has been downloaded. Quit download loop.

Пособие для будущего Java разработчика. Собеседование и карьера

 Стаття взята з dou.ua

Пособие для будущего Java разработчика. Собеседование и карьера

«Сила — это река, из которой могут пить многие, и обучение джедая — не единственная возможность зачерпнуть из неё».
— Люк Скайуокер

Все подборки книг остались позади. Что из них читать, что нет — решать только вам. Сейчас у вас осталась одна-единственная цель: устроиться на работу и построить карьеру, не наступая на грабли.

Последняя статья разделена на разделы:
— До работы
— Собеседование
— Во время работы

В этой части очень много моего личного мнения, поэтому прошу не вырывать фразы из контекста и относиться к ней как к откровенному разговору со старым приятелем :).

До работы

Ниже — десяток самых популярных клише, которые возникают, когда душа тянется к программированию, но человеку мешают те или иные обстоятельства. Моя задача — попробовать остановить вашу мнительность и настроить вас на позитивный образ мышления. Если вы читаете эту статью — вы дальше, чем вы думаете! Ментально вы уже там, где нужно, а если прочитали уже некоторые книги, то полпути уже пройдено. Поэтому перестаньте сомневаться, — это удел слабых. Только вперед!

Уже лучше? Тогда поехали!

«У меня нет образования»

Когда я совсем зеленый поступал в академию одной из крупных аутсорсинговых фирм, интервьюеры мне мягко намекнули, что диплом их вообще не интересует, поэтому вопросы были конкретные — по ООП и по базовой Java. Конечно, вы встретите вакансии, где наличие тех. образования будет четким требованием. Я лишь хочу сказать, что его отсутствие — это не препятствие в наши дни. Во многих зарубежных конторах просят BS/MS Computer Science или, внимание, relevant experience. Не убедительно?

Возможно, вас воодушевит тот факт, что технического образование нет у меня ;), но это абсолютно не помешало получить в опыт в крупных компаниях. Спросите меня сейчас, как я поступил бы, если бы можно было перемотать пленку назад? Конечно пошел бы в КПИ/НАУ, но не особо горевал бы, не поступив. Перестаньте париться по этому поводу. Пройдет время — можно и в 40 получить корочку, если вам захочется, — а пока сфокусируйтесь на том, чтобы стать junior разработчиком здесь и сейчас.

«Там будут люди умнее меня»

Всегда будут люди умнее, смышленее, гибче, талантливее, чем вы, и любая работа — не исключение. Этот факт абсолютно не дает вам права отходить от цели. Возможно, где-то на другом конце Земного шара сидит маленький мальчик из Японии, который умножает и делит числа быстрее вас, а какая-то бабушка из Чехии печатает на клавиатуре мобильного телефона быстрее любого тинейджера. Но вы же не задумываетесь об этом, верно? Так почему тогда вас должны волновать люди, с которыми вы будете работать, когда устроитесь? В чем-то ваши будущие коллеги будут вас превосходить, в чем-то будут вам проигрывать. Это нормально! Вычеркиваем.

«Мне кажется, я не смогу»

Ну, во-первых, никто не сказал, что будет легко, но это совершенно не означает, что ваша цель неосуществима. Вам ничего не мешает просто-напросто попробовать, даже если вы сейчас работаете бухгалтером или продавцом-консультантом. Приходите после рабочего дня и садитесь за учебу. Если через время вы видите какой-то прогресс — это знак, что вы движетесь в правильном направлении. Не останавливайтесь! Если вам это хоть немножко интересно и вам это дается, тогда я не знаю ни одного пункта, который мог бы переубедить меня в том, что вы не достойны этого.

«Меня накрывает лень»

Лень — это всего лишь отсутствие мотивации. Если вы замечаете, что большую часть свободного времени вместо того, чтобы учиться и не отбиваться от курса вы, тупо занимаетесь фигней — я спешу вас уведомить о том, что, скорее всего, работа программиста — это не ваше. По крайней мере, не сейчас.

Некоторые называют лень грехом, болезнью, холерой современного века вместе с ожирением. Оставьте это дело карьерным истеричкам. На мой взгляд, всё вокруг в этой жизни пропитано иллюзией борьбы и конкуренции: кто выше, кто сильнее, кто богаче. У кого машина покруче, у кого в коллективе зарплата больше, кто в спортзале жмет штангу потяжелее, кто из девушек раньше вышел замуж и завел детей — от этого тошнит, как от вонючего фаст-фуда. Люди перестали жить и радоваться жизни, следуя своей мечте, променяв свою зону комфорта на выбор между Pepsi и Coca-Cola.

Для меня лень — это хорошо, это просто замечательно. Это обыкновенная защитная функция вашего организма экономить силы и время на бесполезные для него вещи. Человек создан быть свободным, поэтому если вы ленитесь — перестаньте стараться поднимать вашу пятую точку с дивана — возможно, она сейчас на своем месте :).

«Я иду туда из-за денег»

Если собрать разработчиков и сказать: отныне ваша зарплата будет 3-4к гривен для любого уровня, а тестировщики как будут получать те же рейты, так и останутся, то вопрос будет в другом: не то, скольких бомбанет, а то, сколько программистов после этой новости останутся именно программистами.

Много людей лезут в IТ из-за бабла. Зарплата в переводе с баксов, сыры и дорогая зеркалка. Сколько я ни работал с людьми, всегда проскальзывали разговоры по этому поводу. Я не говорю, что это плохо, я лишь хочу, чтобы вы не пытались себя уговаривать, что вы из чисто духовных целей идете, чтобы изменить мир к лучшему. Прежде чем устроиться джуниором, я знал, какие зарплаты у сеньоров, техлидов — да даже у миддла, — и эти мысли только воодушевляли: я в свое время до работы программистом о таких цифрах мог только мечтать. Называйте эти вещи своими именами и перестаньте этого стыдиться.

«Мне кажется, это не мое»

А чье тогда? Вы знаете, это легко проверить. Откройте первый том Хортсманна и начните читать, писать код из примеров. Если вам не нудно и вы не топчетесь на одной и той же главе вторую неделю — отбросьте сомнения. Изучение технических специальностей — штука последовательная. Нельзя перейти к 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. Чем composition отличиается от 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 c применением 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 — это классное комьюнити, которое уже перестало быть просто сайтом для украинских айтишников. Также я бы хотел сказать спасибо всем комментаторам, которые читали мои статьи по диагонали и вырывали фразы из контекста. Без вас статьи не выглядели бы так интересно 🙂

Да прибудет с вами Сила!
Предыдущие части цикла:
— Пособие для будущего Java разработчика. Основы Java;
— Пособие для будущего Java разработчика. Элегантный код;
— Пособие для будущего Java разработчика. Enterprise — часть 1;
— Пособие для будущего Java разработчика. Enterprise — часть 2;
— Пособие для будущего Java разработчика. Enterprise — часть 3;
— Пособие для будущего Java разработчика. Новые горизонты.

Leave a comment