PHP | Вопросы собесов
2.31K subscribers
33 photos
1 video
1.52K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 В чем заключается Enterprise Service Bus?

Enterprise Service Bus (ESB) – это промежуточное программное обеспечение (middleware), которое объединяет разные системы и управляет их взаимодействием.

🚩Зачем нужен ESB? (Проблема без него)

Допустим, у нас есть 4 системы:
CRM (Клиенты)
ERP (Бухгалтерия)
Склад
Интернет-магазин

Без ESB каждая система должна напрямую связываться со всеми остальными
CRM ↔️ ERP
CRM ↔️ Склад
CRM ↔️ Интернет-магазин
ERP ↔️ Склад
ERP ↔️ Интернет-магазин
Склад ↔️ Интернет-магазин


🚩Как ESB решает проблему?

ESB действует как единый центр интеграции
CRM → ESB → ERP
Склад → ESB → Интернет-магазин
ERP → ESB → CRM


🚩Как работает ESB? (Принцип)
ESB использует 4 ключевых компонента

Маршрутизация (Routing) – определяет, куда отправлять данные.
Трансформация данных (Transformation) – конвертирует данные (например, из XML в JSON).
Безопасность (Security) – контролирует доступ.
Очереди сообщений (Message Queue) – управляет очередями и асинхронными задачами.

CRM отправляет заказ в формате JSON → ESB принимает его.
ESB конвертирует JSON в XML, понятный ERP.
ESB отправляет данные в ERP и склад.
Если склад временно недоступен, ESB ставит запрос в очередь и отправляет позже.

🚩Где используется ESB?

Крупные компании с множеством сервисов (банки, ритейл, логистика).
Интеграция старых и новых систем (например, SAP + микросервисы).
Высоконагруженные системы, где важна отказоустойчивость.

Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 В каких местах нельзя использовать Laravel как фреймворк?

1. Реалтайм-приложения: Laravel не идеален для высоконагруженных приложений с минимальной задержкой, например, игр.
2. Микросервисы: Laravel может быть избыточен из-за большого количества встроенных компонентов.
3. Проекты с крайне низким бюджетом: из-за сложности поддержки на минимальных конфигурациях серверов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔3
🤔 Что такое чистая архитектура?

Это принцип построения ПО, который отделяет бизнес-логику от деталей реализации.
Ключевые принципы:
- Разделение слоев – отделение логики от UI и базы данных.
- Независимость от фреймворков – можно менять базу данных или API без переписывания логики.
- Устойчивость к изменениям – легче поддерживать и тестировать код.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое анонимные функции?

Анонимные функции, также известные как замыкания, в PHP и других языках позволяют создавать функции без определенного имени. Эти функции можно использовать как значения переменных и передавать как аргументы другим функциям.?

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Чем полезно пространство имен?

Оно помогает организовывать код, делает его более читаемым и управляемым. Также снижает вероятность конфликта имен при работе с библиотеками или крупными проектами.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое SSH-протокол?

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

🚩Основные характеристики и возможности

🟠Безопасность
SSH использует криптографические методы для шифрования данных, что защищает передаваемую информацию от перехвата и анализа.
Протокол поддерживает различные методы аутентификации, включая использование паролей и публичных/приватных ключей.

🟠Аутентификация
Парольная аутентификация: Пользователь вводит свой логин и пароль для доступа к удаленной системе.
Аутентификация с помощью ключей: Вместо пароля используется пара ключей (публичный и приватный). Публичный ключ размещается на удаленном сервере, а приватный ключ остается на клиентской машине.

🟠Шифрование данных
Шифрует все передаваемые данные, включая пароли, команды и файлы, что предотвращает их перехват и несанкционированный доступ.

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

🟠Туннелирование
Позволяет создавать зашифрованные туннели для передачи данных других протоколов (например, HTTP, FTP), обеспечивая их безопасность.

🚩Основные компоненты

🟠SSH-клиент
Установленное на локальном компьютере, которое используется для установления соединения с удаленным сервером.
🟠SSH-сервер
Работающее на удаленной машине, которое принимает и обрабатывает соединения от SSH-клиентов.

🚩Пример

🟠Установка соединения с удаленным сервером:
Для подключения к удаленному серверу используется команда ssh в терминале.
ssh username@remote_host   


🟠Копирование файлов через SSH
Для копирования файлов с локального компьютера на удаленный сервер или наоборот используется команда scp.
scp localfile.txt username@remote_host:/remote/directory/   


