Идеальное техническое собеседование

Я часто слышу много забавных и нелепых отговорок, что мол на технических собеседованиях бессмысленно и тупо спрашивать. В этой статье я попробую воссоздать вариант собеседования, который бы вобрал в себя некоторые из них. Итак, кандидат на одну из позиций в компании Костик пришел на собеседование к опытному специалисту Виталию…

– Добрый день! Как до нас добрались? Легко ли нашли офис? Может хотите чаю, кофе или водички? – любезно встретил гостя Виталий.
Костик бросил рюкзак на рядом стоящий стул и уселся в мягкое кресло.
– Да нет, спасибо! Если можно давайте приступим к собеседованию, а то я и так с работы отпросился только на часок.
– Как скажете. Итак, для начала расскажите о том, что больше всего запомнилось вам из интересных задач, сделанных вами за последние несколько лет. – дружелюбно спросил Виталий, потягивая кофе из маленькой чашечки.
– Хм… – призадумался Костик. – Так сразу ответить сложно. Я разные задачи делал, были наверное и интересные. Да и какая разница интересные или неинтересные, мне же не за интерес деньги платят, а за сделанную работу вовремя.
– И что ничего особенного за это время не запомнилось? Может придумали какое-то хитрое решение или красиво получилось решить задачу заказчика? – пытался добиться ответа Виталий.
– Мы всегда что-то хитрое придумываем, ведь без хитрого костыля ничего не заработает. Могу парочку последних описать… Хотя нет, не могу, ведь детали под NDA, а я пока еще не уволился.
– Да нет, пожалуй и не стоит. – сказал Виталий, отмечая что-то у себя в блокноте. – Давайте лучше начнем с пары логических задачек.
– Оооо… Вы что не слыхали? Даже Google уже отказался от таких задачек у себя на собеседованиях. Какой в них толк? – раздраженно ответил Костик. – Ведь я не буду на работе заниматься ничем подобным: ни раскладывать спички, ни рассаживать бабушек, ни взвешивать гирьки. Если конечно вы не дорожите чужим временем, то давайте свои задачки…
– Ладно, можем пропустить эту часть, если она вызывает у вас подобные эмоции. Давайте тогда для разминки несколько простых алгоритмических задачек? – пытался оставаться дружелюбным Виталий.
– Вот уж чего никогда не понимал, так это для чего спрашивать про быструю сортировку и прочий бред на собеседованиях. Уже же все написано для нас. Нужна сортировка? Вызывайте смело Collections.sort! Вряд ли разработчики Java сделали ее небыстрой. – Костик выглядел явно довольным собой, у него не оставалось сомнений, что этот уверенный ответ принесет ему предложение о работе. – Или может поищем подстроку в строке? Для этого уже сотни StringUtils написаны! Да и вообще, любой алгоритм можно за пару минут в интернете найти и прочитать.
– А как насчет структур данных? Давайте обсудим эту тему. К примеру, какова сложность добавления элемента в PriorityQueue? А удаления элемента из LinkedList? – пытался хоть как-то начать более технический разговор Виталий, который начинал уже немного выходить из состояния спокойствия.
– Вот это вы спросили! Для этого даже в интернете не надо искать – ведь есть JavaDoc. Мне его что заучивать перед сном? Сколько пишу на Java и никогда не задумывался над этими вопросами. А все почему? – победно посмотрел Костик. – Потому что не надо использовать сложные структуры где ни попадя. ArrayList, HashSet и HashMap – лучшие друзья разработчика и они решают 99.9% задач.
– Ладно, я вижу с алгоритмами у нас не задалось. Давайте поговорим о программировании на Java. Из вашего опыта, чем отличается абстрактный класс от интерфейса? Когда следует применять один и другой? – постарался не показывать своего раздражения Виталий.
– Вот этот вопрос я нахожу оскорбительным для себя. – обиженно ответил Костик. – Я к вам пришел устраиваться на позицию Senior Java Developer, а не младшего ассистента Junior Java Developer. Вы бы еще меня спросили о том, что такое наследование и полиморфизм, или какие бывают модификаторы доступа…
– Ну извините. Если этот вопрос кажется вам достаточно простым, то расскажите тогда последовательность необходимых шагов для того, чтобы записать текстовые данные в определенной кодировке в выходной поток байт. – предложил альтернативный вариант Виталий.
– А, ну это тоже несложно. Надо создать этот, как его… Writer. Да, точно, Writer. А в него передать этот самый выходной поток. Ну а потом записать туда строку в нужной кодировке. И готово! Я же говорил просто! – обрадовался своему быстрому решению Костик.
– А не могли бы вы подробнее рассказать как именно записать строку в нужной кодировке? И какой конкретно Writer нужно создать? Как в него передать выходной поток? – настаивал на деталях Виталий, крутя в руках не пригодившийся ему пока карандаш.
– Я что похож на JavaDoc? Зачем мне запоминать названия методов, если у меня есть IDE. Это ведь секундное дело пробежаться по классу и найти нужный метод. Наверняка есть метод записи строки с параметром кодировки. Передаешь туда строку, кодировку и готово! Или вы тут код на бумажках все пишете, а уже потом его в компьютер вводите? – Костик был явно доволен своей шуткой, поэтому широко улыбнулся и посмотрел на часы. – Ну вот, уже полчаса прошло, а мы еще ничего серьезного и не обсудили.
– Да уж, время быстро летит. – не без раздражения прокомментировал Виталий. – Давайте двигаться дальше. Расскажите мне о применении шаблона проектирования Decorator. И чем он отличается от Adapter и Proxy. Вы же слышали о шаблонах проектирования?
– Вы не поверите! Не только слышал, но еще и толстенную книгу пролистал. Хотите мое мнение? Шаблоны проектирования создали для того, чтобы было как поумничать на собеседованиях. Ведь это голая теория! Надо просто брать и писать код, а не думать какой шаблон тут нужно применить. А то задача стынет, а все вокруг нее с шаблонами должны плясать. – оттачивал свое чувство юмора Костик.
– Так может тогда нам проще будет написать вместе немного кода? – предложил Виталий. – Вы бы и показали на практике как решать задачи быстро и качественно.
– Что вы имеете ввиду? Сесть и прямо тут с вами писать код? – недоуменно спросил Костик.
– Ну да! Вот есть ноутбук, тут есть IDE на выбор: IDEA, Eclipse, NetBeans. Также установлена Java 7 и все необходимое. Так что?
– Я не думаю, что за 20 минут мы что-то успеем написать. Это время у меня уйдет только на то, чтобы привыкнуть к клавиатуре, разобраться с настройками IDE и вникнуть в суть задачи. А я вам в самом начале сказал, что отпросился с работы только на часок. – оправдывался Костик, смотря на часы. – Расскажите лучше мне о компании, проекте, разработчиках. Как раз успеем.
– Вы знаете, давайте об этом вам лучше расскажут наши HR. Спасибо за собеседование! – раскланялся Виталий.

