Собеседование
У нас с Сергеем Чистовичем сейчас проходит примерно по 1—2 собеседования в день. Для оптимизации (чтобы быстрее понять что знает кандидат, а что нет), приходится придумывать вопросы с подвохом.
Например (это Python), что будет тут — True или False и почему:
u'ВАС' == 'ВАС'
str('') == str('')
object() == object()Добавлено через несколько часов: ребята из комментариев, вы что правда считаете этот элементарнейший тест «тонкостями» и «хитростями» языка? То есть вы в коде никогда не сравниваете два объекта? Два числа, например, да что числа, просто любые два объекта?
А такие вещи как разное поведение наследования у «классических» и «новых» классов, наверное, вообще у вас считается заумью?
Комментарии 43
Массу. Попробуйте без интерпретатора ответить на эти вопросы, потом объяснить почему так, потом внести в интерпретатор и посмотреть, сойдётся ли.
Точно :)
Я к тому, что знание этих тонкостей в реальной работе могло никогда и не встретиться, поэтому не может сказать ничего о знаниях кандидата.
Мы всем кандидатам ещё до собеседования письмом отправляем два вопроса с подвохом (C++):
1.
char *a = new char[n];
char *b = new char[n];
f(a,b,n);
delete [] b;
delete [] a;
2.
if( argc > 1 )
printf( argv[1] )
В обоих случаях предлагаем указать на недостатки предложенного кода.
Если кандидат не справляется с этими вопросами, мы вообще не приглашаем его на собеседование.
За всё время попался только один кандидат, который явно не сам ответил на эти вопросы. Остальные, насколько я могу судить, играли честно.
Тем, кто приходит на собеседование, мы предлагаем для решения несколько не слишком сложных ситуаций, просим написать код и смотрим, можем ли мы допустить кандидата к разработке. Т.е. способен ли он в принципе писать код, который потом не придётся переписывать
Не могу оценить, так как не знаю C++
Комментарий для Splurov:
«Тонкости»? Этопо-вашему, тонкости? :) Это базовые знания — сравнение двух объектов.
Второй True, пустая строка == пустой строке
Третий False, так как идентификатор первого объекта != идентификатору второго объекта
А кто сказал, что в ней находятся не ASCII символы?
Дальше следует вопрос почему две одинаковых строки — True, а два пустых экземпляра одного класса object — False?
False скорее всего потому, что сравнивать больше нечего, кроме указателей.
2. True — две одинаковых строки (это даже один и тот же объект, т.к. короткие строки кэшируются)
3. False — возвращается по умолчанию при сравнении, если не переопредел спец. метод __eq__
правильно?
Комментарий для Евгения Степанищева:
Да. 2 и 3 из области того, что можно знать из мануала, но никогда на практике не применять. А вот результат «u'ВАС' == 'ВАС'» мне интересен, предполагаю, что если запустить из консоли будет ошибка, а если файлик сохранить в юникоде, то ошибки не будет:-) Но это всё гадание…
Хотя после последнего комментария troll признаю свою неправоту, нечего мне лезть не в свою степь
ага, с первым я ошибся — если ASCII символы — то True, если нет — то False
Комментарий для troll:
Правильно.
Комментарий для Splurov:
Вы сейчас говорите полную ерунду. На практике вы никогда не сравнивали объекты? Магический метод __eq__,по-вашему, придумали «чтобы был»?
Ещё раз: это не «тонкость», это элементарное знание о том, что разные экземпляры не равны между собой, но операция сравнения может быть перекрыта.
Комментарий для indeec17:
Да, если не определён __eq__ то сравнивается — один и тот это экземпляр или нет, иначе зависит от.
Впрочем, я не совсем точен. Есть ещё __cmp__.
P.S. Вообще всем, кто считает, что в
Если на работу предполагается взять знающего питон, а не готового его выучить, такие тесты очень к месту. Тесты для способных, но не опытных, хорошо давать для стажеров.
Я думаю, в «Яндексе» для него найдётся место. Но это вряд ли место «разработчика на Пайтоне», не так ли?
Комментарий для indeec17:
Нам нужны способные и опытные. Кстати, должен пояснить, что у нас нет такого «провалил один тест — гуляй». Это влияет, конечно, но не столь однозначным образом.
как-то странно. У нас есть стажировка в «Яндексе», Володя Москва (который fulc.ru) именно так и пришёл.
Нанимать человека за хорошие деньги, а потом его ещё и учить тому, что он должен уметь — это
Думаю, ваше предположение строится из ложной предпосылки, что человек должен писать код, ну или читать свой. Это, конечно же, не так.
Придётся читать и быстро разбираться в тоннах чужого кода,
Для данной вакансии это куда ценнее, чем уметь написать/придумать алгоритм, который ищет циклы в связанном списке за O(n), используя память O(1).
Спасибо, я понял предпосылки свои и ожидания от пайтоновцев. В тоннах неизвестного заранее кода скорее всего встретится магия с экземплярами объектов =) Используемый быстрый тест хорош. И замечательно то, что он используется совместно с другими, которые напрямую относятся к обязанностям. Типа вот тебе тонна, пойми задачу и исправь 10 ошибок =)
Например, если человек любые такие задачки сходу решает, то скорее всего ему нравится. Если ему нравятся такие задачки, то вероятно его код будет состоять из многих тонкостей и хитростей. Сложный код сложно читать, а как ты сам заметил, работа программиста на обычного размера проекте — это в основном чтение чужого кода. То есть взяв такого программиста вы усложняете работу остальным. В чем смысл?
Мне кажется, что понятный код — это одна из основных ценностей промышленного разработчика, разве не так?
Комментарий для www.shcoder.by:
Ребята, вы чего все? Какие «тонкости» и «хитрости»? Это тест на понимания очень базовой вещи, сравнения объектов. Это то, что встречается очень и очень часто.
Комментарий для indeec17:
Не, неверно понял. Откуда такие выводы?
Это не
Умение писать читаемый код не должно пропадать от знания таких вещей, но по ним можно понять, насколько глубоко человек знает тему, и оценить реальный опыт.
это не выводы, я не утверждаю, что у вас так. Это краткое описание теста, с адекватностью которого описанным задачам «читать и быстро разбираться в тоннах чужого кода,
Комментарий для Splurov:
http://roem.ru/2010/07/23/addednews15686/
Просто по первой строке сделал вывод, что многие тесты из разряда посчитай результат многоэтажного выражения — любимое развлечение сишников кода в стиле write only — хотя, наверное, ошибаюсь.
На самом деле недавно участвовал в собеседовании, один из товарищей начал гонять человека по внутренностям Java похожими вопросами. Человек в итоге немного разнервнечался, в конце уже даже простой логичской задачи в коде не мог решить. Ловил себя на мысли, что в некоторых областях сам плаваю (хотя уже пару лет серьезно не кодировал, да и Java не мой родной язык), но уверен, что многих товарищей заткну за пояс при решении реальных задач. Просто дело не в деталях, дело в подходе.
Мы вот один раз брали
Комментарий для www.shcoder.by:
Зависит от того русские буквы или латинские :)
Ну, слава богу, в Python3 это не так.
насчет опеид и жж:
http://ksena.livejournal.com/2526151.html? … style=mine