Вопросы для собеседования PHP(Intermediate?) программиста

Вот уже почти месяц как я работаю на новом месте во Вьетнаме. Помимо, собственно, программирования я занимаюсь интервьюированием сотрудников в нашу компанию. За это время мы с коллегой проверили уже порядка десяти собеседований. Естественно, у нас собрался список вопросов, которые мы задаем кандидатам. У нас нет разграничений на вопросы для Senior Developer, для Intermediate и т.д. Мы просто ищем человека, с которым мы хотели бы работать в команде. Мне хотелось бы поделиться списком этих вопросов, не делая их каким-то стандартом для собеседований.

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

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