Вот так вот выглядело бы собеседование. И как принимать решение о приеме на работу такого кандидата? Если я забыл какую-то прикольную отговорку, то обязательно напишите об этом в комментариях.

Не хочешь пропускать ничего интересного? Подпишись на ленту RSS или следи за нами в Twitter!

Обсуждение (4)

Помню было смешнее обычного когда парень долго рассказывал что не может говорить об очень сложной архитектуре своего текущего проекта потому, что он на NDA и архитектура мол секретная разработка. А потом как-то так бросил – “Ну ладно, у нас есть БД, слой persistence, business logic & presentation”. Далее следует немая сцена.
На вопрос о том, как работает browser часто отвечают, что “я back-end программист – меня это не касается”.
На вопрос о том, как организован presentation, часто слышу примерно “я Java программист и, если вы будете мне давать front-end задачи я от вас уйду, предупреждаю сразу”. Аналогичный ответ на все вопросы касательно JavaScript, как будто корона упадет.
Пару раз на вопрос “какие структура данных Вы использовали в работе?” слышал ответ “никаких, они мне в работе не нужны, я работаю с классами”.
Смешные ответы получал на вопрос “для чего на Ваш взгляд может использоваться TreeSet”, в стиле “ума не приложу, кому в здравом уме может понадобится сортированная коллекция”.
По поводу кода часто отвечали, что пишут код только за деньги.
Понимаю Виталия, но бывает и весело.

Хороший пост, только вроде Senior девелоперов берут и без собеседований 🙂

Из вопросов, обычно спрашиваю о самой “сложной” штуке которую кандидат делал, а по ООП начинаю именно с модификаторов доступа.

На одном из собеседований после того как кандидат не смог ответить на вопрос о различии private vs protected, после заявленного среднего уровня, а вместо этого серьезно так сказал, что так глубоко не копал.

Вообщем, “копать глубоко” это для задротов.

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

Leave a Reply

Your email address will not be published. Required fields are marked *