JavaRush /Java блог /Архив info.javarush /Пособие для будущего Java разработчика. Собеседование и к...
Fry
41 уровень
Львов

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

Статья из группы Архив info.javarush
Пособие для будущего Java разработчика. Собеседование и карьера - 1 Сила — это река, из которой могут пить многие, и обучение джедая — не единственная возможность зачерпнуть из неё». — Люк Скайуокер Все подборки книг остались позади. Что из них читать, что нет — решать только вам. Сейчас у вас осталась одна-единственная цель: устроиться на работу и построить карьеру, не наступая на грабли. Последняя статья разделена на разделы: — До работы — Собеседование — Во время работы В этой части очень много моего личного мнения, поэтому прошу не вырывать фразы из контекста и относиться к ней как к откровенному разговору со старым приятелем :).

До работы

Ниже — десяток самых популярных клише, которые возникают, когда душа тянется к программированию, но человеку мешают те или иные обстоятельства. Моя задача — попробовать остановить вашу мнительность и настроить вас на позитивный образ мышления. Если вы читаете эту статью — вы дальше, чем вы думаете! Ментально вы уже там, где нужно, а если прочитали уже некоторые книги, то полпути уже пройдено. Поэтому перестаньте сомневаться, — это удел слабых. Только вперед! Уже лучше? Тогда поехали! «У меня нет образования» Когда я совсем зеленый поступал в академию одной из крупных аутсорсинговых фирм, интервьюеры мне мягко намекнули, что диплом их вообще не интересует, поэтому вопросы были конкретные — по ООП и по базовой 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 — это классное комьюнити, которое уже перестало быть просто сайтом для украинских айтишников. Также я бы хотел сказать спасибо всем комментаторам, которые читали мои статьи по диагонали и вырывали фразы из контекста. Без вас статьи не выглядели бы так интересно :) Да прибудет с вами Сила! Оригинал статьи взят из DOU
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