fa
Feedback
PHP | Вопросы собесов

PHP | Вопросы собесов

رفتن به کانال در Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

نمایش بیشتر
2 348
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-107 روز
-2630 روز
آرشیو پست ها
🤔 Что такое инкапсуляция? Инкапсуляция — это принцип ООП, при котором детали реализации скрыты от внешнего мира, предоставляя доступ к данным через методы. В PHP это реализуется с помощью модификаторов доступа (private, protected, public). Она обеспечивает безопасность данных и облегчает поддержку кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем нужны паттерны проектирования? Это повторяемые решения типичных задач. Они помогают разработчикам создавать программы, которые легко поддерживать, расширять и модифицировать. Паттерны проектирования упрощают процесс разработки, обеспечивая проверенные способы решения распространенных проблем, что экономит время и силы разработчиков. 🚩Зачем они нужны 🟠Повторяемость и стандартность Паттерны обеспечивают повторяемость решений для часто возникающих задач, что снижает вероятность ошибок и улучшает читабельность кода. 🟠Улучшение коммуникации Использование общепринятых паттернов облегчает коммуникацию между разработчиками. Когда все понимают, что подразумевается под, например, «одиночкой» (singleton), это упрощает обсуждение архитектуры системы. 🟠Повышение качества кода Паттерны проектирования способствуют созданию более структурированного, гибкого и поддерживаемого кода. 🟠Экономия времени и ресурсов Паттерны позволяют не изобретать велосипед, а использовать проверенные решения, что ускоряет процесс разработки. 🚩Как они используются Паттерны проектирования делятся на несколько категорий, каждая из которых решает определенный тип задач: 🟠Порождающие паттерны Эти паттерны касаются создания объектов. Примеры: Singleton, Factory, Builder. 🟠Структурные паттерны Эти паттерны касаются построения структуры больших объектов. Примеры: Adapter, Composite, Decorator. 🟠Поведенческие паттерны Эти паттерны касаются взаимодействия и распределения обязанностей между объектами. Примеры: Observer, Strategy, Command.
class Singleton {
    private static $instance;

