DEPRECATED WARNING: этот пост был написан для найма программистов в веб-студию в 2010-2013 годах, а сейчас УСТАРЕЛ по многим причинам. Сейчас в мировом вебе используются новые технологии, и нужно задавать новые вопросы. Однако вы можете извлечь из текста что-то полезное.
Я не даю абстрактных, выдуманных из головы тестовых заданий. Я считаю что это абсурд – на основе быстрого решения какой-то единичной проблемы пытаться сделать выводы о том, насколько человек окажется эффективным сотрудником. Реальную эффективность можно оценить только спустя недели и месяцы реальной работы в команде. Поэтому, когда есть такая возможность, вместо тестовых заданий – я задаю самые различные вопросы, чтобы понять обладает ли кандидат широким кругозором, опытом, развитым ассоциативным и нестандартным мышлением. Я решил опубликовать эту подборку, чтобы кандидаты могли реально оценить свои силы для участия в моих проектах.
Примечание: если вы работодатель, вы можете заказать собеседование IT-специалистов у меня.
Подразумевается, что далее речь идёт об обычном программисте-разработчике сайтов на PHP/MySQL, который также хорошо знаком с html, js, css, командной строкой linux, умеет обращаться с системами контроля версий (термины feature branches, git-flow), владеет инструментами для программного тестирования, понимает ограничения шаред-хостингов и т.д. Итак, поехали:
- Вы зашли в каталог с сайтом и сказали “sudo chmod -R 777 ./*”, но обнаружили, что права на один файл не поменялись. На какой и почему?
- Пользователь загружает изображение (произвольного формата и размера), но при обработке в системе на выходе получается чёрный прямоугольник. Объясните, как сделать автоматический тест, контролирующий эту проблему.
- Сайт имеет очень большую посещаемость. Все загружаемые пользователями файлы складываются в один каталог. Объясните, чем это плохо.
- Дано: MySQL-таблица имеет два числовых столбца и миллион строк. Вас просят сделать индексы для ускорения выборки из таблицы. Объясните, почему это не поможет.
- Дано: MySQL-таблица содержит один столбец с текстами произвольной и очень большой длины. Будет ли эффективен индекс для поиска слов по ней?
- Три программиста работают над проектом: Вася в транке, Миша в бранче, а Петя коммитит одно и то же в обе ветки. Какие проблемы это создаст в будущем, и как их решать?
- Двумя последовательными запросами jQuery load() вы создаете объект и назначаете ему права, однако получаете ошибку. По-отдельности оба запроса работают успешно. В чём тут проблема?
- Объясните, что плохого в таком коде: <?php $username=’mylogin’; $pwd=’mypassword’; ?>
- А что плохого в таком коде: <?php if … else { echo(‘Ошибка’); } ?>
- Вы делаете сайт для людей. Каким словом вы назовёте объект каталога, чтобы это было понятно всем пользователям?
- Вам нужно определить текущее значение memory_limit внутри php-скрипта, но ini_get не работает (известная ошибка PHP 5.1). Объясните, какими ещё способами можно получить это значение.
- Вам дали сложный SQL-запрос и потребовали оптимизировать его скорость. Что вы сделаете в первую очередь?
- Продолжите список: GET, POST, …?
- Вы скачиваете файл с удалённого сервера средствами PHP. Однако файл большой и он не успевает скачаться по таймауту PHP. Как решить эту проблему?
- Вы делаете функционал контекстного меню на яваскрипте. Один из его пунктов – “Копировать в буфер обмена”. Объясните, причём здесь Flash.
- Вам дали задание сделать блэклист (чёрный список) слов для фильтрации спама, и вы сделали управление им в админке – обычным строковым полем. Почему это неправильно?
- Некая функция определения наличия блокировки называется getIsLocked(). Предложите более простое название и объясните чем оно лучше.
- На стороннем сайте вы видите изображение на странице, открываете html-код, берёте ссылку на изображение и вставляете в адресную строку браузера. Но изображение не открывается. Почему?
- Вы пишете систему мониторинга контента страниц. Она должна отслеживать значительные изменения контента, но игнорировать мелкие. Предложите простое решение.
В целом: я нанимаю людей, которые должны гармонично вписаться в существующую команду, и успешно транслировать задачи реального мира в программный код. Люди с большим практическим опытом решения задач в стрессовых условиях, обладающие здравым смыслом и коммуникабельностью, в реальном проекте дадут 100 очков форы идеалистам-архитекторам с их теоретическим абстрактным мышлением.
Cо времени публикования поста подборка вопросов расширилась. Напишите мне, если хотите узнать какие вопросы я добавил, и каков процент успешных ответов на наших собеседованиях.