User Юрий
Юрий
30 уровень
Москва

Хитрость, или как устроиться middle java developer, не имея опыта работы в Java

Статья из группы Истории успеха
Приветствую всех учащихся Java, а так же профессионалов. Возможно, моя история для кого-то будет примером, как делать надо, а для кого-то — как делать не надо. На дворе 19.10.2021, и сегодня я прошел испытательный срок (3 месяца) в качестве Java middle developer в крупной компании. Раньше опыта в разработке Java не было. До 04.06.2020 о Java я не знал ничего. Когда меня взяли на джависта, я пообещал, что если пройду испытательный срок, напишу историю успеха Данная статья будет разбита на две логические части: Карьерная предыстория (главы 1-5, не имеющие связи с Java, но в которой можно почерпнуть знания о карьере). Становление джавистом (главы 6-9 — изучение Java, собеседования, устройство на работу, первый реальный опыт). <h3>Глава 1. Экономист</h3>Дабы понять, с каким уровнем знаний я пришел на JavaRush, надо дать биографическую справку о себе. 2013 год, ноябрь, 8 утра. Я сижу в кофейне на Таганке и повторяю SQL инструкции. Через час у меня собеседование на позицию ведущего экономиста финансового департамента банка. Это единственное собеседование, на которое меня пригласили, и надо выстрелить на все 100%. Ради него прилетел из Петербурга, и остановился у родственников на кухне, чтобы не тратить и без того небольшие накопления. Проходит 30 минут, блины с ветчиной и сыром съедены и надо двигаться к заветной мечте. Но всего аж трясет. А если провалю собеседование? Ладно, была не была. Захожу в банк, получаю пропуск, ожидаю собеседующих в комнате для переговоров. Время идет очень долго. Заходит мужчина лет 35 и женщина того же возраста. Они представляются и просят рассказать о себе: — Юрий, очень приятно. Мне 21 год, я учусь заочно в университете в Петербурге, работал 3 месяца операционистом в банке. Понял, что это не то, ради чего я учился, стал смотреть рынок вакансий и увидел, что в Москве у экономистов в требованиях язык SQL. Вот изучил, сходил на курсы (Администрирование MS SQL — что было, на то и пошел), и вы меня позвали. Они рассказывают о компании, о том чем они занимаются (большинство слов непонятно), после чего просят выполнить тест. В тесте 3 вопроса по SQL: 1. Дана таблица, вытащите все записи с id = 10. 2. Дано две таблицы, соедините их и выведите по столбцу из каждой. 3. Сгруппируйте отделы и дайте количество сотрудников по каждому отделу. С грехом пополам я пишу эти запросы. После этого идет обсуждение моих ожиданий от работы. И мне говорят волшебную фразу: «Спасибо за собеседование, мы вам перезвоним». Проходит неделя, и мне предлагают выйти к ним на работу. Эйфория, шок, радость! И на какие деньги: 70 тыс рублей на руки! Да я богачом буду! Приезжаю в Москву, устраиваюсь, снимаю комнату в центре. Первые дни в эйфории. Спустя дней 10 начинается осознание: а я куда пришел-то? Я же вообще ничего не понимаю! Мне нужно было составлять управленческую отчетность по всему банку каждый месяц. Естественно, для меня это было тем же самым, что и для тебя, уважаемый читатель. Термины МБК, свопы, аллокация расходов, косты и прочее я воспринимал как заклинания на латыни. Попутно мне нужно было осваивать техническую сторону вопроса: MS Access (вся отчетность делалась там через VBA), MS SQL (как новое хранилище, взамен Access), Oracle (который я по началу назвал Оракул, вызвав истерику у программистов). И вдруг я начинаю понимать, что техническая сторона мне намного больше интересна. Идут попытки составления сложных запросов (в результате база данных виснет от моих скриптов, и разъяренные администраторы бегают, чтобы понять, кто это сделал). Но основная работа — финансы, которые просто начинают бесить. Через полтора месяца я пишу заявление на увольнение, так как не могу дать никакого результата (а от меня его не особо и ждали, честно говоря). Начальник финансового департамента рвет его и говорит: "хренью не майся". Через месяц снова пишу заявление, и охеревший от такой наглости начальник департамента (ставший в последствии председателем правления банка), подписывает с крайним недоумением: парню 21 год, без высшего образования, дали и зп, и доверие, а он вот так себя ведет. Причины увольнения были еще в двух факторах: начальнице, на высокомерие которой я не мог реагировать спокойно, и неудобном стуле, от которого у меня начала болеть спина. Это безумно смешно, но вот такой мотив. Увольняясь, я думал, что сейчас как устроюсь еще больше. Но не тут-то было. <h3>Глава 2. 70 собеседований</h3>Выйдя из банка, я вдохнул полной грудью. "Ща так устроюсь, все обалдеют". Собеседования назначены были, зарплаты на них были выше, и вроде не надо будет заниматься отчетностью. Проходит 4 собеседования, и никто меня не берет. 5, 6 собеседование — то же самое. Я жил с девушкой в съемной комнате, и она устроилась на работу и могла закрыть мое отсутствие доходов. Но я еще не догадывался, как долго у меня не будет доходов. Я ходил на собеседования (вакансии а-ля аналитик), и спрашивали в основном по SQL и VBA. Для тех, кто не в курсе, VBA — язык программирования в Excel, Access и прочих продуктах MS Office. Проходит 10 собеседований — ничего. 20, 30 — ничего. Всех смущает отсутствие опыта и высшего образования (что для меня кажется мелочью). 40 собеседований, и начинает проскакивать отчаяние. В период 55-60 собеседований начинаю изучать 1C. Девушка, которая уже стала женой, просит уехать в Питер, так как там хотя бы есть свое жилье. И на 70 собеседовании меня приглашают 1C-администратором баз данных (с перспективой стать 1C-разработчиком) в небольшую компанию в промзоне Санкт-Петербурга за 50 000 руб. Вот это карьерный рост! <h3>Глава 3. Возвращение легенды</h3>Смотря в окно маршрутки (корпоративного транспорта) на серую питерскую промзону, и добираясь час сорок в один конец, я понял, что так жить нельзя. Интерес к 1С пропал при первом же касании самописной системы. Нужен был план. И он созрел: вечерами изучал SQL, и попутно мониторил всеми известный сайт вакансий. Окончательным триггером к увольнению стала ситуация: гендиректор не захотел отпускать в запланированный отпуск, хотя уже были куплены билеты. После отпуска пишу заявление и снова рассылаю резюме на московские вакансии. В очередной раз мне предлагают пройти собеседование в крупном банке в Мск. Снова приезжаю к родственникам на кухню и еду на собеседование. Когда hr написал адрес, я не поверил своим глазам — это было здание, в котором я мечтал работать (в момент моего прошлого проживания в Москве оно только строилось). Должность называлась главный специалист сопровождения информационных систем. Захожу в офис, меня встречает мужчина лет 30 в модном пиджаке и джинсах. Поднимаемся на 15 этаж, и когда я увидел панораму города, аж дух захватило: все сталинские высотки были видны. Вся стилистика здания была очень современной: в кабинете начальника были холодильники для вина, модные аквариумы, картина с голой женщиной в черно белом стиле. Это вызывало "Вау" эффект. Разговор с начальником происходил не так, как это было обычно: минут 40 рассказывал он о том, что происходит в банке. Я ничего не понимал, но кивал головой. Когда я спрашивал: а когда меня начнете спрашивать? Он не обращал внимания. В очередной раз, на мой вопрос "когда техническое интервью?", был получен ответ "да мы тебя и так берем, не справишься, уволим". Сказано было с улыбкой, и я понял, что все, мечта снова стала явью! <h3>Глава 4. Поиск себя в IT </h3>Придя на новое место, я понял, почему меня взяли сходу. Опишу типичный портрет сотрудника отдела: средний возраст 55 лет, москвич/ка, образование МГУ, работа при оборонном НИИ в советское время, и переход в 90-е в банковскую сферу, работает здесь уже лет 20. Половина мужчин, половина женщин. Они вступали в полный диссонанс с окружающими интерьерами. Занимались поддержанием программ по формированию отчетности для бухгалтерии. Естественно, это все было на древних скриптах VBA и SQL, написанными разработчиками в конце 90-х, начале 2000-х. Шел 2015 год, а автоматизация была через MS Access. Т.е выглядело крайне убого. Но был нюанс — они давали то, что хотел заказчик (бухгалтерия). Причем точно в срок и в необходимом виде. Как это работало, знали только они, и даже Онотоле не представлял всей запутанности их разработок. И любой IT-руководитель, даже при самом большом желании, не смог бы их уволить — главный бухгалтер шел в правление банка и отстаивал любого сотрудника, который обслуживает интересы бухгалтерии. Руководитель хотел, чтобы я исполнил роль троянского коня: изучил все их наработки, а потом смигрировал данные в новую систему. Тогда старых сотрудников можно уволить, а меня перевести на новую систему. Сначала я вникал в их процессы и смотрел код на VBA. Постепенно научился читать код на VBA. Через год уже умел писать сам код. Типовая задача: дана база данных, вытащить из нее данные, и положить в Excel в определенном формате. Теперь, как говорил Задорнов, наберите воздуха в грудь: вся отчетность отдела (а это 50 ежедневных, 20 ежемесячных отчетов!), запускалась вручную! Карл, ты понимаешь, что люди каждый день меняют даты на +1 руками в 50 отчетах! Сидят, ждут результат одного отчета 1-10 минут, и запускают другой! Причем ежедневные отчеты надо запускать в определенное время, и не дай бог ты опоздаешь! Мало того, что они делают отчеты, они запускают руками процедуры в базе данных, не используя переменные! Т. е. вместо использования переменной @startDate = '2015-01-01' они будут в 20 местах менять одну и ту же дату руками! Посмотрев на все это, я начал изучать Python, и в совокупности с VBA, SQL и Task scheduler автоматизировал всё это за два года. Не только автоматизировал, но и ускорил множество отчетов: если отказаться от MS Access + VBA в сторону MS SQL + TSQL, можно добиться увеличения производительности многократно. Мой рекорд — ускорение создания отчета в 100 раз! Но коллеги были крайне недовольны таким автоматизациям, поэтому я был объявлен врагом народа (они хотели спокойно сидеть до пенсии). Время шло, и миграция данных происходила успешно. Руководитель меня ценил очень сильно: если в начале карьеры я приходил в 8 утра на работу, то через некоторое время мог приходить в любое время до 12:00, постоянное повышение зарплаты и должности, оплата работы в выходные более чем в двойном размере, такси до дома если задерживался на работе, мобильная связь, короче говоря — элита! <h3>Глава 5. Золотая клетка</h3>Вдруг, спустя 3,5 года, приходит новое IT-руководство, говорят о том, что та система, на которую я мигрировал данные, больше не нужна. А старая система останется. Мой руководитель уходит наверх по карьерной лестнице и предлагает мне перейти в более прогрессивный отдел. На встрече с начальником прогрессивного отдела я понимаю, что стек технологий этого отдела неизвестен для меня: Oracle, .net, C#, Linux и т. д. + Антипатия к потенциальному начальнику. Своему руководителю я сообщаю, что мне прогрессивный отдел не интересен, и он благополучно про меня забывает. И тут становится вопрос: что делать дальше? Доход уже был приличный, Junior dev меня на такую зарплату не возьмут. Поразмыслив о своих навыках, понял, что надо идти в машинное обучение. Все было интересно до первого столкновения с матстатистикой, которая вызывала только отвращение в институте. Все, ступор на полгода! Шло время, и как-то, прогуливаясь, задумался о сайте, в котором бы отображались хорошие рестораны на карте Москвы. Началось изучение HTML, CSS, JS. Потратил 3 месяца на изучение, знаний для создания полноценного сайта не было, но можно было поупражняться на работе. Родилась идея: создать портал для бухгалтеров, чтобы они могли по кнопке загружать любой отчет себе. На создание портала ушло 2 месяца, и на свет появилось web-приложение SPA (Single page application) на React js с бэкендом в виде Node.js. Бэк дергал SQL скрипты (о фреймворках типа Hibernate я не знал), запускал Python и хранил доп инфу в MongoDb (например, о пользователях сайта). Внешне сайт выглядел очень прилично (bootstrap 4, модная анимация). До сих пор горжусь этим проектом. Но когда я показал свой код web-разработчикам банка, они ошалели. НИ ОДНОГО СВОЕГО КЛАССА! Только функции, только хардкор! Меня похвалили, при этом сказав, что нужно еще много учиться для становления Middle full-stack developer. Пытался устроиться аналитиком, но особо предложений не было. Думаю: была не была, выставлю резюме full-stack developer. Пошли звонки, но на собеседованиях пролетал как фанера над Парижем: например, не знал что такое HashMap, HashSet и зачем они нужны. Про ООП, Паттерны программирования, алгоритмы, тестирование, Git не было ни малейшего понятия. Вспомнил давно забытые чувства стыда от незнания элементарных вещей. Внезапно приходит оффер на работу руководителем направления клиентской аналитики в финансовое компанию. За неделю до закрытия страны из-за пандемии. Устроился в финансовую компанию, но было двоякое ощущение: с одной стороны грела высокая зарплата, с другой — развития с технической стороны будет по минимуму. Прошла неделя после устройства и ввели удаленный режим работы. Так как нерабочие дни не распространялись на финсектор, то мы работали в обычном режиме. Новый начальник оказался очень сумасбродным человеком: предлагал парсить фейсбук, создавать свои нейросети для изучения клиентов (без data scientist в штате). Новым сотрудникам предлагал изучить Python за неделю и т. д. Неоплачиваемые выходные стали нормой. Увольняться было глупо: куда ты устроишься в пандемию? Но терпение лопнуло через 2 месяца, когда объявили, что премий квартальных не будет. Нюанс в том, что когда договаривались о зарплате, в момент устройства, hr говорил, что зарплата делится на оклад (60%) и квартальную премию (40%), которую платят всегда. Стало понятно, что сделан неправильный выбор, надо начинать искать новую работу. <h3>Глава 6. Начало осваивания Java</h3>Одним прекрасным майским днем мне приходит приглашение на собеседование по вакансии "Разработчик". Компании из страховой сферы нужен человек, который будет разрабатывать страховые продукты. Опыт в программировании нужен, но так как это "уникальная" разработка компании, то нет необходимости в конкретном языке. Так же необходим Git и прочее. Назначил собеседование через два дня, а сам изучал азы Git в свободное время. В момент собеседования меня поспрашивали по Python, JS, Git, SQL. На все я ответил, кроме понятия "перегрузка метода", и меня пригласили на работу через 2 недели. Оказалось, что компания давным-давно купила систему. написанную на Java (front и back), с помощью которой можно создавать бизнес процессы, не зная языка программирования (а точнее используя встроенный язык программирования Jelly). Звучит неплохо, но на самом деле все извратили. Лирическое отступление: у любой технологии есть своя эпоха и свой масштаб. Делать всю отчетность в 2000 году только в Excel — круто. Делать то же самое в 2021 — не очень. Сайт компании на чистом HTML в 1999 — круто, в 2021 — нет. Так вот технология, которую использовала компания на момент ее создания (2005 год) была очень крутая — Java отвечала и за сервер, и за клиентскую часть (так называемые Java servlet pages). При этом часть если вы создаете новый бизнес процесс (у которого свой UI), то он хранится внутри БД, а не в коде в файле. Чтобы понять, как это неудобно, представьте, что вы пишете в Intellij idea Java-код, сохраняете его в Базу данных, а потом. когда вы хотите запустить ваш код, то ядро программы идет в базу данных и считывает оттуда ваш код. Соответственно, полноценно отладить ваше приложение вы не можете. Изюминка №1: когда вы захотите передать код на тестовый стенд, вам нужно создать SQL скрипт, внутри которого будет ваш код. Неприятненько, но терпимо? Изюминка №2: База данных состоит из более чем 200 таблиц, которые между собой имеют связи. Значит, вам надо знать, в какие таблицы кидать ваш код, и какие сущности надо создавать в других таблицах. На выходе получается SQL скрипт с длинной ~ 1000 строк. Вот это уже точно мерзко. Остерегайтесь legacy. Короче говоря, поняв, что это все крутиться на Java, я пошел на JavaRush (наконец-то дошли до тематики сайта!). Июнь-Июль 2020. Первые 10 уровней были закрыты быстро (может месяц), ибо ничего принципиально нового не было. Далее скорость замедлялась. Июль-Октябрь 2020. Закрыты 10-20 уровни. Октябрь-Март 2021. Закрыты 20-30 уровни. Теперь начинается самое интересное: в марте 2021 года я стал смотреть вакансии по Java и понял, что там очень много незнакомых слов. Какой то Spring, SpringBoot, Hibernate, JUnit. Накупив видеокурсов на известном сайте, я лишь краешком пальца коснулся Spring и подумал, что теперь я все умею и могу. После этого на глаза мне попались курс TopJava Григория Кислина. На его сайте можно попробовать выполнить тестовое задание, и если справитесь, то можно брать курс. В этом курсе вы создаете полноценное web-приложение и даже размещаете его в интернете. За эти деньги вам будут делать review (просмотр кода более опытным программистом), давать обратную связь и подсказывать в случае проблем. Я дошел до 3 домашки и бросил. Причина проста: с тебя очень много требуют, но никаких знаний не дают. Требования к выполнению домашки очень запутанны. Информация подается крайне разрывисто. По моему субъективному мнению, этот курс нужен уже достаточно опытным разработчикам, которые пришли с других похожих языков. Ибо в его курсе практически нет объяснений технологий, которые он просит использовать. Так же нужно хорошо знать Git ( все отправляется на твой личный репозиторий). В конце апреля 2021 размещаю резюме Java-разработчик (с желаемой зарплатой уровня middle+), в котором указываю, что на последнем месте работы программировал на Java (соврал). В тот же день приходит отклик в банк на позицию Java-разработчика. <h3>Глава 7. Собеседования по Java и оттачивание скилла</h3>Итак, какой был план? Мне нужно устроиться на хорошую зарплату, так как уже привык жить на немалый доход + кредиты. Следовательно, junior позиции мне не подходят. Нужно устроиться middle. Но кто же меня возьмет без опыта? Решение пришло само собой: в моей трудовой написано, что я год работал как разработчик и еще 4 года — эксперт в IT-отделе на прошлом месте. Значит, скажу, что год разрабатывал на Java. А если будут спрашивать о новинках, скажу, что там старая Java (7) была, ничего не поддерживала. Перед первым собеседованием (удаленным) я волновался. Опыта нет, знаний очень мало, а прошу очень много денег. Думаю: пофиг, негативный опыт — тоже опыт. Связываюсь по скайпу и меня собеседуют два начальника отдела. От чего мне стало еще более стремно. Начались вопросы: ООП, устройство HashMap, стримы, структуры данных, что такое Spring, Hibernate, AOP. И если до Sping было более менее сносно, то на Spring посыпался окончательно. Меня спрашивают: как же вы разрабатывали на Spring, если вы его толком не знаете? Я: так скопировал, вставил, работает и на том спасибо. Этот ответ их позабавил. Потом спросили про SQL, в котором я как рыба в воде. Дальше был Git и вопрос про rebase, cherry-pick (которые я тоже не знал) и завершили про JS, так как он у меня был указан в резюме. Там тоже был полный провал, ибо спрашивали про ООП JS. По результатам собеседования стало понятно, что знания не комильфо, и поэтому на эту вакансию не пройду. Вечером hr пишет, что моя кандидатура одобрена и меня готовы позвать. Я аж бургером в макдональдсе подавился. Обрадовался, но через 3 дня hr сообщил: выбрали другого кандидата. Впервые на моей практике произошел отзыв оффера. После первого собеседования по Java активизировался: взял курс (и прошел полностью!) по Git от Colt Steele на всем известном сайте по продаже видеокурсов. Это перевернуло мое восприятие Git. Далее пройден (гениальный) курс от Заура Трегулова по Spring+Hibernate. Схема обучения: смотрю как в видео, делаю то же самое на своем компе, но переменные и классы называю по другому, чтобы не тупо копировать чужой код. Все наработки кидаю на свой Github (тем самым практикую Git). Шла середина мая и начались звонки от hr. Начали назначать собеседования один за одним. Много приглашений пришлось отменить по следующим причинам: hr не читали описание моего резюме и приглашали на позицию senior. А также стоит упомянуть отдельную касту hr: те, кто путают Java с JavaScript. Поэтому в названии своего резюме написал Middle Java developer. <h3>Глава 8. Список типовых вопросов и как проходит собеседование</h3>Стал ходить на собесыm и постепенно сформировался пул основных вопросов на middle. Обязательно: 0. ООП — определение, рассказать о каждом принципе ооп (+дать пример из реальной жизни). 1. Equals и hashcode — какой между ними контракт (связь)? 2. HashMap — как понять, в какую корзину попадет объект, что такое коллизия, в какой структуре данных происходит хранение данных внутри HashMap, стандартный размер, как увеличиваются количество корзин. 3. Stream — какие виды операций, в чем между ними разница, привести пример с каждого вида операций. 4. String pool, Integer pool — что это? 5. Heap, stack — что это, в чем разница? 6. Отличия между Runnable, Thread, Future. 7. Volatile, атомарность. 8. Solid, Kiss, Dry — определения, примеры из реальной жизни. 9. Модификаторы доступа в Java. 10. В чем отличие между абстрактным классом и интерфейсом. Может ли быть интерфейс приватным? 11. Функциональные интерфейсы. 12. Перечислить все методы Object и рассказать, зачем они нужны. Особенности метода clone. 13. Что такое сериализация и десериализация. 14. Try catch with resources — описать, что это, рассказать по интерфейс Closeable. 15. Отличия между Final, finally, finalize? 16. Перегрузка, переопределение метода — отличие. 17. Почему String сделали immutable, рассказать про StringBuilder и StringBuffer. 18. Что такое временная сложность О(1), сложность по памяти. 19. Структуры данных: рассказать про map, set, queue, deque, list и их реализацию в Java (treeMap, hashSet, hashMap, arrayList, linkedList, priorityQueue, blockingQueue), описать сложность (худшая, средняя, лучшая) вставки, поиска, удаления элемента в каждой структуре. 20. Примитивные типы данных в Java. Зачем нужен каждый из них. 21. Виды ошибок. Checked и unchecked exceptions. 22. Что такое JVM, JRE, JDK? 23. С какими сборщиками работали? Maven — жизненный цикл сборки. 24. Spring — Определения Ioc, Di, жизненный цикл бина, контекст, аннотации @Bean, @Configuration, @Autowired, @Advice, @Aspect, @Service, @Repository. 25. Generics — определение, что такое ограничение снизу и сверху? 26.Паттерны программирования — хотя бы Singleton (готовность рассказать, почему это иногда антипаттерн) + Builder, Adapter, Factory, Decorator, Proxt. Желательно: 26. Тестирование — виды тестов, с каким библиотеками (JUnit) работали. Что такое Mock, Stab, Spy? 27. Spring boot — зачем нужен, готовность в режиме онлайн сделать SpringBoot приложение. 28. Hibernate — зачем нужен, Entity, join column, lazy vs eager загрузка, уровни кэширования (hard). 29. Spring rest — зачем нужен, как сделать @post, @get ендпоинты. Как считать параметры/тело запроса? Как отдать в json формате? 30. Структуры данных — деревья, их виды. 31. Алгоритмы — виды сортировок. Помимо Java могут спросить: 1.(Обязательно!) Git — зачем нужен, операции merge, rebase, cherry-pick,push, pull, commit, log, checkout, branch, reset, revert, refresh. 2.SQL — умение написать запрос: объединить две таблицы в одну (inner join, left join). 3.Базы данных — 3 нормальных формы, индексы (зачем нужны, виды), primary key, foreign key Как проходит типовое удаленное собеседование: hr скидывает ссылку на зум (Skype, Google Meeting). К определенному времени вы подлючаетесь и там находится от 1 до 3 человек (технический эксперт, начальник, hr). В особо упоротых случаях до 8 человек. Сначала рассказываете о себе, потом техническая часть, потом рассказ о вакансии и прощание (говорят, когда с вами свяжутся или как дальше будут этапы). Во время прощания можно попросить дать обратную связь по знаниям. Я так спрашивал: "можете сказать, во время моих ответов, где у вас резануло слух?". Многие отвечают, но будьте готовы получить отказ. На собеседовании оценивают: 1. Ваше умение выражать мысль и знание русского языка (знаю случай, когда кандидату отказали из за плохого знания русского языка). 2. Предыдущий опыт (могут дотошно спрашивать. чем вы занимались на прошлой работе). 3. Адекватная реакция в момент нажима на вас (было одно собеседование, когда люди начали неуважительно разговаривать: игнорировать мои ответы, пытаться внушить свои позиции и прочее. Собеседование я закончил через 15 минут после начала, а они: это же было стресс-интервью!) 4. Уровень ваших знаний. Здесь остановлюсь более подробно. Знание определений по теме — это только 10% от того, что ожидается от вас. Необходимо понимать, как это работает (хотя бы верхнеуровнево). Готовность объяснить, в какой момент разработки вы выберете то или иное решение. Это намного важнее, чем точность вашего определения. Разберу этот тезис на двух примерах. Первый пример: на собеседовании меня спрашивали про HashMap, и я давал определение: «это такая структура данных, которая хранит в себе связки ключ и значение». Тогда собеседующий спрашивал: а в чем отличие от TreeMap? Ответ: отличие в том, что HashMap хэширует ключ, и за счет хэширования происходит быстрый доступ. Собеседующий сразу просил рассказать внутреннее устройство HashMap, заодно спросит про hashCode и equals. И будет углубляться, пока не удовлетвориться ответом либо вы не застопоритесь. Отвечать правильно про HashMap я научился только через 2 месяца собеседований и курса по структурам данных на hexlet. Второй пример: концепция SOLID. Просят дать определение, которое я заучил. Но как только дело касалось реальных примеров из жизни — начинались проблемы. Внимание! Если не знаете, то не стоит придумывать, а скажите так: я не знаю этой темы, но могу предположить, что это работает так. Многих технических экспертов бесит, когда человек несет ересь с таким видом, будто он разбирается в теме. 5. Уровень вашего энтузиазма во время обсуждения вакансии. От вас ждут, что вы заинтересованы и будете задавать вопросы по вакансии (только не высосаные из пальца). 6. Иногда юмор (только в тему) и общие интересы помогают наладить вам коммуникацию. Не стесняйтесь говорить о своих увлечениях, возможно, собеседующий тоже любит Доту/футбол/фэнтези. А это плюс вам как кандидату. Знаю случаи, когда общность интересов закрыла глаза интервьюера на слабую техническую подготовку (Ты же нормальный парень, мы тебя обучим). <h3>Глава 9. Устройство на работу, боевое крещение</h3>Собеседования были с конца апреля по середину июля. От первых собеседований было стыдно, постепенно ситуация выправлялась до приемлемой. Изучение частых вопросов и обратная связь давали о себе знать. Первые 25 собеседований были без результата. После этого начинались моменты отчаяния. Ощущения: а если меня на такую зарплату в принципе не возьмут? Как вдруг начало выстреливать: за неделю три компании дали предложения. Выбрал я компанию, специфику которой я знал, плюс там была хорошая зарплата и возможность работать удаленно. На собеседовании меня мне задали примерно 30 вопросов по Java core и Spring, на 97% из которых я ответил правильно. После этого было общение с вышестоящим начальством и через 1.5 недели я устроился к ним. Первым делом, придя на любую работу, ты начинаешь получать доступы ко всем необходимым системам и устанавливать нужные тебе инструменты. На это ушло полторы недели, и мне дали первое задание: поменять статичный текст в классе. Когда я открыл проект, мне поплохело: много модулей внутри одного проекта, много классов, тесты и прочее. В этот момент я потерялся, но мне помог второй разработчик, который втянул меня в курс дела. Баг был исправлен за 10 минут, закомичен в Git, сделан pull request (запрос на слияние двух веток, где другие разработчики проверяют твой код), после чего влит в основную ветку. Оказалось, все не так сложно. До первой полноценной задачи... В момент планирования задач на следующие две недели мне сказали: ты будешь делать интеграцию с другой системой, которая находится на OpenShift. Тут стало по-настоящему страшно: OpenShift — это целый кластер технологий: Docker, Kubernetes, Linux и прочее. Холодный пот пробежал по спине: ну вот и поработал джавистом. Сразу после совещания созвонился с разработчиком, который меня успокоил: адаптеры к этой системе написаны, и достаточно импортировать в свой проект определенные классы, после чего я смогу спокойно использовать интеграцию. Стало снова весело, до того момента, как разработчик показал типовую интеграцию: я увидел более 20 классов, созданных для похожей интеграции. Причем были замечены невиданные до этого аннотации @Value, @Builder, @NoArgsConstructor,@Getter, @Sl4f — это оказался проект Lombook (читать в интернете). Когда разработчик мне объяснял, как делать, я пытался записать связи всех классов, и вообще ничего не вязалось в голове. Самым стыдным моментом оказалось незнание Intellij Idea: как искать глобально по проекту, рефакторинг кода и прочее. Взявшись за задачу, я понял, зачем нужен ООП: для такого количество кода нужно разделение на классы; методы, которые не используются вне класса, надо объявлять private, чтобы случайно не запустить их в другом классе, и т. д. Написав свою интеграцию по аналогии с другой интеграцией, я узнал о существовании CheckStyle — специального плагина, который проверяет стилистику вашего кода, и вы не сможете скомпилировать свой проект, пока не исправите ошибки (например, лишние пробелы, названия переменных с больших букв, слишком короткие название переменных). После победы над CheckStyle я отправил свой код на ревью старшим разработчикам и в течении недели исправлял свои косяки. Вообще мне очень повезло, что в моей команде у меня сложились хорошие отношения с вторым разработчиком, который объяснил множество вещей. Спустя месяц после устройства моя первая интеграция была запущена на Интеграционно-Функциональном стенде (тестируется работа всех приложений вместе), и там все заработало! Победа! Следующей задачей стало создание класса, который позволял бы скрывать данные по ключу в json. Например: есть json {text:"JavaRush"} -> обработка -> {text:"****Rush"}. Здесь есть две сложности: может быть вложенность {text:{mytext:"JavaRush"}}, и что более неприятное — вложенность внутри массива: {text: [ {mytext: "JavaRush"}, {mytext: "JavaRush"} ] } (естественно надо скрыть все text.mytext). Решение этой проблемы оказалось достаточно сложное, но я это сделал! Тут второй разработчик говорит: покрывай эту наработку тестами. В глазах читалось недоумение. Так я познакомился с библиотекой JUnit в бою. Суть модульного тестирования: у вас есть входные данные, прокидываете их в метод, и сравниваете полученные данные с правильным результатом (создаете переменную с правильным результатом). Под свою библиотеку написал 11 случаев, в которых проверил, что не падает приложение с NullPointException, правильно скрывает данные с любым типом вложенности. После реализации этой задачи мне дали новую интеграцию, особенность которой была в следующем: нужно было экспортировать Spring Bean из внешней библиотеки. В этот момент я стал постоянным клиентом сайта Stack OverFlow. Один раз даже ответил официальный разработчик Spring. После реализации этой интеграции мой испытательный срок подошел к концу. Начальник поздравил меня с прохождением испытательного срока, и я принялся писать данную статью. В общей сложности ушло 8 часов на написание этой статьи) Спасибо за внимание, надеюсь, статья оказалась полезной.
Комментарии (51)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Romanya Уровень 23, Иркутск, Россия
21 ноября 2021
Неплохо, но много лишнего.
Andrey Panchenko Уровень 26, Краснодар, Россия
27 октября 2021
Статья отличная, много интересного и вдохновляющего (просто шокирующее количество собеседований), но что это: <h3>Глава 4. Поиск себя в IT </h3>, почему заголовки вот так выглядят?
Нина Симонова Уровень 20, Gatchina
27 октября 2021
Очень интересная статья. Спасибо! Я в шоке от количества собеседований и того, что вы не сдались. Вы большой молодец!
Victor #2540709 Уровень 11, Fort Lauderdale
26 октября 2021
Респект. Спасибо за статью. 😎👍
25 октября 2021
Трегулов Заур, не Заир
Serhio Gonsales Уровень 30, Москва
24 октября 2021
Статья интересная и в любом случае ее стоит прочитать, но заголовок действительно немного лукавит "... не имея опыта в Java", но имея опыт программирования в 7+ лет ;)
Юрий Зиненко Уровень 27, Владивосток
24 октября 2021
👍
Zhanir Ex Уровень 14, Алматы
23 октября 2021
Спасибо за статью! Очень интересно и полезно!
Anonymous #2505219 Уровень 3, Nadym
23 октября 2021
Спасибо!
YesOn Уровень 6, Томск, Россия
23 октября 2021
Очень интересная и познавательная статья! Спасибо, Юрий, что взялись за это и написали её.🤝 По этой статье реально можно фильм снимать😁 Опыт и много практики в разном стеке технологий, как всегда определяют уровень оценки и роста специалиста. Спасибо за конкретное описание по вопросам с Ваших собеседований и тем более за такое подробное описание по задачам, полученным уже на работе. В этом я вижу огромную пользу для неокрепших умов начинающих разработчиков. И серьёзная оценка своих возможностей и мотивации.