107

Какие вопросы я задаю на собеседовании java разработчикам1

Всем привет, я работаю разработчиком на java стеке с 2014 года, прошел довольно много собеседований и также собеседовал сам. Порядок интервью обычно такой: представить проект и стек технологий, дать представиться кандидату, обсудить вопросы по нескольким темам, ответить на вопросы кандидата. Темы зависят от уровня кандидата, не выходят за рамки резюме. Я выработал несколько вопросов, которые предлагаю обсудить кандидату, в этом посте поделюсь ими.

Первый вопрос касается процессов на прошлой работе: откуда кандидат узнавал постановку задач, как понимал что делает свою работу правильно. Не задаю вопрос, почему кандидат хочет сменить работу. Далее идут технические темы.

По классике java интервью, нужно начать с обсуждения алгоритмов и структур данных: ArrayList vs LinkedList, HashMap с hashCode и прочее. Так как в резюме почти у всех указан SQL, предлагаю вместо этого обсудить индексы в БД. Почему по дефолту используется Tree индекс вместо Hash индекса, хотя алгоритмическая сложность первого больше второго (logN > 1). Тот же вопрос: на что влияет порядок колонок в составном индексе? Это позволяет выяснить, понимает ли кандидат структуры данных, или просто запомнил стандартные вопросы.

Следующий вопрос: есть однопоточный сервис для переводов денег между пользователями, можно уйти в минус, но нужно следить чтобы деньги не потерялись (сумма на всех счетах является инвариантом). Что нужно учесть, чтобы сделать из него многопоточный. Это показывает, понимает ли кандидат проблемы синхронизации памяти потоков и организации блокировок. Стандартное решение для исключения взаимных блокировок - последовательный захват мониторов, если не ответите сразу то можете спровоцировать дополнительные вопросы.

У middle разработчиков обычно указан опыт работы с Kafka (система доставки сообщений на базе лога). Я предлагаю обсудить систему зачисления денежных средств на счет пользователя, поручения на зачисление приходят по кафке. Кто знаком с Задачей двух генералов понимает, что если кафка гарантирует доставку сообщений за счет многократных попыток, то она не сможет гарантировать единственность доставки. Прошу кандидата указать возможность идемпотентной обработки поручений.

Кандидатов junior и middle уровней я также прошу решить задачку в онлайн редакторе. Не обязательно чтобы решение компилировалось. Это позволяет понять, умеет ли кандидат на практике применять структуры данных. Пример задачи: определить, являются ли две строки перестановкой символов (a..z) друг друга. Перестановками являются "abba", "baba", не являются "nppn" и "npp". Ожидается, что кандидат сможет формализовать задачу (строки являются перестановками, если в обоих строках совпадает количество каждого из символов), и предложит эффективное решение. Можно просто сослаться на алгоритм Сортировки подсчетом.

Общий совет - проходить собеседования как можно чаще, даже когда я не ищу работу, мое резюме "приоткрыто". Сейчас я не собеседуюсь часто, так как не расчитываю радикально улучшить мои условия, но для специалистов среднего уровня советую делать это на постоянной основе.

Лига программистов

2.1K постов11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Вы смотрите срез комментариев. Показать все
17
Автор поста оценил этот комментарий

1) Интервьируй/неинтервьюируй , все равно будет сложно понять, как человек будет работать.. Ну можно взять на испытательный срок, да

2) Не совсем понимаю, зачем решать задачи такие мелкие как из Letcoode, просто попытаться понять как человек мыслит? В реальной работе мне не приходилось реализовывать очередь через два стека..или буквы переставлять в словах..или самому писать операции над красно-черными деревьями)


Читал статьи, чувак пол-года/год готовился/натаскивался специально для прохождения интервью и получил оффер в Facebook, Google и Amazon)))

Т.е просто можно нанять человека, который может успешно проходить интервью))) (хотя может это и не самый плохой кандидат)


Главное, чтобы человек был хороший, ужился в коллективе, был обучаем и ответственно/добросовестно подходил к работе. А какую-то технологию можно освоить (но базовое образование нужно конечно, ну или хороший самоучка)

раскрыть ветку (10)
1
Автор поста оценил этот комментарий
Блин, так про любую сферу можно сказать)
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

да..но, конечно, зависит от позиции на которую берут.. если это какой-нибудь Team Lead, то лучше брать уже квалифицированного специалиста, ибо он должен учить/показывать другим, как надо работать и организовывать процессы.

Время на "учиться" уже нет

1
Автор поста оценил этот комментарий

Leetcode и подобные - это косвенный признак. Этакая корреляция с "общей увлеченностью темой", откуда вытекают "способность и желание освоить".

раскрыть ветку (7)
0
Автор поста оценил этот комментарий

Да, это показывает умение на практике использовать структуры данных. В рабочем проекте видел такую конструкцию:

if (new HashSet(list).contains(x))

Разработчик знает что поиск в мапе быстрее чем в списке, но не думает что не даст прироста при однократном поиске

раскрыть ветку (6)
3
DELETED
Автор поста оценил этот комментарий

Так и нужно проверять кандидата - просто смотреть на его проекты, решения которые он применял. А не задавать всякие вопросы которые ни о чем по сути не скажут, потому что знать это одно, а уметь применять другое.


Только вот это всё херня, пустая болтовня. Вот ты будешь теперь смотреть на проекты кандидатов, понимая что они скажут тебе больше чем ответы на вопросы которые перечислил в посте?


У меня на собесах ещё ни разу не задавали вопросы по моим проектам.

раскрыть ветку (4)
2
Автор поста оценил этот комментарий

Проекты под NDA не покажешь особо.

Мне в этом отношении наиболее разумным видится подход "отревьюить и отрефакторить небольшой кусочек" во время собеса.

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

"отревьюить и отрефакторить небольшой кусочек" во время собеса.

Согласен. Хороший вариант. Можно считать что есть уже 2 варианта, где-то можно применять сразу оба, а где-то нет.

0
Автор поста оценил этот комментарий

К сожалению, на собеседовании нет времени вникнуть в проект. Можно только по-быстрому посмотреть используемые компоненты и выявить явные ошибки.

раскрыть ветку (1)
1
DELETED
Автор поста оценил этот комментарий

Чтобы найти наиболее подходящего разработчика нужно потратить время.

Проекты тоже, смотря какие, некоторые считают проектом то, что перенесли из книги в IDE и это заработало.

0
Автор поста оценил этот комментарий

Я бы бенчмарки написал для характерных данных, если бы такая идея возникла в принципе.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку