Продолжая тему поиска работы хотел упомянуть о вопросах, которые задают php программисту. Я не проходил собеседований к тому времени 2.5 года и забыл уже как это, когда не ты собеседуешь, а тебя.
Очень понравилось, на самом деле проходить технические собеседования, потому что попадались довольно интересные вопросы. Хотя, надо заметить, были и скучные вопросы вроде отличия абстрактного класса от интерфейса и объяснения что такое полиморфизм.
Итак, самые запоминающиеся вопросы, которые мне задавали.
- Представьте что у вас есть очень тяжёлый sql запрос, который выполняется 1 минуту и никак его оптимизировать нельзя. Причём запрос инициируется с клиентской стороны, а значит ни в коем случае нельзя допустить, чтобы пользователь ждал 1 минуту для получения ответа. Вы, конечно же, закэшируете данные запроса (например на 5 минут) и в дальнейшем пользователи будут работать с этим кэшем. Но, представьте ситуацию, когда через 5 минут кэш выпадает и одновременно несколько десятков пользовательских процессов инициируют запросы, которые уже теперь пойдут напрямую в базу, вынуждая пользователей ждать 1 минуту, и, конечно же, увеличивая нагрузку на базу данных. Как бы вы решили такую проблему?
- Нарисуйте uml-диаграмму классов для работы с поездом (локомотив, вагоны).
- Нарисуйте uml-диаграмму классов, реализующих логику работы с военными юнитами: пехотинец, танк, грузовик. Причём грузовик может перевозить пехотинцев, но не может перевозить танки.
- В разрезе MySql базы данных, расскажите про отличия primary key от unique key.
- Что такое партицирование? Что будет если разбить партицию по одному параметру (к примеру, по id), а запрашивать данные по другому параметру (к примеру, по user_sex). Будет ускорение выборки, замедление выборки или не будет отличий вообще. От чего это может зависеть?
- Есть два отсортированных массива целых чисел. Необходимо составить третий массив, который будет включать все элементы этих двух массивов, сохраняя сортировку. Сделать алгоритм, обладающий минимальной сложностью.
- Чем отличается ассоциация от композиции? (Честно говоря, считаю вопрос абсолютно глупым. Знание этих терминов абсолютно не значит, что программист будет их как-то применять и учитывать)
- Если работали с системой контроля версий git, то чем отличается merge от rebase.
- Что такое PSR-1, PSR-2?
- Что такое php-fpm и FastCGI?
- Есть постоянно обновляемая таблица из нескольких миллионов записей о пользователях и их очков. Необходимо на клиентской стороне показывать ТОП-100 пользователей. Как бы вы это реализовали?
В этом списке я, конечно, не упоминаю общие вопросы про работу с фреймворками, базами данных и прочими технологиями вроде сервиса очередей, систем контроля версий и разработки тестов.
Как я уже писал, некоторые вопросы мне очень понравились, заставили вернуться домой и дополнительно прочитать про эту тему и немного углубиться в то, что до этого не знал или знал только поверхностно.
