«Дружище, беги из этой компании!»: вопросы на собеседованиях по Java, которые нельзя задавать
Цель интервьюера на любом собеседовании — выбрать кандидата, задавая профильные вопросы. Но как уверен разработчик программного обеспечения Арнольд Галович, не все вопросы одинаково полезны и удачны, а некоторые и вовсе не актуальны. О чем уже не стоит спрашивать на собеседовании по Java, чтобы как минимум не тратить время зря, специалист рассказал в своем блоге.
Вот что он написал.
Примечание: в списке рассмотрены вопросы, которые задают айтишникам уровня Middle+. Они взяты из гугла.
Платформенная независимость Java связана с наличием на каждой поддерживаемой платформе виртуальной машины Java (JVM). Виртуальные машины везде разные, но программы на Java могут запуститься на любой из них, потому что способны собираться не в родной формат платформы, а в промежуточный код JVM, так называемый байт-код.
Независимость от платформы больше не имеет смысла как функция для Java, потому что большинство Java-приложений — это бэкенд-приложения, которые разработчики запускают в Docker.
Да, где-то до сих пор используют для кроссплатформенности Swing или JavaFX. Но вы когда-нибудь запускали Swing-приложение на разных платформах? Оно вовсе не всегда будет независимым от платформы, просто потому что разные функции не всегда реализованы для разных платформ или работают там по-разному.
Вот почему этот вопрос не имеет смысла. Особенно при собеседовании разработчика выше среднего уровня.
public static void main(String args[])
? Какова цель вопроса? Узнать, что кандидат никогда не запускал приложения на Java? Если собеседник не джун, который только недавно начал изучать программирование, интервьюер не почерпнет из ответа ничего нового и полезного, а только зря потратит время, потому что вопрос базовый.
Вдогонку к предыдущему вопросу. Его есть смысл задавать, если кандидат только начал изучать Java и программирование.
ArrayList
и Vector
в Java? Вопрос: кто-нибудь пользовался классом Vector
в течение последних трех лет? Я лично ни разу не использовал его за всю карьеру. Еще в 2010 году компании Sun и Oracle рекомендовали использовать ArrayList
.
В чем смысл вопроса? Узнать, знает ли кандидат историю Java вплоть до 1990-х годов? Вопрос не имеет смысла.
Полезнее будет обсудить различия между ArrayList
и CopyOnWriteArrayList
, чтобы выяснить, знает ли кандидат, какие проблемы возникают с обычным ArrayList
и какой общей структурой данных его заменить для многопоточной среды. Но опять же, это очень индивидуально для каждого проекта, поэтому даже об этом нужно спрашивать с осторожностью.
Неужели интервьюер думает, что если кандидат может специально создать бесконечный цикл, то не сможет случайно этого сделать во время реального проекта?
Поверьте, в реальном проекте бесконечный цикл выглядит не так:
while (true) { // do stuff }
Пять способа создания бесконечного цикла от разработчика Лекса Фридмана.
Можно спросить даже, в чем разница между Java и JavaScript, но проверять знание лексики — это плохо. К тому же, зачем Java-разработчику знать специфику С++?
Вот как на этот вопрос отвечают сами интервьюеры:
Было бы лучше попросить рассказать об управлении памяти в JMV, но, опять же, это специфичный вопрос и индивидуальный для конкретного приложения. Если речь о разработке обычного веб-приложения в Spring или другой библиотеке, знать, как работает память, скорее всего не обязательно. Никто не может знать все.
Умеете водить автомобиль? Сможете назвать его основные части? Знаете, как двигатель связан с выхлопной трубой? Думаю, на первые два вопроса вы сможете ответить, а на третий — нет. Если вы планируете стать автомехаником, вам нужно знать все о машинах, а если хотите только водить автомобиль — это не обязательно.
Возвращаясь к заданному вопросу, ответ будет таким:
О последних двух я никогда даже не слышал. Возможно, это характеризует меня как человека, неспособного запомнить детали, но подумайте сами, вы когда-нибудь обсуждали их с коллегами? Я за десять лет ни разу.
.java
допустимым именем исходного файла? Дружище, если тебе задали такой вопрос на собеседовании, беги из этой компании. Поверь, так будет лучше.
delete
, next
, main
, exit
и null
: что из этого в Java является ключевым словом? Что?! Вы просто задаете вопросы из спецификации языка?
Это, наверное, вообще какая-то шутка.
Чушь. Как это связно с Java? По словам автора вопроса, кандидат должен объяснить, как установить переменную окружения path
в Windows, Mac, Linux и Solaris.
Серьезно?
Не верится, что такое спрашивают на собеседовании, говорит автор. Пока он собирал эти вопросы, то чуть не поседел, поэтому, вместо того чтобы проверять лексические знания кандидата, советует рекрутерам и HR сосредоточиться на том, как человек думает.
think about it
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…