php что спрашивают на собеседовании

PHP. 25 вопросов, задаваемых на собеседовании

php что спрашивают на собеседовании. Смотреть фото php что спрашивают на собеседовании. Смотреть картинку php что спрашивают на собеседовании. Картинка про php что спрашивают на собеседовании. Фото php что спрашивают на собеседовании

Отличие include от require также заключается в том, что require выдает Fatal error при невозможности подключения файла по любой причине. include выдаст Warning и продолжит работу.

Вопрос на собеседовании по PHP №2: «Как мы можем получить IP-адрес клиента?»

unset() устанавливает переменную в “ undefined ”, в то время как unlink() удаляет файл, который отправляется из файловой системы.

Вопрос по PHP №4: что выведет на экран следующий код:

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

Вопрос с собеседовани по PHP №5: Каковы основные типы ошибок в PHP и чем они отличаются?

В PHP существует три основных типа ошибок:

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

Понимание основ протокола HTTP очень важно для хорошего старта в качестве разработчика PHP и различия между GET и POST являются неотъемлемой его частью.

Вопрос №7: Как вы включить сообщения об ошибках в PHP?

Установите display_errors = on в php.ini или объявите ini_set(‘display_errors’, 1) в вашем сценарии. Затем, добавьте error_reporting(E_ALL) в ваш код, чтобы отобразить все типы сообщений об ошибках во время выполнения скрипта.

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

Вопрос №8: Что такое Трейты (Traits)?

Трейты представляют собой механизм, который позволяет создавать повторно используемый кода в таких языках, как PHP, где множественное наследование не поддерживается. Трейт не может быть создан сам по себе.

Очень важно, чтобы разработчик знал мощные возможности языка(ов), с которыми он работает и Трейт является одним из таких признаков.

PHP-вопрос, который могут задать №9: Может ли значение константы измениться во время выполнения скрипта?

Нет, значение константы не может быть изменено, если она уже была объявлена в ходе выполнения PHP-кода.

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

Вопрос №11: Что делают методы __construct() и __destruct() в PHP-классе?

Все объекты в PHP имеют встроенные методы конструктор и деструктор. Метод Конструктор вызывается сразу после того, как создается новый экземпляр класса и он используется для инициализации свойств класса. Метод Деструктор не принимает никаких параметров.

Понимание этих двух PHP-методов означает, что кандидат знает основы объектно-ориентированного программирования в PHP.

Вопрос №12: Как мы можем получить количество элементов в массиве?

Функция count() используется для возвращения количества элементов в массиве.

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

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

PHP Вопрос №15: Предположим, что у вас есть форма подпики на рассылку.

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

Вопрос №15: Работа с классами

Этот вопрос будет оценивать знание кандидатом объектно-ориентированного программирования.

Это важно знать каждому разработчику, т.к. это по сути показывает то, что он знает и понимает принципы программирования, а не просто знает, как набирать код. Также необходимо понимать преимущества и доступность кодов. Необходимо понимать также и суть защиты переменных и методов, т.к. это в совокупности дает защиту всех данных в приложении.

PHP Вопрос №17: Что такое геттеры и сеттеры и для чего они нужны?

Знание о геттерах и сеттерах важно для любого программиста, который ищет работу разработка web-приложений. Геттеры и сеттеры часто используются при работе с объектами, особенно те, которые окажутся в базе данных или другом месте хранения. Поскольку PHP обычно используется для создания веб-приложений, даже младший специалист будет встречаться с геттерами и сеттерами в более продвинутых средах. Геттеры и сеттеры очень мощные, но них редко упоминают. Вы сможете произвести приятное впечатление на интервьюера, зная, что они собой представляют и как их использовать.

Вопрос с собеседования №18: Что означает MVC и что делает каждый компонент?

MVC расшифровывается как Model (Модель) View (Представление) Controller (Констроллер).

Контроллер обрабатывает данные, передаваемые в него Представлением, а также передает данные в Представление. Он отвечает за интерпретацию данных, отправленных Представлением и распространение этих данных к подходящим моделям для того, чтобы передать их обратно к Представлению.

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

Представление – это данные, переданные контроллером и отображаемые пользователю.

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

