Как пройти собеседование на позицию Java-разработчика
Расскажем, как проходит собеседование у Java-разработчика, что ищут работодатели. И разберём вопросы и задачи, которые могут попасться.
10К открытий15К показов
Евгений Войнов
Руководитель группы, Senior Java-разработчик
В статье расскажу, как проходит собеседование у Java-разработчика, что ищут работодатели в кандидатах — от стажёров до сеньоров — под enterprise-проекты. А также разберу вопросы и задачи, которые могут попасться на интервью.
Как проходит собеседование
Собеседование Java-разработчика я делю на несколько частей.
1. Задаю вопросы по языку. Например, попрошу сравнить ArrayList и LinkedList — но не по сложности операций, которую уже заучили многие, а по расходу памяти, если последовательно в каждую из коллекций в цикле поместить миллион элементов. Также даю задачки по разным темам.
Пример: предложи простой вариант реализации функции определения номера корзины в HashMap’е или расскажи, как это реализовано в стандартной библиотеке.
Посмотреть ответ
Остаток от деления хэш-кода на текущее число корзин.
У каждого нанимающего менеджера есть набор любимых несложных задач — таких «отправных точек» — с которых можно начать интервью и потом уже глубже копать в технические навыки с помощью уточняющих вопросов.
2. Узнаю про предыдущий опыт и проекты. Часто спрашиваю про последнюю сложную задачу, которую удалось решить: в чём была её сложность; какие решения рассматривал соискатель; по каким критериям сравнивал варианты решения и почему выбрал тот или иной вариант; доволен ли выбором спустя время и так далее. Параллельно смотрю на резюме. Обращаю внимание на то, какие фреймворки и решения в нём указаны, насколько уверенно человек про них говорит. Важно, чтобы он показал логическое, аналитическое мышление, мог подробно разобрать задачи, над которыми работал.
3. Выясняю, что мотивирует соискателя, насколько он готов работать в команде. Это необходимо, потому что моя задача — подобрать человека на долгосрочную перспективу.
4. Рассказываю про проект, на который ищу сотрудника: в какой стадии он находится, какой у него стек технологий, какая команда уже собрана, по каким методологиям в ней ведётся работа и так далее.
5. Отвечаю на вопросы соискателя, если они есть. Часто разработчики спрашивают, какое у компании отношение к работе в офисе и на удалёнке, насколько жёсткие рамки рабочего дня.
Я обращаю внимание на соискателей, которые стремятся узнать, что их будет ждать в первый день, через неделю, через год, уточняют подробности того, как устроена команда. Это показывает, что им интересна работа именно в нашей команде.
Что важно знать стажёру
Когда проводишь собеседование со стажёром, самое важное — понять, насколько он созрел для стажировки:
- какие у него профессиональные цели;
- насколько серьёзно относится к будущей работе;
- сколько времени он готов уделять ей и как будет совмещать с учёбой;
- понимает ли, как строится карьера разработчика.
Хорошо, если человек уже продумал, как он организует свои будни, чтобы находить 30 часов в неделю на выполнение задач по проекту.
Вопросы по hard skills не особо сложные: иерархия коллекций в стандартной библиотеке, каково внутреннее устройство списков, множеств и хэш-таблиц, как оценить сложность алгоритма.
Я стараюсь задавать вопросы, которые заставляют соискателя разбираться чуть глубже, чем просят в статьях «Сто вопросов Java-разработчику». Потому что мне важно проверить не наличие знаний, а способность ими владеть, строить рассуждения, делать выводы.
Также стажёрам я даю прорешать задачки на программирование: выдаю четыре задачи:
- разминочная, чтобы познакомиться с платформой;
- две — средней сложности;
- четвёртая — «со звёздочкой».
На решение отводится три часа — всё на специальной платформе. По итогу тестирования можно увидеть результаты: сколько попыток было, какие решения в итоге оказались успешными, какие — нет.
Обычно мы рассматриваем кандидатов, которые решили от двух задач, обращаем внимание на качество кода и использованные возможности языка. Потренироваться в решении таких задач можно на https://leetcode.com/ или https://www.codingame.com/ (особенно люблю режим пятиминутных батлов — Clash of Code).
Для студентов мы проводим Летнюю школу по разработке, а также зимний курс Java. Их выпускникам мы обычно не даём задачи, потому что уже понимаем, на что способны потенциальные стажёры.
Что важно знать джуну
У младшего разработчика уже должен быть опыт коммерческой разработки. На собеседовании мне важно выяснить, в каких проектах он участвовал, какую роль в них выполнял, какие задачи решал — и как.
Рассказ о предыдущем опыте может выглядеть так: участвовал в проекте Х, бизнес-цель проекта/продукта была в том-то, команда была вот такого размера с такой-то организацией работы, моя роль заключалась в том-то, работал с такими-то технологиями, могу привести примеры.
Кроме того, если соискатель уже работал в компании, у него должны быть более глубокие технические знания, чем у потенциального стажёра. Он должен лучше разбираться в типах и структурах данных, понимать, что такое Spring и как он работает, уметь работать с системой хранения исходных кодов, быть знакомым хотя бы с одной базой данных.
Что важно знать мидлу
На интервью с мидлом важно понять, какой процент задач разработчик выполнял самостоятельно, как он подходил к их решению в принципе. Я могу попросить его взять одну из последних задач на предыдущем месте работы и подробно разобрать решение.
Пример: разработать контроллер, который подготавливает по заданным параметрам с клиента пакет документов, преобразует их в pdf, формирует общий результирующий файл и отдаёт на клиент для скачивания.
Посмотреть решение
В формулировке задачи, по сути, уже есть алгоритм решения. Но важно то, какие уточняющие вопросы задаст кандидат:
— формат параметров с клиента;— где лежат исходные файлы и в каком формате, какое распределение размера файлов;— с какой скоростью важно формировать ответ;
— сколько параллельно может быть таких обращений;
— какие в проекте используются библиотеки для работы с pdf или какие потребуется выбрать.
Если соискатель претендует на более высокий грейд (у нас это старший разработчик), то здорово добавить к размышлению то, как предполагается оценивать работоспособность решения, какие тесты предполагается разработать, что важно логировать для упрощения анализа нештатных ситуаций после внедрения на прод, какими могут быть инфраструктурные ограничения.
Кроме того, на собеседовании я спрашиваю про сложные возможности языка: многопоточность, возможности фреймворка Spring, его принципы (проксирование, работа с транзакциями, аспекты и так далее).
Что важно знать сеньору
В дополнение ко всему, что мы обсуждали выше, я спрашиваю соискателей-сеньоров про управление командой. Могу вспомнить какой-то кейс и предложить его решить.
Пример: разработчики в команде выступают как фулстеки и могут прикрутить разработанное на бэкенде по достаточно типовой схеме к фронту. Но новичок не согласен выполнять такие задачи и готов заниматься только бэкендом.
Посмотреть решение
В ответ хотелось бы услышать план действий по работе с возражениями:
— как сеньор оценивает критичность требования стажёра;— как будет выяснять, на чём оно основано;— насколько гибко готов искать подход;— будет ли учитывать интересы проекта и компании.
Идеального решения нет. Можно предложить найти компромисс, более подробно объяснить стажёру задачи, их влияние на проект и важность для профессионального развития или предложить другой проект.
Критично — понять, что человек готов проявлять эмпатию к стажёру и гибкость. И умеет глубоко копать в мотивы человека, учитывать интересы команды, проекта и компании.
Кроме того, ведущий разработчик, скорее всего, управлял проектированием модулей, подсистем, интеграций, выполнял документирование решений, разрабатывал спецификации. Поэтому я могу уточнить, что и как он делал в этой области.
Технический блок вопросов обычно про system design, где раскрываются знания платформы Java, фреймворков и смежных технологий, способность их комбинировать, выбирать лучшее решение из возможных, поэтому на таком уровне кандидата копать, например, в знание коллекций Java не требуется.
Особое внимание обращаю на то, насколько сеньор уверен в себе, как выстраивает беседу, какие задаёт вопросы, потому что на такой позиции важно будет проявлять лидерские качества и много коммуницировать с коллегами внутри команды и за её рамками.
Что нужно, чтобы подготовиться к собеседованию на позицию Java-разработчика
- Больше узнать о компании, в которую вы устраиваетесь: люди с какими навыками и качествами в ней требуются, как проходят собеседования, с кем предстоит общаться.
- Вспомнить проекты с предыдущих мест работы: в чём они заключались, какие задачи вы в них решали — и как. Мне всегда важно слышать, что человек делал, какие принимал решения и каким был результат, как он его оценивает.
- Прочитать одну из базовых книг по Java: Кей С. Хорстманн, Гари Корнелл «Java. Библиотека профессионала», Джошуа Блох «Java. Эффективное программирование».
- Прочитать материалы по подготовке к сертификации Oracle Foundations Associate.
- Посмотреть лекции Евгения Борисова по Spring и пройти несколько гайдов на spring.io.
- Для старших разработчиков — прочитать пару книг, например, «Микросервисы. Паттерны разработки и рефакторинга» Криса Ричардсона или знаменитую книгу с кабанчиком.
- Также для них — посмотреть материалы по прохождению дизайн-интервью. Десятка должно хватить, чтобы понять, как строить рассуждения, когда тебя просят на словах спроектировать систему.
10К открытий15К показов