Собеседования для бэкендеров: как готовиться, тренироваться и не облажаться
Привет, Хабр! Меня зовут Гриша Скобелев, я бэкенд-разработчик, у меня есть гитара, кошка и скейтборд. Я так сильно люблю Spring Framework, что назвал кошку в честь него — Веснуша. Возглавляю программный комитет Podlodka Java Crew, где мы делаем классные конференции. Еще я организовал книжный клуб для бэкенд-разработчиков { между скобок }. Хочу поделиться своим опытом развития бэкендера — от собеседования до наработки разных навыков для роста. Тут будет много ссылок, практических советов и инструкций, которые я наработал за время своей карьеры, общения с другими бэкендерами и проведения конференций и консультаций.
Подготовка к собеседованию: тренировки и полезные ссылки
Тренировка
Лучшая подготовка — это тренировка, то есть ненастоящее собеседование. Некоторые для этого ходят на филлерные интервью — выбирают условно не очень интересные компании и просто приходят пособеседоваться.
Лично я считаю такую практику не очень хорошей. Это часто оборачивается пустой тратой времени, не дает нужной обратной связи и не помогает потренироваться по-настоящему.
В этом плане гораздо лучше устроить намеренное тренировочное собеседование. Попросите кого-то из друзей или воспользуйтесь сервисом Pramp, где можно найти человека, который проведет с вами mock-собеседование. Можно договориться потренировать секцию алгоритмов, базовый Computer Science, cloud-технологии и даже софт-скилы. Самое ценное в mock-собеседованиях состоит в том, что тебе обязательно дадут обратную связь: что подтянуть, в чем потренироваться.
Кроме Pramp можно воспользоваться сервисами менторов, например, GetMentor или Solvery. Там тоже можно договориться с ментором на mock-собеседование.
Еще один интересный сайт — interview.io (заходить с VPN). На нем публикуют публичные mock-собеседования — можно просто посмотреть и изучить для себя, выписать вопросы, которые не знаешь, чтобы их потренировать. Мы то же самое делаем в рамках подкаста { между скобок } на Ютуб-канале. Там можно выбрать что-то под нужный язык или технологию.
Задачи и навыки
Алгоритмические задачки встречаются часто, особенно в крупных компаниях. Готовиться к ним проще всего на сайте LeetCode. Еще есть разные каналы на Ютубе про алгоритмические задачи — можно поискать и поизучать разборы самых популярных. К этому стоит отнестись просто как к подготовке к экзамену — изучить, потренироваться, выучить, сдать.
Еще очень полезный инструмент, особенно для начинающих специалистов, — ресурс roadmap.sh. На нем участники сообщества собрали навыки, которые нужны разным специалистам, в том числе бэкендерам. Туда можно зайти и посмотреть, что следует доучить и какие еще темы посмотреть.
Общая подготовка
Здесь помогает просто загуглить вопросы к интервью, почитать их для себя и понять, что ты знаешь, а чего не знаешь. Момент вроде бы простой и очевидный, но многие его упускают.
Еще есть огромный документ FAANG interview, в котором разработчики собрали заметки по подготовке к собеседованиям в крупные компании: Facebook, Amazon и другие. Он будет полезен и для интервью в компаниях поменьше, так как многие сейчас стараются перенимать практики FAANG.
Как сделать, чтобы твое резюме увидели, прочитали и оценили по достоинству
Существует почти 100%-ный способ сделать так, чтобы ваше резюме увидели — отправить его через человека, который уже работает в нужной компании. Для этого нужно развивать нетворкинг — общаться в профессиональных чатах, посещать конференции, участвовать в каких-то общих проектах. Тогда можно будет просто находить людей из интересующих вас компаний и «засылать» резюме с ними. Доверия к вам будет намного больше, да и человек может получить бонус за ваше трудоустройство.
Иногда такое работает даже с почти незнакомыми людьми. Нашел кого-то в соцсетях, списался с ним, поболтал — и вот он уже скидывает твое резюме своим HR-ам. А это почти гарантирует приглашение хотя бы на первый этап интервью.
Теперь вернемся к самому резюме. Я считаю, что его стоит писать на английском — независимо от того, собеседуешься ты за рубеж или внутри страны. HR-ы на российском рынке знают английский, да и держать в актуальном состоянии одно резюме будет гораздо проще.
Дальше рассмотрим важное про само резюме.
Красные флаги
По моему мнению, есть вещи, с которыми в резюме стоит быть поаккуратнее:
Ссылки на GitHub. Туда обязательно заглянут посмотреть твой код — и легко могут найти какой-нибудь предыдущий проект, который был откровенно «не очень». Так что GitHub лучше или привести в порядок, или вообще не показывать. Плюс тебе легко могут прямо на собеседовании дать твой же код десятилетней давности и спросить, а что это ты там написал. Это, разумеется, спрашивают не с целью поглумиться над человеком, а чтобы посмотреть, как выросли со временем его скилы и что бы он изменил в коде.
Ссылки на соцсети. Показать хороший канал в Телеграме — идея интересная. А вот какой-нибудь Твиттер, в котором вы постите все подряд, — нет. Есть риск, что какой-нибудь пост чем-нибудь HR-у не понравится, и вас никуда не позовут.
Облако тегов
Если не брать специфику языка, то существуют ключевые навыки, актуальные сейчас почти для всех бэкендеров. Их упоминание в резюме существенно повышает шанс, что на него обратят внимание.
Вот эти навыки:
Cloud-технологии. Это особенно важно для зарубежных вакансий, где владение «облаками» — практически базовое требование. У нас в России ситуация сложнее, но знание облачных технологий все равно пригодится.
Docker, и лучше с Kubernetes.
Service Mesh, архитектурные паттерны, System Design.
Полезные «мелочи»
Фотография — сразу привлекает внимание.
Четкое описание ценностей сделанного. Например, у меня был проект, в котором я уменьшил нагрузку на кластер данных. И я всегда четко об этом говорю в резюме — это отличная ценность для компании, простая и прозрачная.
Краткость. Чем резюме короче — тем лучше.
Ну и важно понимать, что нет ничего, что гарантирует вам 100%-ный оффер. Хоть напиши водяным знаком: «Кто меня не позовет на собеседование — тот дурак» — все равно не сработает. Волшебной таблетки не существует, можно лишь приближаться к идеалу.
Как вести себя уже на интервью
Обычно неважно, джун ты или сеньор, тебя спрашивают какие-то базовые аспекты. Здесь интервьюерам важно, как ты отвечаешь. От новичка ждут поверхностных знаний, а от опытного — глубокого погружения. Также, скорее всего, будут спрашивать про:
Computer Science: структуры данных, внутреннее устройство процессов в программировании и т. п.
Продуктовые вещи: метрики, решение конфликтов и т. п. Это уже больше относится к собеседованиям для сеньоров и техлидов.
Истории из практики: их лучше заготовить заранее.
Процессы в команде и CI/CD: чаще всего спрашивают у сеньоров, к этому лучше подготовиться заранее.
Решения конкретных вопросов: например, у Java-программистов часто просят написать метод, который переведет деньги с одного счета на другой. И набрасывают разных сложных штук вроде асинхронности.
Если вам будут задавать вопросы о ваших конкретных решениях, на них очень здорово отвечать по методу STAR — «Situation, Task, Action и Result». Суть в том, что нужно описать:
Situation — что именно произошло, в какой ситуации ты оказался.
Task — какую конкретную задачу в этой ситуации тебе нужно было решить.
Action — какие действия ты предпринял.
Result — какой именно результат получил, желательно с цифрами.
Разберем на примере:
Situation: У нас в команде было тестирование, но с данными все было непросто.
Task: Чтобы облегчить задачу, понадобилось написать генератор данных.
Action: Я написал генератор на таком-то языке, с помощью таких-то технологий.
Result: Теперь задачи по интеграционному тестированию стоят не три сторипоинта, а один.
Данные по зарплатам от getmatch
Вообще уровень зарплаты нужно, конечно, выбирать по своему комфорту. И желательно делать это максимально прозрачно, без вот этой пикировки «а сколько вы дадите?», «а сколько вы хотите?», которую так любят HR-ы. Но примерно ориентироваться по рынку, конечно, стоит.
У ребят в getmatch куча вакансий, и они собирают статистику зарплат, которые там предлагают.
По Java в России медианные цифры вот такие:
Джун — 100,000 ₽.
Мидл — 200,000 ₽.
Сеньор — 300,000 ₽.
Тимлид — 350,000 ₽.
По Node.js — такие:
Джун — 85,000 ₽.
Мидл — 190,000 ₽.
Сеньор — 326,000 ₽.
Тимлид — 450,000 ₽.
В целом на эти цифры можно ориентироваться, сопоставляя свои ожидания с реальностью.