Вариант эффективного интервью

в 17:59, , рубрики: human resources, интервью, собеседование, метки: ,

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

А ты записался добровольцем?
А ты записался добровольцем прошел собеседование?

Интервью состоит из трех частей, занимает 30-60 минут.
1. Рассказ программиста о себе.
2. Короткие вопросы на кругозор.
3. Решение задач

Рассказ программиста о себе.

В первую очередь прошу человек рассказать, как пришел к web-программированию. Когда начал, когда подсел на программирование :)
Очень спрашиваю про последнее место-два работы, что человек делал, за что отвечал, что в техническом и организационном плане там делал.

Нужно, чтобы человек расслабился.
Когда-то на этом этапе спрашивал про пять вариантов, почему люки круглые и прочие вопросы, но это давно отмерло, потому что не дает ничего :)

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

Короткие вопросы на кругозор.

Web-программирование — это зоопарк технологий, вспоминается анекдот про требования к водителям, если бы они были такие же мощные, как и программисты :)

За 10-15 минут нужно понять, а как глубоко человек владеет той или иной технологией, понять уровень его понимания.
Опрашиваю по следующим сферам: СУБД, SQL, алгоритмы, структуры данных, языки, командная строка, ООП, *nix.

Опыт и понимание делю на три уровня — elementary, OK, advanced :)

Прежде всего, базы данных. Есть среди вопросов первого типа есть «чем right join отличается от JOIN?», а третьего — «что такое B+-tree и почему они так часто применяются в реализации индексов?».

Очень интересно про ООП. Если вопрос «что такое инкапсуляция, полиморфизм, наследование» это второй уровень, то объяснить, что это такое на деле, зачем нужно, какие метрики архитектуры ухудшает/улучшает рефакторинг с упором на SOLID + DRY + IoC, могут единицы (или не путают рефакторинг с оптимизацией производительности).

Как правило, на вопрос ответ идет одним-двумя предложениями. Иногда можем побеседовать отвлеченно, если знающий кандидат, вспомнит, к примеру, самобалансирующиеся красно-черные деревья. Отлично, если он отметит, что регулярно читает Хабр и видел статью об этом там.

Конечно, я спрошу про Линукс и обрадуюсь, если человек сидит хотя бы под Ubuntu. Спрошу на деле, как вывести список файлов с «test» в имени с grep (ls | grep «test»), или что такое ls | xargs svn up.

«Но и это еще не все» (С) TV-SHOP 90х

Решение задач

Но как бы красивой не была теория, это все только разогрев перед самой главной частью.
Стараюсь за полчаса поговорить с кандидатом, чтобы он понял, что перед ним не HR-девочка, понять его мотивацию, проговорить моменты по графику и его пожелания по ЗП.

И даю задачи. Я согласен со статьей, которую тут переводили как-то, что настоящий программист определяется умением применять рекурсию и указатели.

Во многом, это сродни эволюции человека. Говорят, что нас отличает от обезьян умение оперировать в уме сразу 7+-2 элементами, и понимание рекурсии (нужно для заточки зубил, узор, рекурсивно уменьшаясь, позволяет сделать лезвие очень острым и хорошо режущим).

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

Как правило, даю простую задачу и прошу писать код прямо онлайн, безо всяких проверок. В последнее время даю 10-15 минут без меня, если человек переволновался.

И за одну-две задачи становится понятно, каков итог собеседования.

Вопросы про люки — нафиг. Да здравствует рекурсия!

upd. задача с устного собеседования и допзадача на дом.
Задача 1
Дан массив неограниченной вложенности, нужно написать функцию, которая выведет его в виде вложенного списка с отступами, пропорциональными глубине, и текущем путем к элементу.

Вызов showMenu(menu);
должен выдавать HTML-код, как по адресу
image

Массив:

menu = [
    'simple item',
    [
    	'title' => 'Complex item',
	'items' => [
	     'simple item2',
	     'simple item3',
	     [
	            'title' => 'Another complex item',
  	            'items' => [ '...' ]
	      ]
	]
    ]
];

Задача 2
Сделать, чтобы для строки
"{Пожалуйста|Просто} сделайте так, чтобы это {удивительное|крутое|простое} тестовое предложение {изменялось {быстро|мгновенно} случайным образом|менялось каждый раз}." выдавались все возможные варианты (вложенность не ограничена)

например
для str="{A | B | C} тест"
три варианта
«А тест»
«Б тест»
«С тест»

для str = "{A | B} {A | B}" четыре варианта
«A A»
«B B»
«A B»
«B A»

Автор: Cord

Источник

Поделиться