Мои ответы на анкету для php разработчика lingualeo

Однажды мне написал HR . Правда это было не один раз.. HR предложил заполнить анкету, им нужен был php разработчик в Москву (жаль не Тайланд).
Так вышло, что я не был уверен, что хочу ее заполнять, но все же заполнил. В виду того, что мне не ответили, я решил выложить свои .

Не зря же я ее заполнял.
Я не считаю, что нарушаю тут какую-то секретность. Эту анкету HR высылают наверняка всем, и все отвечают по разному. Я прошу не использовать мои ответы в качестве своих.
Не списывать. :) В ответах я не претендую на правильность и оригинальность. Таким шрифтом добавлю еще комментарии.
Так же я просто хочу сохранить это для истории и как-то через пару лет сравнить новые ответы с этими.

to PHP or not to PHP?

* Обязательно

Что такое PHP?

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

Что такое PHP-FPM?

Менеджер процессов php.
Изначально был патчем, сейчас отдельный пакет.
Работает в режиме FastCGI с несколькими дополнительными возможностями.
К процессу fpm можно обращатсья как через socket, так и через порт, например 8000, при конфигурировании веб сервера.

Если бы вы были разработчиком языка PHP, то какую фичу добавили бы в него?

Возможность строгой типизации.
Однозначно хотелось бы иметь возможность указывать тип переменной при создании, и при возвращении из метода. Но это может быть опционально. Интересная реализация этой возможность в языке hack.
Нормальную многопоточность, которая шла бы в стандартной установке. Не хватает Thread как в Java.
Возможно добавление виртуальной машины по умолчанию, типа HHVM, для реализации вышеперечисленного и производительности.

$a = 256; Сколько байт памяти будет использовать этот скрипт в PHP?

4 на 32bit платформе и 8 на 64bit платформе. (я гуглил)

Что быстрее JavaScript или PHP и почему?

В какой среде выполняется JavaScript ?
Если сравнивать PHP с клиентским выполнением JS, то тут все зависит от мощностей сервера и клиентской машины.
Если сравнивать PHP с node.js, то тут стоит учесть настройки окружения, а так же асинхронную архитектуру node.js.
JS в данном случае будет быстрее, например, при обращении к БД, node.js создаст отдельный процесс для этого запроса, а сам веб сервер продолжит отвечать на другие запросы. Node.js включает в себя веб сервер и висит в памяти.
В случае php веб сервер рабоатет отдельно, необходимо увеличивать кол-во разрешенных процессов. Иначе, в случае двух запросов, один из которых с обращением в БД, а другой нет, и оба они выполняются в одно процессе, то время ответа будет равно времени самого медленно запроса (с обращеним в БД).

На php можно писать в стиле node.js используя ReactPHP, Ratchet.

Чем отличается тип данных stdClass от array?

stdClass это пустой объект, встроенный в PHP.
array это примитивный тип данных, представляющий из себя key-value контейнер, не является объектом.

В каких случаях оправдано использование Exception’ов?

Во всех.

Имеет ли смысл использовать opcode кэш в cli режиме?

Только для тестирования, чтобы воссоздать окружение для PHPUnit.
Иначе нет смысла, т.к. сгенерированный кеш будет уничтожаться при каждом вызове скрипта. CLI не хранит кеш в памяти.

Какие существуют полезные примеры использования магических функций в PHP?

__toString() полезно для читабельного вывода информации об объекте
__get и __set могут быть использованы для какой-то логики, связанной с геттерами-сеттерами, например в коллекции.
Тут же близки методы __isset() и __unset(), которые сработают при проверках несуществующих свойств.
__call может быть использовано для делегирования, если нет такого метода в классе.
__callStatic то же самое, для static.
__invoke – когда класс можно вызывать как метод.
__sleep() и __wakeup() для сериализации объекта
__construct и __destruct для инициализации объекта и его уничтожения, соответсвенно. Первое полезно для задания зависимостей и начальной конфигурации. Второе для уничтожения ссылок, освобождения ресурсов.
__clone для задания логики клонирования объекта. Например, для инкремента идентификатора.

Магические методы могут быть крайне полезны при реализации какого-то функционала, но в реальных условиях желательно использовать их как можно меньше, т.к. это запутывает код.

Какую конфигурацию окружения и какие технологии вы бы использовали для запуска php приложения?

В качестве базы данных используется MySQL
MySQL (InnoDB т.к. транзакции, не блокирующий доступ при многопоточном обращении)
php5.5, т.к. хочется использовать все новые фичи, и скорость в новых версиях выше.
Nginx – очевидный выбор для высокопроизводительного сервера. Он же может быть прокси при масштабировании.
php5-fpm – очевидный выбор для производительности и управляемости исполнения php.
memcached – кеишрование
libevent – если используется event-loop
Gearman – сервер очередей

Далее по нуждам задачи.

Дано математическое выражение, нужно распечатать позиции открывающей и соответствующей закрывающей скобки. Порядок не имеет значения. Примеры: a*(b+c) => (2, 6); (a/(b+c))+d*(e-f) => (0, 8), (3, 7), (12, 16)
Напишите код на PHP

Напишите функцию, которая делает преобразование: ILovePHPAndXMLSoMuсh в i_love_php_and_xml_so_much

Решение “в лоб”
—-

—-
Или воспользоваться одним из регулярных выр-й, получив массив слов написать уже ф-ю.

Опишите, чем паттерн декоратор отличается от наследования?

Наследование реализует логическую операцию “является”. Наследование применяется для переопределения базового функционала, но может быть не всегда удобно в больших проектах.
Декоратор позволяет добавлять дополнительный функционал без создания наследников. При этом декораторы сами миогут быть организованы в структуру наследования и применяться к одному, или разным объектам подходящего типа.
В некоторых случаях декоратор более гибок.

Расскажите в каких ситуациях использование SQL JOIN не оправдано?

JOIN в принципе дорогостоящая операция. JOIN на InnoDB работает быстрее, чем с MyISAM.
JOIN не стоит использовать с колонками, на которых нет индексов. И в некоторых случаях замена JOIN на два отдельныъ запроса + IN() или на подзапросы – будет быстрее.

Укажите как с вами можно связаться? *
Любое из: Email, skype, телефон, vk, facebook, linkedin, МойКруг
ru.linkedin.com/in/seyfer/
http://brainstorage.me/seyfer

Форма создана в домене ООО “Лингуалео”.