Ничего не выводите в браузер до использования кода, который преобразует HTTP-заголовки. После того, как вы вызовите echo или любой другой код, который очищает буфер, вы больше не сможете присваивать «куки» или заголовки. Это также подходит к сообщениям об ошибках, поэтому если ошибка появляется до того, как вы используете команду заголовка и INI-директива display_errors установлена, это также выведет сообщение об ошибке.

Вопрос №20: Что такое SQL-инъекции и каковы наиболее эффективные методы их предотвращения?

SQL-инъекции являются методом are a method to изменения a запроса в SQL-операторе, отправленном на сервер базы данных. Этот измененный запрос затем может пропускать такую информацию, как логин\пароль, и может поспособствовать хакерам подвергнуть сервер угрозе.

Не используйте устаревшие (начиная с PHP 5.5) mysql_* функции, а использовуйте PDO, т.к. оно позволяет использовать серверы, отличные от MySQL. Допускается также использование mysqli_* но в наши дни нет особого смысла не использовать PDO, ODBC или DBA. В идеале можно использовать Doctrine или Propel, чтобы избежать написания SQL-запросов всех вместе, а использовать маппинг, относящийся к объектам, который связывает строки из базы данных с объектами вашего приложения.

Вопрос №21: Что делает следующий код?

Если вы хотите проверить какой-то определенный тип, например, целое число или логическое значение, то === будет делать именно то, что ожидается от конкретно набранной команды, в то время как == будет конвертировать данные лишь на время и попытается сопоставить оба типа операндов. Тождественный оператор ( === ) работает быстрее, поскольку не приходится иметь дело с преобразованием типов. Особенно при проверке переменных на истина\ложь лучше избегать == т.к. 0/1 или другая похожая форма также будет принята в расчет.

Вопрос №23: Что такое PSR?

PSR является набором рекомендаций по стандартам PHP, которые направлены на стандартизацию общих аспектов PHP-разработок. Примером PSR является PSR-2, который является своеобразным гидом по стилям кодирования.

Вопрос №24: Какому PSR стандарты вы следуете? Почему нужно следовать стандарту PSR?

Лучше следовать PSR, т.к. стандарты программирования часто варьируются между разработчиками и компаниями. Это может создать некоторые проблемы у разработчика при проверке или исправлении кода, написанного другим человеком. Стандарт PSR позволяет рационализировать ожидания от стиля написанного кода, и, соответственно, уменьшить вероятность недопонимания, а в некоторых случаях и синтаксических ошибок.

Вопрос №25: Используете ли вы Composer? Если да, то какие преимущества вы нашли в нем?

Использование Composer’а – это инструмент для управления зависимостями. Вы можете объявлять библиотеки, с которыми работаете, а Composer займется их установкой и обновлением. Еще одним преимуществом является последовательный метод управления библиотеками, с которыми вы работаете, так что вы потратите меньше времени на это самое управление, занимаясь своим проектом.

Источник

Руководство по собеседованию на вакансию PHP-программиста

Вездесущий… это определённо то слово, которым можно описать язык PHP по отношению к вебу. Он действительно вездесущ. В настоящее время, среди всех серверных языков программирования, PHP используется наиболее широко. На нём написаны более 80% сайтов, при этом следующий по популярности ASP.NET со своими 17% остаётся далеко позади.

php что спрашивают на собеседовании. Смотреть фото php что спрашивают на собеседовании. Смотреть картинку php что спрашивают на собеседовании. Картинка про php что спрашивают на собеседовании. Фото php что спрашивают на собеседовании

Почему? Что позволило PHP стать настолько популярным и широко используемым? На этот вопрос нет однозначного ответа, но простота использования языка, безусловно, существенный фактор, поспособствовавший его успеху. Новички в PHP могут быстро выйти на достаточный уровень и разместить динамический контент на своих веб-сайтах с минимум познаний в программировании.

Именно в этом и заключается основная проблема поиска высококвалифицированных PHP-разработчиков. Относительно низкий порог вхождения и 20 лет развития языка привели к тому, что PHP-программисты стали такими же вездесущими, как и сам PHP. Многие из них могут на законных основания утверждать, что «знают» язык. Однако разработчики, которые действительно являются экспертами по PHP, способны создавать куда более функциональное, надёжное, масштабируемое и простое в сопровождении программное обеспечение.

Как же отличить тех, кто обладает реальной компетентностью в PHP (не говоря уже о тех, кто входит в 1% наиболее опытных кандидатов) от тех, у кого только поверхностные знания?

