Дисклеймер: в данной статье много воды, отражены мысли и опыт воспаленного мозга, потому заранее предупреждаю, что можете потерять просто свое время зря. Из java тут вообще мало и в основном все избито.
Какие виды интервью вы проходили или организовывали? Думаю, никто не будет спорить, что ни одно интервью не дает полного представления, как будет работать соискатель, потому тут я постараюсь передать идею одного из своих подходов к техническому интервью. Если интересно, велком под кат.
У меня в арсенале есть несколько проверенных видов проведения технических интервью backend Java разработчиков:
Вопросы-ответы.
Задачи на рефакторинг.
Лайв кодинг.
Соискатель проводит интервью интервьюеру… (доступен только сеньорам, лидам, архитекторам).
Все 4 релевантны и раскрывают примерно одно и то же. Зачем такой выбор? Делать нечего Есть необходимость дать соискателю самый удобный вид прохождения интервью с целью максимального раскрытия его опыта, знаний, коммуникативных навыков (софт скилы проверяются минимально). Что оцениваю я: сколько нужно вложить в кандидата до его возможности выполнять наши задачи, что он может привнести в команду/проект и как впишется в команду. Что хочу донести: с кем соискателю нужно будет работать, с какими технологиями, какие задачи решать. Подчеркну, что плохих кандидатов и сотрудников не бывает! Бывает наверное совпадение по стеку, технологиям, команде… это точно проблемы микроскопа, если им забивают гвозди.
Немного расскажу про первые 3 вида интервью:
Очень давно я вычеркнул вопросы-ответы из используемых мной видов интервью, так как это скучно, неэффективно и вообще можно выучить все типичные вопросы. Где-то на гитхабе даже есть репозитории про вот эти ООП и паттерны. Ко всему этому очень часто мне самому приходилось проходить интервью в таком формате и зачастую было легкое ощущение (а иногда уверенность), что меня пытали… Ну прям такой допрос, не хватало только терморектальногокриптоанализатора и лампы в лицо. Когда это все происходит еще и кучкой из 6-ти человек, то с трудом вспоминаешь как HashMap уворачивается от алгоритмической атаки на хэштейбл или какое там дерево в TreeSet. Так же меня не устраивало то, что интервьюеры не хотели вести диалог и отвечать на встречные вопросы, парируя, что времени не хватит (один фидбэк был: начал проводить интервью в обратную сторону, сбивал интервьюера с толку, эм, их было вообще-то 3, видать бумажка была одна). Через время я проходил интервью у Сергея и Антона из компании КазаньЭкспресс, на котором мы больше общались, но я заметил, как они задают вопросы, как слушают, ждут сами вопросов, вступают в обсуждение решений, и да, почувствовал, что вопросы из их продакшена, следовательно, таким образом они понимают: будет ли решать их задачи соискатель.
Рефакторинг я использую с разрешения Антона. Он не проводил мне полноценное интервью, просто скинул задачи, а вот кто-то юзает их без согласования с ним))). Задачи на ванильной Java, но с несколькими уровнями сложности и понимания, т.е. в каждой задаче есть несколько уровней проблем, которые в зависимости от опыта и знаний кандидата будут решены по-разному. Там и чистый код, и чистая архитектура, но на практике, а не “расскажи мне про L”. Правда, я добавляю данный подход еще вопросами по Spring, базам данных и ряду других технологий из нашего стека, но уже совсем мало. Иногда подмешиваю в сам рефач что-то типа: а если у тебя есть Spring, то как?
Лайв кодинг спёр у Александра из одного банка (коллега пожелал остаться анонимом). Суть: решаем приближенную к практики бизнес задачу, интервьювер накидывает требования, смотрит, как соискатель решает её, как может мыслить локально в коде и архитектурно, как решает проблемы именно руками, то есть без разницы знает соискатель или нет названия микросервисных паттернов, главное как он мыслит и может решить возникающие проблемы. Конечно, вариативность тут немного меньше, чем при вопросах и ответах, но можно накидывать на разные уровни разные кейсы: где-то на паттерны, где-то на блокировки. Я немного приспособил такой подход под свои нужны и обязательно беру для разработки все тот же Spring, накидываю кейсы, которые можно решить с помощью его возможностей, но придерживаясь оригинального мейнлайна с сохранением идеи.
В принципе, можно было бы и остановиться на этом, но рано или поздно мне, как ленивому казаху, надоело проводить интервью самому, но я решил, что возможно соискателям сильного уровня будет интересно меня прособеседовать, а то, кто я такой вообще, чтобы вопросы на интервью задавать?! Так и родилась идея перевернуть интервью.
Конечно, даже сильные соискатели зачастую выбирают вопросы-ответы, реже рефакторинг, еще реже лайв кодинг, ну и только несколько выбрало самый странный вариант.
Как строится интервью:
Рассказ о компании.
Рассказ о стеке, с которым предстоит работать.
Какие бизнес задачи предстоит решать.
Рассказ соискателя о себе.
Непосредственно само интервью соискателем интервьювера.
Завершение интервью.
Скелет простой, но дьявол кроется в мелочах: на втором пункте соискатель понимает, с чем ему предстоит работать: какие версии фреймворков/хранилищ данных/оркестраторов (или без них) и так далее, то есть уже на этом этапе соискатель может примерно понять, какие вопросы лучше задавать, так сказать, какие вопросы ближе к теме.
Самая интересная часть, конечно же, - само интервью, и тут интервьюеру нужно:
Быть готовым к разным вопросам.
Задавать контр вопросы в тему вопроса соискателя.
Уметь признавать, что сам интервьюер не знает чего-то, и просить пояснения.
Пытаться плавно вывести в нужное русло интервью, если разговор пошел вообще не по теме.
Обычно первые вопросы соискателя - те, которые вызвали зуд и раздражение на прошлых интервью ему когда-то задавали на предыдущих интервью в других компаниях. Да, тут начинается и многопоточность, и сборка мусора, и различные пазлеры (типа: как без filter в стриме отфильтровать значения) …
Ответ
List.of(1,2,3,4,5,6,7,8).stream()
.flatMap(h -> h % 2 ==0 ? Stream.empty() : Stream.of(h))
.collect(Collectors.toList())
Так сказать, приходится получать по полной за всех, кто его измучил всеми этими вопросами ранее. Конечно, тут и интервьюер может поплыть, ну, я плыву иногда, так как сам не задаю таких вопросов на собесах в принципе.
Когда отмщение уже прошло, соискатель отбрасывает всю эту шелуху, так как он начинает задавать вопросы, в которых лучше всего разбирается или, по крайней мере, считает себя компетентным в них. Допустим, по основам языка программирования, фреймворка, базы данных, дизайна системы, паттернов проектирования. Тем самым соискатель показывает свой опыт и глубину знаний в пределах стека.
Далее вопросы по стеку могут закончиться, и соискатель начинает задавать вопросы вне стека технологий: про оркестрацию, администрирование линукс, бэкапы баз данных, как жить в современном eventual consistency мире, по софт-скилам и так далее. Этими вопросами соискатель показывает свой кругозор.
На этом вопросы могут закончиться, а могут продолжаться, но примерная классификация вопросов и что можно понять по ним о соискателе, думаю, ясна.
Главное - дополнительно подыгрывать соискателю и мотивировать его на объяснение интервьюеру, почему он ответил неверно, иначе можно уйти в вариант проведения интервью в режиме допроса или улететь в высшие материи. Также нужно следить за таймингом и максимально ясно и коротко отвечать на вопросы.
Естественно, я сам могу не знать многого или вообще ничего из того, что будет спрашивать соискатель, но это и круто. Ведь если соискатель выше меня уровня и готов работать со мной, то он даст многое компании, вопрос только в том, захочет ли он сам работать с таким коллегой.
Конечно, можно возразить: как можно узнать, разбирается ли соискатель достаточно в том, что нужно будет для работы? Но возникает встречный вопрос: а раскрывает ли любое другое интервью все достаточно хорошо? Если все интервью прошло в решении задачи уравновешивания скобок разными способами, или потрындели об эфемерной архитектуре, а нам, допустим, нужен человек, чтобы бизнес задачи кодить, то в нашей команде, в позиции, на которую соискатель претендует, он может чувствовать себя не очень комфортно, либо он просто слабо разбирается в том, что используется у нас для работы. В любом случае это мисмэтч.
Можно спорить бесконечно, какой вариант проведения интервью самый лучший, но, конечно же, каждому свое, и серебряная пуля - она такая… точнее ее нет.
Возможно, данная статья поможет кому-то применить данный подход и найти отличного сотрудника. Я буду этому рад!
allexe
Кастельно 3 видов интервью:
Вопросы ответы вообще не используете? Как определяете есть ли пробелы в каких-то областях у кандидата?
Хотелось бы пример. Чтобы на практике посмотреть. Полет фантазии тут может быть огромный.
Тут тоже не очень понял. Какую задачу решает лайвкодинг? Обычно же на лайвкодинге какие-то отностельно простые задачи, например на алгоритмы или подход. Или у вас там надо несколько микросервисово на лайвкодинге написать?
hyragano Автор
Вроде я указал, что дается на выбор один из 4-х вариантов, т.е. соискатель сам выбирает, я не навязываю.
Данная статья не об этом подходе, исходники тут не вижу смысла давать, так как их использую не только я, но еще как миниум 2 компании.
Это описано и опять же статья не про данный подход, тут отражена только суть.
allexe
Да вы правы не внимательно прочитал. А почему в итоге пришли к такому решению?
Был какой-то негативный опыт применения каждого отдельно или комбо из нескольких?
hyragano Автор
Главная цель - раскрыть кандидата максимально, понять может ли он выполнять задачи, сколько нужно будет вложить времени и сил, как обосновать перед руководством, что кандидат стоит именно сколько он просит (ну или больше или меньше).
Каждый из видов интервью хорош по-своему, выбор только ради комфорта соискателя.
Конечно если бы я ставил задачу проверить стрессоустойчивость кандидата, то началась бы пытка и походу больше меня, чем его, так как не люблю когда люди работают под стрессом, но кому-то это нужно.
На деле я придумал этот подход из-за лени)))
allexe
Понятно, ради комфорта соискателя. А какая статистика по выбраемым вариантам? Интересно даже, есть хоть кто-то кто выбирает 3 вариант? И какая мотивация?
hyragano Автор
Точную статистику не веду, так как не вижу смысла, но по ощущениям примрено так: 50% вопросы-ответы, по 20% лайв кодинг и рефакторинг, 10% проводят мне интервью.
Не скажу, что я много прособеседовал таким образом кандидатов, но 3 человека это уже статистика)))
Про мотивацию не понял. Поясните пожалуйста вопрос.
allexe
Лайв кодинг мне кажется наиболеее стрессовый вид интервью. Непонятно какая мотивация у кандидатов которые его выбирают. Опять же одно дело когда кодишь в продвинутом редакторе с автодополнениями и прочими штуками, можешь если в чем-то засомневался, загуглить или открыть доки. Другое дело в непонятном онлайн редакторе.
hyragano Автор
Я так и провожу и лайв кодинг и рефакторинг. То есть соискатель шарит скрин или используем code with me (idea) и в удобном редакторе кодит.
Бывает соискатель использует блокнот, я норм с этим
hyragano Автор
Да. Ещё в этих секциях я ещё гугл и абсолютно не против гуглинга. Так и предлагаю. Мне не нужно, чтобы соискатель на память помнил какие там метода, аннотации и прочие вещи