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 подписчиков

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

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

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

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

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

Это на мидлов такие вопросы из однопоточного многопоточный сервис сделать?

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

Это на мидлов программистов, не на мидлов вайтишников.

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

А зп у мидлов программистов и мидлов вайтишников одинаковая? Все же в это упирается в конечном счёте.

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

Миддл должен иметь представление о примитивах синхронизации и о проблемах которые они решают (видимость, атомарность). Меня несколько раз просили реализовать блокирующую очередь на wait/notify, из java.util.concurrent любят посправшивать про read/write lock. В чем отличие Collections.synchronized(new HashMap) от ConcurrentHashMap. Что такое оптимистичная и пессимистичная блокировки. Для подготовки к теоретической части рекомендую ознакомиться со статьей https://shipilev.net/blog/2014/jmm-pragmatics/

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

А что на синьоров спрашивают?

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

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

Я как-то на собесе с интервьюером начал задачу делать из его спринта, в целом более живые интервью

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