От переводчика: данный текст представляет собой перевод и адаптацию с небольшими дополнениями статьи The Insider’s Guide to PHP Interviewing, ссылка на которую была опубликована в последнем июньском дайджесте по PHP. Я постарался максимально передать смысл оригинала, добавил несколько пояснений, значительно увеличил количество ссылок на документацию, а также добавил ссылки на статьи с хабра и на другие источники. Важное отличие от оригинала: добавлена навигация по вопросам, часть кода и текста скрыта под спойлеры.

В этом руководстве предлагаются несколько вопросов, которые помогут эффективно оценить широту и глубину владения кандидатом PHP. Стоит иметь в виду, что они являются лишь ориентирами. Не каждый высококлассный кандидат, достойный найма, сможет правильно ответить на все вопросы, как и ответ на них не гарантирует, что кандидат вам подойдет. В конце концов, рекрутинг – больше искусство, чем наука.

Обратите внимание, что мы сфокусировали внимание на современных версиях PHP (5.3 и старше), но также есть отсылки к концепциям и функциям, существующим уже достаточно давно, а значит знакомым всем квалифицированным PHP-разработчикам.

Список вопросов

Ключевые концепции и парадигмы

Есть ряд основных концепций и парадигм, без знания которых нельзя считать себя экспертом в PHP. Вот несколько примеров.

Вопрос: Расскажите о замыканиях в PHP. Приведите примеры, когда, почему и как они могут быть использованы?

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

Первый строительный блок для замыкания – это анонимные (лямбда) функции, т.е. такие функции, у которых нет ассоциированных с ними имён. Например:

Хотя у анонимных функций и нет связанного с ними имени, они могут быть ассоциированы с переменными или переданы в качестве callback-параметра в функцию высшего порядка. Пример:

Внутреннее устройство замыканий в PHP представлено специальным классом замыканий – Closure.
Содержимое анонимной функции существует в своей области видимости независимо от области видимости, в которой эта функция была создана. Тем не менее, можно явно связать одну или несколько переменных из внешней области видимости, на которые можно будет сослаться в области видимости анонимной функции. Для этого нужно воспользоваться конструкцией use при определении анонимной функции.

В результате, мы можем изменять поведение объекта во время выполнения без необходимости переопределения сигнатуры класса. Эта возможность полезна в тех ситуациях, когда требуется доработка функционала, но код нельзя изменять, либо изменение необходимо в ограниченном контексте.
К списку вопросов

Но, как часто бывает в программировании, никогда не говори никогда. Существует ряд надёжных и стабильных продуктов, написанных на PHP, которые активно пользуются глобальными переменными: WordPress, на котором работает около 20% всех сайтов (и это число растёт из года в год), Joomla! 1.5 (да, она до сих пор еще широко распространена) и iLance Enterprise Auction system – это все примеры успешных проектов, в течение многих лет использующих глобальные переменные. Точно так же и у вас могут возникнуть ситуации, в которых глобальные переменные будут уместны, однако к их применению нужно подходить осторожно.
К списку вопросов

Вопрос: Расскажите о пространствах имён в PHP и о том, почему они полезны.

Одно из объектно-ориентированных нововведений в PHP 5.3 – пространства имён. Как следует из названия, пространство имён определяет такую область видимости в программе, внутри которой имена классов, интерфейсов, функций, переменных и констант не будут вызывать конфликтов с элементами, обладающими такими же именами в другом пространстве имён.

Явное задание пространства имён, в области видимости которого будут определены все элементы (классы, переменные и т.д.), позволяет разработчику решить эту проблему. При использовании пространства имён, приведенное выше многословное название класса можно заменить на следующее:

Кроме того, элементы из одного пространства имён могут быть импортированы в другое и использоваться в нём непосредственно (т.е. без ссылок на исходное пространство имён). Этого можно добиться с помощью ключевого слова use :

Вопрос: Что такое типажи (traits, трейты)? Опишите их основные характеристики и расскажите, чем они полезны. Приведите пример объявления типажа и класса, использующего несколько типажей.

Типажи – это великолепное дополнение, появившееся в PHP 5.4, позволяющее добавлять классу поведение без необходимости расширения родительского класса через наследование (до версии 5.4 это можно было реализовать с помощью паттерна примесь). Важно отметить, что в контексте одного класса можно использовать несколько типажей. Их применение способствует улучшению организации кода и разделению обязанностей, а также соответствует известному принципу проектирования, гласящему: «предпочитайте композицию наследованию».

PHP на пальцах

Запоминание вещей, которые легко можно найти в спецификации языка или в документации по API, не является показателем мастерства. Тем не менее, все, кто близко знаком с языком, знают на пальцах его синтаксические и функциональные особенности и нюансы. Вот некоторые вопросы, которые позволяют оценить кандидата с этой стороны.

Доступ к телу запроса можно получить через входной поток таким же образом, как читаются любые файлы:

Теперь можно просто обратиться к свойству ‘whiskers’:

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

Изменение значения свойства ‘whiskers’ будет выглядеть так:

Это выражение приведет к автоматическому вызову метода __set() с передачей ему в качестве первого параметра имени свойства ( ‘whiskers’ ) и правой части оператора присвоения в качестве второго.

Наконец, __isset и __unset завершают квартет методов для перегрузки свойств. Каждый из них принимает только один параметр – имя свойства, и вызываются при выполнении операций isset() и unset() над этим свойством.

Например, вот такая реализация __call приведет к тому, что при обращении к любому «невидимому» методу будет выполнена полезная нагрузка на whiskersService :

В приведённых выше примерах мы инкапсулировали реализацию whiskers от внешнего мира, сделав его единственным объектом, доступным таким способом. Клиенты определенных нами методов и свойств ничего не знают о базовом классе whiskersService и о том, как вообще Dog хранит свои данные.

В совокупности эти методы улучшают возможности для гибкой композиции. Степень абстракции объектов, инкапсуляция, компактность кода (и, как следствие, управляемость системы) также повышается.

Используя магические методы, следует помнить, что получаемые выгоды имеют свою цену. Во-первых, эти методы выполняются медленнее, чем обращение к явно определенным публичным свойствам, а также медленнее установщиков и получателей. Во-вторых, они препятствуют применению многих полезных средств, таких как рефлексия, автодополнение в IDE, утилиты автоматической документации (например, PHPDoc). Если эти вещи имеют значение, то, возможно, стоит определить публичные методы и свойства явно. Как и во многих других случаях, на вопрос о том, стоит ли использовать магические методы, однозначно ответить нельзя. Достоинства и недостатки нужно оценивать в каждом конкретном случае.
К списку вопросов

Вопрос: Опишите несколько структур данных из стандартной библиотеки PHP (SPL). Приведите примеры использования.

Процесс разработки на PHP по большей части связан с получением и обработкой данных из разных источников, таких как базы данных, локальные файлы, удаленные API и т.д. Разработчики тратят очень много времени на организацию данных, их получение, перемещение и обработку. Наиболее используемая структура для представления данных на PHP – это массив. Однако в некоторых случаях массивы не годятся для решения задач из-за недостаточной производительности и избыточного потребления памяти, и поэтому требуются более подходящие структуры данных.

С учётом того, как часто и много говорят о фреймворках, поиск разработчика, обладающего серьёзным опытом разработки с фреймворком из вашего проекта, становится непростой задачей. В конечном итоге, активность сообщества разработчиков приводит к уменьшению количества программистов, работающих с одним конкретным фреймворком, и перераспределению в пользу других. Из-за этого довольно трудно найти разработчика с необходимыми навыками.

Применение стандартной библиотеки PHP (Standard PHP Library, SPL) и знание её состава – та область, владение которой может подтвердить компетентность PHP-разработчика. Если у кандидата имеется приличный опыт работы с SPL, то, скорее всего, он сможет успешно работать над вашим приложением, вне зависимости от используемых в вашем окружении фреймворков.

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

SplFixedArray – массив фиксированной длины, индексами которого могут быть только целые числа. Эти ограничению обеспечивают более высокую скорость обработки массива, которая достигается, в том числе, благодаря тому, что в SplFixedArray нет хеширования ключей элементов при их добавлении (в отличие от обычных массивов).

SplObjectStorage – хранилище объектов, предоставляет интерфейс для сопоставления объектов к данным, либо может быть использовано в качестве контейнера для множества объектов. Позволяет использовать объект в качестве ключа ассоциативного массива и связать его с некоторыми данными.

Также о структурах данных из SPL можно почитать на хабре.
К списку вопросов

Правильный ответ – 18. Давайте разберёмся почему.

PHP поддерживает автоматическое приведение типов, основанное на контексте, в котором используется переменная.

