Lecture
Это окончание невероятной информации про php ответы для собеседований.
...
/>
С массивами связана значительная часть процесса разработки на PHP. Они хорошо подходят для тех случаев, когда вам необходима итерируемая структура данных. Изнутри массивы представлены, как и многие другие структуры данных, в виде хэш-таблиц. PHP написан на C, в котором нет ассоциативных массивов – массивы в C могут иметь только целочисленные индексы. Для трансляции индексов PHP-массива в целочисленные индексы массива на C применяется хэш-функция, преобразующая индексы PHP-массива (и целочисленные, и строковые) в целые числа. Значения элементов массива располагаются в получившейся хеш-таблице.
Сложность процесс поиска элементов по хэш-ключам составляет O(1) (в нотации большое О) благодаря тому, что для нахождения элемента не требуется итерация по хешу (хеш-функция возвращает значение, точно указывающее на положении элемента в таблице).
Прим. переводчика: Здесь я сознательно исключил из текста понятие бакета (bucket, корзина), т.к. автор оригинального текста не даёт никаких пояснений на его счет. Если вам действительно интересно устройство хеш-таблиц, то рекомендую к прочтению вот этот материал.
PHP автоматически увеличивает размер массива по требованию. В том числе в тех ситуациях, когда добавление нового элемента может вызвать превышение размера выделенной на данный момент области памяти, PHP удваивает размер выделенной памяти.
В некоторых случаях процесс добавления элемента в массив так же сложен, как итерация с копированием элементов в новый массив, да еще и с удвоением выделенной памяти. Учитывая это, для больших наборов данных с целью экономии памяти, возможно, стоит рассмотреть альтернативы массивам и загружать данные по мере необходимости. Подробнее о внутреннем устройстве массивов можно почитать в разделе программирование на стороне сервера.
К списку вопросов
Вопрос : В чем различие между ArrayAccess и ArrayObject?
ArrayAccess – это просто интерфейс, требующий определения следующих методов: offsetGet, offsetSet, offsetExists, иoffsetUnset.
ArrayObject – класс, реализующий интерфейс ArrayAccess. Удобство ArrayObject заключается в том, что к его свойствам можно получать доступ таким же образом, как к обычному массиву через оператор [], например: $dogs['sound'], или через метод offsetGet('имя свойства'), например: $dogs->offsetGet('sound').
Подробнее об использовании объектов как массивов.
К списку вопросов
Вопрос : Что такое генераторы? Когда их можно использовать вместо итераторов и обычных массивов? Для чего нужны ключевые слова yield и send?
Генератор внешне похож на обычную функцию, и обладает некоторым сходством с замыканиями. При первом вызове в контексте итератора (например, в цикле foreach), генератор возвращает объекта класса Generator, который, в свою очередь, реализует интерфейс Iterator. Значения для итерации генерируются в реальном времени, что избавляет от необходимости загружать весь набор данных в память, получая значения по мере необходимости. Из этого следует, что итерация по результату осуществляется так же, как по массиву, не считая некоторых отличий:
Невозможность возврата значения через оператор return – это одно из основных отличий генератора от других функций или замыканий. Вместо него для передачи значения из генератора применяется ключевое слово yield (например, yield $dog). Указание значения после return приведет к синтаксической ошибке, а применение пустого оператора – простой способ остановить работу генератора.
Оператор yield приостанавливает выполнение и возвращает текущее значение в контекст структуры, использующей генератор. Эта структура может отправить информацию обратно в генератор во время его выполнения с помощью метода send (например, $generator->send(-1);).
Пример кода с использованием генератораСначала объявим сам генератор:
function dog_generator() { foreach (range(0, 2) as $value) { // некоторый ложный источник данных $dog = DogHelper::getDogFromDataSource($value); // перехватываем input от send или используем $dog $input = (yield $dog); if ($input == -1) { return; // останавливаем генератор } } }
Стоит отметить, что в приведенном выше коде мы сохраняем результат выполнения yield в переменную, для этого мы обернули его вызов в круглые скобки.
А теперь напишем код, использующий объявленный генератор:
// получаем экземпляр генератора и присваиваем его переменной $generator = dog_generator(); foreach ($generator as $dog) { // $dog - это результат вызова yield echo $dog . PHP_EOL; // мы хотим найти терьера if ($dog == 'Terrier') { // отправляем входные данные генератору через yield $generator->send(-1); echo 'Мы нашли терьера, останавливаем просмотр'; } }
Если запустить этот код, то он прекратит своё выполнение после обнаружения терьера:
Dalmatian Терьер Мы нашли терьера, останавливаем просмотр
Основные преимущества генераторов можно свести к простоте реализации, повышению читаемости кода, повышению эффективности расходования памяти.
Вообще говоря, стоит применять генераторы всегда, когда не требуется повторно обходить набор данных с начала или просматривать его в обратном направлении. С другой стороны, если не учитывать расходование памяти, обход обычного массива выполняется значительно быстрее.
Документация по генераторам на php.net на русском языке пока что отсутствует.
К списку вопросов
Общая картина
Вопрос : Перечислите ключевые отличия между версиями PHP 5.3, 5.4, 5.5.
Версия PHP 5.3 была выпущена в июне 2009 года, но до сих пор широко распространена. Основные новшества: замыкания, лямбда-функции, пространства имён и позднее статическое связывание.
Релиз PHP 5.4 состоялся в марте 2012 года. В нём были представлены типажи (трейты), возможность объявления массива с коротким синтаксисом [] (например, ['шит-цу', 'ротвейлер']). Ко всему прочему, в этой версии была убрана опцияregister_globals.
PHP 5.5 был выпущен в июне 2013 года, и это текущий релиз. В этой версии появились генераторы (и связанное с ними ключевое слово yield), в инструкцию try/catch добавлен блок finally, на замену APC Cache пришел включённый по умолчанию OpCache (базируется на Zend Optimizer). Также был расширен синтаксис литералов массивов (['шит-цу','ротвейлер'][1] вернёт 'ротвейлер'), и добавлена удобная возможность обращения к символам в строке как к элементам массива (например, '6e8687d4'[0] вернёт «6»).
Имею опыт работы с:
Yii, Yii2, Phalkon, Angular.JS,Angular.2,Node.js, React.js,Vue.js
Опыт работы c laravel 5+
А что это? менее года , 1 год,2 года,3 года
Используете ли вы миграции в Laravel 5+?
Да Нет
Why
Используете ли вы репозитории в Laravel 5+?
Да Нет, Почему ?
Используете ли вы политики в Laravel 5+?
Да Нет,Почему ?
Используете ли вы Eloquent в Laravel 5+?
Да Нет,Почему ?
Используете ли вы Middleware в Laravel 5+?
Да , Нет,Почему ?
Используете ли вы Notification в Laravel 5+?
Да,Нет,Почему ?
Используете ли вы Events в Laravel 5+?
Да,Нет,Почему ?
Как вы бы использовали REST API в Laravel 5+?
Могу,Не могу, Коротко об этом
Какой Фреймворк вы использовали бы для высоконагруженного Laravel 5+? (angular,node.js,react.js ...)
Библиотеку, Фремворк, Почему и как?
В чем отличие команды Rebase от Merge в GIT
Понимаю,Не понимаю, Когда и как использовать эти команды можно/нельзя?
Что такое Laravel Homestead?
Понимаю, Не понимаю, для чего и как использовалось?
Прохождение интервью является навыком. Если вы замечательный программист — отлично, но этого недостаточно. Все когда-нибудь проваливают интервью, и должная подготовка может помочь каждому увеличить вероятность успеха. Энтузиазм чрезвычайно важен, и для того, чтобы научиться правильно показывать его, вам стоит попрактиковаться. Из-за недостатка энтузиазма на собеседованиях терпят неудачу столько же программистов, сколько проваливаются по техническим причинам. Интервьюеры помогают кандидатам во время интервью, и если вы будете правильно вести себя и правильно общаться, то они обязательно вам помогут. Практика всегда помогает. Чтение большого количества задаваемых на собеседованиях вопросов и приучение самого себя к испытываемому на собеседованиях стрессу обеспечит вам успех и получение большего количества предложений работы.
Это не идеальная ситуация. Подготовка к собеседованиям дает свои плоды, но на обучение программистов умениям, которые не относятся к созданию качественного софта, тратит время каждой стороны, принимающей участие в процессе подбора персонала. Компаниям следует усовершенствовать процесс проведения собеседований, уменьшив влияние академических знаний в области информатики, заученных фактов и отрепетированных действий. Но реальное положение вещей сейчас отличается от того, к которому мы стремимся, поэтому программисты должны уметь правильно подготовиться к собеседованиям.
Часть 1 PHP Interview Questions and Answers
Часть 2 Conclusion - PHP Interview Questions and Answers
Comments
To leave a comment
Running server side scripts using PHP as an example (LAMP)
Terms: Running server side scripts using PHP as an example (LAMP)