[java] Задачки для собеседования

kokoc88

Может кто-нибудь запостить сюда или в приват различные задачки, желательно высокой сложности, по следующим направлениям:
1. Core, java.lang, java.util
2. Multithreading, java.util.concurrent
3. Networking, java.net
4. Input/output, java.io, java.nio
5. Databases, jdbc
Интересуют только данные направления, только для проведения собеседований (а не математических олимпиад) и очень желательна высокая сложность задачек.
Edit: Если кто-то проводит собеседования по этим направлениям, я был бы рад просто какие-то выкладки или мысли прочитать.

psm-home

Несколько не в кассу м. б, но иногда на собеседованиях бывают задачки из книги Блоха и К: Java Puzzlers: Traps, Pitfalls, and Corner Cases . Лично я не уверен, что это 100% правильно, но каждый решает стоящие перед ним задачи, как считает нужным. )

agent007new

Новую работу ищешь и готовишься к собеседованию или сам уже людей набираешь?

kokoc88

Новую работу ищешь и готовишься к собеседованию или сам уже людей набираешь?
Ни то, ни другое.

Hastya

Да этих вопросов миллион. Могу даже сказать, что никто реально не знает более 70-80% Core Java.
Например:
- Чем отличается Serializable от Externalizable
- Как сделать package-level annotation
и т.п.

redzor

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

Hastya

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

Ну типа того. И многие додумываются сами, хотя ответа не знают.

redzor

прикольно. А я думал, что это я плохо знаю яву, потому что не знаю в ней всё. Спасибо, что разубедил.

kokoc88

Да этих вопросов миллион.
Это из разряда чем отличается делегат от эвента в C#, или необходимости выпытать здесь и сейчас (другое слово тут неуместно) особенности argument dependent name lookup в C++, и т.п. ИМХО, эти вопросы обычно не показывают уровень практического знания языка или технологии, потому что вопрошающий обычно знает ответ только благодаря бумажке, которая перед ним же и лежит; да и на практике используются максимум 1 раз в пятилетнем проекте.
Может быть, я не совсем точно выразился, когда попросил "сложные задачки". Мне стоило написать что-то в роде "сложных подходов к решениям проблем", из разряда как построить расширяемый сервер, что такое connection pooling в том же jdbc, и т.п. Или просто попросить любые задачки, чтобы не разводить холивар... :confused:

kokoc88

А я думал, что это я плохо знаю яву, потому что не знаю в ней всё.
Ну знаешь ли, если C# можно ругать за более чем 70 ключевых слов в языке, то Java можно ругать за обилие популярных технологий. :smirk: Буковки можно перечислять очень долго, опять же плохо, когда на собеседовании тебя спрашивают о каком-нибудь сочетании, с которым ты может быть и имел дело, но вспомнить уже не можешь.

Hastya

что такое connection pooling в том же jdbc
Это все настолько тривиально, что даже лень спрашивать.
Пару раз мне самому давали убойные задачки на архитектуру распределенных систем, но это к java не имеет отношения.
Я бы даже так сказал. "Сложный подход к решению проблемы" - это на самом деле бывает нужно очень редко. Зато очень часто бывает ситуация, когда чужой код не работает, и для того, чтобы разобраться, нужна реально высокая квалификация по языку. Человек, который делает Code Review, должен реально на глаз определять большинство косяков.

kokoc88

Это все настолько тривиально, что даже лень спрашивать.
Пару раз мне самому давали убойные задачки на архитектуру распределенных систем, но это к java не имеет отношения.
Я бы не сказал, что это так уж тривиально. На прошлой работе коллега, который собеседовал джавистов, жаловался, что 9 из 10 кандидатов не знают отличия HashMap от TreeMap. В моём понимании сложно - это не только сложно, но и достаточно часто применимо на практике.
Зато очень часто бывает ситуация, когда чужой код не работает, и для того, чтобы разобраться, нужна реально высокая квалификация по языку.
Насколько высокая? Например, у меня один коллега по работе пишет продакшн код с использованием boost::mpl и подобного. Но его код спокойно правили фанаты Qt, хотя они не являются ни сторонниками, ни профессионалами template metaprogramming. Здесь есть важное отличие от собеседования - код, который ты правишь и компилируется, и дебажится в дебаггере.
Человек, который делает Code Review, должен реально на глаз определять большинство косяков.
Вида особенности генерации javadoc при использовании annotated package? Вряд ли.