При выполнении арифметических операций над выражением, содержащим строку, эта строка будет интерпретирована как число, что позволяет выполнить вычисление выражения. Если строка начинается с одной или нескольких цифр, то все остальные символы будут проигнорированы, а цифры будут представлены в виде числа соответствующего числового типа. С другой стороны, если строка начинается не с цифры, то в контексте арифметического выражения она будет интерпретирована как нуль.

Одни программисты считают автоматическое приведение типов ценной особенностью, другие – отвратительным недостатком PHP. С одной стороны, осознанное и правильное его применение добавляет удобства разработчику (нет необходимости писать код для конвертации «15» в 15 перед применением арифметической операции). С другой стороны, оно может легко привести к трудноулавливаемым ошибкам, если будет задействовано случайно (т.к. не будет выдано никаких предупреждений и ошибок).
К списку вопросов

В PHP, начиная с версии 5.3, реализовано позднее статическое связывание. Термин «позднее связывание» означает, что ключевое слово static связывает метод или свойство (к которому происходит обращение через static:: ) не с тем классом, в котором был определён использующий его метод, а с тем, в котором этот метод был вызван во время выполнения. Кстати, название «статическое связывание» не совсем корректно, т.к. static допустимо использовать не только для обращения к статическим членам класса.

Результат выполнения этого кода не удивляет: «собака лает, собака лает».
Расширим пример:

Под капотом PHP

Понимание того, как PHP работает «под капотом» – одна из важнейших характеристик, определяющих эксперта по PHP. Такой кандидат не только знает, как реализовать какую-то возможность, но также знает несколько возможных решений, их различия по функциональности и производительности.

Вопрос: Расскажите о внутреннем устройстве массивов в PHP?

С массивами связана значительная часть процесса разработки на PHP. Они хорошо подходят для тех случаев, когда вам необходима итерируемая структура данных. Изнутри массивы представлены, как и многие другие структуры данных, в виде хэш-таблиц. PHP написан на C, в котором нет ассоциативных массивов – массивы в C могут иметь только целочисленные индексы. Для трансляции индексов PHP-массива в целочисленные индексы массива на C применяется хэш-функция, преобразующая индексы PHP-массива (и целочисленные, и строковые) в целые числа. Значения элементов массива располагаются в получившейся хеш-таблице.
Сложность процесс поиска элементов по хэш-ключам составляет O(1) (в нотации большое О) благодаря тому, что для нахождения элемента не требуется итерация по хешу (хеш-функция возвращает значение, точно указывающее на положении элемента в таблице).

Прим. переводчика: Здесь я сознательно исключил из текста понятие бакета (bucket, корзина), т.к. автор оригинального текста не даёт никаких пояснений на его счет. Если вам действительно интересно устройство хеш-таблиц, то рекомендую к прочтению вот этот материал.

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

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

Сначала объявим сам генератор:

Стоит отметить, что в приведенном выше коде мы сохраняем результат выполнения yield в переменную, для этого мы обернули его вызов в круглые скобки.

А теперь напишем код, использующий объявленный генератор:

Если запустить этот код, то он прекратит своё выполнение после обнаружения терьера:

Основные преимущества генераторов можно свести к простоте реализации, повышению читаемости кода, повышению эффективности расходования памяти.
Вообще говоря, стоит применять генераторы всегда, когда не требуется повторно обходить набор данных с начала или просматривать его в обратном направлении. С другой стороны, если не учитывать расходование памяти, обход обычного массива выполняется значительно быстрее.
Документация по генераторам на php.net на русском языке пока что отсутствует.
К списку вопросов

Общая картина

Вопрос: Перечислите ключевые отличия между версиями PHP 5.3, 5.4, 5.5.

Версия PHP 5.3 была выпущена в июне 2009 года, но до сих пор широко распространена. Основные новшества: замыкания, лямбда-функции, пространства имён и позднее статическое связывание.

Подведём итоги

Найти PHP-разработчика достаточно просто, а вот найти действительно серьёзного PHP-програмиста – весьма непростая задача. Вопросы, представленные в этом руководстве, могут стать полезным инструментом, который позволит вам определить тех, кто овладел языком на первоклассном уровне. Поиск таких кандидатов оправдывает вложенные в него усилия, т.к. они, несомненно, окажут значительное позитивное влияние на производительность вашей команды и на результаты её работы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *