Библиотека собеса по PHP | вопросы с собеседований
3.15K subscribers
187 photos
6 videos
123 links
Вопросы с собеседований по PHP и ответы на них.

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

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

Для обратной связи: @proglibrary_feeedback_bot
Download Telegram
Что такое микросервисная архитектура?

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

При использовании микросервисной архитектуры, каждый сервис может быть написан на разных языках программирования, иметь свою собственную базу данных и даже развертываться на отдельных серверах. Это позволяет достичь высокой гибкости, масштабируемости и возможности независимого развертывания и сопровождения каждого сервиса.

Преимущества микросервисной архитектуры включают легкость поддержки и развертывания, возможность параллельной разработки и обновления, улучшенную масштабируемость и реактивность системы, а также лучшую изоляцию и отказоустойчивость приложения.
Какие основные отличия PHP-FPM от модульного PHP в Apache?

Основные отличия PHP-FPM и модульного PHP в Apache (mod_php):

1. Способ работы и исполнения кода

PHP-FPM (FastCGI Process Manager)

🔸Запускается как отдельный процесс и обрабатывает запросы через протокол FastCGI.
🔸Веб-сервер (Apache, Nginx, Caddy и др.) передает запросы PHP-FPM через сокет или TCP.
🔸PHP-код выполняется в отдельных процессах, не зависящих от веб-сервера.

mod_php (Apache Module)

🔸PHP встраивается в сам Apache в виде модуля.
🔸Код выполняется внутри самого веб-сервера без необходимости передавать запросы во внешний процесс.
🔸Работает только с Apache, не совместим с Nginx.

2. Производительность и ресурсы

PHP-FPM:
Лучше масштабируется, так как поддерживает динамическое управление процессами.
Можно настроить пулы воркеров с разными конфигурациями (например, разное количество процессов для разных сайтов).
Меньше потребляет память, так как процессы PHP разделены от веб-сервера.
Небольшой оверхед на передачу запросов между веб-сервером и PHP-FPM.

mod_php:
Обрабатывает PHP быстрее внутри Apache, без передачи данных во внешний процесс.
Простая настройка, так как PHP уже встроен в сервер.
Занимает больше оперативной памяти, так как каждый Apache-процесс содержит PHP-интерпретатор.
Плохо масштабируется: каждый запрос создает новый процесс Apache, что быстро потребляет ресурсы.

3. Гибкость и настройки

PHP-FPM:

🔹Позволяет задать разные настройки PHP для разных виртуальных хостов (пулы процессов).
🔹Можно легко использовать разные версии PHP на одном сервере.
🔹Гибкие настройки управления процессами (pm.dynamic, pm.max_children и т. д.).

mod_php:

🔹Одна конфигурация PHP для всего сервера.
🔹Нет гибкого управления процессами (сколько процессов запущено — контролирует Apache).

4. Безопасность

PHP-FPM:

Запускает процессы от разных пользователей (разграничение прав между сайтами).
Уменьшает риск исполнения чужого кода на общем сервере.

mod_php:

Все PHP-скрипты работают от имени одного пользователя (обычно www-data или apache).
В многосайтовой среде сайты могут получить доступ друг к другу.

5. Поддержка серверов
PHP-FPM: Работает с Apache, Nginx, Caddy и другими серверами.
mod_php: Работает только с Apache.

📌 Вывод: что выбрать?
Если нужен Nginx, масштабируемость, безопасность и гибкость → PHP-FPM.
Если нужен простой и быстрый запуск PHP на Apache, без сложных настроек → mod_php (но для продакшена редко используется).
PHP-FPM — более современное и предпочтительное решение для большинства проектов. 🚀
Что такое область запросов(query scope) в Laravel и как она используется?

Область запросов в Laravel — это способ инкапсуляции многократно используемой логики запросов в модели. Определяя области запросов, мы можем сделать наши модели более выразительными и удобными в работе. Области запросов — это, по сути, готовые запросы, которые можно применить в конструкторе запросов модели.

Чтобы определить область запросов в Laravel, мы создаем публичный метод в модели, который возвращает экземпляр конструктора запросов. Затем мы можем использовать эту область в запросе, вызвав метод на модели.