Я в сетях:

Облако тегов


Собеседование на должность php-разработчика. Часть 2. PHP Basics

Собеседование на должность php-разработчика. Часть 2. PHP Basics

Вернуться на главную

by root posted 08.08.2016 479

Раздел: Теория и практика PHP Теги: php, собеседование

Добро пожаловать на второй пост, посвященный собеседованиям на должность php-программиста. Продолжим рассматривать реальные вопросы из тестов и собеседований.

1.Что будет выведено в результате выполнения кода?

ob_start();
echo 'Hello ';
ob_start();
echo 'World';
ob_start();
echo '!';
ob_end_clean();
ob_end_flush();
ob_end_flush();

Ответ: Hello World

Давайте вспомним про перехват вывода в php. ob_start() начинает буферизацию вывода. Из доков:

Эта функция включает буферизацию вывода. Если буферизация вывода активна, вывод скрипта не высылается (кроме заголовков), а сохраняется во внутреннем буфере.

Буферы вывода помещаются в стек, то есть допускается вызов ob_start() после вызова другой активной ob_start(). При этом необходимо вызывать ob_end_flush() соответствующее количество раз.

ob_end_clean() очищает самый верхний (самый ближайший) буфер и отключает буферизацию. ob_end_flush() отправляет буфер обмена и отключает буферизацию.

2. Выберите функции, сортирующие массивы по значению

В доках есть хорошая таблица:

Свойства функций сортировки
Имя функции Сортирует по Сохраняет связь ключ - значение Порядок сортировки Похожие функции
array_multisort() значению ассоциативные да, числовые нет первый массив или настройки сортировки array_walk()
asort() значению да по возрастанию arsort()
arsort() значению да по убыванию asort()
krsort() ключу да по убыванию ksort()
ksort() ключу да по возрастанию asort()
natcasesort() ключу да натуральный, чувствителен к регистру natsort()
natsort() значению да натуральный natcasesort()
rsort() значению нет по убыванию sort()
shuffle() значению нет случайный array_rand()
sort() значению нет по возрастанию rsort()
uasort() значению да определяется пользователем uksort()
uksort() ключу да определяется пользователем uasort()
usort() значению нет определяется пользователем

Таким образом, по значению сортируют массив следующие фунции: array_multisort(), asort(), arsort(), natsort(), rsort(), shuffle(), sort(), uasort(), usort().

3. Какие из функций являются бинарно-безопасными?

Из доков:

fwrite — Бинарно-безопасная запись в файл

fread — Бинарно-безопасное чтение из файла

fputs — Псевдоним fwrite()
Версия Описание
4.3.0 file() стала безопасной для обработки бинарных данных
Версия Описание
4.3.0 fgets() теперь безопасна для обработки бинарных данных

fopen — Может бинарно-безопасно открывать файл, если указан соответствующий режим.

4. Что будет выведено в результате выполнения кода?

class Runnable {
public function __construct() {
echo 'New runnable object has been created'.PHP_EOL;
}
}
class Thread extends Runnable {
public function __construct() {
echo 'New thread has been created'.PHP_EOL;
}
}
$thread = new Thread();

Ответ: New thread has been created

Из доков:

Конструкторы в классах-родителях не вызываются автоматически, если класс-потомок определяет собственный конструктор. Чтобы вызвать конструктор, объявленный в родительском классе, следует обратиться к методу parent::__construct() внутри конструктора класса-потомка. Если в классе-потомке не определен конструктор, то он может наследоваться от родительского класса как обычный метод (если он не определен как приватный).

Таким образом, на лицо классический полиморфизм. Конструктор потомка переопределяет конструктор предка.

5. Что будет выведено в результате выполнения кода?

function myrange($min, $max, $step) {
for($i=$min;$i<=$max;$i += 2*$step) {
yield $i;
}
}
$even = myrange(2,13,3);
foreach($even as $number) {
echo $number.PHP_EOL;
}
Ответ: 
2
8
 
Здесь у нас в полной красе генераторы, введенные в PHP с версии 5.5. Генератор позволяет экономить память, используя не полностью сгенерированный массив, а итератор. В нашем примере сначала будет сгенерированно: 2, так как постинкремент у счетчика произойдет после вывода. Далее: 2+2*3 = 8; После этого 8+2*3 = 14, что больше 13 - не подходит.
Константа PHP_EOL содержит знак переноса в зависимости от операционной системы.
 

6. Для чего используется функция func_get_args()?

Данная функция возвращает массив из переданных аргументов в функцию.
Пример:
function test(){
    $numargs = func_num_args();
    echo "Количество аргументов: $numargs
\n";
    $arg_list = func_get_args();
    for ($i = 0; $i < $numargs; $i++) {
        echo "Аргумент №$i: " . $arg_list[$i] . "
\n";
    }
}

test(1, 2, 3) выведет:

Количество аргументов: 3
Аргумент №0: 1
Аргумент №1: 2
Аргумент №2: 3

 

7. Напиши пример рекурсивной функции, которая вычисляет факториал числа.

function fac($x) {
if ($x === 0)
return 1;
else
return $x*fac($x-1);
}
echo fac(4);

8. Как вывести ряд чисел Фибоначчи?

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”;
Последние 2 вопроса с ответами были взяты из хорошей книжки для подготовки к собеседованию: http://phpbook.comli.com/. Правда, она уже устарела, но есть еще актуальные вопросы, так что рекомендую к подготовке.
comments powered by Disqus