Собеседование по PHP
Компания, в которой я работаю, собирается искать хорошего PHP-программера. В связи с этим мне стала задача разработать план проведения собеседования. Решил подготовиться к этому и составить план-список вопросов, по которым будет проходить беседа.
Первым длом полез в гугл. Зачем делать работу, которую уже наверняка кто-то сделал? Так и оказалось, сразу нашел довольно неплохой план собеседования (ссылки внизу). Взял из него большуючасть вопросов и добавил свои.
Естественно, что вопросов программисту PHP можно задать море. Особенно учитвая, что знать надо связанные области (БД, сети, HTML и иже с ним, Linux). Смысла задать все вопросы, какие только можно, конечно нету. Задача — определить уровень специалиста, чтобы принять решение: подходит он нам или нет. По-этому выбрал наиболее подходящие на мой взгляд вопросы, по которым я смогу оценить уровень кандидата.
Кроме того, конечно не одиними вопросами можно обойтись. Следует предложить пройти небольшие тесты по практическим моментам. Об этом ниже.
Вопросы
1. PHP и основы программирования
1.1. Почему PHP?
1.2. Что такое ООП, основные принципы ООП.
1.3. Понятие абстракции, наследования, инкапсуляции и полиморфизма.
1.4. Что такое MVC?
1.5. Какие паттерны проектирования вам известны?
1.6. Под какую версию PHP писали? В чем различия между четвертой и пятой версиями?
1.7. Какими сторонними библиотеками пользовались?
1.8. Опыт работы с различными Frameworks/CMS?
1.9. Типы данных в PHP? (string, int, float, object, resource, null, bool, array)
1.10. Назовите по памяти функции для работы с массивами, строками и объектами в PHP (хотя бы по 5 штук).
1.11. Что такое сериализация?
1.12. Чем отличается абстрактный класс от интерфейса?
1.13. В каких случаях лучше использовать статические методы и классы?
1.14. Можно ли создать приватный конструктор? Зачем?
1.15. Как сказывается большое количество объектов в коде на производительность?
1.16. Что такое хэш?
1.17. Что такое область видимости переменной?
1.18. Что такое PDO? Что такое ORM?
1.19. Что такое PEAR?
1.20. Когда лучше использовать mysql_pconnect?
1.21. Обязательно ли писать ?> в конце скрипта?
1.22. Как вы отлаживаете PHP-код?
1.23. Проводили когда-нибудь оптимизацию сайтов?
1.24. Какую IDE используете? Какие использовали ранее?
1.25. Что такое unit-test? Использовали?
2. Tools
2.1. Что такое Apache? mod_rewrite? nginx?
2.2. Аббревиатуры SVN и CVS о чем-нить говорят? А Git и Mercurial?
2.3. Багтрекинг системы? BugZilla? Mantis? Redmine? JIRA?
2.4 .Моделирование, UML использовали?
2.5. Что такое SSH? Какие есть варианты авторизации при входе по SSH?
3. Data Bases
3.1. Что такое реляционная база данных? Какие есть типы БД?
3.2. Нормализация, денормализация.
3.3. SQL. Join’ы, Union. Подзапросы.
3.4. Процедуры, тригеры.
3.5. Вьюшки.
3.6. InnoDB vs MyISAM.
3.7. Какие бывают индексы в MySQL?
3.8. В чем отличие MySQL от PostgreSQL?
3.9. Что такое SQL-инъекция? Приведите пример.
4. HTML + CSS
4.1. Нарисуйте простенькую форму для отправки файла.
4.2. Что такое CSS? В чем разница между записью #my и .my? Для каких атрибутов можно указать :hover?
4.3. Расшифруй вот такую запись в CSS table#a tbody td.odd {text-decoration:inherit}?
4.4. Что такое стандарты W3C?
5. JavaScript
5.1. Как работает наследование в JS?
5.2. Чем отличается хэш от объекта? (провокационный)
5.3. А хэш от массива?
5.4. Если ли опыт работы с Jquery, ExtJS? Какие фреймворки использовались?
5.5. Что такое Ajax? Есть ли опыт работы с ним?
5.6. Использовали ли FireBug? Drag-on-fly?
5.7. Что такое замыкания и как они работают?
6. Linux
6.1. С *nix знаком? Какие дистрибутивы? Почему?
6.2. Apache, PHP и СУБД устанавливали под *nix? Настраивали? Оптимизировали?
7. Networking
7.1. Что такое уровни модели OSI? Сколько их?
7.2. По какому протоколу осуществляется передача данных в сети Интернет?
7.3. Какие вообще есть сетевые протоколы?
7.4. Расскажите, что происходит, когда в строке браузера набираешь адрес и нажимаешь Enter?
7.5. Что такое WSDL & web-services? Есть опыт работы?
7.6. Что такое SSL? Как работает HTTPS? Какой принцип работы HTTPS? Какие есть варианты авторизации HTTP?
8. Что такое XSLT, XML? Есть ли опыт работы с ними?
Как отработает код?
1)
<?php
/* Что будет выведено на экран? */
$a = ‘true’;
if( 0 == $a || $a )
{
echo ‘yes’;
}
2)
<?php
/* Что будет выведено на экран? */
$a = 10;
echo $a– – - – - – - – - – - –$a;
3)
<?php
class A {private function __construct(){throw new Exception(”);} public function A(){return array(’a',’b',’c');} public static function I(){return new A();}}
/*
Как вывести на экран именно то ‘b’, которое определено в массиве выше, используя одну команду (одну строку кода)?
*/
4)
<?php
/*
Какая строчка выведется при исполнении скрипта?
Почему исполняется или не исполняется каждое из условий?
*/
$x = 1;
if ($x == ‘1′) {
echo ‘a’;
}
if ($x == true) {
echo ‘b’;
}
if((bool)$x === true){
echo ‘e’;
}
if ($x === true) {
echo ‘c’;
}
if((int)$x === true){
echo ‘d’;
}
5)
<?php
/*
Что выведет скрипт? (запускается непосредственно)
*/
error_reporting(E_ALL);
ini_set(’display_errors’,'0′);
print $x[0];
dddxxxx();
6)
<?php
/*
Для какой версии PHP будет работать этот скрипт?
Что выведет этот скрипт?
*/
class Test{
private $var;
function setMe($value){
$this->var = $value;
}
}
class More extends Test{
public $var;
}
$oTest = new Test;
$oMore = new More;
echo $oTest->setMe(’foo’);
echo $oMore->setMe(’foo’);
echo $oMore->var;
echo $oTest->var;
Тест на corp.mamba.ru
http://www.corp.mamba.ru/test/promo.phtml
Ссылки
А вот и те ссылки, которые помогли мне в составлении списка.
http://habrahabr.ru/blogs/php/21681/
http://habrahabr.ru/blogs/webdev/19964/
14 июля 2009 в 23:08
Интересно, и какие результаты были получены в ходе собеседований?
16 июля 2009 в 08:33
Грустные, у нас в Минске практически нет на рынке высококвалифицированных программистов. А если касаться вопросов, то все они оказались вполне уместными и понятными.
16 июля 2009 в 10:25
хочу предложить сайт с хорошими онлайн тестами по ит технологиям, возможно пригодится
http://www.quizful.net/
16 июля 2009 в 17:36
>Грустные, у нас в Минске практически нет на рынке высококвалифицированных программистов.
В том смысле, что ни кто так и не смог ответить должным образом на все вопросы? А на чем чаще всего спотыкались и были ли вообще неадекватные (помню сам раз видел, как человек устраивался на верстальщика прямо заявив, что ни чего по верстке не знает)?
Вообще можешь каментом или отдельным постом описать от этого дела личные ощущения? Так сказать разливший по древу мыслью по полной программе.
23 августа 2009 в 19:30
На мысли по дереву времени нет. Кратко. На рынке PHP-разработок у нас пости нт полноценных профыссиональных программеров. Потому что PHP не учат в вузах, и потому что это самый легкий язык. Все, кто имеет хорошй уровень, разобраны. Причем, многие работают тим-лидами и менеджерами.
Те, кто тусуется на рынке, в осном самоучки, которые кроме PHP+MySQL+HTML+JS ничего не знают. Это практики, они умеют делать сайты, решабт поставленные таски. Но они не знают теории, не умеют проектировать сложные системы. Короче, это не программисты, а PHP-кодеры.
Вообще не адекватных не было. Спотыкались чаще всего на тех вопросах, которые включают теорию программирования, которые касаются не только и не столько PHP.