×Закрыть

Собираю вопросы на собеседования по Java

Пишу статью и хочу собрать как можно больше вопросов по джаве. Пока что собрал (скорее вспомнил о чем меня спрашивали) около 220 explainjava.com/...​java-interview-questions

Хочу собрать все самые популярные и не очень вопросы, постепенно буду добавлять ответы, чтоб было удобно готовиться к новым собеседованиям, а не лазить по куче сайтов.

Разбил их примерно на уровни от basic до advanced, потому что мне лично для подготовки базового и среднего уровня вопросы особо не нужны, а кому-то могут пригодиться.

Знаю, что некоторые ведут подобные доки для себя, чтоб быстро освежить в памяти какие-то вещи docs.google.com/...​ovPX0D98/edit?usp=sharing

В общем буду рад любой инфе, докам и конструктивной критике.

LinkedIn

Лучшие комментарии пропустить

В юности, когда я работал одмином, 80% всех проблем возникало по максимально тупым причинам, а ля не включен монитор/блок питания либо отжата клавиша numlock и «цифирьки не рабтают», и я всегда начинал диагностику именно с этих потенциальных причин.

К чему я это — ах да, на собеседовании тот же подход. Максимально тупые вопросы всегда будут, их будет много и, к сожалению, их необходимо вызубрить как молитву или как свой пароль, ну ты понел... А задают их всем и июням и синьйорам и кому попало вообще.

К максимально тупым вопросам я отношу:
1) ArrayList vs LinkedList, что лучше, что «быстрее» . В теории все красиво, но на практике я ни разу (!) не сталкивался с необходимостью добавлять или удалять что-то из середины (!) листа. Также читал разные обсуждения на stackoverflow, где ребята говорили о таком же, что по факту все юзают ArrayList и не парятся.
2) equals & hashcode. Ну о чем же еще спросить как не об этом? А может соискатель не умеет работать с ветками, переключаться, мержить, найти таск в джире и поменять ему статус? Вот ты пришел на работу и сходу делаешь equals & hashcode, да? А таск посмотреть? А репу клонировать/билдить, шариться по веткам и билдам jenkins-а и не надо уже.
3) SQL join-ы На каждом моем собеседовании (!) меня спрашивали SQL joinы, ну это понятно, Java developer == SQL developer
4) нарисуй иерархию коллекций, где интерфейс Set, где Map. Без комментариев
5) потоки на низком уровне, sleep, wait, join, notify Мне ни разу не приходилось за всю карьеру писать что-то в реальных проектах на низком уровне, к тому же это и не безопасно совершенно. Но на каждом собеседовании (!) тебя об этом спросят — поэтому вызубри и все.
6) задачки по индусятине ++ i -+ j —k и все это в тройном цикле тут с одной стороны понятно, что тебя собеседует идиот, с другой стороны — можно уточнить — а у них такой код в проекте? Если да — бежать без оглядки.
7) почему вы ушли с прошлой работы? Да, вы не поверите, но этот вопрос еще задают. А может потому что рекрутеры писали каждый день и слезно умоляли прийти на собес обещая золотые горы???!!! Но нет, от тебя ожидают заготовленный ответ о стеклянном потолке и возможностях развития в их «Шхуна имени Бобби Котика»
8) балансировать деревья на листочке, либо поворачивать строку

Дальше лень расписывать — мысль и так понятна.

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

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

25 вопросов и ответов на собеседовании для Junior Java разработчика — itvdn.com/ru/blog/article/jjd

Программа, которая запрашивает у нас два строки и сообщает нам, сколько раз вторая появляется в первом, на пример ’mi mama me mima’ , ’mi’ есть 2 mi

Вот вопрос который мне задали на телефонном собеседовании в Apple и часть которого поставила меня в тупик :)

Map < Character, Integer > m = new HashMap<>();

1) В какой версии джавы появился оператор <>
2) Что он делает.

Я понятия не имел в какой версии он появился (на галерах был дотнетчиком, а после начал джаву пользовать сразу с 7й), ткнул пальцем в небо (что сообщил интервьюеру) и предположил что в Java5, оказалось что в Java7.

p.s. справедливости ради надо сказать что остальная часть интервью была очень интересной с крутым интервьером, у которого опыта в индустрии немногим меньше чем мне лет.

А знання джави таке важливе, щоб бути джава-програмістом? Гугл же за півроку перевчає будь-якого абстрактного програмера на джава-кодера. А у нас треба обов’язково знати які були нововведення в JavaN відносно JavaN-1 інакше не можеш працювати?

предлагаете поменять вопросы по кишкам джавы на пяток интервью по часу на решение алгоритмических задачек, как в гугле? Кстати без знания решения алгоритмических задач нельзя что ли работать?

Цікаво а зміг би гугл за півроку будь-якого ідеального знавця джави навчити вирішувати алгоритмічні задачки?

А взагалі мова програмування — це ж мова. Знання мови не робить людину хорошим письменником. Хоча, якщо потрібен лише перекладач, то достатньо буде тільки знання мови.

ну насколько я слышал за пол года подготовиться к собеседованию в гугл вполне реально

Це кожен може зробити, чи тільки люди з визначеним складом розуму і рівнем інтелекту?

Тут звичайно, ще не ясно, чи кожен зможе осилити джаву. Але все-таки джава це мова, при чому набагато простіша за будь-яку людську мову, а людські мови як мінімум одну осилює майже кожна людина. Інша справа, що цим займатись захоче не кожен.

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

На собеседовании надо давать писать код. В идеале в IDE. Задание какое-нибудь часа на 3 с коллекциями, потоками и тестами.

Суровому собеседователю вопрос на засыпку: давать ли при этом мышку?

я бы сказал — давать только мышку, без клавы!

Конечно. При чем ещё и возможность выбрать среду.

Но с мышкой же не «тру», как-то диссонирует с 3х часовым собесом.

Почему? 3 часа задание пишешь. А не люди тебя собеседуют. Просто за меньшее время ничего интересного не напишешь.

Собеседование на джуна без опыта работы?

Ну готовиться к собесам зубря вопросы — идиотизм.

Как готовитесь вы?

Если буду готовиться к условному гуглу, буду читать литературу по архитектуре, распределенным систем, бигдате, а также решать задачки на хакерранке.
Если в условную галеру — небуду, чсв и так череп жмет.
Если с позиции новичка, то практика гораздо ценее тупой зубрежки.

И что ? ты попрактиковался 2-3 года каждый день долбя однотипного кучу кода на условном спринге с sql-ем, пришёл на собеседование и тебя завалили элементарными вопросами.

Я когда собеседовал по Java(в прошлом году) тратил на одного человека 0.5 часа.
Хватало трёх вопросов, чтоб понимать стоит ли двигаться дальше
1. ЗАЧЕМ нужен шаблон Singleton, если можно тупо объявить поле public static final и проинициализировать. Зачем нужны все эти сложные конструкции, если можно сделать просто
2. Почему ООП лучше процедурного программирования(внимание, ложная альтернатива)?
3. Обосновать пользу и вред нововведений в Java8, чем они полезны и каких добавляют проблем.

Если чел отвечает удовлетворительно на вопросы, можно брать — остальное изучается. Если не отвечает, он не более чем мартышка кликающая на кнопочки. Без понимания того, что делает

Первые два вопроса хороши. А где драмма в третем?

Да дело в том, что люди часто-густо не знают новых фич java и даже если знают, используют совершенно бездумно. Нельзя писать на Java и не знать языка

А какие новые фичи 8 джавы вы предлагаете использовать и почему? Дефолтные методы, или стримы к ним относятся? Почему нет?

