Вот уже почти месяц как я работаю на новом месте во Вьетнаме. Помимо, собственно, программирования я занимаюсь интервьюированием сотрудников в нашу компанию. За это время мы с коллегой проверили уже порядка десяти собеседований. Естественно, у нас собрался список вопросов, которые мы задаем кандидатам. У нас нет разграничений на вопросы для Senior Developer, для Intermediate и т.д. Мы просто ищем человека, с которым мы хотели бы работать в команде. Мне хотелось бы поделиться списком этих вопросов, не делая их каким-то стандартом для собеседований.
- Расскажите о нововведениях в PHP 5.6. Даже если не всегда получается использовать новые версии PHP, их знание является большим плюсом. Следом идет вопрос о том что значит следующий синтаксис: function(…$args)
- Типы данных в PHP, очень стандартный вопрос, но много кто не знает, что NULL это отдельный тип, а еще есть такой тип resource. Еще для понимания приведения типов в PHP спрашиваем чему будет равно 10 + «10a» + «a10»
- Какими SPL классами вы пользуетесь? Мало кто вообще знает, что такое SPL.
- Какие структуры данных вы знаете? Разница стэка и очереди.
- Естественно, куда же без ООП. Шаблоны проектирования, все знают Singleton, но его минусы перечислить могут не все.
- Особенности ООП в PHP. Можно ли сделать множестенное наследование в PHP, что такое traits? Что такое позднее статическое связывание?
- Знаете ли вы, что такое SOLID? Объясните.
- Немного вопросов о функциях в PHP. Функции сортировки массивов, отличие include от require.
- Далее спрашиваем об использовании фреймворков. Идут пару вопросов о тех фреймворках, с которыми я имел дело, в зависимости от ответа. Что такое DI, объясните MVC, что такое fat controller.
- Дальше идет целый пласт вопросов о базах данных, о знании SQL. Какие уровни изоляции транзакций вы знаете? В каких случаях стоит использовать составной индекс, в каких — нет.
- Имеем таблицу employees, в ней name, department_id, salary. Просим написать запрос: вывести список сотрудников, получающих максимальную зарплату в своём отделе. Второй запрос: вывести список отделов, содержащих как минимум 5 сотрудников.
- Большим плюсом будет знание конфигурации БД, репликации, EXPLAIN.
- Пару вопросов про безопасность, как защититься от CSRF, от SQL-Injection. Как вы сохраняете пароли в своих проектах.
- Можно задавать много вопросов про смежные технологии. Например, если человек использовал Symfony, то пару вопросов про mapping в Doctrine. Если использовал Memcache, то с какими проблемами сталкивался.
- Какие схемы использовались кандидатом для раскладки кода. CI? Composer?
- Конечно же тесты: функциональные, стресс, юнит.
- Системы контроля версий. Обычно так: с SVN работал? Да. Что такое cherypick? С Git работал? Да. Чем отличается rebase от merge?
- Пару базовых вопросов по UNIX. Как найти файл с определенной подстрокой в директории со вложенностями.
Конечно же, вопросов можно задать много. Но обычно достаточно часа собеседования для того чтобы определить уровень кандидата.