Всем привет, я работаю разработчиком на java стеке с 2014 года, прошел довольно много собеседований и также собеседовал сам. Порядок интервью обычно такой: представить проект и стек технологий, дать представиться кандидату, обсудить вопросы по нескольким темам, ответить на вопросы кандидата. Темы зависят от уровня кандидата, не выходят за рамки резюме. Я выработал несколько вопросов, которые предлагаю обсудить кандидату, в этом посте поделюсь ими.
Первый вопрос касается процессов на прошлой работе: откуда кандидат узнавал постановку задач, как понимал что делает свою работу правильно. Не задаю вопрос, почему кандидат хочет сменить работу. Далее идут технические темы.
По классике java интервью, нужно начать с обсуждения алгоритмов и структур данных: ArrayList vs LinkedList, HashMap с hashCode и прочее. Так как в резюме почти у всех указан SQL, предлагаю вместо этого обсудить индексы в БД. Почему по дефолту используется Tree индекс вместо Hash индекса, хотя алгоритмическая сложность первого больше второго (logN > 1). Тот же вопрос: на что влияет порядок колонок в составном индексе? Это позволяет выяснить, понимает ли кандидат структуры данных, или просто запомнил стандартные вопросы.
Следующий вопрос: есть однопоточный сервис для переводов денег между пользователями, можно уйти в минус, но нужно следить чтобы деньги не потерялись (сумма на всех счетах является инвариантом). Что нужно учесть, чтобы сделать из него многопоточный. Это показывает, понимает ли кандидат проблемы синхронизации памяти потоков и организации блокировок. Стандартное решение для исключения взаимных блокировок - последовательный захват мониторов, если не ответите сразу то можете спровоцировать дополнительные вопросы.
У middle разработчиков обычно указан опыт работы с Kafka (система доставки сообщений на базе лога). Я предлагаю обсудить систему зачисления денежных средств на счет пользователя, поручения на зачисление приходят по кафке. Кто знаком с Задачей двух генералов понимает, что если кафка гарантирует доставку сообщений за счет многократных попыток, то она не сможет гарантировать единственность доставки. Прошу кандидата указать возможность идемпотентной обработки поручений.
Кандидатов junior и middle уровней я также прошу решить задачку в онлайн редакторе. Не обязательно чтобы решение компилировалось. Это позволяет понять, умеет ли кандидат на практике применять структуры данных. Пример задачи: определить, являются ли две строки перестановкой символов (a..z) друг друга. Перестановками являются "abba",baba", не являются "nppn" и "npp". Ожидается, что кандидат сможет формализовать задачу (строки являются перестановками, если в обоих строках совпадает количество каждого из символов), и предложит эффективное решение. Можно просто сослаться на алгоритм Сортировки подсчетом.
Общий совет - проходить собеседования как можно чаще, даже когда я не ищу работу, мое резюме "приоткрыто". Сейчас я не собеседуюсь часто, так как не расчитываю радикально улучшить мои условия, но для специалистов среднего уровня советую делать это на постоянной основе.
Читайте также.