Hastya

9 из 10 кандидатов не знают отличия HashMap от TreeMap
Это похоже на правду. Но такие сразу отсеиваются.
код, который ты правишь и компилируется, и дебажится в дебаггере
Отладчик в целом помогает, но в процессе Review он бесполезен.

kokoc88

Отладчик в целом помогает, но в процессе Review он бесполезен.
Да и бог с ним. В процессе ревью ты смотришь не на то, как человек изъебнулся с малоизвестной особенностью языка. В первую очередь ты просто смотришь, правильно ли работает код, нет ли там логических ошибок, типа зачисления денег вместо снятия (и подобной ерунды). Ну а затем на более простые вещи, например, выполняются ли у него принципы ООП, использует ли он try/finally для работы с ресурсами, не ловит ли он все исключения в каждой функции. И уже в последнюю очередь ты посмотришь, как он форматирует код...

6yrop

На прошлой работе коллега, который собеседовал джавистов, жаловался, что 9 из 10 кандидатов не знают отличия HashMap от TreeMap.
Кстати, заметил, что джависты часто выпячивают этот вопрос, а вот для дотнета подобный вопрос не встречается так часто. Как бы он выглядел для дотнета? назовите отличия Dictionary от SortedDictionary или SortedList? А это уже не так прикольно спрашивать, да? :grin:

kokoc88

а вот для дотнета подобный вопрос не встречается так часто.
Ну зато встречаются вопросы типа проверки на null внутри Equals или классической реализации IDisposable. Для дотнета вопрос выглядел бы по-другому, но так, чтобы я понял, понимает человек разницу между разными коллекциями или нет.

bansek

>> - Как сделать package-level annotation
бгыгыгыгы
и что реально кто-то это знает?
те же задачи из Блоха и то к реальности ближе =)

Hastya

те же задачи из Блоха и то к реальности ближе =)
В реальности, увы, встречается все что угодно. В том числе и package annotations.

katrin2201

В реальности, увы, встречается все что угодно. В том числе и package annotations.
В реальности еще встречаются доки и гугл, и засорять голову мусором, навроде этого, совершенно необязательно.

pitrik2

9 из 10 кандидатов не знают отличия HashMap от TreeMap
я не знаю
потому как никогда не видел его использование на практике
могу догадаться
посмотрел жавадоку, мдяяя, до такого я бы не догадался
A Red-Black tree based NavigableMap implementation.
лучше б уж спрашивали что такое ConcurrentSkipListMap, эт хоть на практике используется
и реализацию ее если чел и не знает то может предложить вариант

kokoc88

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

katrin2201

я не знаю
потому как никогда не видел его использование на практике
как же ты до 1.6 жил то? без мапов что ли? 0.о
бесплатный совет: пойдешь на серьезное собеседование - повтори азы collections framework, а то тебя не поймут

pitrik2

как же ты до 1.6 жил то? без мапов что ли? 0.о
бесплатный совет: пойдешь на серьезное собеседование - повтори азы collections framework, а то тебя не поймут
чото пока все понимали
на вопрос что такое TreeMap отвечал, что никогда в своей практики не видел чтоб енто использовали, подозреваю что это какаянить мапа с отсортированными ключами на основе бинарных деревьев
самый дебильный вопрос который спрашивали это что такое Vector
на него отвечал что не понимаю что он вообще делает в коре, он не нужен совершенно кроме как для собеседований