Копирование файлов с удаленного сервера на локальный компьютер
scp username@remote_host:/remote/file.txt /local/directory/   


🟠Использование ключей для аутентификации
Генерация пары ключей (публичного и приватного)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"   


Копирование публичного ключа на удаленный сервер
ssh-copy-id username@remote_host


Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое миграции?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что будет если мы цифру 3 int сложим плюсом со строкой 4 что будет?

Если в PHP выполнить операцию сложения (+) числа 3 (int) и строки "4" (string), то PHP автоматически приведёт строку "4" к числу, и произойдёт арифметическая операция:
$result = 3 + "4";
echo $result; // 7


🚩Как это работает?

PHP видит, что используется оператор +, который применяется только к числам.
"4" — это строка, но она содержит только число, поэтому PHP автоматически преобразует её в int.
Затем выполняется операция 3 + 4, и результатом будет 7.

🚩Что если строка не является числом?

Если строка не является корректным числом, PHP попробует взять из неё число с начала строки. Если в начале строки нет цифр, то строка будет воспринята как 0.

Примеры странных случаев
echo 3 + "4abc";  // 7   (строка "4abc" преобразуется в число 4)
echo 3 + "abc4"; // 3 (строка "abc4" преобразуется в 0, т.к. начинается не с цифры)
echo 3 + "0.5"; // 3.5 (строка "0.5" преобразуется в число 0.5)
echo 3 + " "; // 3 (пробелы преобразуются в 0)


🚩Что если использовать `.` вместо `+`?

Если вместо + использовать . (конкатенацию строк), то числа не складываются, а просто соединяются как строки
echo 3 . "4"; // "34" (строка)


Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое полиморфизм

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое Rest

REST (Representational State Transfer) — это архитектурный стиль для разработки веб-сервисов. Он основывается на стандартах HTTP и включает использование простых методов (GET, POST, PUT, DELETE) для взаимодействия с ресурсами, представленных в виде URL. RESTful API являются безсессионными, и каждый запрос от клиента к серверу должен содержать всю необходимую информацию для выполнения операции.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие типы БД бывают?

Базы данных делятся на реляционные (SQL) и нереляционные (NoSQL). Реляционные базы данных (например, MySQL, PostgreSQL) хранят данные в виде таблиц и используют SQL для запросов. Нереляционные базы данных (например, MongoDB) используют разные модели данных (документы, ключ-значение и т.д.), что делает их более гибкими для работы с большими объёмами данных и неструктурированной информацией.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что реализует класс Datetime?

Класс DateTime в PHP предоставляет удобные инструменты для работы с датами и временем. Он заменяет устаревшие функции date(), strtotime() и делает код более читаемым и гибким.

🚩Что умеет `DateTime`?

Создавать даты и время.
Изменять, прибавлять, вычитать дни, месяцы, годы.
Преобразовывать дату в строку (format()).
Работать с часовыми поясами (DateTimeZone).
Сравнивать даты (diff()).
Преобразовывать в Unix Timestamp (getTimestamp()).

🚩Примеры использования `DateTime`

1⃣Создание объекта DateTime
$date = new DateTime(); // Текущая дата и время
echo $date->format('Y-m-d H:i:s'); // 2025-02-24 15:30:00


2⃣Создание DateTime с конкретной датой
$date = new DateTime('2023-12-31 23:59:59');
echo $date->format('d.m.Y H:i'); // 31.12.2023 23:59


3⃣Прибавить / Вычесть дни, месяцы, годы (modify())
$date = new DateTime('2024-01-01');
$date->modify('+1 month'); // Добавить 1 месяц
echo $date->format('Y-m-d'); // 2024-02-01

$date->modify('-10 days'); // Вычесть 10 дней
echo $date->format('Y-m-d'); // 2024-01-22


4⃣Разница между датами (diff())
$date1 = new DateTime('2024-01-01');
$date2 = new DateTime('2025-01-01');

$diff = $date1->diff($date2);
echo $diff->days; // 366 (разница в днях)
echo $diff->y; // 1 (разница в годах)


5⃣Работа с часовыми поясами (DateTimeZone)
$date = new DateTime('now', new DateTimeZone('America/New_York'));
echo $date->format('Y-m-d H:i:s'); // Время в Нью-Йорке


6⃣Преобразование DateTime в Timestamp (getTimestamp())
$date = new DateTime('2024-01-01');
echo $date->getTimestamp(); // 1704067200 (Unix-время)


7⃣Создание DateTime из Timestamp (setTimestamp())
$date = new DateTime();
$date->setTimestamp(1704067200);
echo $date->format('Y-m-d H:i:s'); // 2024-01-01 00:00:00


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие типизации существуют?

1. Динамическая типизация: PHP автоматически определяет тип переменной на основе её значения.
2. Явная типизация: начиная с PHP 7, можно указывать типы аргументов и возвращаемых значений функций (int, string, array и т.д.).
3. Слабая типизация: PHP преобразует типы данных автоматически при необходимости.
4. Строгая типизация: включает строгую проверку типов через директиву declare.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое репликация?

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

🚩Зачем нужна репликация

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

🟠Улучшение производительности
Репликация позволяет распределить нагрузку на несколько серверов, что улучшает время отклика системы при больших объемах запросов.

🟠Резервное копирование и восстановление данных
Репликация обеспечивает наличие резервных копий данных, которые можно использовать для восстановления системы после сбоя.

🟠Географическое распределение данных
Репликация позволяет хранить данные ближе к пользователям, что снижает задержку при доступе к данным.

🚩Виды репликации

🟠Синхронная репликация
Данные одновременно записываются на основной и реплицированный серверы. Высокая консистентность данных. Замедление операций записи, так как они должны быть подтверждены на всех репликах.

🟠Асинхронная репликация
Данные сначала записываются на основной сервер, а затем копируются на реплицированный сервер с задержкой. Быстрые операции записи на основной сервер. Возможность временной неконсистентности данных между серверами.

🟠Полная репликация
Все данные копируются на все реплицированные серверы. Простота реализации и высокая доступность данных. Высокие затраты на хранение и передачу данных.

🟠Частичная репликация
Только часть данных копируется на реплицированные серверы. Экономия ресурсов хранения и передачи данных. Более сложное управление данными.

🚩Пример использования

MySQL поддерживает репликацию, что позволяет автоматически копировать данные с одного сервера (мастера) на один или несколько других серверов (слейвов).

1⃣Настройка мастера
-- Включаем бинарные логи на мастере
[mysqld]
log-bin=mysql-bin
server-id=1


2⃣Создание пользователя для репликации на мастере
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';


3⃣Настройка слейва
-- Настройки слейва
[mysqld]
server-id=2


4⃣Запуск репликации на слейве
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='replica_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 107;
START SLAVE;


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Как реализуется полиморфизм ?

1. Полиморфизм реализуется через наследование, интерфейсы и абстрактные классы.
2. Родительский класс или интерфейс может быть заменён его наследником, сохраняя единообразие вызовов.
3. Пример: использование одного метода render() для вывода разного контента в зависимости от конкретного класса.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что делают self и static?

В PHP self и static используются внутри классов для обращения к их свойствам и методам, но работают по-разному. Давайте разберёмся в их назначении и отличиях.

🚩self

Используется для обращения к собственным методам и свойствам класса. Оно не учитывает наследование и всегда ссылается на тот класс, в котором написано.
class A {
public static function who() {
echo "Я класс A\n";
}

public static function call() {
self::who(); // Вызываем метод who() внутри того же класса
}
}

class B extends A {
public static function who() {
echo "Я класс B\n";
}
}

B::call(); // Выведет: "Я класс A", а не "Я класс B"


🚩static

Работает динамически, учитывает класс, из которого вызван метод. Это полезно в наследовании.
class A {
public static function who() {
echo "Я класс A\n";
}

public static function call() {
static::who(); // Используем static вместо self
}
}

class B extends A {
public static function who() {
echo "Я класс B\n";
}
}

B::call(); // Выведет: "Я класс B"


Ставь 👍 и забирай 📚 Базу знаний
👍3🔥1
🤔 Какая разница между self и this?

self в PHP используется для обращения к текущему классу, включая статические методы и свойства, тогда как this ссылается на конкретный экземпляр класса. self подходит для работы с общими (статическими) членами класса, а this — для доступа к данным объекта. self не может использоваться для динамических данных объекта, в отличие от this.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое внешний ключ?

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

🚩Зачем нужен внешний ключ?

🟠Обеспечение целостности данных:
Внешние ключи помогают гарантировать, что значения в столбце внешнего ключа всегда соответствуют значениям в первичном ключе другой таблицы. Это предотвращает создание "висячих" ссылок, когда запись в одной таблице ссылается на несуществующую запись в другой таблице.

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

🚩Как используется внешний ключ?