Я предлагаю, чтобы человек САМ высказался относительно вышесказанного. Ну, чтобы у него было хоть какое то мнение на этот счёт. Лично я таки использую и дефолтные методы и стримы. Первое позволяет обойтись без абстрактных классов в ряде случаев, второе — делает код более читабельным и позволяет его распараллелить

Первое позволяет обойтись без абстрактных классов в ряде случаев

>> Default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.

4. Обосновать пользу и вред нововведений в Java9, чем они полезны и каких добавляют проблем (с 9 как бы проблем на порядок больше)

Это года через два — три, Java 9 ещё мало где применяется

2. Почему ООП лучше процедурного программирования(внимание, ложная альтернатива)?

Если слово процедурное заменить на ФП, то можно очень нехилый срачь поиметь :-)

Не надо срач, им легко заполнить всё время собеседования скрыв отсутствие знаний. Надо, чтоб человек понимал что это такое за зверь ООП и зачем он нужен

Человек может знать зачем он не нужен :-)

це вже overcvalified, також нафіг з пляжа :)

Обосновать пользу и вред нововведений в Java8, чем они полезны и каких добавляют проблем.

Да тут о одних только стримах пол часа можно общаться.. Не говоря уж о датах и новых методах в структурах данных.. Как Вы за пол часа успевали услышать удовлетворительный ответ..

Мне не надо определить НА СКОЛЬКО человек хорош, мне надо «подходит или нет». Если человек отвечает удовлетворительно на вышеуказанные вопросы он подходит — может делать работу

А можете написать удовлетворительный с Вашей точки зрения ответ на эти вопросы. Не холиваров ради, просто интересно.

Запросто
1. Синглтон нужен когда необходима ленивая инициализация. К примеру, если неизвестно когда тебе нужно коннектиться к базе данных, нужно ли вообще это. Соответственно незачем создавать коннект раньше времени.
2. ООП не лучше и не хуже процедурного. Это способ структурирования программного кода позволяющий разложить по разным коробочкам не только данные но и операции над ними
3. Ответ долгий

О_О
С такими ответами только джуном взял бы :)

Популярность ООП это ответ на возросший объем и сложность програмного кода. Да одна только инкапсуляция в ООП дает 100-500 преимуществ, которых нет у процедурного подхода:
— сокрытие реализации
— контроль целостности внутренних данных
— управление доступом к внутренним данным
— облегчение рефакторинга за счет отделения публичного интерфейса класса от его релизации.

Да тут докторскую можно защитить на тему: чем подход ООП лучше процедурного.

А дает ли процедурный подход преимущества над ООП?
И чем отличается ООП, о котором вы читали в книжке из которой вы о нем узнали, ООП, о котором говорит Дядюшка Боб, ООП которое есть у вас в проекте, и ООП о котором пишет докторскую Егор256?

И чем отличается ООП, о котором вы читали в книжке из которой вы о нем узнали, ООП, о котором говорит Дядюшка Боб

При собесе на джаву под ооп подразумевают собственно джаву.

Вопрос для собеса: что такое процедурное программирование? Завал гарантирован.

это программирование процедурами!!

у того кто ищет первую работу и просто не в курсе что такое есть?

Все, що ви описали, реалізується й процедурами.

сейчас бы реализацию скрыть

Мнение Bob Martin по этому поводу, на 39 минуте youtu.be/TMuno5RZNeE

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

Засчитано xD

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

инфа 100% что синглтон для других целей, а то что ты пишешь — частный случай использования, тоже самое что говорить что двс придумали чтобы люди на работу ездили

2. ООП не лучше и не хуже процедурного. Это способ структурирования программного кода позволяющий разложить по разным коробочкам не только данные но и операции над ними

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

1. А как же многопоточность? 2. Очень простой ответ. Маловато.

хотел спорить но посмотрел на фотку — ты ж неадекват)))

Правильно, вообще все кто с бабами в обнимку неадекватны. Мужиков надо обнимать. Иди ко мне, противный!

Топик на тему — хочу получать 5000$ за ответ на вопрос чем отличаются final finally & finalize?

нет, 5к дают, если ты знаешь разницу между String, Swing и Spring

Деградация во всю. За такое ещё 7 лет назад 10 давали

не, на 10-у нужно знать в чем разница между JPA, JTA, JDK, JRE

Там вообще много аббревиатур на J, JVM забыл)

Давніше теж таким займався. Закинув тепер на GitHub, кажуть що це модно-маладьожно. Дещо застаріле, дещо можливо навіть дуже застаріле.
github.com/...​/forcelate-skeletons/wiki

Нє, можно молодьожно, якщо на медіумі.

В юности, когда я работал одмином, 80% всех проблем возникало по максимально тупым причинам, а ля не включен монитор/блок питания либо отжата клавиша numlock и «цифирьки не рабтают», и я всегда начинал диагностику именно с этих потенциальных причин.

К чему я это — ах да, на собеседовании тот же подход. Максимально тупые вопросы всегда будут, их будет много и, к сожалению, их необходимо вызубрить как молитву или как свой пароль, ну ты понел... А задают их всем и июням и синьйорам и кому попало вообще.

К максимально тупым вопросам я отношу:
1) ArrayList vs LinkedList, что лучше, что «быстрее» . В теории все красиво, но на практике я ни разу (!) не сталкивался с необходимостью добавлять или удалять что-то из середины (!) листа. Также читал разные обсуждения на stackoverflow, где ребята говорили о таком же, что по факту все юзают ArrayList и не парятся.
2) equals & hashcode. Ну о чем же еще спросить как не об этом? А может соискатель не умеет работать с ветками, переключаться, мержить, найти таск в джире и поменять ему статус? Вот ты пришел на работу и сходу делаешь equals & hashcode, да? А таск посмотреть? А репу клонировать/билдить, шариться по веткам и билдам jenkins-а и не надо уже.
3) SQL join-ы На каждом моем собеседовании (!) меня спрашивали SQL joinы, ну это понятно, Java developer == SQL developer
4) нарисуй иерархию коллекций, где интерфейс Set, где Map. Без комментариев
5) потоки на низком уровне, sleep, wait, join, notify Мне ни разу не приходилось за всю карьеру писать что-то в реальных проектах на низком уровне, к тому же это и не безопасно совершенно. Но на каждом собеседовании (!) тебя об этом спросят — поэтому вызубри и все.
6) задачки по индусятине ++ i -+ j —k и все это в тройном цикле тут с одной стороны понятно, что тебя собеседует идиот, с другой стороны — можно уточнить — а у них такой код в проекте? Если да — бежать без оглядки.
7) почему вы ушли с прошлой работы? Да, вы не поверите, но этот вопрос еще задают. А может потому что рекрутеры писали каждый день и слезно умоляли прийти на собес обещая золотые горы???!!! Но нет, от тебя ожидают заготовленный ответ о стеклянном потолке и возможностях развития в их «Шхуна имени Бобби Котика»
8) балансировать деревья на листочке, либо поворачивать строку

Дальше лень расписывать — мысль и так понятна.

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

Чувак 1,2,5,8 — если помле этих вопросов ты пропустил человека и не видишь что он зазубрил. То ты кхе кхе не самый лучший интервьюаер

:) Ну ты понял.

1. Достаточно тупой способ проверить умеет ли чел в структуры данных. Линкед лист сам по себе на практике таки мало используется, но вот всякие очередя — вполне.
2. Идея это одним кликом генерит, потому практическая ценность этих вопросов низкая. Тем не мение в легаси можно наступить на грабли и проломить череп. Сам же вопрос интересен тем, что если чел не зазубрил контракт на память, может ли он А связать с Б и вывести/проанализировать кейсы с этим связанные.
5. Действительно, со времени джавы 6 (или может даже 5) — эти вопросы вообще потеряли всякий смысл.
8. Балансировка и перевернуть строку — все же разные вестчи. Но если чел не может строку перевернуть — то о чем с ним говорить вообще ? :-)

Все зависит от того на какую позицию собеседуетесь.

И вообще от типа проекта: лоу лейтенси это одно, распределённых системы это другое и т.д. Я ворота своё время поигрался с с разными алгоритмами вычисления хэш ключа + jmh. Очень поучительно и интересно было.

Но при любом раскладе видно где зубрежка а где понимание.

— Development processes: Agile -> Scrum, Waterfall
— Java 8: default method, other java 8 features
— SOLID, YAGNI, DRY, KISS, GRASP principles
— Coupling
— HashSet vs LinkedHashSet vs TreeSet
— TDD and BDD
— Statement, Prepared Statement, Callable Statement
— JPA vs Hibernate
— Adapter and Decorator patterns
— Calendar.getInstance() pattern.
— Servlet Filters -> Chain of Responsibility pattern.
— What is faster HashTable or ConcurrentHashMap
— Different ways to run a new Thread.
— What collection is thread safe?
— How to iterate over collection with thread safety. Atomic reverence, volatile keyword, synchronized methods.
— Spring?
— Can we mock static class?
— CI(continuous integration) vs CD (delivery, deployment)
— Infrastructure as Code (IAC). Docker, Vagrant
— Types of Software testing.
— Technical depth
— What is Autoboxing

SOLID, YAGNI, DRY, KISS, GRASP principles
— Coupling

:))))

Technical depth

:)))))

What is faster HashTable or ConcurrentHashMap

:)))))))

Нндяяяя

Советую книгу Java/J2EE Job Interview Companion
Доступна здесь
github.com/...​.2nd.Edition.Apr.2007.pdf

Вопросы на собеседования напоминают геометрию за 9 класс. Никому это потом никогда не нужно, а если и нужно — учат заново, и только то что нужно. Но почему-то каждый вот просто обязан это всё знать в 9 классе.

Я ещё понимаю, что это дебильное мин.освиты, которое не менее дебильное госудурство не в состоянии разогнать к чертям собачьим. Но зачем то же самое взрослым людям, которые нанимают других взрослых людей, делать совершенно другую работу, чем то о чём спрашивают «для собеседования».

Ещё ни разу за всю жизнь не спросили то, чем реально приходится пользоваться вот так чтобы каждый день. И даже то, чем раз в месяц. Зато всё, что пригодилось от 0 до 0.5 раз за жизнь (кроме собесов) — просто настоящий маст хэв!

С тем же успехом можно спрашивать всех парней как принимать роды у верблюда по традиции Ислама, по версии восточных курдов.

А чем каждый день приходиться пользоваться? Что вот такого можно спросить, чтоб понять, что перед тобой синьор? Рассуждать вообще, конечно, хорошо, но у нас сложилась такая практика спрашивать кишки Java, точно так же, как в штатах спрашивают алгоритмические задачки. Логика простая знаешь ответы на все вопросы — получаешь 5к, нет — работаешь на меньше зп и качаешь скилл собеседований :)

к сожалению, по стандартным подходам к собеседованию, можно взять на работу именно того, кто их научился проходить) Аля «принцип 10 собеседований», сходил на штук 6 и уже к 7-8-9 ты уже гуру.
Часто эти люди мало приспособлены к самой работе)

Больше скажу, по ним же можно отсеять до 100% тех, кто работает над вещами сложнее MVC поделок и бэкморд к формошлёпкам.

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

Объясни, в чём смысл тогда вообще этой «логики»? Не проще ли не проводить собесов и не давать 5к? А если давать — то только тем, кто на эти 5к работает, и не сам по себе.

я не за и не против сложившейся системы, мне, честно говоря, пофиг. Я играю по тем правилам, которые есть. От того, что мы тут решим, что лучше не проводить собесов ничего на рынке не измениться и надо что-то вообще менять?

Вообще-то, надо. Другой вопрос, кому надо. Мне в данный момент не надо, по крайней мере я не могу это «надо» монетизировать в плюс — слишком высок барьер, а за ним такая пропасть, что зайцу не перелететь.

Другой вопрос, что надо тебе — приспособиться самому, приспособить кого-то, или же стать частью системы?

Я хочу знать (и в большинстве случае таки знаю), что меня спросят на собеседовании, т.к. основная моя цель получить нужную позицию и нужную зп. У нас в основном сложились правила игры и для меня, как потенциального соискателя, менять эти правила нет смысла. Для работодателя может быть, но опять же — если они не меняют процесс собеседований, то считают текущий вариант вполне себе работающим

Да ваще, джава синьйору совсем необязательно знать джаву. Только хардкор, только итерации по массивам!

Ну да, неплохо было бы дать итерацию по массивам. Многопоточную, в 1-2 потока асинхронной записи в любой слот, и ≈400 потоков чтения.

Да, об этом не напишут в учебнике. Но если это не первая работа, логично спрашивать опыт, а не учебник? Хотя бы потому, что RTFM на рабочем месте присутствовать будет, и подглядывать туда можно нужно. А вот как раз опыт расскажет, насколько уже наподглядывал.

Да, об этом не напишут в учебнике.

Java Concurrency Guidelines

Но если это не первая работа, логично спрашивать опыт, а не учебник?

Если первая — то тоже нет смысла спрашивать учебник.

вот этого не видел, спасибо

там на заглавной странице разделение по тематикам.
сначала дал не ту ссылку)
jsehelper.blogspot.nl/p/welcome.html

та я нашел, спасибо)

Бредовый бред. Возьми любого сотрудника, не готовящегося к собесам специально сейчас, и он завалит тебе процентов 70, процентов 10 просто не поймёт вопроса. А тут заявлено что это «на джуна».

Могу доказать. Вот вопрос, на который знает ответ любой опытный джавист, но ни один составитель тестов. Что такое «jvsree»?

Даже гугл не в курсе, что это...

Вот видишь. А практикующий программист на Java ответит с ходу. И даже на С# ответ звучит так же.

Скинь, пожалуйста, где почитать, а то я спать не буду))

Это String
Иди спать, теоретик :)

я не понял шутки...

Шутка в том, что бюрократы зациклены на определениях. Считают, что достаточно знать определение и формальное его описание в умных словах — и этого достаточно для работы.

Я просто дал стринговую константу, и спросил что это. Вы не ответили. Формально, вы не прошли: не ответили на простейший вопрос, с вами не о чем дальше разговаривать. Неформально — я поставил барьер, априори зная только то, что буду спрашивать — вы же понятия не имели, что подобный вопрос может иметь место в теории. На практике вы бы 100% знали что это.

Я воспроизвёл в аккурат условия собеса, где обе стороны традиционно находятся в идиотском положении, но именно нанимающая сторона строит барьер сама себе, и чем выше барьер — тем выше довольны собой, делая всё «правильно».

Более просто: чтобы пройти самоуверенного идиота, нужно доказать что ты самоуверенный идиот. Хотя на работе требуется совсем другое.

Что такое «jvsree»

Ну, це елементарно — «омікуу» на англійській розкладці.

Це строкова константа. А вже що з нею робити виходить за рамки питання :)

а от і ні — лапки неправильні :)

Автозамніна на DOU. Каюсь, не помітив.

смотрел, спасибо

Квизфул хрень. Там во-первых, куча неправильных «правильных» ответов, во-вторых, половина вопросов — откровенное маразматическое говно. Типа дерева наследования A-B-C-D-E-F-G с миллионом конструкторов, и ты думаешь что нужно проследить что откуда вызывается, а на самом деле гдето не поставили ; и «правильный» овтет — компайл еррор. Очень полезный вопрос для самоподготовки, да. И такого наверное треть.

ну я такое отсеял для своего списка, но несколько вопросов нашел, которых у меня не хватало

Подписаться на комментарии