[java] Задачки для собеседования
Java Puzzlers: Traps, Pitfalls, and Corner Cases . Лично я не уверен, что это 100% правильно, но каждый решает стоящие перед ним задачи, как считает нужным. )
Несколько не в кассу м. б, но иногда на собеседованиях бывают задачки из книги Блоха и К:
Новую работу ищешь и готовишься к собеседованию или сам уже людей набираешь?
Новую работу ищешь и готовишься к собеседованию или сам уже людей набираешь?Ни то, ни другое.
Например:
- Чем отличается Serializable от Externalizable
- Как сделать package-level annotation
и т.п.
а интересно, как тогда определяют кого брать, а кого нет. Смотря по общему уровню и как человек себя ведет, когда ему попадается вопрос, на который он не знает ответ?
как человек себя ведет, когда ему попадается вопрос, на который он не знает ответ?
Ну типа того. И многие додумываются сами, хотя ответа не знают.
прикольно. А я думал, что это я плохо знаю яву, потому что не знаю в ней всё. Спасибо, что разубедил.
Да этих вопросов миллион.Это из разряда чем отличается делегат от эвента в C#, или необходимости выпытать здесь и сейчас (другое слово тут неуместно) особенности argument dependent name lookup в C++, и т.п. ИМХО, эти вопросы обычно не показывают уровень практического знания языка или технологии, потому что вопрошающий обычно знает ответ только благодаря бумажке, которая перед ним же и лежит; да и на практике используются максимум 1 раз в пятилетнем проекте.
Может быть, я не совсем точно выразился, когда попросил "сложные задачки". Мне стоило написать что-то в роде "сложных подходов к решениям проблем", из разряда как построить расширяемый сервер, что такое connection pooling в том же jdbc, и т.п. Или просто попросить любые задачки, чтобы не разводить холивар...
А я думал, что это я плохо знаю яву, потому что не знаю в ней всё.Ну знаешь ли, если C# можно ругать за более чем 70 ключевых слов в языке, то Java можно ругать за обилие популярных технологий. Буковки можно перечислять очень долго, опять же плохо, когда на собеседовании тебя спрашивают о каком-нибудь сочетании, с которым ты может быть и имел дело, но вспомнить уже не можешь.
что такое connection pooling в том же jdbcЭто все настолько тривиально, что даже лень спрашивать.
Пару раз мне самому давали убойные задачки на архитектуру распределенных систем, но это к java не имеет отношения.
Я бы даже так сказал. "Сложный подход к решению проблемы" - это на самом деле бывает нужно очень редко. Зато очень часто бывает ситуация, когда чужой код не работает, и для того, чтобы разобраться, нужна реально высокая квалификация по языку. Человек, который делает Code Review, должен реально на глаз определять большинство косяков.
Это все настолько тривиально, что даже лень спрашивать.Я бы не сказал, что это так уж тривиально. На прошлой работе коллега, который собеседовал джавистов, жаловался, что 9 из 10 кандидатов не знают отличия HashMap от TreeMap. В моём понимании сложно - это не только сложно, но и достаточно часто применимо на практике.
Пару раз мне самому давали убойные задачки на архитектуру распределенных систем, но это к java не имеет отношения.
Зато очень часто бывает ситуация, когда чужой код не работает, и для того, чтобы разобраться, нужна реально высокая квалификация по языку.Насколько высокая? Например, у меня один коллега по работе пишет продакшн код с использованием boost::mpl и подобного. Но его код спокойно правили фанаты Qt, хотя они не являются ни сторонниками, ни профессионалами template metaprogramming. Здесь есть важное отличие от собеседования - код, который ты правишь и компилируется, и дебажится в дебаггере.
Человек, который делает Code Review, должен реально на глаз определять большинство косяков.Вида особенности генерации javadoc при использовании annotated package? Вряд ли.
9 из 10 кандидатов не знают отличия HashMap от TreeMapЭто похоже на правду. Но такие сразу отсеиваются.
код, который ты правишь и компилируется, и дебажится в дебаггереОтладчик в целом помогает, но в процессе Review он бесполезен.
Отладчик в целом помогает, но в процессе Review он бесполезен.Да и бог с ним. В процессе ревью ты смотришь не на то, как человек изъебнулся с малоизвестной особенностью языка. В первую очередь ты просто смотришь, правильно ли работает код, нет ли там логических ошибок, типа зачисления денег вместо снятия (и подобной ерунды). Ну а затем на более простые вещи, например, выполняются ли у него принципы ООП, использует ли он try/finally для работы с ресурсами, не ловит ли он все исключения в каждой функции. И уже в последнюю очередь ты посмотришь, как он форматирует код...
На прошлой работе коллега, который собеседовал джавистов, жаловался, что 9 из 10 кандидатов не знают отличия HashMap от TreeMap.Кстати, заметил, что джависты часто выпячивают этот вопрос, а вот для дотнета подобный вопрос не встречается так часто. Как бы он выглядел для дотнета? назовите отличия Dictionary от SortedDictionary или SortedList? А это уже не так прикольно спрашивать, да?
а вот для дотнета подобный вопрос не встречается так часто.Ну зато встречаются вопросы типа проверки на null внутри Equals или классической реализации IDisposable. Для дотнета вопрос выглядел бы по-другому, но так, чтобы я понял, понимает человек разницу между разными коллекциями или нет.
бгыгыгыгы
и что реально кто-то это знает?
те же задачи из Блоха и то к реальности ближе =)
те же задачи из Блоха и то к реальности ближе =)В реальности, увы, встречается все что угодно. В том числе и package annotations.
В реальности, увы, встречается все что угодно. В том числе и package annotations.В реальности еще встречаются доки и гугл, и засорять голову мусором, навроде этого, совершенно необязательно.
9 из 10 кандидатов не знают отличия HashMap от TreeMapя не знаю
потому как никогда не видел его использование на практике
могу догадаться
посмотрел жавадоку, мдяяя, до такого я бы не догадался
A Red-Black tree based NavigableMap implementation.лучше б уж спрашивали что такое ConcurrentSkipListMap, эт хоть на практике используется
и реализацию ее если чел и не знает то может предложить вариант
посмотрел жавадоку, мдяяя, до такого я бы не догадалсяДо чего там догадываться? Одно сделано на хэше, второе на дереве и сортирует элементы - 100% достаточный ответ. Разве что спросят более детальную реализацию.
я не знаюкак же ты до 1.6 жил то? без мапов что ли? 0.о
потому как никогда не видел его использование на практике
бесплатный совет: пойдешь на серьезное собеседование - повтори азы collections framework, а то тебя не поймут
как же ты до 1.6 жил то? без мапов что ли? 0.очото пока все понимали
бесплатный совет: пойдешь на серьезное собеседование - повтори азы collections framework, а то тебя не поймут
на вопрос что такое TreeMap отвечал, что никогда в своей практики не видел чтоб енто использовали, подозреваю что это какаянить мапа с отсортированными ключами на основе бинарных деревьев
самый дебильный вопрос который спрашивали это что такое Vector
на него отвечал что не понимаю что он вообще делает в коре, он не нужен совершенно кроме как для собеседований
Это синхронизированный ArrayList + в нем есть пара полезных методов, которые в ArrayList отсутствуют.
чото пока все понималиНе, ну если так отвечал, то да, поймут =)
на вопрос что такое TreeMap отвечал, что никогда в своей практики не видел чтоб енто использовали, подозреваю что это какаянить мапа с отсортированными ключами на основе бинарных деревьев
Но вопрос, про то, как ты жил до 1.6 - в силе
Я, кстати, не очень понимаю целесообразность исопользования конкаррентскиплистмапа.
Мне может захотеться пользовать такой если мне надо организовать какой нить простенький мультитреднутый сервер чего-нибудь типа чата. А все остальное время для энтерпрайзи приложений я пользую хэшмэп, линкдхэшмэп, изредка тримэп.
Какие у него преимущества помимо отсутствия конкаррентмодификейшенэксепшена?
В реальности еще встречаются доки и гугл, и засорять голову мусором, навроде этого, совершенно необязательно.Если бы все проблемы решались доками и гуглом, жизнь, безусловно, была бы проще. Просто пока ты будешь полдня гуглить, более опытный человек сразу решит проблему. Теперь догадываешься, почему у него зарплата будет в два раза больше?
Просто пока ты будешь полдня гуглить, более опытный человек сразу решит проблему.Package level annotation гуглится не за пол дня. А то, что гуглится пол дня, на листочке на собеседовании не напишешь. GL тем компаниям, которые собираются искать сотрудников по такому принципу. Они, конечно, найдут, но мне страшно представить, что за коллектив это будет.
Но вопрос, про то, как ты жил до 1.6 - в силене понимаю вопроса
ты хочешь сказать что без тримапа нельзя прожить до 1.6?
А есть синтаксическая ерунда, типа пекедж-левел аннотейшена, которую адекватный человек при необходимости нагуглит.
Ну и потом, экономия полдня раз в тыщу лет (примерно столько раз нужнен этот твой самый пекедж левел аннотейшен) не стоит зарплаты в два раза большей моей
http://en.wikipedia.org/wiki/Red-black_tree
почитал чо такое красночерные деревья
прикольная штука, картинка к кейзу 5 странноватая, но не суть
почитал чо такое красночерные деревья
прикольная штука, картинка к кейзу 5 странноватая, но не суть
не понимаю вопросада можно конечно, просто это странно
ты хочешь сказать что без тримапа нельзя прожить до 1.6?
не хочу тебя напрягать, no offense, вопрос закрыт
давай лучше обсудим премущества конкаррентскиплистмапа.
Просто пока ты будешь полдня гуглить, более опытный человек сразу решит проблему.это токо касается не суперширокораспространенных сторонних вещей
т.е. того что в гугле нет в принципе и что можно узнать токо методом тыка или звонком в техподдержку
остальные вещи в гугле опытным гуглопоискателем найдутся практически мгновенно
это токо касается не суперширокораспространенных сторонних вещейНу как бы да. И эти несуперширокораспространенные вещи требуют реальных знаний и квалификации. Тот же GC tuning в Java особо не нагуглишь. И техподдержка никакая не поможет, если ситуация уникальная.
Вообще, если кандидат отвечает в стиле "такой код не может встретиться в реальном проекте, это неправильно" такой чувак с вероятностью 90% отсеется.
да можно конечно, просто это странносделал в идее: поиск использования 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 спрашивать не нужно, оно надо ну очень редко когда, типа как те же пакадж инфо
есть в классе A поле private static final String FOO="foo";
а еще есть метод типа public boolean compare(String st);
который сравнивает параметр с FOO. И спросить, как этот метод напишешь.
FOO.equals(st) или st.equals(FOO); ну и тут как бы смысл в том, что во втором случае может быть NPE, если st null, а первый вариант вернет false, так что будет ок.
ConcurrentSkipListMapJava понемногу превращается в C++, а Collections Framework - в STL.
Оставить комментарий
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: Если кто-то проводит собеседования по этим направлениям, я был бы рад просто какие-то выкладки или мысли прочитать.