Внешний ключ создаётся при помощи SQL-запросов. Рассмотрим пример двух таблиц: orders (заказы) и customers (клиенты). Каждому заказу в таблице orders соответствует клиент в таблице customers.
-- Создание таблицы клиентов
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100)
);

-- Создание таблицы заказов с внешним ключом
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);


customer_id в таблице orders является внешним ключом, который ссылается на customer_id в таблице customers. Это гарантирует, что каждое значение customer_id в таблице orders соответствует существующему customer_id в таблице customers.

🚩Каскадные действия

Существует возможность настроить каскадные действия для внешних ключей. Например:
-- Создание таблицы заказов с каскадным удалением
CREATE TABLE orders (
order_id INT PRIMARY KEY,
order_date DATE,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
ON DELETE CASCADE
);


Ставь 👍 и забирай 📚 Базу знаний
🤔 Для чего нужно пространство имен?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Какие уровни ошибок есть в PHP?

В PHP существуют различные уровни ошибок, которые помогают разработчикам выявлять и исправлять проблемы в коде. Эти уровни ошибок задаются с помощью констант и управляются функцией error_reporting(). Рассмотрим основные уровни ошибок:

🚩Основные уровни ошибок в PHP

🟠E_ERROR (фатальная ошибка, код: 1)
Критическая ошибка, которая приводит к завершению работы скрипта.
Например, вызов несуществующей функции
someUndefinedFunction(); // Вызовет E_ERROR


🟠E_WARNING (предупреждение, код: 2)
Не фатальная ошибка, скрипт продолжит выполнение.
Например, деление на ноль или использование include() для несуществующего файла:
echo 10 / 0; // Вызовет E_WARNING


🟠E_PARSE (ошибка парсинга, код: 4)
Ошибка синтаксиса в коде, обнаруживаемая на этапе компиляции.
Например, забытая точка с запятой:
echo "Hello" // Отсутствует ;


🟠E_NOTICE (замечание, код: 8)
Сообщает о некритичных ошибках, например, об использовании неинициализированной переменной:
echo $undefinedVariable; // Вызовет E_NOTICE


🟠E_CORE_ERROR (фатальная ошибка ядра, код: 16)
Аналогична E_ERROR, но возникает на этапе загрузки PHP.

🟠E_CORE_WARNING (предупреждение ядра, код: 32)
Аналогична E_WARNING, но на этапе загрузки PHP.

🟠E_COMPILE_ERROR (ошибка компиляции, код: 64)
Ошибки, связанные с компиляцией скрипта, например, при ошибке в require.

🟠E_COMPILE_WARNING (предупреждение компиляции, код: 128)
Предупреждения компилятора.

🟠E_USER_ERROR (пользовательская фатальная ошибка, код: 256)
Вызывается вручную с помощью trigger_error():
trigger_error("Критическая ошибка!", E_USER_ERROR);


🟠E_USER_WARNING (пользовательское предупреждение, код: 512)
Аналогично E_WARNING, но создаётся пользователем.

🟠E_USER_NOTICE (пользовательское замечание, код: 1024)
Аналогично E_NOTICE, но вызывается вручную.

🟠E_STRICT (строгие предупреждения, код: 2048)
Сообщает о потенциальных проблемах совместимости.

🟠E_RECOVERABLE_ERROR (обрабатываемая фатальная ошибка, код: 4096)
Фатальная ошибка, которую можно обработать через set_error_handler().

🟠E_DEPRECATED (предупреждение об устаревших функциях, код: 8192)
Указывает, что используется устаревшая функция.

🟠E_USER_DEPRECATED (пользовательское предупреждение об устаревании, код: 16384)
Вызывается пользователем через trigger_error().

🚩Как управлять уровнями ошибок?

PHP позволяет включать или выключать определённые ошибки с помощью error_reporting()
error_reporting(E_ALL); // Включить все ошибки
error_reporting(0); // Отключить вывод ошибок
error_reporting(E_ERROR | E_WARNING); // Только критические ошибки и предупреждения


Также можно использовать display_errors для отображения ошибок в браузере
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


Ставь 👍 и забирай 📚 Базу знаний
🤔 Зачем генераторы, если есть итераторы?

1. Генераторы упрощают создание итераторов, предоставляя возможность обхода коллекций без написания полноценного класса.
2. Они экономят память, поскольку возвращают значения по одному через yield, а не загружают всю коллекцию в память.
3. Итераторы требуют ручной реализации методов iter и next, тогда как генераторы используют стандартные функции.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний