Библиотека собеса по PHP | вопросы с собеседований
前往频道在 Telegram
Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/9f3affba Для обратной связи: @proglibrary_feeedback_bot
显示更多3 151
订阅者
无数据24 小时
-37 天
-430 天
帖子存档
Расскажите про функции Closure::bindTo и Closure::bind
Closure::bindTo и Closure::bind — это методы в PHP, которые позволяют изменять контекст для замыканий (closures). Они предоставляют возможность явно привязать замыкание к определенному объекту или классу.
Closure::bindTo:
Closure::bindTo используется для создания нового замыкания, связанного с указанным объектом. Этот метод возвращает новый объект замыкания с измененным контекстом.
Closure::bind:
Closure::bind также позволяет изменять контекст замыкания, но вместо создания нового замыкания, этот метод изменяет контекст существующего замыкания. Это статическая версия метода bindTo
Опишите жизненный цикл HTTP-запроса.
Жизненный цикл HTTP-запроса в PHP можно разделить на следующие этапы:
1️⃣ Инициация запроса: Когда клиент отправляет HTTP-запрос на сервер, он инициирует процесс обработки запроса. В PHP это может быть инициировано, например, через браузер или с помощью команды curl в командной строке.
2️⃣ Маршрутизация: После получения запроса сервер должен определить, какой код или файл должен обрабатывать этот запрос. В PHP это может быть определено с помощью файла .htaccess или механизма маршрутизации, такого как маршрутизатор в фреймворке.
3️⃣ Обработка запроса: Когда PHP определяет, какой код или файл должен обработать запрос, он запускает этот код или файл. Этот этап включает выполнение кода, чтение и обработку данных, выполнение операций с базой данных и другие операции, необходимые для обработки запроса.
4️⃣ Генерация и отправка ответа: После обработки запроса PHP генерирует данные, которые должны быть отправлены обратно клиенту. Это может включать в себя генерацию HTML-страницы, отправку изображений, создание и отправку JSON-ответов и т. д. Затем PHP отправляет созданный ответ обратно на клиентскую сторону.
5️⃣ Завершение обработки запроса: После отправки ответа PHP завершает обработку запроса, освобождает ресурсы, которые были использованы во время обработки, и завершает свое выполнение.
🧠Чему вы бы хотели научиться?
Расскажите нам о ваших пожеланиях: какие навыки вы хотели бы прокачать в ближайшее время или какую профессию хотели бы приобрести?
За прохождение опроса вы получите промокод на скидку 15% на все наши курсы до конца 2024 года.
👉Опрос по ссылке👈
Что такое замыкание в PHP? Приведите пример.
В PHP замыкание (closure) представляет собой анонимную функцию, которая может быть сохранена в переменной. Замыкание может захватывать и использовать переменные из внешней области видимости, что делает его полезным для создания функций, которые могут обрабатывать контекст, в котором они были созданы.
В примере переменная $greet содержит замыкание, которое принимает параметр $name и выводит приветствие. Вызов $greet('John') вызывает замыкание, передавая ему аргумент 'John'.
Объясните функцию сonstant() и ее назначение.
В PHP функция constant() предназначена для получения значения константы по её имени. Константы в PHP — это именованные значения, которые не могут быть изменены в течение выполнения скрипта. Они объявляются с использованием функции define() или ключевого слова const.
Какие вы знаете функции для работы с массивами?
array() — Создает массив.
array_diff() — Сравнивает массивы и возвращает различия в значениях.
array_keys() — Возвращает все ключи массива.
array_reverse() — Разворачивает массив.
array_search() — Ищет значение и возвращает соответствующий ключ.
array_slice() — Возвращает определенные части массива.
array_sum() — Суммирует все значения массива.
count() — Количество элементов массива.
Объясните разницу между $message и $$message
$message — это обычная переменная, имеющая фиксированное имя и фиксированное значение, тогда как $$message — это ссылочная переменная, в которой хранятся данные о переменной. Значение $$message может динамически меняться по мере изменения значения переменной.
Что такое антипатерны? Приведите несколько примеров
Антипатерны (англ. antipatterns) — это плохие практики в программировании, дизайне и разработке, которые могут привести к проблемам, сложности в сопровождении кода, и общему ухудшению качества программного продукта.
1. Analytical paralysis
Аналитический паралич — считается классическим организационным антипаттерном. Его суть заключается в чрезмерном анализировании ситуации при планировании, так что решение или действие не предпринимаются, по сути парализуя разработку. Зачастую это случается в тех случаях, когда цель состоит в достижении совершенства и полной завершенности периода анализа. Этот антипаттерн характеризуется хождением по кругу (такой себе замкнутый цикл), пересмотром и созданием детальных моделей, что в свою очередь мешает рабочему процессу.
К примеру, вы пытаетесь предугадать вещи уровня: а что если вдруг пользователь захочет создать список сотрудников на основе четвертых и пятых букв их имени, с включением в список проектов, которым они уделили больше всего рабочих часов между Новым Годом и Восьмым марта за четыре предыдущих года? По сути это переизбыток анализа.
2. Spaghetti code
Спагетти-код — это антипаттерн, описывающий часть кода, которая является плохо структурированной, запутанной и трудной для понимания, содержащей много всяких переходов, каких как: оборачивание исключений, условий, циклов.
3.Magic numbers
Магическое числа — это антипаттерн, который затрагивает разнородные константы и переменные в программе без пояснения их цели, смысла. То есть, как правило нет адекватного имени или на крайний случай, комментария, поясняющего, что и зачем. Также как и спагетти код, является одним из наиболее распространённых антипаттернов.
Человек, который не является автором данного кода, с трудом может или вовсе не может объяснить, что это и как оно работает (да и сам автор со временем не сможет). В итоге при изменении этого числа или его удалении код магически перестает работать вовсе.
В чем разница между «echo» и «print»?
В PHP разница между echo и print заключается в следующем:
1.Возвращаемое значение:
echo: Не возвращает значение. Может принимать несколько аргументов, разделенных запятыми, и выводит их.
print: Всегда возвращает 1, поэтому может использоваться в выражениях.
2.Аргументы:
echo: Может принимать несколько аргументов, и их использование разделяется запятыми.
print: Принимает только один аргумент. Если вы пытаетесь передать ему более одного аргумента или использовать запятые для разделения, это вызовет ошибку.
3.Использование:
echo: Чаще используется для вывода HTML-кода и других строковых данных.
print: Часто используется для вывода единственного значения или переменной, особенно в контексте, где требуется возвращаемое значение.
Как PHP может взаимодействовать с HTML?
PHP может взаимодействовать с HTML различными способами, так как это веб-язык программирования. Основные методы включают:
✅Внедрение PHP в HTML:
В PHP можно встраивать код прямо в HTML-документы, используя специальные теги
✅Формирование HTML из PHP:
PHP может генерировать HTML динамически, в зависимости от условий, данных из базы данных и других переменных.
✅Использование PHP в файлах-шаблонах:
PHP-файлы могут использоваться в качестве шаблонов, где HTML и PHP объединены для создания динамических страниц.
✅Использование PHP-фреймворков:
PHP-фреймворки, такие как Laravel или Symfony, предоставляют инструменты и шаблонизацию для более эффективной работы с HTML.
Что такое идемпотентность?
Идемпотентность — это свойство операции, которое означает, что повторное ее выполнение не приводит к изменению состояния системы после первого выполнения. В контексте веб-разработки и использования HTTP методов, идемпотентность означает, что повторный запрос с одним и тем же набором параметров не изменит состояние сервера.
Это важное понятие для разработчиков, потому что идемпотентные операции обеспечивают безопасность и надежность системы, позволяя повторять запросы в случае, если они не достигли сервера или были обработаны, но клиент не получил ответа.
Вот несколько примеров идемпотентных операций:
1. Чтение данных: Операция получения данных из базы данных с помощью SELECT является идемпотентной, потому что повторное выполнение запроса не изменит состояние базы данных.
2. Удаление записи: Операция DELETE является идемпотентной, поскольку повторное выполнение запроса на удаление записи не приведет к ошибке и не изменит состояние базы данных, так как запись уже удалена.
3. Обновление записи: Если обновление записи происходит на основе идентификатора записи и одинаковые значения обновляются несколько раз, то запрос UPDATE будет идемпотентным.
В чем разница между WHERE и HAVING?
WHERE и HAVING являются двумя различными операторами условий в языке SQL, которые используются для фильтрации данных.
Оператор WHERE используется в выражении SELECT для фильтрации строк до их группировки и агрегации. Он определяет условия, которым должны соответствовать отдельные записи перед тем, как они будут включены в результирующий набор данных.
В примере оператор WHERE фильтрует строки таблицы employees и выбирает только те строки, где значение столбца 'department' равно 'Sales'.
Оператор HAVING используется после операции GROUP BY в выражении SELECT для фильтрации результатов группировки и агрегации. Он определяет условия, которым должны соответствовать группы записей, чтобы они были включены в результирующий набор данных после группировки.
В примере оператор HAVING фильтрует результаты группировки таблицы employees и выбирает только те группы записей, где количество сотрудников больше 5.
Таким образом, основная разница между WHERE и HAVING заключается в том, что WHERE фильтрует строки до группировки и агрегации, а HAVING фильтрует результаты после группировки и агрегации.
Как в PHP очистить память?
В PHP память очищается автоматически после окончания выполнения скрипта. Однако, есть несколько способов управлять памятью для оптимизации работы скрипта:
1. Очистка переменных: Удалив все ссылки на объект или массив, PHP автоматически освободит память, занимаемую ими. Использование функции `unset()` позволяет явно удалить переменную или ее элементы.
2. Освобождение памяти после работы с большими массивами: Для этого можно использовать функцию `unset()` или присвоить переменной пустое значение (`$var = null`), чтобы удалить ссылку на массив и освободить память.
3. Использование `unset()` после работы с объектами: Аналогично предыдущему пункту, нужно удалить ссылку на объект, чтобы очистить память. Если объект был инициализирован с помощью конструктора, то вызов `unset()` может привести к вызову деструктора объекта.
4. Использование `gc_collect_cycles()`: Функция `gc_collect_cycles()` используется для принудительного вызова сборщика мусора, который освобождает память, занимаемую неиспользуемыми объектами и циклами ссылок.
5. Управление памятью экстенсионных функций: Если используются расширения PHP, следует обратить внимание на их документацию, так как некоторые расширения могут предоставлять специальные функции для управления памятью.
Но в целом, в PHP не требуется явно очищать память, так как это автоматически выполняется сборщиком мусора. Однако, правила управления памятью в PHP важно понимать, чтобы написанный код был максимально эффективным и не вызывал утечек памяти.
Как устроен Singleton и почему его считают антипатерном?
Синглтон (Singleton) — это порождающий паттерн проектирования, который обеспечивает, что у класса есть только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру.
Теперь рассмотрим, почему Синглтон часто считают антипаттерном:
1️⃣Глобальное состояние: Использование глобального объекта (в данном случае, единственного экземпляра класса) может привести к созданию глобального состояния, что затрудняет тестирование и усложняет понимание потока управления программы.
2️⃣Сложность в тестировании: Синглтоны могут вызывать проблемы при тестировании, так как они создают глобальные зависимости, которые не всегда легко подменить для модульного тестирования.
3️⃣Проблемы с наследованием: Наследование от Синглтона может стать проблемой, так как он имеет статическую точку доступа, которая не всегда вписывается в иерархию наследования.
4️⃣Сложность в масштабировании: Использование Синглтона может затруднить масштабирование системы, так как он создает глобальную точку зависимости, которая может стать узким местом.
5️⃣Проблемы с потокобезопасностью: Реализации Синглтона, как правило, не потокобезопасны по умолчанию, что может привести к проблемам в многопоточных приложениях.
Что означает сложность алгоритма?
Сложность алгоритма представляет собой меру его эффективности и определяет количество ресурсов, таких как время и память, необходимых для его выполнения.
Существуют два основных типа сложности алгоритма: временная сложность и пространственная сложность.
Временная сложность алгоритма оценивает время, необходимое для его выполнения, в зависимости от размера входных данных. Обычно время выполнения алгоритма измеряется в тактах процессора или в секундах. Примеры временной сложности включают константную сложность O(1) (выполнение за постоянное время), линейную сложность O(n) (выполнение занимает время, пропорциональное размеру входных данных) и квадратичную сложность O(n^2) (выполнение занимает время, пропорциональное квадрату размера входных данных).
Пространственная сложность алгоритма оценивает объем памяти, необходимый для его выполнения, в зависимости от размера входных данных. Обычно пространственная сложность измеряется в байтах. Примеры пространственной сложности включают константную сложность O(1) (не зависит от размера входных данных), линейную сложность O(n) (потребляет память, пропорционально размеру входных данных) и квадратичную сложность O(n^2) (потребляет память, пропорционально квадрату размера входных данных).
Коротко расскажите об истории PHP. Что появлялось в каждой версии?
PHP 1.0 (1995): Ранняя версия PHP, созданная Расмусом Лердорфом. Она представляла собой набор скриптов для отслеживания посещений его онлайн-резюме.
PHP 2.0 (1996): Внедрение синтаксиса, похожего на Perl, и добавление поддержки для работы с базами данных.
PHP 3.0 (1998): Полная переработка языка. Добавление поддержки объектно-ориентированного программирования (ООП) и формальное определение языка.
PHP 4.0 (2000): Значительные улучшения производительности и добавление новых возможностей, таких как суперглобальные массивы ($_GET, $_POST) и поддержка для расширений.
PHP 5.0 (2004): Основной момент — введение поддержки ООП с использованием классов и объектов. Добавление механизма обработки ошибок Exception.
PHP 5.3 (2009): Введение пространств имен, замыкания (closures) и поддержка late static binding.
PHP 5.4 (2012): Включение трейтов (traits), короткого синтаксиса для массивов, и улучшения в производительности.
PHP 5.6 (2014): Поддержка переменных переменных, использование оператора ** в качестве оператора возврата.
PHP 7.0 (2015): Значительное увеличение производительности, введение строгой типизации (scalar type declarations и return type declarations), оператора косвенной ссылки (null coalescing operator), и другие улучшения.
PHP 7.4 (2019): Добавление выражений соединения (arrow functions), поддержка spread-оператора для массивов, а также улучшения в синтаксисе и производительности.
PHP 8.0 (2020): Множество новых возможностей, таких как JIT-компиляция для улучшения производительности, добавление строгой типизации для свойств классов, сопоставление шаблонов (match expression), и другие синтаксические улучшения.
Что такое простая фабрика?
Простая фабрика (Simple Factory) — это порождающий шаблон проектирования, который предоставляет интерфейс для создания объектов в зависимости от переданного типа или параметра. В контексте PHP, простая фабрика может быть использована для создания экземпляров классов без явного указания конкретного класса в коде.
Простая фабрика обычно содержит метод, который принимает параметр (например, строку или число), определяющий тип создаваемого объекта, и затем возвращает экземпляр соответствующего класса. Это упрощает процесс создания объектов и позволяет легко изменять создаваемый тип объекта без изменения кода, где объект используется.
Какие есть типы JOIN и в чем различия?
INNER JOIN:
INNER JOIN возвращает строки, у которых есть соответствующие значения в обеих таблицах.
LEFT JOIN (или LEFT OUTER JOIN):
LEFT JOIN возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если нет соответствия, возвращается NULL.
RIGHT JOIN (или RIGHT OUTER JOIN):
RIGHT JOIN возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если нет соответствия, возвращается NULL.
FULL JOIN (или FULL OUTER JOIN):
FULL JOIN возвращает все строки, если есть совпадение в левой или правой таблице. В случае отсутствия соответствия возвращаются NULL.
CROSS JOIN:
CROSS JOIN возвращает декартово произведение двух таблиц, то есть каждая строка из левой таблицы комбинируется со всеми строками из правой таблицы.
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
