Привет, сегодня поговорим про php вопросы и ответы для собеседований, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое
php вопросы и ответы для собеседований , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .
1. как работает web site ?
2. как генерируестся страница на стороне сервера?
3. как происходит обработка веб формы?
4. Опишите схему веб-приложения (написанного на PHP, Java (Servlet) и C# (MVC)) с использованием шаблонизации
5. какие веб фреймворки вы знаете, использовали, и как долго и в каких проектах опишите их плюсы и минусы?
6. Аббревиатуры SVN и CVS о чем-то говорят?
SVN (Subversion) и CVS (Concurrent Versions System) - это системы управления версиями.
7. А что это за системы такие?
Система управления версиями - это программное обеспечение для облегчения работы с изменяющейся информацией. Система управления версиями позволяет хранить несколько версий
одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и многое другое.
8. Существуют ли еще какие-то системы управления версиями?
Да. Git, Mercurial, Bazaar...
9. html и xml- что такое парсинг данных
Парсинг – это автоматизированный процесс сбора данных с сайтов или распознавание ответа от сервера в определенном формате, применяется для сбора контента: цен конкурентов, описаний товаров, контактов для лидов, отзывов и рейтингов, файлов и для любых других задач, когда нужно собрать большой объем информации.
10 какие функции используют при парсинге данных, расскажите принцип и схему работы при парсинге данных?
preg_match
curl_exec
библиотеки PHP Simple HTML DOM phpQuery и др
классы
$dom = new DOMDocument;
$dom->loadHTML($html);
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
$image->setAttribute('src', 'http://
intellect.icu' . $image->getAttribute('src'));
}
$html = $dom->saveHTML();
11. расскажите цикл работы при использовании системы контроля версий на примере git
9. Что такое сессии? Где хранятся сессии: на стороне клиента или на стороне сервера?
Сессия (http session) - это логический объект, который позволяет передавать данные между последовательными HTTP запросами от одного пользователя. Сессии создаются в PHP на стороне
сервера и там же хранятся. Собственно, сессии, если в двух словах - это механизм, позволяющий
однозначно идентифицировать браузер и создающий для этого браузера файл на сервере, в котором хранятся переменные сеанса.
По возможности лучше не хранить большое количество информации в сессии. Если информа-
ция не критичная (например, настройки пользовательского интерфейса), то лучше хранить ее в
cookies на стороне клиента.
10. Как долго ”живет” сессия?
Время жизни куки, которая хранит идентификатор сесии по умолчанию составляет ноль секунд,
т.е. кука храниться до того момента, как браузер будет закрыт.
11. А при открытом браузере?
У томката по дефолту 30 минут, но это можно настроить.
12. Возможно ли как-то продлить время жизни сессии?
Да. Это можно изменить при помощи параметра session.cookie_lifetime в файле php.ini.
PHP, как правило, хранит данные сессии в файлах. Для того, чтобы не засорять файловую систему
периодически осуществляется очистка устаревших данных, garbage collection - уборка мусора. В
файле php.ini существует параметр session.gc_maxlifetime который указывает время в секундах,
по истечению которого все устаревшие данные будут удалены из файловой системы.
Допустим, мы хотим задать время жизни сессии - 3 часа. Для этого в файле php.ini устанавливаем следующие параметры:
session.gc_maxlifetime = 10800
session.cookie_lifetime = 10800
13. Зачем нужны сессии?
Дело в том, что веб-сервер не поддерживает постоянного соединения с клиентом, и каждый
запрос обрабатывается как новый, безо всякой связи с предыдущими. То есть, нельзя ни отследить запросы от одного и того же посетителя, ни сохранить для него переменные между просмотрами отдельных страниц. Вот для решения этих двух задач и были изобретены сессии.
14. Как устроены, и как работают сессии?
Для начала надо как-то идентифицировать браузер. Для этого надо выдать ему уникальный
идентификатор и попросить передавать его с каждым запросом.
Идентификатор - это обычная переменная. Для PHP по умолчанию ее имя - PHPSESSID.
Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом.
Переменную можно передать только двумя способами: в куках или POST/GET запросом. PHP использует оба варианта.
За это отвечают две настройки в php.ini:
session.use_cookies - если равно 1, то PHP передает идентификатор в куках, если 0 - то нет.
session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 - то
нет.
15. Поясни разницу между HTTP методами GET и POST.
GET передает данные серверу используя URL, а POST передает данные, используя тело HTTP
запроса.
Длина URL’а ограничена 1024 символами, что и будет верхним пределом для данных, которые
можно отослать GET’ом. POST может отправлять гораздо большие объемы данных.
Кроме того, передача данных методом POST более безопасна, чем методом GET, так как секретные данные (например пароль) не отображаются напрямую в web-клиенте пользователя (в отличии от URL, который виден почти всегда).
16. А какие еще есть методы кроме GET и POST и для чего они используются?
GET и POST - это основные методы передачи данных. Есть еще PUT и DELETE, но ими никто не пользует
21. Что такое AJAX и как он работает?
AJAX - это подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в “фоновом” обмене данными браузера с веб-сервером. В результате, при
обновлении данных, веб-страница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными.
AJAX - не самостоятельная технология, а концепция использования нескольких смежных технологий. AJAX базируется на двух основных принципах:
1) Использование технологии динамического обращения к серверу “на лету”, без перезагрузки
всей страницы полностью, например:
- с использованием XMLHttpRequest (основной объект);
- через динамическое создание дочерних фреймов;
- через динамическое создание тега ’;
4. Назови и опиши пять любых типов ошибок PHP.
E_ERROR. Этот тип ошибок возникает при критичных ошибках, выполнение скрипта немедленно прерывается.
E_WARNING. Предупреждает программиста об ошибке, но выполнение скрипта не останавливается.
E_PARSE. Возникает во время компиляции, такие ошибки обычно генерируются парсером.
E_USER_WARNING. Некритичное предупреждение, которое генерируется пользователем. Устанавливается программистом с помощью trigger_error().
E_COMPILE_WARNING. Генерируется скриптовым движком Zend. Некритичная ошибка компиляции.
Также, в PHP5 доступен новый уровень обработки ошибок - E_STRICT, сообщения которого возникают при использовании устаревших возможностей PHP.
значение |
константа |
1 |
E_ERROR |
2 |
E_WARNING |
4 |
E_PARSE |
8 |
E_NOTICE |
16 |
E_CORE_ERROR |
32 |
E_CORE_WARNING |
64 |
E_COMPILE_ERROR |
128 |
E_COMPILE_WARNING |
256 |
E_USER_ERROR |
512 |
E_USER_WARNING |
1024 |
E_USER_NOTICE |
2047 |
E_ALL |
Перед исполнением кода интерпретатор PHP проверяет скрипт на наличие ошибок различного уровня. Если PHP обнаруживает ошибки, соответствующие установленным уровням, то, в зависимости от настроек конфигурации, PHP генерирует соответствующие сообщения, которые записываются в переменные и (или) выводятся в браузер пользователя.
В PHP существует возможность управлять сообщениями об ошибках, для получения информации об этом обратитесь кфункциям обработки ошибок PHP.
Уровни ошибок интерпретатора PHP
Значение |
Константа |
Описание |
Примечание |
1 |
E_ERROR |
Фатальные ошибки времени выполнения. Указывает на ошибки, которые не могут быть устранены, такие как проблемы выделения памяти. Выполнение скрипта останавливается. |
|
2 |
E_WARNING |
Предупреждения времени выполнения (нефатальные ошибки). Выполнение скрипта не останавливается. |
|
4 |
E_PARSE |
Ошибки разбора при компиляции. Ошибки разбора должны генерироваться только разборщиком. |
|
8 |
E_NOTICE |
Уведомления времени выполнения. При работе скрипта возникло нечто, что может указывать на ошибку, но может также появиться и при нормальном выполнении скрипта. |
|
16 |
E_CORE_ERROR |
Фатальные ошибки, возникающие при начальном старте РНР. Напоминает E_ERROR, но генерируется ядром PHP. |
Впервые с PHP 4 |
32 |
E_CORE_WARNING |
Предупреждения (нефатальные ошибки), возникающие при начальном старте РНР. Напоминает E_WARNING, но генерируется ядром PHP. |
Впервые с PHP 4 |
64 |
E_COMPILE_ERROR |
Фатальные ошибки компиляции. Напоминает E_ERROR, но генерируется машиной Zend Scripting Engine. |
Впервые с PHP 4 |
128 |
E_COMPILE_WARNING |
Предупреждения времени компиляции (нефатальные ошибки). Напоминает E_WARNING, но генерируется машиной Zend Scripting Engine. |
Впервые с PHP 4 |
256 |
E_USER_ERROR |
Генерируемое пользователем сообщение об ошибке. Напоминает E_ERROR, но генерируется в РНР-коде путем использования РНР-функции trigger_error(). |
Впервые с PHP 4 |
512 |
E_USER_WARNING |
Генерируемое пользователем предупреждение. Напоминает E_WARNING, но генерируется в РНР-коде путем использования РНР-функции trigger_error(). |
Впервые с PHP 4 |
1024 |
E_USER_NOTICE |
Генерируемое пользователем уведомление. Напоминает E_NOTICE, но генерируется в РНР-коде путем использования РНР-функции trigger_error(). |
Впервые с PHP 4 |
2047 |
E_ALL |
Все ошибки и предупреждения, если поддерживаются, за исключением уровняE_STRICT. |
|
2048 |
E_STRICT |
Примечания во время выполнения. Включите, чтобы PHP, предлагал замены вашему коду, который будет гарантировать лучшую функциональную совместимость и совместимость вашего кода с предыдущими версиями PHP. |
Впервые с PHP 5
|
5. В чем различия между четвертой и пятой версиями PHP?
Дурацкий и явно устаревший вопрос, но его почему-то до сих пор задают. Перечислять все, не
нужно, достаточно сказать, что:
В пятой версии были добавлены следующие возможности:
- - ключевое слово static
- - Ключевое слово final
- - Абстрактные классы
- - Интерфейсы
- - Магические методы
- - Клонирование объектов
И многое другое.
Все это благодаря использованию движка Zend Engine 2.
6. Что такое тип данных?
Тип данных - это описание, определяющее свойства и порядок обработки данных. Например,
фраза “переменная $str имеет тип данных “строка” означает, что в этой переменной может содержаться любое число символов, а операция сложения строк представляет собой последовательное соединение слагаемых строк в одну.
7. Что можешь сказать про типизацию данных в PHP?
PHP является языком программирования с динамической типизацией, не требующим указания
типа при объявлении переменных, равно как и самого объявления переменных. Преобразова-
ния между скалярными типами зачастую осуществляются неявно без дополнительных усилий.
Впрочем, PHP предоставляет широкие возможности и для явного преобразования типов.
8. Сколько типов данных в РНР?
PHP поддерживает 8 базовых типов данных.
4 скалярных типа:
boolean. Логический тип данных, переменные данного типа могут принимать значения true
или false.
integer. Целочисленный тип данных, переменные могут принимать целые значения (...-2, -1, 0, 1,
2...) в диапазоне от -2^31 до +2^31. Если значение превышает данный порог - оно автоматичес-
ки переводится в тип float.
float. Числовой тип данных с плавающей точкой, может содержать как целые, так и дробные
величины.
string. Строковый тип данных. Об этом говорит сайт https://intellect.icu . Содержит нефиксированное количество различных символов.
PHP не накладывает никаких ограничений на длину строки, поэтому можно смело работать
даже с ОЧЕНЬ большими строками.
2 комплексных (составных) типа:
array. Массив, содержит упорядоченный список элементов.
object. Объект, содержит некий объект (экземпляр класса).
2 специальных типа:
resource. Ссылка на абстрактный элемент, т.н. внешний ресурс. Примеры внешних ресурсов -
ссылка на файл и ссылка на результат выполнения запроса.
NULL. Пустой тип данных, обозначающий отсутствие какого-либо значения. О таких значениях
обычно говорят “не определено”. Пустым значением можно инициализировать переменные лю-
бого другого типа.
9. Что такое static функция и чем она отличается от “обычной” (не static)?
Static принадлежит классу, а не экземпляру класса. И вызывается у класса, а не у объекта, т.е.
напрямую.
Объявление свойств и методов класса статическими позволяет обращаться к ним без создания
экземпляра класса. Атрибут класса, объявленный статическим, не может быть доступен пос-
редством экземпляра класса (но статический метод может быть вызван). Так как статические
методы вызываются без создания экземпляра класса, то псевдопеременная $this не доступна
внутри метода, объявленного статическим.
Доступ к статическим свойствам класса не может быть получен через оператор ->.
10. Есть ли разница между self и this в php?
self используется для статических функций и членов класса, а this наоборот для нестатических.
11. Что такое конструктор?
В PHP (начиная с версии 5) конструктор - это метод __construct(), который автоматически вызывается ключевым словом new после создания объекта. Обычно он используется для выполнения
различных автоматических инициализаций, как например, инициализация свойств. Конструкторы также могут принимать аргументы, в этом случае, когда указано выражение new, необходимо передать конструктору формальные параметры в круглых скобках.
12. Приведи пример конструктора.
class MyClass {
public function __construct() {
echo “Привет из конструктора!”;
}
}
$myObject = new MyClass();
?>
13. Обязательно ли писать ?> в конце скрипта?
Нет
14. В каких случаях это не стоит писать?
Для файлов, содержащих только PHP-код, закрывающий тег ?> лучше не использовать. Он не
требуется синтаксисом PHP и его пропуск предотвращает случайное включение в вывод конечных пробелов.
15. Поддерживает ли РНР множественное наследование?
Нет, PHP не поддерживает множественное наследование. То есть у производного класса может
быть только один родительский. Но с помощью “магической” функции __call() его можно эмулировать.
16. Какая разница между require(), require_once(), include() и include_once()?
require() включает в страницу заданный файл, в то время как require_once() делает это только в
том случае, если этот файл не был включен ранее (на одной и той же странице).
Таким образом, require_once() лучше использовать, если нужно включить файл с большим количеством функций. Тогда можно быть уверенным, что файл не будет включен многократно и не
возникнет ошибка “объявление функции дублируется”.
Отличие между require() и include() следущее: require() возвращает FATAL ERROR, если файл не
найден, include() же возвращает только WARNING.
Функция include_once() работает почти так же, как и include(), а отличия те же, что и между
require() и require_once().
17. Какая разница между функциями echo и print в PHP?
Во-первых, echo может принимать и выводить любое количество аргументов, а print - только
один. Во-вторых, print всегда возвращает 1, поэтому может быть использован в контексте выражения.
18. Что делает функция eval() ?
eval() вычисляет строку как PHP-код.
19. Чем отличается цикл while от do while?
do-while всегда выполняет тело цикла хотя бы один раз, поскольку его условное выражение проверяется в конце цикла.
20. Как перевернуть массив? Есть массив array(‘h’, ‘e’, ‘l’, ‘l’, ‘o’), как из него получить array(‘o’, ‘l’, ‘l’, ‘e’, ‘h’)?
Для этого в PHP есть функция array_reverse().
21. А как перевернуть массив без нее?
Например, так:
$arr = array(‘h’, ‘e’, ‘l’, ‘l’, ‘o’);
$reversed = array();
for ($i=0; $i
for ($i=0; $i
22. Как перевернуть строку?
Функцией strrev(), а если без нее, то проще всего так:
for ($i = strlen($str); $i>=0; $i--)
$rev[] = $str[$i];
$revstr = implode (“”, $rev);
echo $revstr;
А если это слишком просто, то можно и так:
$str = “Turn me baby”;
function myrev($src) {
$length = strlen($src);
for ($i = 0; $i < $length / 2; $i++) {
$a = $src[$i];
$src[$i] = $src[$length - $i - 1];
$src[$length - $i - 1] = $a;
}
return $src;
}
echo myrev($str);
Или вот еще вариант:
$a = ‘Turn me baby’;
$b = ‘’;
for ($i = strlen($a)-1; $i>=0; $i--)
$b .= $a[$i];
$a = $b;
echo $a;
23. Что такое рекурсия?
Рекурсия - это вызов функции из нее же самой, непосредственно (простая рекурсия) или через
другие функции (сложная или косвенная рекурсия), например, функция A вызывает функцию B,
а функция B - функцию A. Количество вложенных вызовов функции или процедуры называется
глубиной рекурсии.
24. Напиши пример рекурсивной функции, которая вычисляет факториал
числа.
function fac($x) {
if ($x === 0)
return 1;
else
return $x*fac($x-1);
}
echo fac(4);
25. Как вывести на экран ряд чисел Фибоначчи?
function fibonacci($n)
{
if ($n < 3) {
return 1;
}
else {
return fibonacci($n-1) + fibonacci($n-2);
}
}
for ($n = 1; $n <= 16; $n++) {
echo(fibonacci($n) . “, “);
}
echo(“...\n”)
26. Сложение в PHP и JavaScript. ”123” + “abc”. Что будет? А если 123 + ”abc”?
В JavaScript “+” это конкатенация, т.е. строки просто соединятся. В PHP в обоих случая результат
будет 123. А если в PHP сложить, например, 10 + ”20”, то, несмотря на кавычки результат будет
27. Есть ли разница между одинарными и двойными кавычками в PHP?
В двойных кавычках данные “парсятся”, а в одинарных - нет. Двойные кавычки в данном случае
приведут к результату Chimay, а одинарные к $beer.
$beer = ‘Chimay’;
echo “$beer”;
28. Проход массива. Как вывести все элементы массива на экран?
Вывести с ключами: print_r.
А пройти и вывести массив:
$cars = array( “BMW”, “Audi”, “Mercedes”, “Porsche” );
foreach ($cars as $car) {
echo $car . “
”;
}
29. В чем разница между функциями count() и sizeof()?
Функция count() выполняет ту же операцию, что и sizeof() - возвращает количество значений,
содержащихся в массиве. Единственное различие между ними заключается в том, что в некоторых ситуациях count() возвращает дополнительную информацию:
PHP. Собеседование в вопросах и ответах
- Если переменная существует и является массивом, count() возвращает количество элементовв массиве;
- Если переменная существует, но не является массивом, функция возвращает значение 1;
- Если переменная не существует, возвращается значение 0.
30. Что такое ассоциативный массив?
Массивы, индексами которых являются строки, называются ассоциативными. Индексы ассоциативных массивов называются ключами. Например:
$people[“Иванов”] = “Иван”;
$people[“Сидоров”] = “Николай”;
$people[“Петров”] = “Петр”;
31. Нарисуй форму для отправки файла:
Для реализации возможности загрузки файлов на сервер можно использовать простую форму:
Этот код выводит в браузер элемент input с кнопкой «Обзор» и кнопку «Загрузить». По нажатию
на эту кнопку происходит обращение к файлу upload.php, который содержит следующий код:
$uploadfile = ‘./upload/’.basename($_FILES[‘uploadfile’][‘name’]);
// Копируем файл из каталога для временного хранения файлов:
if (copy($_FILES[‘uploadfile’][‘tmp_name’], $uploadfile))
{
echo “Файл успешно загружен на сервер”;
}
else { echo “Ошибка! Не удалось загрузить файл на сервер!”; exit; }
?>
32. Пусть имеем HTML-форму, которая содержит одно поле ввода text и одно поле ввода textarea. Требуется создать для данной HTML-формы скрипт-обработчик script1.php, который заносит построчно в файл data.txt данные. В
итоге структура получаемого файла data.txt должна быть следующая:
text1
text2
text3
text4
где столбцы text1 и text3 относятся к полю text, а text2 и text4 к полю textarea.
После того, как обработчик script1.php поместит данные в файл, он должен
возвратить пользователя обратно в index.html.
Форма:
33. Используя конструкцию switch, написать функцию boo, принимающую одно число в качестве аргумента. Если это число равно 2, функция должна вывести слово “Двойка”, если 3 - “Тройка”, в остальных случаях - “Фигня какая-то”.
function boo($num) {
switch($num) {
case “2”:
echo “two!”;
break;
case “3”:
echo “three!”;
break;
default:
echo “shnyaga!”;
break;
}
}
boo(2);
34. Дан массив $arr = array(3,8,15,25,16,11,10,5,7,30). Вывести циклом индексы тех его элементов, которые делятся на 5.
$arr = array(3,8,15,25,16,11,10,5,7,30);
for ($i=0; $i<=count($arr); $i++) {
if ($arr[$i]%5 == 0) {
echo $arr[$i].”
”;
}
}
35. Написать программу, которая выводит простые числа, т.е. делящиеся только на себя и на 1.
$lst = array();
$k = “prostoe”;
for($i = 2; $i<100; $i++) {
for($j = 2; $j < $i; $j++) {
if( ($i % $j) == 0) {
$k=”ne prostoe”;
}
}
if ($k == “prostoe”)
$lst[] = $i;
else
$k = “prostoe”;
}
foreach ($lst as $list) echo $list.”
”;
?>
P.S. В качестве флага ($k) правильнее было бы использовать true/false, но я оставил так как есть,
чтобы было легче понять как оно работает.
36. Сгенерировать 3 случайных числа в диапазоне от 0 до 10. Если сумма этих чисел меньше 14, сгенерировать новую тройку.
do {
$a = rand(0, 10);
$b = rand(0, 10);
$c = rand(0, 10);
$result = $a+$b+$c;
echo $result.”
”;
}
while ($a + $b + $c < 14);
37. Чем отличается передача параметра по значению от передачи по ссылке.
Параметры в процедуры и функции можно передавать 2 способами - по значению и по ссылке. Отличия между этими двумя способами следующие: при передаче параметра по значению в
процедуру (функцию) передается копия переменной, а при передаче по ссылке - оригинал (сама
переменная).
38. Чему будет равно $a?
$a = “1”;
$a[$a] = “2”;
echo $a;
39. Есть массив a = array(тут много элементов). Проходим по массиву циклом for (i=0; i<=count(a); i++). Можно ли как-нибудь ускорить цикл?
Да.
1) Вынести count(a) в отдельную переменную;
2) Считать массив с конца циклом for (i=count(a); i>=0; i--).
40. Вывести максимальное значение элемента массива array(1,2,3,4,10,100,3,4987,6,7,8,9).
С использованием стандартной функции max():
$arr = array(1,2,3,4,10,100,3,4987,6,7,8,9);
echo max($arr);
Без использования стандартной функции:
$arr = array(5,45,3,4,5,490,62);
$max = $arr ;
foreach ($arr as $val)
if ($max < $val)
$max = $val;
echo $max;
41. Напиши программу-цензор, которая бы заменяла вводимые пользователем в форму слова “fuck”, “idiot” и “bitch” на “f**k”, “id**t” и “bi**h”.
42. Какие магические методы знаешь? Что это вообще такое?
Это методы зарезервированные в php, которые начинаются с двойного подчеркивания “__”.
Список всех магических методов:
__construct
__destruct
__call
__callStatic
__get
__set
__isset
__unset
__sleep
__wakeup
__toString
__set_state
__clone
__construct и __destruct - самые популярные методы, которые реализуют базовые понятия объ-
ектно-ориентированного программирования: конструктор и деструктор;
__call, __callStatic, __get и __set - методы, связанные с перегрузкой обращений как к свойствам, так
и к методам. Методы __get() и __set() вызываются при установке и получении значения свойства,
а методы __call() и __callStatic - при вызове метода. Стоит заметить, что эти магические функции
будут вызываться только и исключительно в том случае, если запрошенные метод или свойство
не существуют;
__isset - метод, срабатывающий при вызове функций empty() или isset() на несуществующем
или недоступном свойстве класса;
__unset - срабатывает при вызове функции unset() на несуществующем или недоступном свойстве класса;
__sleep и __wakeup - методы, которые вызываются только из функций serialize и unserialize соответственно. Метод __sleep будет вызван сразу при применении к объекту функции serialize, а
метод __wakeup - при применении unserialize. В настоящий момент методы применяются для
сохранения текущего состояния системы с последующим восстановлением данного состояния
(например, коннект к базе);
__toString - метод, с помощью которого можно обращаться к классу как к строке (например, с
помощью print или echo);
__set_state - метод, который вызывается для классов, экспортирующих значения свойств функцией var_export();
__clone - вызывается при клонировании объекта (введен для использования из-за того, что объекты в php5 и выше передаются по ссылке);
__invoke - вызывается при попытке использовать объект в качестве функции.
43. Назови по памяти любые функции для работы со строками, массивами и файлами.
Например, такие:
Строки:
echo - выводит одну или более строк.
explode - разбивает строку на подстроки.
htmlentities - преобразует символы в соответствующие HTML сущности.
htmlspecialchars - преобразует специальные символы в HTML сущности.
implode - объединяет элементы массива в строку.
ltrim - удаляет пробелы из начала строки.
rtrim - удаляет пробелы из конца строки.
trim - удаляет пробелы из начала и конца строки.
md5 - возвращает MD5 хэш строки.
str_repeat - возвращает повторяющуюся строку.
str_replace - заменяет строку поиска на строку замены.
str_split - преобразует строку в массив.
strlen - возвращает длину строки.
strrev - переворачивает строку.
Массивы:
array_flip - возвращает массив в обратном порядке, то есть ключи массива исходный_массив
становятся значениями, а значения массива исходный_массив становятся ключами.
shuffle - перемешать массив
ksort - отсортировать массив по ключам
array_unique - убрать повторяющиеся значения из массива
array_unshift - добавить один или несколько элементов в начало массива
array_sum - вычислить сумму значений массива
array_shift -извлечь первый элемент массива
array_reverse - возвращает массив с элементами в обратном порядке
array_pop - извлечь последний элемент массива
PHP. Собеседование в вопросах и ответах
array_push - добавить один или несколько элеметов в конец массива
array_keys - выбрать все ключи массива
array_count_values - подсчитать количество всех значений массива
Файлы:
filesize - получить размер файла
filetype - получить тип файла
fopen - открывает файл или URL
fwrite - бинарно-безопасная запись в файл
is_executable - определяет, является ли файл исполняемым
if_file - определяет, является ли файл обычным файлом
is_readable - определяет, доступен ли файл для чтения
is_uploaded_file - определяет, был ли файл загружен при помощи HTTP POST
is_writable - определяет, доступен ли файл для записи
mkdir - создает директорию
move_uploaded_file - перемещает загруженный файл в новое место
pathinfo - возвращает информацию о пути к файлу
readfile - выводит файл
rename - переименовывает файл или директорию
unlink - удаляет файл
44. Какая функция возвращает количество рядов результата MySQL запроса?
mysql_num_rows(). Она работает только с запросами SELECT. Чтобы получить количество рядов,
обработанных функцями INSERT, UPDATE, DELETE, нужно использовать функцию mysql_affected_
rows().
Пример:
$result = mysql_query(“SELECT * FROM table1”, $link);
$num_rows = mysql_num_rows($result);
echo “$num_rows Rows\n”;
1. Что такое MVC?
Model-view-controller - это схема использования шаблонов проектирования, с помощью которых
модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем
разделены на три отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.
2. Что за что отвечает в MVC?
В шаблоне MVC, как следует из названия, есть три основных компонента: Модель, Представление, и Контроллер.
Представление отвечает за отображение информации, поступающей из системы или в систему.
Модель является “сутью” системы и отвечает за непосредственные алгоритмы, расчеты и тому
подобное внутреннее устройство системы.
Контроллер является связующим звеном между “представлением” и “моделью” системы, посредством которого и существует возможность произвести разделение между ними. Контроллер
получает данные от пользователя и передает их в “модель”. Кроме того, он получает сообщения
от модели, и передает их в “представление”.
3. Что такое шаблоны (паттерны) проектирования?
Паттерн проектирования - это общее типовое решение некоторой проблемы, многократно повторяемое в процессе проектирования архитектуры программного продукта. Они показывают
отношения и взаимодействия между классами, позволяют сделать систему гибкой и легко изменяемой. За счет их правильного использования повышается коэффициент использования готовых решений.
4. Какие паттерны знаешь?
Виды паттернов
- — поведенческие (behavioral);
- — порождающие (creational);
- — структурные (structural).
Список шаблонов
1. Порождающие
Abstract Factory (Абстрактная фабрика). Его основное назначение - предоставить интерфейс
для создания семейства взаимосвязанных объектов, не специфицируя их классы.
Factory Method (Фабричный метод). Используется для определения и поддержания отношений между объектами. Фабричные методы избавляют проектировщика от необходимости
встраивать в код зависящие от приложения классы.
Singleton (Одиночка). Используется для создания всего одного экземпляра класса и гарантирует, что во время работы программы не появиться второй. Например, в схеме MVC, зачастую этот
паттерн используется для порождения главного (фронтового) контроллера.
Prototype (Прототип). Используется для задания вида создаваемых объектов на основе объекта прототипа, от которого происходит передача внутреннего состояния. Prototype позволяет
избавиться от жесткой привязки к классам и, как следствие, вязкости кода.
Builder (Строитель). Используется для отделения процесса конструирования сложного объекта от его представления, так что в результате одного и того же конструирования могут получаться различные объекты.
2. Структурные
Adapter (Адаптер). Унифицирует классы и объекты. Используется для преобразования одного
интерфейса в другой, необходимый клиенту.
Bridge (Мост). Используется для отделения абстракции от ее реализации так, чтобы то и другое
можно было изменять независимо.
Composite (Компоновщик). Объединяет объекты в древовидную структуру для представления
иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным
объектам и к группам объектов одинаково. Основным назначением паттерна, является обеспечение единого интерфейса как к составному так и конечному объекту, что бы клиент не задумывался над тем, с каким объектом он работает. Общеизвестными примерами этого паттерна
является SimpleXML и jQuery.
Decorator (Декоратор). Используется для динамического расширения функциональности объекта. Является гибкой альтернативой наследованию.
Facade (Фасад). Определяет интерфейс более высокого уровня, который упрощает использование подсистем. Представляет собой унифицированный интерфейс вместо набора интерфейсов
некоторой подсистемы. Разбиение на подсистемы сложной системы позволяет упростить процесс проектирования, а также помогает максимально снизить зависимости одной подсистемы
от другой. Однако это приводит к тому, что использовать такие подсистемы вместе становиться
довольно сложно. Один из способов решения этой проблемы является ввод паттерна фасад.
Flyweight (Приспособленец). Он используется для эффективной поддержки множества мелких
объектов и позволяет повторно использовать мелкие объекты в различном контексте.
Proxy (Прокси). Предоставляет объект, который контролирует доступ к другому объекту, перехватывая все вызовы (выполняет функцию контейнера).
3. Паттерны поведения
Chain of Responsibility (Цепочка обязанностей). Предназначен для организации в системе
уровней ответственности.
Command (Команда). Инкапсулирует различные алгоритмы в единую сущность.
Interpreter (Интерпретатор). Реализует динамические алгоритмы с помощью декларативного
описания.
Iterator (Итератор). Представляет собой объект, позволяющий получить последовательный
доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящий в состав агрегации.
Mediator (Посредник). Предоставляет собой единый центр взаимодействия определенной
группы объектов, которые должны быть взаимосвязаны друг с другом.
Memento (Хранитель). Паттерн поведения объектов, сохраняющий состояния.
Observer (Наблюдатель). Определяет зависимость типа “один ко многим” между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются
об этом событии.
State (Состояние). Используется в тех случаях, когда во время выполнения программы объект
должен менять свое поведение в зависимости от своего состояния.
Strategy (Стратегия). Предназначен для определения семейства алгоритмов, инкапсуляции
каждого из них и обеспечения их взаимозаменяемости. Это позволяет выбирать алгоритм путем определения соответствующего класса. Шаблон Strategy позволяет менять выбранный алгоритм независимо от объектов-клиентов, которые его используют.
Template Method (Шаблонный метод). Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом.
Visitor (Посетитель). Описывает операцию, которая выполняется над объектами других классов. При изменении Visitor нет необходимости изменять обслуживаемые классы.
5. Напиши на PHP пример реализации паттерна Singleton.
class Database {
private static $connection;
private function __construct() {
echo “Hello from construct!”;
}
public static function Connect() {
if (!isset(self::$connection)) {
self::$connection = new Database;
}
return self::$connection;
}
}
Database::Connect();
1. ООП знаешь? Что это такое?
Объектно-ориентированное программирование - это парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В языках с прототипированием (например, в JavaScript) вместо классов используются объекты-прототипы.
2. Расскажи основные принципы ООП.
1) Инкапсуляция. Это механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает их от внешнего вмешательства или неправильного использования. Когда методы и данные объединяются таким способом, создается объект. Т.е. переменные состояния объекта скрыты от внешнего мира. Изменение состояния объекта (его переменных) возможно ТОЛЬКО с помощью его собственных методов. Можно сказать, что инкапсуляция подразумевает под собой сокрытие данных, что позволяет эти данные защитить.
2) Наследование. Это процесс, посредством которого, один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него.
3) Полиморфизм. Это свойство, которое позволяет одно и тоже имя использовать для решения нескольких технически разных задач. Проще говоря, концепцией полиморфизма является идея “один интерфейс, множество реализаций”. Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.
3. Напиши пример реализации полиморфизма.
Class One {
function foo() {
echo “Hello from class One!”;
}
function callMe() {
$this->foo();
}
}
Class Two extends One {
function foo() {
echo “Hello from class Two”;
}
}
$Two = new two();
$Two->callMe();
4. Что такое виртуальный метод?
Виртуальный метод в объектно-ориентированном программировании - это метод класса, который может быть переопределен в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения. Виртуальные методы - один из важнейших приемов реализации полиморфизма.
5. А зачем такое нужно?
Чтобы программисту необязательно было знать точный тип объекта для работы с ним через виртуальные методы, достаточно лишь знать, что объект принадлежит классу или наследнику класса, в котором метод объявлен.
Виртуальные методы позволяют создавать общий код, который может работать как с объектами базового класса, так и с объектами любого его класса-наследника. При этом базовый класс
определяет способ работы с объектами и любые его наследники могут предоставлять конкретную реализацию этого способа.
6. Зачем нужна инкапсуляция?
Никто не застрахован от ошибок, а человеку тем более свойственно ошибаться. Применяя инкапсуляцию, мы, как бы, возводим купол, который защищает данные, принадлежащие объекту,
от возможных ошибок, которые могут возникнуть при прямом доступе к этим данным. Кроме того, применение этого принципа очень часто помогает локализовать возможные ошибки в
коде программы, а это намного упрощает процесс поиска и исправления этих ошибок.
7. Как называется способность объекта скрывать свои данные и реализацию от других объектов системы?
Инкапсуляция.
8. Какие механизмы в ОО языках обычно позволяют обеспечить инкапсуляцию объектов?
Модификаторы доступа.
9. Может ли быть конструктор виртуальным?
Нет, конструкторы не могут быть виртуальными.
10. Что такое класс?
Класс - это модель еще не существующей сущности (объекта). Класс фактически описывает устройство объекта, являясь своего рода чертежом.
11. А объект?
Объект - это совокупность данных и методов для их обработки. Данные и методы называются
членами класса. Вообще, объектом является все то, что поддерживает инкапсуляцию.
12. Чем отличается класс от объекта?
Класс - это тип данных, а объект - экземпляр типа класс.
13. Что такое область видимости переменной?
Область видимости переменной - это место в программе, в котором доступно значение переменной. Каждая переменная имеет свою область видимости (есть локальные переменные и глобальные переменные)
Public. Метод/переменная доступны из любого места в коде.
Protected. Защищенные методы или переменные доступны только внутри класса, где они были
объявлены и из его производных классов.
Private. Закрытые методы или переменные доступны только внутри класса.
14. Чем локальные переменные отличаются от глобальных?
Локальные доступны только конкретной подпрограмме, глобальные - всей программе. Ограничение зоны видимости придумали как для возможности использовать одинаковые имена переменных (что разумно, когда в разных подпрограммах переменные выполняют похожую функцию), так и для защиты от ошибок, связанных с неправомерным использованием переменных.
15. Чем отличается процедурный подход от объектно-ориентированного?
Процедурный подход предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Задачи разбиваются на шаги и решаются шаг за шагом. Кроме того
данные лежат отдельно от функций, для каждой новой сущности приходится писать свой набор
функций с немного другими именами.
А ООП предполагает заключение внутри одного класса, как данных, так и методов их обработки.
При этом создание новой сущности не вызывает необходимости переписывать все методы, а
только нужные (это называется “наследование”).
16. Какие еще есть парадигмы (модели, подходы) программирования кроме ООП?
Из тех, что наиболее часто встречаются: функциональная, аспектно-ориентированная и процедурная.
17. Что такое абстрактный класс?
Абстрактный класс в объектно-ориентированном программировании - это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объем и наименьшее содержание.
18. Можно ли создать экземпляр абстрактного класса?
Если язык программирования позволяет, то можно, например в Delphi. Но, поскольку, мы говорим о РНР, то создать экземпляр абстрактного класса нельзя.
19. Какая разница между абстрактным классом и интерфейсом?
Один из самых любимых вопросов!
Абстрактный класс - это класс, который имеет хотя бы 1 абстрактный (не определенный) метод
и обозначается как abstract. Интерфейс - такой же абстрактный класс, только в нем не может
быть свойств и не определены тела у методов.
Кроме того, что абстрактный класс наследуется (etxends), а интерфейс реализуется (implements).
Вот и возникает разница между ними, что наследовать мы можем только 1 класс, а реализовать
сколько угодно.
20. Зачем нужен интерфейс, если есть абстрактный класс?
Затем, что можно унаследоваться только от одного абстрактного класса, но реализовать множество интерфейсов. Плюс, в качестве приятного довеска, ВСЕ методы, описанные в интерфейсе, ДОЛЖНЫ быть реализованы в классе, а в абстрактном классе их нужно для этой цели специально отмечать
Надеюсь, эта статья про php вопросы и ответы для собеседований, была вам полезна, счастья и удачи в ваших начинаниях! Надеюсь, что теперь ты понял что такое php вопросы и ответы для собеседований
и для чего все это нужно, а если не понял, или есть замечания,
то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Ответы на вопросы для самопроверки пишите в комментариях,
мы проверим, или же задавайте свой вопрос по данной теме.
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)