Библиотека собеса по PHP | вопросы с собеседований
Open in Telegram
Вопросы с собеседований по PHP и ответы на них. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/9f3affba Для обратной связи: @proglibrary_feeedback_bot
Show more3 150
Subscribers
No data24 hours
-37 days
-430 days
Posts Archive
Что такое функции soundex() и metaphone() в PHP?
Функция soundex():
Функция soundex() вычисляет звуковой индекс строки.
Soundex — это фонетический алгоритм, который назначает код слову на основе его произношения.
Он применяется преимущественно для поиска слов, которые звучат похоже, но могут быть написаны по-разному.
Функция сокращает слова до четырехсимвольного кода, который представляет его звучание.
Это полезно для задач, таких как поиск имен, которые звучат похоже, но имеют разные написания.
Функция metaphone():
Функция metaphone() вычисляет метафонический ключ строки.
Metaphone — это еще один фонетический алгоритм, но он более продвинут, чем Soundex.
Он преобразует слово в фонетический ключ, состоящий из одной или нескольких букв.
В отличие от Soundex, Metaphone учитывает вариации произношения и более эффективен для английских слов.
Напишите на PHP пример реализации паттерна Singleton.
Что такое TDD?
TDD (Test-Driven Development) — это методология разработки программного обеспечения, в которой разработка программы начинается с написания тестов, которые определяют желаемое поведение программы. Затем код разрабатывается и изменяется таким образом, чтобы эти тесты проходили успешно.
Процесс TDD обычно состоит из трех шагов, известных как «Красный», «Зеленый» и «Рефакторинг»:
Красный (Red): Сначала пишутся тесты для новой функциональности или для исправления ошибок. Поскольку этот этап выполняется до написания реализации, все тесты должны завершаться неудачей (иметь статус «красный»).
Зеленый (Green): Затем пишется минимальное количество кода, необходимое для прохождения тестов. Цель — сделать все тесты прошедшими (иметь статус «зеленый»).
Рефакторинг (Refactor): После того как все тесты прошли успешно, код можно улучшить, переработав его для улучшения структуры, производительности и т. д., сохраняя при этом поведение программы неизменным. Это позволяет улучшать код без риска нарушения его функциональности.
Что такое план выполнения запроса и как его узнать?
План выполнения запроса (Query Execution Plan) — это детальный анализ того, как база данных будет выполнять запрос, включая порядок обработки данных, используемые индексы, методы соединения и другие оптимизации запроса. Понимание плана выполнения запроса может помочь оптимизировать производительность запросов, выявляя возможные проблемы и улучшая структуру запроса или индексы.
В разных системах управления базами данных (СУБД) есть различные способы получения плана выполнения запроса. Ниже приведены общие методы для некоторых из них:
MySQL / MariaDB:
Используйте ключевое слово EXPLAIN перед запросом SQL.
PostgreSQL:
Используйте ключевое слово EXPLAIN перед запросом SQL.
Для более подробного анализа используйте ключевое слово EXPLAIN ANALYZE.
SQL Server:
Используйте ключевое слово EXPLAIN перед запросом SQL.
Для более подробного анализа используйте команду SET SHOWPLAN_TEXT ON;, а затем выполните запрос.
SQLite:
Используйте ключевое слово EXPLAIN QUERY PLAN перед запросом SQL.
Oracle:
Используйте инструкцию EXPLAIN PLAN FOR.
Полученный план выполнения запроса может быть сложным для понимания, но он предоставляет ценную информацию о том, как база данных обрабатывает ваш запрос, что может помочь в оптимизации его производительности.
Какова разница между функциями session_unregister() и session_unset()?
В PHP функции session_unregister() и session_unset() использовались для работы с переменными сессии. Однако начиная с PHP 5.3.0, функция session_unregister() была признана устаревшей, и её использование крайне не рекомендуется. Вместо неё следует использовать unset($_SESSION['имя_переменной']).
session_unregister() (Устарела):
Эта функция использовалась для удаления глобальной переменной из текущей сессии.
Была признана устаревшей в PHP 5.3.0 и удалена в PHP 5.4.0.
Основная причина устаревания связана с тем, что она зависела от устаревшей функциональности register_globals, которая считается уязвимостью безопасности.
session_unset():
Эта функция используется для освобождения всех переменных сессии.
Она не уничтожает саму сессию или сбрасывает сессионную куку; она только очищает данные сессии.
Рекомендуется использовать unset($_SESSION['имя_переменной']) для удаления определённой переменной сессии.
В современной разработке на PHP рекомендуется использовать unset($_SESSION['имя_переменной']) или $_SESSION['имя_переменной'] = null; для удаления конкретных переменных сессии и session_unset() для очистки всех переменных сессии. Использование session_unregister() следует избегать из-за её устаревания и потенциальных проблем с безопасностью, связанных с register_globals.
Для чего используется функция func_num_args()?
В PHP функция func_num_args() используется для получения количества аргументов, переданных в функцию. Она часто применяется в случае переменного числа аргументов, когда функция может принимать различное количество параметров.
В примере функция sum() принимает любое количество аргументов и вычисляет их сумму. Внутри функции func_num_args() используется для определения количества переданных аргументов, а func_get_arg($i) — для получения значения каждого аргумента по его индексу ($i). Это позволяет функции динамически обрабатывать разное количество аргументов.
Что вам известно о шаблонах, которые применяются в ORM?
В контексте Object-Relational Mapping (ORM), шаблоны (или паттерны) играют важную роль в проектировании и организации работы с базой данных. Вот несколько распространенных шаблонов, используемых в ORM:
Шаблон ActiveRecord: Этот шаблон описывает объект, который инкапсулирует как данные, так и поведение для работы с этими данными. Обычно каждая запись в базе данных представляется объектом ActiveRecord. Он обеспечивает прямое соответствие между объектами и записями в базе данных.
Шаблон Repository: Repository предоставляет абстракцию для работы с коллекциями объектов. Он предоставляет методы для поиска, сохранения, удаления и запросов к данным. Репозиторий инкапсулирует логику доступа к данным и предоставляет интерфейс для работы с этими данными.
Шаблон Identity Map: Этот шаблон обеспечивает глобальное отображение идентичности объектов в приложении. Он гарантирует, что каждый объект в приложении имеет только один экземпляр в памяти, даже если он загружен из базы данных несколько раз. Это помогает избежать проблем с непоследовательностью данных и улучшает производительность.
Шаблон Unit of Work: Этот шаблон отслеживает изменения, сделанные с объектами в рамках одной транзакции базы данных. Он обеспечивает согласованность данных и управляет коммитом или откатом изменений. Шаблон Unit of Work также может использоваться для оптимизации работы с базой данных, пакетного сохранения изменений и управления транзакциями.
Эти шаблоны предоставляют средства для упрощения работы с базой данных в объектно-ориентированных приложениях, обеспечивая гибкость, производительность и согласованность данных. Их использование позволяет разработчикам эффективно работать с данными и минимизировать повторение кода.
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие профильные каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
💼Каналы с вакансиями
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Как вы понимаете Exception flow в контексте PHP?
Exception flow в контексте PHP относится к управлению ошибками и исключениями во время выполнения программы. Когда возникает ошибка или неожиданное условие, которое не может быть обработано нормальным образом, PHP может выбросить исключение (exception).
Процесс обработки исключений в PHP следующий:
Выброс исключения (Throwing an Exception): Когда в коде происходит ошибка или неожиданное событие, программа может создать объект исключения и «бросить» его с помощью ключевого слова throw.
Перехват исключения (Catching an Exception): Для обработки исключений можно использовать блоки try-catch. Код, который может вызывать исключение, помещается в блок try, а блок catch используется для обработки возможного исключения.
Finally: Ключевое слово finally может использоваться вместе с блоками try-catch для выполнения кода в любом случае, независимо от того, возникло исключение или нет.
Какое криптографическое расширение предоставляет возможность генерации и проверки цифровых подписей?
В PHP цифровые подписи можно генерировать и проверять с помощью расширения OpenSSL, которое предоставляет функции для различных криптографических операций, включая цифровые подписи.
Git. Что такое stash и зачем он нужен?
Stash в Git — это механизм, который позволяет временно сохранить изменения в рабочей директории, чтобы потом вернуться к ним позже. Обычно он используется в следующих случаях:
Переключение веток: Когда вы работаете над одной веткой и хотите переключиться на другую, но не хотите коммитить текущие изменения.
Исправление ошибок в коде: Если вы обнаруживаете ошибку, но хотите сначала завершить текущую задачу, прежде чем работать над исправлением.
Резервное копирование: Временное сохранение изменений, чтобы вы могли вернуться к ним в случае необходимости.
Чистка рабочей директории: Если вы хотите временно убрать изменения из рабочей директории, чтобы они не мешали выполнению других задач.
Для использования stash в Git можно воспользоваться командой git stash. Эта команда сохраняет текущие изменения в стеке stash. Позже, когда вам потребуется, вы можете применить эти изменения с помощью команды git stash apply или git stash pop. git stash apply применяет изменения, не удаляя их из stash, в то время как git stash pop применяет изменения и сразу удаляет их из stash.
В чём разница между методами __sleep и __wakeup в PHP?
__sleep() и __wakeup() — это магические методы в PHP, которые используются в связке с сериализацией и десериализацией объектов. Вот их краткое описание:
__sleep():
Этот метод вызывается автоматически, когда объект готовится к сериализации (например, с помощью функции serialize()).
Он позволяет определить, какие свойства объекта должны быть сериализованы. Вы возвращаете массив с именами свойств, которые должны быть сериализованы.
Если у вас есть чувствительные данные или ресурсы, которые не должны быть сериализованы, вы можете удалить или изменить их в этом методе.
__wakeup():
Этот метод вызывается автоматически при десериализации объекта (например, с помощью функции unserialize()).
Он позволяет повторно инициализировать ресурсы или выполнять любую необходимую настройку после десериализации.
Если ваш объект требует специальной обработки после десериализации, вы можете определить это поведение в этом методе.
В заключение, __sleep() используется для контроля над тем, какие свойства сериализуются, а __wakeup() используется для выполнения действий после десериализации. Они предоставляют хуки для настройки процесса сериализации и десериализации объектов в PHP.
Что такое сериализация и десериализация?
Сериализация и десериализация — это процессы преобразования данных из их структурированного формата (например, объекты, массивы) в последовательность байтов (обычно в виде строки) и обратно. В PHP для этих целей используются функции serialize() и unserialize().
Сериализация:
Определение: Сериализация — это процесс преобразования структурированных данных (например, объектов, массивов) в строку, которую можно сохранить или передать.
Функция в PHP: serialize() — принимает переменную и возвращает её строковое представление.
Десериализация:
Определение: Десериализация — это процесс восстановления структурированных данных из их строкового представления.
Функция в PHP: unserialize() — принимает строку, созданную с помощью serialize(), и возвращает восстановленные данные.
Применение сериализации и десериализации:
Хранение данных: Сериализация может использоваться для сохранения состояния объектов или массивов в файле или в базе данных.
Передача данных: Сериализация может быть полезной при передаче данных между разными частями приложения, например, при работе с сетью или сохранении состояния сеанса.
Важно отметить, что не все данные могут быть сериализованы. Например, ресурсы (resource), некоторые типы объектов и замыкания не могут быть корректно сериализованы и десериализованы в PHP.
Что такое агрегатные функции SQL? Приведите несколько примеров.
Агрегатные функции в SQL это функции, которые применяются к набору значений и возвращают единое вычисленное значение. Они используются для выполнения вычислительных операций над группами строк данных. Некоторые из наиболее распространенных агрегатных функций в SQL включают в себя:
SUM: Вычисляет сумму значений в столбце.
AVG: Вычисляет среднее значение для значений в столбце.
COUNT: Подсчитывает количество строк в результате запроса.
MIN: Находит минимальное значение в столбце.
MAX: Находит максимальное значение в столбце.
GROUP_CONCAT: Собирает значения из столбца в единый текстовый список.
STDEV: Вычисляет стандартное отклонение значений в столбце.
VARIANCE: Вычисляет дисперсию значений в столбце.
Эти функции могут быть использованы как в простых, так и в сложных запросах для анализа данных и получения нужной информации из базы данных.
Какие есть связи и как они реализуются в Laravel?
В Laravel связи между моделями позволяют вам определять отношения между различными таблицами вашей базы данных. Это позволяет вам легко извлекать и работать с данными, связанными друг с другом. В Laravel поддерживаются различные типы связей, такие как один к одному, один ко многим, многие к одному, многие ко многим.
Вот некоторые типы связей в Laravel и как они реализуются:
Один к одному (One-to-One):
Это отношение, когда каждая запись в одной таблице связана с одной записью в другой таблице.
Реализуется с помощью метода hasOne() или belongsTo() в моделях.
Один ко многим (One-to-Many):
Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице.
В Laravel это реализуется с помощью метода hasMany() и обратного метода belongsTo().
Многие к одному (Many-to-One):
Множество записей в одной таблице связано с одной записью в другой таблице.
Это аналогично обратному отношению в One-to-Many, и реализуется с помощью метода belongsTo() в дочерней модели.
Многие ко многим (Many-to-Many):
Множество записей в одной таблице связано с множеством записей в другой таблице.
Реализуется с помощью методов belongsToMany() в обеих моделях.
Вы можете использовать эти связи для извлечения данных, создания новых записей и обновления существующих данных в вашей базе данных с помощью элегантных и чистых запросов, используя Eloquent ORM в Laravel.
Что такое $_ENV?
$_ENV — это суперглобальная переменная в PHP, которая содержит ассоциативный массив переменных окружения, переданных текущему скрипту с использованием метода окружения. Эти переменные устанавливаются веб-сервером или окружением командной строки, в котором выполняется PHP-скрипт. Например, если ваш скрипт PHP выполняется через веб-сервер, такой как Apache или Nginx, $_ENV может содержать переменные окружения, такие как детали конфигурации сервера, информацию о клиенте или другие системо-специфичные переменные.
Что такое Zend Engine?
Zend Engine — это механизм выполнения на языке C с открытым исходным кодом, который интерпретирует язык программирования PHP. Он был изначально разработан Анди Гутмансом и Зеевом Сураcки, когда они были студентами Технического университета Израиля.
Zend Engine служит ядром среды выполнения PHP, обеспечивая основные функции для разбора, компиляции и выполнения PHP-скриптов. Он также включает в себя функциональность по управлению памятью, сборке мусора и поддержке расширений, делая его универсальной платформой для запуска приложений на PHP.
Одним из важных вкладов Zend Engine в эволюцию PHP стало внедрение Zend Extension API (ZE), позволяющего разработчикам создавать собственные расширения на C или C++, чтобы расширить функциональность PHP. Эти расширения могут использоваться для интеграции PHP с внешними библиотеками, добавления новых возможностей или оптимизации производительности.
Что делает функция «unlink»?
В PHP функция unlink() используется для удаления файла из файловой системы. Она принимает единственный параметр — путь к файлу, который вы хотите удалить. После вызова unlink() попытается удалить указанный файл из файловой системы. В случае успешного выполнения файл будет удален безвозвратно.
Код из примера проверяет, существует ли файл, и если да, то пытается удалить его с помощью unlink(). В случае успешного удаления выводится «Файл успешно удален.»; в противном случае выводится «Ошибка при удалении файла.». Если файл не существует, выводится «Файл не существует.».
Расскажите о шаблонах GRASP.
Шаблоны GRASP (General Responsibility Assignment Software Patterns) — это набор принципов проектирования объектно-ориентированного кода, которые помогают определить, какие классы или объекты будут выполнять конкретные задачи и ответственности. Они помогают улучшить структуру кода, делая его более гибким, читаемым и поддерживаемым.
Ниже представлены основные шаблоны GRASP:
1. Expert (Эксперт) — данный шаблон назначает ответственность объекту, который обладает наиболее полной информацией для выполнения определенной задачи. Таким образом, эксперт в данном контексте является наиболее квалифицированным объектом для выполнения определенной операции.
2. Creator (Создатель) — данный шаблон определяет, что объект должен быть ответственным за создание других объектов. То есть, если объект А тесно связан с объектом В и может быть считаться его создателем инициализации, то объект А должен брать на себя ответственность за создание объекта В.
3. Controller (Контроллер) — данный шаблон назначает объекту ответственность контроля за интерфейсом пользователя и управления потоком данных. Контроллер обрабатывает пользовательский ввод и инициирует действия в системе.
4. Low Coupling (Низкая связанность) — данный шаблон подразумевает, что объект должен иметь наименьшую возможную зависимость от других объектов. Это достигается путем использования абстракций и интерфейсов, чтобы объекты могли взаимодействовать, не зная подробности друг о друге.
5. High Cohesion (Высокая связность) — данный шаблон подразумевает, что каждый класс должен представлять собой логическую единицу функциональности. Класс должен иметь одну ответственность и хорошо определенный смысл.
6. Indirection (Индиректирование) — данный шаблон назначает объекту посредническую роль для связи между другими объектами. То есть, объект А не обращается напрямую к объекту В, а связь между ними возникает через объект-посредник.
7. Polymorphism (Полиморфизм) — данный шаблон направлен на использование полиморфизма в объектно-ориентированном программировании. Полиморфизм позволяет работать с разными типами объектов через один и тот же интерфейс, что делает систему более гибкой и расширяемой.
Что позволяет вам сделать оператор «goto»?
В PHP оператор goto работает аналогично тому, как он работает в других языках программирования. Он позволяет вам перейти к другому участку вашего PHP-кода на основе определенной метки.
В примере программа перейдет к метке a и выполнит код, пропуская строку с выводом «Этот код не будет выполнен».
Available now! Telegram Research 2025 — the year's key insights 