SPARTAK3959

Это синхронизированный ArrayList + в нем есть пара полезных методов, которые в ArrayList отсутствуют.

katrin2201

чото пока все понимали
на вопрос что такое TreeMap отвечал, что никогда в своей практики не видел чтоб енто использовали, подозреваю что это какаянить мапа с отсортированными ключами на основе бинарных деревьев
Не, ну если так отвечал, то да, поймут =)
Но вопрос, про то, как ты жил до 1.6 - в силе
Я, кстати, не очень понимаю целесообразность исопользования конкаррентскиплистмапа.
Мне может захотеться пользовать такой если мне надо организовать какой нить простенький мультитреднутый сервер чего-нибудь типа чата. А все остальное время для энтерпрайзи приложений я пользую хэшмэп, линкдхэшмэп, изредка тримэп.
Какие у него преимущества помимо отсутствия конкаррентмодификейшенэксепшена?

Hastya

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

kokoc88

Просто пока ты будешь полдня гуглить, более опытный человек сразу решит проблему.
Package level annotation гуглится не за пол дня. А то, что гуглится пол дня, на листочке на собеседовании не напишешь. GL тем компаниям, которые собираются искать сотрудников по такому принципу. Они, конечно, найдут, но мне страшно представить, что за коллектив это будет.

pitrik2

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

katrin2201

Есть база, типа equals-hashCode contract. И если человек этого контракта не знает, то никакой гугл ему уже не поможет.
А есть синтаксическая ерунда, типа пекедж-левел аннотейшена, которую адекватный человек при необходимости нагуглит.
Ну и потом, экономия полдня раз в тыщу лет (примерно столько раз нужнен этот твой самый пекедж левел аннотейшен) не стоит зарплаты в два раза большей моей :smirk:

pitrik2

http://en.wikipedia.org/wiki/Red-black_tree
почитал чо такое красночерные деревья
прикольная штука, картинка к кейзу 5 странноватая, но не суть

katrin2201

не понимаю вопроса
ты хочешь сказать что без тримапа нельзя прожить до 1.6?
да можно конечно, просто это странно
не хочу тебя напрягать, no offense, вопрос закрыт
давай лучше обсудим премущества конкаррентскиплистмапа.

pitrik2

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

Hastya

это токо касается не суперширокораспространенных сторонних вещей
Ну как бы да. И эти несуперширокораспространенные вещи требуют реальных знаний и квалификации. Тот же GC tuning в Java особо не нагуглишь. И техподдержка никакая не поможет, если ситуация уникальная.
Вообще, если кандидат отвечает в стиле "такой код не может встретиться в реальном проекте, это неправильно" такой чувак с вероятностью 90% отсеется.

pitrik2

да можно конечно, просто это странно
сделал в идее: поиск использования TreeMap по всем либам проекта
их там аж 349, всё подряд, от коммонсов до проприетарных либ
нашлись использования во врапперах, типа в xstream, что понятное дело не считается
итого:
хибернейт: 6 использований
glazedlists: 10 использований
java 1.4: 4 использования (3 из них одно и тоже)
java 1.6: 26 использований
а вот использования package-info:
java 1.6: 19
jaxb: 3
MultithreadedTC: 1
так что остаюсь при своем мнении, на собесед. про TreeMap спрашивать не нужно, оно надо ну очень редко когда, типа как те же пакадж инфо

redzor

можно спросить:
есть в классе A поле private static final String FOO="foo";
а еще есть метод типа public boolean compare(String st);
который сравнивает параметр с FOO. И спросить, как этот метод напишешь.
FOO.equals(st) или st.equals(FOO); ну и тут как бы смысл в том, что во втором случае может быть NPE, если st null, а первый вариант вернет false, так что будет ок.

Gaishnik

ConcurrentSkipListMap
Java понемногу превращается в C++, а Collections Framework - в STL.
Оставить комментарий
Имя или ник:
Комментарий: