- PVSM.RU - https://www.pvsm.ru -
В своей карьере мне приходилось быть и разработчиком, и менеджером, и даже один раз «CTO» в небольшом стартапе. И, разумеется, приходилось проводить большое количество собеседований кадидатов. Поэтому для себя я выработал такие правила проведения технических собеседований:
И вот такие три вопроса для Java-разработчиков у меня получились.
Да-да, тот самый стандартный вопрос, с которого начинается 50% собеседований. Почему я его задаю? Потому что на него можно ответить очень и очень по разному.
Как видите, очень большое количество «бонусных опций», о которых можно поговорить с senior'ом. А о скольких пунктах вы сами можете поговорить хотя бы минут 10?
Если будет скучно, замените HashMap на TreeMap.
Ага, и снова «стандартный» вопрос, который 10 лет назад был на каждом собеседовании. Сейчас уже реже, видимо из-за моды на nosql. Но умение работать с данными всегда нужно, и программисты, понимающие декартово произведение, всегда полезнее (и дороже) тех, кто ограничивается общим пересказом учебника.
А вопрос звучит так:
Пусть в базе данных существуют две таблицы: students и groups. У каждого студента указан идентификатор группы group_id, к которой он относится. Напишите SQL-запрос без использования вложенных, выводящий список групп (или количество групп) без единого студента
Правильный ответ будет, разумеется, содержать не просто JOIN, но LEFT JOIN со сравнением значения на NULL. Самое интересное будет поговорить с кандидатом о том, какие ошибки можно допустить при написании запроса, и почему именно запрос не будет работать, если их допустить. Почему нельзя сравнивать с NULL через равенство? Почему не будет работать простой JOIN?
Бонус за индексы, которые ускорят работу этого запроса и за рассмотрение вариантов SQL в разных диалектах (разных СУБД).
Кандидату озвучивается задача так:
Предположим, что вам на code review приходит Pull Request (Merge Request) от другого разработчика. В этом request'е большое количество разных файлов, но один из них выглядит следующим образом (приведён код класса целиком):
package ru.mycompany.utils; /** Wrap around Lock to simplify interface */ class LockWrapper { private Lock lock; public wait() { this.lock.wait() } }Будут ли у вас замечания к этому коду, и если будут, то какие? Пропустите ли вы запрос с таким файлом далее (в master-ветку), или же потребуете переделать, и почему?
Разумеется, и здесь есть как минимум три уровня.
В процессе ответа вместе с кандидатом приводим код к «идеальному» виду. Итоговый вид, разумеется, зависит от квалификации кандидата. Лучший из моих кандидатов нашёл здесь 13 ошибок. Не считая «самой главной ошибки».
Бонусом можно поговорить о том, какие средства автоматического контроля кода следует использовать, чтобы найти хотя бы часть присутствующих ошибок.
Один совет, который хочется дать всем тем, кому придётся собеседовать будущих коллег. Не пытайтесь дать ответ — подходит человек или нет. Формулируйте своё мнение либо в виде грейда (если у вас в компании они приняты), либо в виде денежной суммы, которую вы готовы заплатить кандидату, чтобы он работал в вашей компании. Это, во-первых, упрощает принятие решение вам, ведь оно не будет чёрным или белым, во-вторых — тому, кто будет принимать финальное решение или сравнивать итоги нескольких собеседований.
Автор: Сергей Владимиров
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/353767
Ссылки в тексте:
[1] Источник: https://habr.com/ru/post/505700/?utm_source=habrahabr&utm_medium=rss&utm_campaign=505700
Нажмите здесь для печати.