Библиотека собеса по PHP | вопросы с собеседований
3.38K subscribers
140 photos
2 videos
68 links
Вопросы с собеседований по PHP и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/9f3affba

Работать у нас: https://job.proglib.io/

Наши каналы: https://yangx.top/proglibrary/9197
加入频道
С помощью какой технологии написаны файлы конфигурации маршрутизации Symfony?

Конфигурация маршрутизации определяет действие, которое должно выполняться для каждого входящего URL.

Файлы конфигурации маршрутизации в Symfony написаны с использованием технологий YAML, XML и PHP. app/config/routing.yml — это файл конфигурации маршрутизации по умолчанию в Symfony.

В PHP 8 для настройки маршрутов используйте родные атрибуты, а в PHP 7 вместо них используйте аннотации, предоставляемые библиотекой Doctrine Annotations.
Чем характеризуется эффективность кэширования?

Эффективность кэширования в PHP, как и в других языках программирования, характеризуется рядом параметров и аспектов, которые определяют, насколько хорошо кэширование улучшает производительность и уменьшает нагрузку на сервер. Основные из них включают:

Скорость доступа:

Время извлечения данных из кэша. Чем быстрее кэш-система может вернуть данные, тем эффективнее она работает. Например, чтение данных из оперативной памяти (RAM) быстрее, чем чтение с диска.

Время записи данных в кэш. Быстрая запись также важна, чтобы не создавать дополнительные задержки.

Процент попаданий (cache hit ratio):

Cache Hit Rate: Процент запросов, которые нашли данные в кэше, по сравнению с общим количеством запросов. Высокий процент попаданий означает, что кэширование работает эффективно, поскольку большинство запросов обрабатываются быстро.
Cache Miss Rate: Процент запросов, которые не нашли данные в кэше, и система была вынуждена обращаться к первоисточнику данных (например, к базе данных).

Экономия ресурсов:

Уменьшение нагрузки на базу данных. Чем меньше запросов к базе данных, тем меньше ее загрузка и тем быстрее она может обслуживать другие запросы.
Уменьшение потребления CPU. Кэширование уменьшает количество операций, требующих интенсивных вычислений.

Объем кэша (cache size):

Достаточное количество памяти для хранения часто запрашиваемых данных. Недостаток места может привести к удалению старых данных, что снижает вероятность попаданий.
Оптимальное управление памятью: баланс между количеством кэшированных данных и использованием системных ресурсов.

Сложность управления кэшем:

Легкость внедрения и использования кэширования в приложении.
Простота настройки и конфигурирования параметров кэша.
Наличие механизмов для автоматического обновления и очистки кэша.

Согласованность данных (cache consistency):

Актуальность данных в кэше по сравнению с первоисточником. Механизмы инвалидации кэша (устаревания данных) должны быть настроены правильно, чтобы предотвратить использование устаревшей информации.
Обеспечение согласованности данных при изменении исходных данных.

Обработка ошибок и отказоустойчивость:

Как кэш-система обрабатывает ошибки и сбои.
Наличие резервных механизмов на случай недоступности кэша.
Сравнение значений переменных в РНР и подводные камни? Приведение типов. Что изменилось в PHP 8 в этом контексте?

В PHP, сравнение значений переменных может быть подвержено некоторым особенностям из-за приведения типов. Вот несколько важных вещей, которые следует учитывать при сравнении значений переменных в PHP:

1️⃣Неявное приведение типов: PHP может неявно приводить значения переменных к определенному типу при выполнении операций. Например, при сравнении числа и строки, PHP попытается привести строку к числу.

2️⃣Типизация сравнения: Оператор == выполняет нестрогое сравнение значений с приведением типов, в то время как оператор === выполняет строгое сравнение без приведения типов. Строгое сравнение учитывает и тип данных и значение.

3️⃣Знаки сравнения: При использовании операторов сравнения (<, <=, >, >=), PHP также может производить неявное приведение типов.

Изменения в PHP 8:

В PHP 8 был добавлен новый оператор match, который выполняет строгое сравнение без приведения типов. Это позволяет писать более четкий и предсказуемый код.
В чем разница между match и switch?

1. Тип сравнения


switch: использует нестрогое сравнение (==), что может привести к неожиданным результатам из-за приведения типов

match: использует строгое сравнение (===), учитывая как значение, так и тип

2. Возвращение значения

switch: не возвращает значение; используется для выполнения кода в блоках case.​

match: возвращает значение, что позволяет присваивать результат переменной или использовать его в выражениях.

3. Обязательность обработки всех случаев

switch: если ни один case не совпадает, и default не указан, код после switch продолжается без ошибок.​

match: если ни одно условие не совпадает и default не указан, выбрасывается исключение UnhandledMatchError.​

4. Синтаксис и лаконичность

switch: требует использования break для предотвращения «проваливания» в следующий case.​

match: автоматически прекращает выполнение после первого совпадения; break не требуется.

Когда использовать match?

🔹 Когда необходимо строгое сравнение значений и типов.​

🔹 Когда требуется вернуть значение на основе условий.​

🔹 Для более лаконичного и читаемого кода.​

⚠️ Когда предпочтительнее использовать switch?

🔸 В версиях PHP до 8.0, где match недоступен.​

🔸 Когда требуется нестрогое сравнение или поддержка «проваливания» между case.​