    private function __construct() {
        // Закрытый конструктор предотвращает создание объекта через new
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function someBusinessLogic() {
        // Некоторая бизнес-логика
    }
}

// Использование Singleton
$singleton = Singleton::getInstance();
$singleton->someBusinessLogic();
Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего нужен middleware? Middleware — это промежуточный слой между запросом клиента и сервером, который обрабатывает запросы до их передачи конечному обработчику. Он используется для выполнения задач, таких как аутентификация, логирование, кэширование и обработка ошибок. Middleware помогает разделить логику приложения на независимые компоненты и улучшает масштабируемость и управляемость кода. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое внешний ключ? Внешний ключ (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. Оно фокусируется на том, что объект делает, а не на том, как он это делает. 2. Реализуется через абстрактные классы, интерфейсы или методы. 3. Помогает упрощать сложные системы, скрывая ненужные детали и обеспечивая высокую модульность. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем использовать Rest , если есть Soup? SOAP (Simple Object Access Protocol) и REST (Representational State Transfer) – это два подхода для обмена данными между клиентом и сервером (API). SOAP появился раньше, но REST стал более популярным, потому что он проще, быстрее и гибче. 🚩Почему REST лучше в большинстве случаев? 🟠REST проще и легче SOAP использует сложные XML-сообщения с заголовками и схемами, что делает запросы более громоздкими. REST использует JSON или XML, что делает его быстрее и удобнее.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <getUser>
            <id>123</id>
        </getUser>
    </soap:Body>
</soap:Envelope>
Пример запроса в REST (короче и проще)
GET /users/123 HTTP/1.1
Host: api.example.com
🟠REST быстрее и легче для веба SOAP требует больше ресурсов, потому что использует XML + сложные заголовки. REST работает по HTTP и использует JSON, который легче парсится в браузере и мобильных приложениях. 🟠REST лучше интегрируется с веб-технологиями SOAP требует специальных библиотек (WSDL, WS-Security). REST использует обычные HTTP-методы: - GET – получить данные - POST – создать - PUT – обновить - DELETE – удалить 🟠REST масштабируемый и кроссплатформенный REST легко работает с JavaScript, мобильными приложениями (iOS, Android), браузерами и фронтендом. SOAP чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений. Ставь 👍 и забирай 📚 Базу знаний

🤔 В чем заключается обработка ошибок и исключений? Это механизм выявления и реагирования на непредвиденные ситуации в коде. - Ошибки (Errors) – критические сбои (OutOfMemoryError, StackOverflowError). - Исключения (Exceptions) – проблемы в логике (NullPointerException, IOException). Обрабатываются с помощью try-catch-finally, throw, throws, а также глобальных обработчиков (onError, fallback strategies). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что содержит инкапсуляция кроме сокрытия данных? Инкапсуляция — это не только скрытие данных, но и ограничение доступа к внутренним деталям объекта + защита логики от внешнего вмешательства. 🚩Основные аспекты инкапсуляции Сокрытие данных (private, protected). Контроль доступа через геттеры и сеттеры. Защита объекта от некорректных данных. Чёткое API для работы с объектом. Разделение ответственности внутри класса. 🟠Сокрытие данных (`private`, `protected`) Скрываем внутренние переменные, чтобы их нельзя было изменить напрямую.
class User {
    private string $password; // Прямой доступ запрещён

    public function __construct(string $password) {
        $this->password = $password;
    }
}

$user = new User("123456");
// echo $user->password; // ❌ Ошибка! Доступ запрещён
🟠Контроль доступа через геттеры и сеттеры Предоставляем доступ к данным через методы (контролируем поведение).
class User {
    private string $password;

    public function __construct(string $password) {
        $this->setPassword($password);
    }

    public function getPassword(): string {
        return "Секретный пароль скрыт"; // Никогда не выдаём оригинал
    }

    public function setPassword(string $password) {
        if (strlen($password) < 6) {
            throw new Exception("Пароль слишком короткий!");
        }
        $this->password = password_hash($password, PASSWORD_DEFAULT);
    }
}

$user = new User("securePass");
// echo $user->password; // ❌ Ошибка! Доступ запрещён
echo $user->getPassword(); // ✅ "Секретный пароль скрыт"
🟠Защита объекта от некорректных данных Инкапсуляция позволяет проверять данные перед их сохранением.
class Product {
    private float $price;

    public function setPrice(float $price) {
        if ($price < 0) {
            throw new Exception("Цена не может быть отрицательной!");
        }
        $this->price = $price;
    }
}
🟠Чёткое API для работы с объектом Инкапсуляция создаёт удобный интерфейс для работы с классом.
class Order {
    private array $items = [];

    public function addItem(string $item) {
        $this->items[] = $item;
    }

    public function getItems(): array {
        return $this->items;
    }
}

$order = new Order();
$order->addItem("Телефон");
print_r($order->getItems()); // ✅ ["Телефон"]
🟠Разделение ответственности внутри класса Инкапсуляция помогает отделить внутреннюю логику от интерфейса.
class BankAccount {
    private float $balance = 0;

    private function logTransaction(float $amount) {
        echo "Транзакция: $amount\n";
    }

    public function deposit(float $amount) {
        $this->balance += $amount;
        $this->logTransaction($amount);
    }

    public function getBalance(): float {
        return $this->balance;
    }
}

$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance(); // ✅ 100
Ставь 👍 и забирай 📚 Базу знаний

🤔 Для чего нужен ELT? ELT (Extract, Load, Transform) – это процесс обработки данных, используемый в аналитике: - Extract (Извлечение) – загрузка данных из источников (БД, API). - Load (Загрузка) – сохранение данных в хранилище (например, в Data Warehouse). - Transform (Преобразование) – очистка, фильтрация, агрегация данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🖼️ Стажировки и вакансии для PHP разработчиков. - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в Tel
🖼️ Стажировки и вакансии для PHP разработчиков. - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в Telegram 👉 @jobs_php 🤖 ML & DS 👩‍💻 DevOps 👨‍✈️ ИБ & OSINT 👣 Go 👩‍💻 Mobile 👩‍💻 C# 👩‍💻 Node.js 👩‍💻 Python 🔎 QA 👩‍💻 Java 👩‍💻 UX/UI 👩‍💻 Frontend 🖼️ PHP 📋 Analyst 💼 1C 🖥 SQL 👩‍💻 IT HR Пока другие листают джоб-сайты — ты уже пишешь HR в Telegram.

🤔 Что такое репликация? Это процесс создания и поддержания копий данных в разных местах для обеспечения доступности, надежности и производительности системы. Она используется в базах данных, файловых системах и других системах хранения данных. 🚩Зачем нужна репликация 🟠Повышение доступности Если одна копия данных становится недоступной из-за сбоя или отключения сервера, другая копия может продолжить обслуживание запросов, минимизируя время простоя. 🟠Улучшение производительности Репликация позволяет распределить нагрузку на несколько серверов, что улучшает время отклика системы при больших объемах запросов. 🟠Резервное копирование и восстановление данных Репликация обеспечивает наличие резервных копий данных, которые можно использовать для восстановления системы после сбоя. 🟠Географическое распределение данных Репликация позволяет хранить данные ближе к пользователям, что снижает задержку при доступе к данным. 🚩Виды репликации 🟠Синхронная репликация Данные одновременно записываются на основной и реплицированный серверы. Высокая консистентность данных. Замедление операций записи, так как они должны быть подтверждены на всех репликах. 🟠Асинхронная репликация Данные сначала записываются на основной сервер, а затем копируются на реплицированный сервер с задержкой. Быстрые операции записи на основной сервер. Возможность временной неконсистентности данных между серверами. 🟠Полная репликация Все данные копируются на все реплицированные серверы. Простота реализации и высокая доступность данных. Высокие затраты на хранение и передачу данных. 🟠Частичная репликация Только часть данных копируется на реплицированные серверы. Экономия ресурсов хранения и передачи данных. Более сложное управление данными. 🚩Пример использования 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. Класс — это шаблон или "чертёж", описывающий свойства и поведение объектов. 2. Объект — это экземпляр класса, созданный с использованием его структуры. 3. Класс определяет, что объект может делать, а объект выполняет это поведение. 4. Класс — это абстракция, объект — конкретное воплощение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое полнотекстовый индекс? Это специализированный тип индекса, используемый для эффективного поиска текста в больших текстовых полях. Он позволяет быстро находить строки, содержащие определённые слова или фразы, в отличие от стандартных индексов, которые работают с точными совпадениями. 🚩Зачем нужен полнотекстовый индекс? Полнотекстовый индекс предназначен для поиска и обработки текстовой информации, особенно в больших текстовых данных. Это необходимо, когда требуется: Искать слова или фразы внутри длинных текстовых полей. Находить записи, которые соответствуют похожим по смыслу запросам, а не только точным совпадениям. Обеспечивать более быстрый и релевантный поиск по сравнению с простым перебором данных. 🚩Как работает полнотекстовый индекс? 🟠Индексация Когда создаётся полнотекстовый индекс, база данных анализирует текстовые данные, разбивает их на слова (токены) и сохраняет их в особой структуре индекса. 🟠Поиск При выполнении запроса база данных ищет совпадения среди токенов в индексе, а не в самом тексте. 🟠Релевантность Полнотекстовый индекс учитывает частоту появления слов и их позицию, чтобы выдавать результаты, наиболее соответствующие запросу. 🚩Использование полнотекстового индекса в MySQL 🟠Создание полнотекстового индекса Полнотекстовый индекс можно создавать для столбцов типа CHAR, VARCHAR, или TEXT.
CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    content TEXT,
    FULLTEXT(title, content)
);
🟠Поиск с использованием полнотекстового индекса Для выполнения полнотекстового поиска используется оператор MATCH ... AGAINST.
SELECT * 
FROM articles
WHERE MATCH(title, content) AGAINST('PHP tutorial');
🟠Модели поиска Natural Language Mode: Поиск слов и фраз с учётом их важности. Boolean Mode: Позволяет использовать логические операторы (например, + для обязательных слов, - для исключаемых). Query Expansion: Автоматически расширяет запрос с помощью синонимов или связанных слов.
SELECT * 
FROM articles
WHERE MATCH(title, content) AGAINST('+PHP -Java' IN BOOLEAN MODE);
🚩Ограничения полнотекстового индекса 🟠Минимальная длина слова По умолчанию слова короче 3 символов игнорируются (это настраивается). 🟠Стоп-слова Некоторые часто встречающиеся слова (например, "and", "the") исключаются из индексации. 🟠Чувствительность к языку Важно учитывать настройки языка для анализа текста. 🟠Поддержка типов данных Полнотекстовые индексы доступны только для текстовых полей. 🚩Плюсы ➕Быстрый поиск по большим объемам текста. ➕Удобная работа с нерелевантными данными (например, похожими словами). ➕Возможность вычисления ранжирования (релевантности) результатов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое анонимные функции? Анонимные функции, также известные как замыкания, в PHP и других языках позволяют создавать функции без определенного имени. Эти функции можно использовать как значения переменных и передавать как аргументы другим функциям.? Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое стрелочные и анонимные функции? Стрелочные функции (также известные как лямбда-функции) и анонимные функции служат для создания функций без имени, которые могут быть использованы в качестве значений переменных, параметров функций или просто для выполнения некоторого действия на месте. 🚩Анонимные функции Это функции без имени, которые часто используются для создания функций-замыканий. Замыкания позволяют функциям захватывать переменные из своей области видимости. Анонимные функции создаются с использованием ключевого слова function.
<?php
$sayHello = function($name) {
    return "Привет, $name!";
};

echo $sayHello("Мир"); // Выведет: Привет, Мир!
?>
🚩Стрелочные функции Были введены в PHP 7.4 и представляют собой более компактный способ создания анонимных функций. Они используют синтаксис fn и автоматически захватывают переменные из внешней области видимости по значению.
<?php
$factor = 10;

$multiply = fn($x) => $x * $factor;

echo $multiply(5); // Выведет: 50
?>
🚩Зачем это нужно? 🟠Удобство Создание функций на месте без необходимости придумывать имена. 🟠Замыкания Возможность захвата переменных из внешней области видимости. 🟠Читабельность кода Стрелочные функции делают код более лаконичным и читаемым. 🚩Как это используется? 🟠Фильтрация и сортировка массивов Часто используются в функциях вроде array_filter, array_map и usort. 🟠Колбэки Передача функции в качестве аргумента в другие функции (например, для обработки событий).
<?php
$numbers = [1, 2, 3, 4, 5];

$squared = array_map(fn($n) => $n * $n, $numbers);

print_r($squared); // Выведет: Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
?>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое абстрактный класс? Абстрактный класс — это класс, который не может быть создан как объект и служит для того, чтобы задавать общие свойства и методы для классов-наследников. Он может содержать как абстрактные, так и конкретные методы с реализацией. Наследники обязаны реализовать все абстрактные методы родительского класса. Абстрактные классы полезны, когда требуется частичная реализация с обязательной реализацией некоторых методов в дочерних классах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое вертикальное и масштабирование в БД? Это два метода повышения производительности и пропускной способности баз данных. 🚩Вертикальное масштабирование (Vertical Scaling) Вертикальное масштабирование, также известное как масштабирование "вверх" (scale up), предполагает улучшение производительности базы данных за счет увеличения ресурсов на одном сервере. Это может включать: Добавление большего объема оперативной памяти (RAM), Увеличение мощности процессора (CPU), Увеличение объема хранилища (SSD или HDD), Использование более быстрого сетевого оборудования 🟠Плюсы и минусыПростота реализации Легко выполнить, поскольку не требует изменения архитектуры приложения. ➕Единая точка управления Администрирование базы данных проще, так как все данные находятся на одном сервере. ➖Ограничения оборудования Есть пределы, до которых можно увеличивать ресурсы на одном сервере. ➖Единая точка отказа Если сервер выходит из строя, вся база данных становится недоступной. 🟠Пример Допустим, у вас есть сервер с 16 ГБ оперативной памяти и 4-ядерным процессором. Вертикальное масштабирование может включать замену его на сервер с 64 ГБ оперативной памяти и 16-ядерным процессором. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Как сделать так, чтобы приложение разворачивалось быстрее в Dockerе? Для ускорения развертывания приложений в Docker существует несколько методов и практик, которые помогают оптимизировать сборку и запуск контейнеров. Вот некоторые из них: 🚩Оптимизация Dockerfile 🟠Меньше слоев Каждая инструкция в Dockerfile создает новый слой в образе. Старайтесь минимизировать количество слоев, объединяя инструкции, где это возможно.
# Плохо
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y vim

# Хорошо
RUN apt-get update && \
    apt-get install -y curl vim
🟠Использование правильного базового образа Выберите наиболее подходящий базовый образ, который минимально необходим для вашего приложения. Использование минималистичных образов, таких как alpine, может существенно уменьшить размер образа.
FROM php:7.4-fpm-alpine
🟠Кэширование зависимостей Сначала копируйте файлы с зависимостями (например, composer.json, package.json) и устанавливайте их, а затем копируйте остальной код. Это позволит Docker использовать кэш на этапе установки зависимостей, если они не изменились.
FROM php:7.4-fpm-alpine

# Установка зависимостей
COPY composer.json composer.lock /app/
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader

# Копирование кода
COPY . /app
🟠Использование многоступенчатой сборки Многоступенчатая сборка позволяет собирать и тестировать ваше приложение в одном этапе и копировать только необходимые файлы в финальный образ, что уменьшает размер финального образа.
# Сборочный этап
FROM composer:latest AS builder
WORKDIR /app
COPY composer.json composer.lock /app/
RUN composer install --no-dev --optimize-autoloader

# Финальный этап
FROM php:7.4-fpm-alpine
WORKDIR /app
COPY --from=builder /app /app
COPY . /app
🟠Использование кэша сборки При разработке используйте кэш Docker для ускорения сборки. Для этого нужно правильно организовать порядок инструкций в Dockerfile, чтобы неизменные части использовали кэш. 🟠Оптимизация Docker Compose Если вы используете Docker Compose, убедитесь, что сервисы поднимаются параллельно и что вы используете возможность кэширования сборок.
version: '3.8'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/app
    ports:
      - "8080:80"
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: app_db
    ports:
      - "3306:3306"
🟠Использование кэшированных слоев и промежуточных образов При частых изменениях кода старайтесь кэшировать слои, которые не меняются, и использовать промежуточные образы для ускорения сборки.
# Использование промежуточного образа
FROM php:7.4-fpm-alpine AS base
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader

FROM base AS dev
RUN apk add --no-cache bash
CMD ["php-fpm"]

FROM base AS prod
CMD ["php-fpm"]
🟠Использование готовых образов для разработки Используйте готовые образы, где уже установлены все необходимые зависимости для разработки, что сократит время сборки образов. 🟠Параллельная сборка и запуск Используйте параллельную сборку и запуск контейнеров, если это возможно. Docker Compose поддерживает параллельный запуск, что может значительно ускорить процесс развертывания. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как расшифровывается REST? REST (Representational State Transfer) — это архитектурный стиль взаимодействия систем через HTTP. Он основан на представлении ресурсов как URL и использовании стандартных HTTP-методов (GET, POST, PUT, DELETE) для работы с этими ресурсами. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний