es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

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

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

Ir al canal en Telegram

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

Mostrar más
2 293
Suscriptores
Sin datos24 horas
-67 días
-2530 días
Archivo de publicaciones
🤔 Какими способами организовать порции? Разделение данных на порции (batch processing) может быть организовано разными методами: 1. LIMIT и OFFSET – классический способ для пагинации в SQL. 2. Cursor-based pagination – используется в API, позволяет получать новые данные без смещения. 3. Частичная загрузка данных – загружать данные по мере необходимости (lazy loading). 4. Очереди (Message Queues) – например, RabbitMQ или Kafka для обработки данных в потоках. 5. Шардирование данных – разделение больших таблиц на более мелкие логические части. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть виды join? JOIN – это операция в SQL, которая позволяет объединять данные из двух или более таблиц на основе общего поля. В SQL есть 5 основных видов JOIN 🟠`INNER JOIN` пересечение двух таблиц (только совпадающие записи). 🟠`LEFT JOIN` все записи из левой таблицы + совпадения из правой. 🟠`RIGHT JOIN` все записи из правой таблицы + совпадения из левой. 🟠`FULL JOIN` объединяет все записи из обеих таблиц. 🟠`CROSS JOIN` декартово произведение (каждая строка первой таблицы соединяется с каждой строкой второй). 🚩`INNER JOIN` – только совпадения Возвращает только те строки, у которых есть совпадения в обеих таблицах.
SELECT users.id, users.name, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
🚩`LEFT JOIN` – все из левой таблицы + совпадения Возвращает все записи из левой таблицы, а если в правой нет совпадения – подставляет NULL.
SELECT users.id, users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что известно про фабрики? Это порождающий паттерн, создающий объекты без явного указания их класса. 1. Simple Factory: один метод создаёт разные объекты. 2. Factory Method: делегирует создание объектов подклассам. 3. Abstract Factory: создаёт семейства связанных объектов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что будет если мы цифру 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. Пример — связанный список (linked list), где каждый узел содержит значение и ссылку на следующий узел. 2. Такие типы обеспечивают удобное добавление и удаление элементов, но имеют медленный доступ по индексу (O(n)). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем придумали анонимные классы? Анонимные классы в PHP были введены в версии 7.0 и позволяют создавать одноразовые объекты без необходимости предварительного объявления класса. Они имеют несколько преимуществ и предназначены для решения ряда задач в программировании. Вот основные причины и случаи, для которых они были придуманы: 🚩Зачем придумали анонимные классы 🟠Упрощение кода Анонимные классы позволяют создать класс на месте, в том же файле, где он используется, без необходимости его предварительного определения. Это упрощает и сокращает код, особенно для одноразовых задач.
$logger = new class {
public function log($message) {
echo $message;
}
};

$logger->log("Hello, World!"); // Выведет: Hello, World!
🟠Инкапсуляция и уменьшение загрязнения пространства имен Поскольку анонимные классы не имеют имен, они не добавляют новых имен в глобальное пространство имен, что помогает избежать конфликтов имен и делает код более чистым. 🟠Использование одноразовых объектов Анонимные классы удобны, когда нужно создать объект для одноразового использования, например, в тестах, или для передачи в функции или методы.
function handleRequest($handler) {
$handler->process();
}

handleRequest(new class {
public function process() {
echo "Processing request";
}
}); // Выведет: Processing request
🟠Более гибкая реализация интерфейсов и абстрактных классов: Анонимные классы могут реализовывать интерфейсы или наследовать от абстрактных классов, предоставляя быстрый способ создать конкретные реализации на месте.
interface Logger {
public function log($message);
}

$logger = new class implements Logger {
public function log($message) {
echo $message;
}
};

$logger->log("Logging message"); // Выведет: Logging message
🟠Улучшение тестирования В юнит-тестах анонимные классы позволяют быстро создавать мок-объекты (mock objects) для тестирования без необходимости создавать отдельные классы для каждой тестовой ситуации.
class Service {
private $logger;

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

public function execute() {
$this->logger->log("Service executed");
}
}

$mockLogger = new class {
public function log($message) {
echo "Mock: " . $message;
}
};

$service = new Service($mockLogger);
$service->execute(); // Выведет: Mock: Service executed
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое DP (Dynamic Programming)? 1. Динамическое программирование — это метод оптимизации, используемый для решения задач, разбиваемых на подзадачи. 2. Результаты подзадач сохраняются и переиспользуются, чтобы избежать повторных вычислений. 3. Используется для задач оптимизации, например, нахождение кратчайшего пути, задачи Фибоначчи или задач на разбиение. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем ставится всегда цель теста? Цель тестирования всегда заключается в том, чтобы выявить ошибки, дефекты и недостатки в программном обеспечении до того, как оно будет выпущено или внедрено. Тестирование помогает убедиться, что программа работает правильно, соответствует требованиям и ожиданиям пользователей, а также обеспечивает высокое качество и надежность продукта. 🚩Основные цели 🟠Выявление ошибок и дефектов Найти и исправить ошибки, которые могли возникнуть в ходе разработки. Это помогает предотвратить сбои в работе программы. 🟠Подтверждение соответствия требованиям Убедиться, что программное обеспечение соответствует заданным требованиям и спецификациям. Это включает проверку функциональности, производительности, безопасности и других аспектов. 🟠Повышение качества продукта Тестирование помогает улучшить общее качество программного обеспечения, делая его более стабильным, надежным и удобным в использовании. 🟠Обеспечение пользовательского опыта Убедиться, что конечные пользователи получат продукт, который удовлетворяет их потребности и ожидания, обеспечивая тем самым положительный пользовательский опыт. 🚩Типы 🟠Функциональное тестирование Проверка того, что каждый компонент системы работает в соответствии с требованиями. 🟠Нефункциональное тестирование Проверка аспектов, не связанных напрямую с функциональностью, таких как производительность, безопасность, удобство использования и т.д. 🟠Юнит-тестирование Тестирование отдельных компонентов или модулей кода. 🟠Интеграционное тестирование Проверка взаимодействия между различными модулями или компонентами системы. 🟠Системное тестирование Полная проверка всей системы в целом. 🟠Приемочное тестирование Проверка системы на соответствие бизнес-требованиям и готовность к использованию конечными пользователями.
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase {
    public function testAdd() {
        $calc = new Calculator();
        $this->assertEquals(4, $calc->add(2, 2));
        $this->assertEquals(0, $calc->add(-1, 1));
    }
}

class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое di container? Это специальный инструмент или объект в программировании, который управляет созданием и внедрением зависимостей в объекты. Этот контейнер автоматически решает, какие зависимости требуются объекту, и предоставляет их при создании объекта, тем самым упрощая управление зависимостями в приложении. 🚩Зачем нужен DI-контейнер 🟠Автоматизация управления зависимостями DI-контейнер автоматически создает и внедряет зависимости, избавляя от необходимости вручную передавать их в объекты. 🟠Гибкость и модульность Позволяет легко заменять реализации зависимостей, не изменяя код, который их использует. 🟠Упрощение тестирования Обеспечивает легкую замену зависимостей на моки или заглушки для тестирования. 🟠Улучшение структуры кода Разделяет создание объектов и их использование, способствуя более чистой архитектуре. 🚩Как используется DI-контейнер DI-контейнеры предоставляют различные методы для регистрации зависимостей и их последующего получения. Ниже приведен пример реализации простого DI-контейнера. 1⃣Создание интерфейсов и реализаций зависимостей
interface Logger {
    public function log($message);
}

class FileLogger implements Logger {
    public function log($message) {
        echo "Logging message to a file: $message";
    }
}

interface PaymentProcessor {
    public function processPayment($amount);
}

class StripePaymentProcessor implements PaymentProcessor {
    public function processPayment($amount) {
        echo "Processing payment of $amount through Stripe";
    }
}
2⃣Реализация DI-контейнера
class DIContainer {
    private $bindings = [];

    public function bind($abstract, $concrete) {
        $this->bindings[$abstract] = $concrete;
    }

    public function resolve($abstract) {
        if (!isset($this->bindings[$abstract])) {
            throw new Exception("No binding found for $abstract");
        }

        $concrete = $this->bindings[$abstract];

        // Если $concrete является замыканием, вызываем его
        if ($concrete instanceof Closure) {
            return $concrete($this);
        }

        // Создаем новый объект конкретного класса
        return new $concrete;
    }
}
3⃣Регистрация зависимостей и их использование
$container = new DIContainer();

// Регистрация зависимостей
$container->bind(Logger::class, FileLogger::class);
$container->bind(PaymentProcessor::class, function($container) {
    return new StripePaymentProcessor();
});

// Получение зависимостей
$logger = $container->resolve(Logger::class);
$logger->log("This is a log message."); // Вывод: Logging message to a file: This is a log message.

$paymentProcessor = $container->resolve(PaymentProcessor::class);
$paymentProcessor->processPayment(100); // Вывод: Processing payment of 100 through Stripe
🚩Плюсы и минусы ➕Автоматизация Снижает необходимость ручного создания и передачи зависимостей. ➕Гибкость Легко изменять конкретные реализации зависимостей. ➕Тестируемость Упрощает замену зависимостей на моки для тестирования. ➕Чистота кода Упрощает код, делая его более модульным и читаемым. ➖Сложность настройки Могут потребоваться значительные усилия для первоначальной настройки DI-контейнера. ➖Производительность В некоторых случаях может снижать производительность из-за необходимости разрешения зависимостей. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как настроить autoload через Composer? Composer предоставляет механизм автоматической загрузки классов (autoload), который позволяет не писать вручную require. Основные шаги: 1. Использовать PSR-4 или PSR-0 – правила именования классов. 2. Настроить autoload в composer.json – указать, какие пространства имен использовать. 3. Выполнить composer dump-autoload – обновить автозагрузку после изменения файлов. 4. Использовать require 'vendor/autoload.php' – подключить автозагрузку в проекте. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое метрики? Это количественные показатели, используемые для оценки, мониторинга и улучшения различных аспектов работы систем, процессов и проектов. Они предоставляют объективные данные, которые помогают принимать обоснованные решения и улучшать эффективность и качество работы. 🚩Зачем нужны метрики 🟠Измерение производительности Метрики позволяют оценивать, насколько эффективно работают системы или процессы. Например, метрики производительности могут показать, сколько запросов обрабатывается сервером в секунду или как быстро выполняются алгоритмы. 🟠Мониторинг и контроль Постоянный мониторинг метрик помогает выявлять проблемы на ранних стадиях. Например, мониторинг времени отклика сервера позволяет обнаружить ухудшение производительности до того, как это повлияет на пользователей. 🟠Принятие решений Объективные данные, предоставляемые метриками, помогают принимать обоснованные решения по улучшению процессов, распределению ресурсов и планированию. Например, данные о загрузке серверов могут помочь определить, когда нужно добавить новые ресурсы. 🟠Улучшение качества Метрики качества позволяют оценивать, насколько хорошо продукт или процесс соответствует установленным стандартам и требованиям. Например, метрики кода, такие как количество ошибок или покрытие тестами, помогают улучшать качество программного обеспечения. 🟠Управление проектами В проектном управлении метрики помогают следить за прогрессом, оценивать риски и управлять ресурсами. Например, метрики времени и затрат помогают следить за выполнением проекта в рамках бюджета и сроков. 🚩Примеры метрик 🟠Метрики производительности Время отклика (Response Time): Время, за которое система обрабатывает запрос. Пропускная способность (Throughput): Количество запросов, обработанных системой за единицу времени. Время простоя (Downtime): Время, в течение которого система недоступна. 🟠Метрики качества программного обеспечения Покрытие тестами (Test Coverage): Процент кода, покрытого автоматизированными тестами. Количество ошибок (Bug Count): Количество ошибок, обнаруженных в программном обеспечении. Плотность дефектов (Defect Density): Количество ошибок на единицу кода (например, на 1000 строк кода). 🟠Метрики управления проектами Завершение задач (Task Completion): Процент выполненных задач от общего количества задач в проекте. Отклонение от плана (Schedule Variance): Разница между планируемым и фактическим временем выполнения задач. Затраты (Cost): Фактические затраты по сравнению с запланированными затратами. 🚩Применение метрик 🟠В разработке программного обеспечения CI/CD: Метрики сборок и развертываний помогают отслеживать стабильность и скорость релизов. Анализ кода: Метрики сложности кода, дублирования и покрытия тестами помогают улучшать качество и поддерживаемость кода. 🟠В бизнесе и управлении KPI (Key Performance Indicators): Ключевые показатели эффективности помогают оценивать успехи бизнеса или отдельных процессов. OKR (Objectives and Key Results): Цели и ключевые результаты помогают ставить и достигать стратегические цели. 🟠В IT-инфраструктуре Мониторинг серверов: Метрики использования CPU, памяти, дискового пространства помогают поддерживать высокую производительность и доступность серверов. Безопасность: Метрики инцидентов безопасности, обнаружения уязвимостей и реагирования на угрозы помогают обеспечивать защиту данных и систем. Ставь 👍 и забирай 📚 Базу знаний

🔥 Скрытые вакансии с удаленной работой для PHP разработчика, которые нигде больше не публикуются. Напрямую от компаний, с ко
🔥 Скрытые вакансии с удаленной работой для PHP разработчика, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров. 🔹 PHP Jobs | Вакансии 🔸 Все каналы с вакансиями

🤔 В чем заключается обработка ошибок и исключений? Обработка ошибок в PHP – это механизм, который помогает находить, интерпретировать и корректно реагировать на ошибки во время выполнения программы. Для этого в PHP используются два подхода: Традиционные ошибки (error_reporting, set_error_handler) *Исключения (try-catch, throw) 🟠Традиционная обработка ошибок PHP изначально использовал механизм ошибок, которые делятся на несколько типов: E_ERROR – фатальная ошибка, завершает выполнение скрипта. E_WARNING – предупреждение, но скрипт продолжает выполняться. E_NOTICE – уведомление о потенциальной проблеме.
echo $undefined_var; // E_NOTICE: Undefined variable
🚩Способы обработки ошибок 🟠error_reporting() – управление уровнем ошибок Функция error_reporting() позволяет включать или выключать определённые типы ошибок.
error_reporting(E_ALL & ~E_NOTICE); // Показывать все ошибки, кроме E_NOTICE
🟠set_error_handler() – создание пользовательского обработчика ошибок Можно задать свою функцию, которая будет реагировать на ошибки.
function myErrorHandler($errno, $errstr, $errfile, $errline) {
    echo "Ошибка [$errno]: $errstr в файле $errfile на строке $errline";
}
set_error_handler("myErrorHandler");

// Вызовем ошибку
echo 10 / 0; // Division by zero (E_WARNING)
🟠error_log() – запись ошибок в файл Ошибки можно не выводить на экран, а записывать в файл.
error_log("Ошибка: что-то пошло не так!", 3, "errors.log");
🚩Исключения (`try-catch`) С версии PHP 5 появился механизм исключений, который более удобен и структурирован. Исключения позволяют: Перехватывать ошибки и управлять их обработкой. Использовать вложенные блоки try-catch для детальной обработки. Создавать собственные классы исключений.
try {
    if (!file_exists("somefile.txt")) {
        throw new Exception("Файл не найден");
    }
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
🟠Классы исключений PHP позволяет использовать предопределённый класс Exception, а также создавать свои.
class MyException extends Exception {}

try {
    throw new MyException("Это моя ошибка");
} catch (MyException $e) {
    echo "Поймано исключение: " . $e->getMessage();
}
🟠Блок `finally` Используется для выполнения кода в любом случае – независимо от того, было исключение или нет.
try {
    echo "Попытка выполнить код\n";
} catch (Exception $e) {
    echo "Ошибка поймана\n";
} finally {
    echo "Этот код выполнится в любом случае\n";
}
Ставь 👍 и забирай 📚 Базу знаний

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

Авторизованные курсы по оборудованию Eltex от дилера №1 Проводим учебные курсы, включающие практические занятия и лабораторны
Авторизованные курсы по оборудованию Eltex от дилера №1 Проводим учебные курсы, включающие практические занятия и лабораторные работы. По итогу успешной сдачи экзаменов обучающемуся выдаётся официальный сертификат от завода Eltex. ⚡Обучение в офисе или онлайн ⚡Опытный преподавательский состав ⚡Лабораторные работы - 50% времени ⚡Обучение юридических и физических лиц Записаться #реклама 16+ eltexcm.ru О рекламодателе

🤔 Какой синтаксис у заголовков? Заголовки в языках и разметки часто используются для указания ключевой информации, на которую стоит обратить внимание, и они различаются в зависимости от конкретного контекста и языка. Ниже приведены примеры синтаксиса заголовков в различных контекстах: 🚩Заголовки в HTML Поддерживает шесть уровней заголовков, от <h1> до <h6>, где <h1> представляет самый важный заголовок, а <h6> — наименее важный.
<h1>Заголовок уровня 1</h1>
<h2>Заголовок уровня 2</h2>
<h3>Заголовок уровня 3</h3>
<h4>Заголовок уровня 4</h4>
<h5>Заголовок уровня 5</h5>
<h6>Заголовок уровня 6</h6>
🚩Заголовки в Markdown Это язык разметки, который упрощает форматирование текста, особенно для написания документации. Заголовки создаются с помощью символа # перед текстом заголовка. Количество символов # определяет уровень заголовка.
# Заголовок уровня 1
## Заголовок уровня 2
### Заголовок уровня 3
#### Заголовок уровня 4
##### Заголовок уровня 5
###### Заголовок уровня 6
🚩Заголовки в LaTeX Это система подготовки документов, широко используемая для научных и технических документов. В LaTeX заголовки создаются с помощью команд \section, \subsection, \subsubsection и так далее.
\section{Заголовок уровня 1}
\subsection{Заголовок уровня 2}
\subsubsection{Заголовок уровня 3}
\paragraph{Заголовок уровня 4}
\subparagraph{Заголовок уровня 5}
🚩Заголовки в Языке разметки Wiki Многие вики-движки (например, MediaWiki) используют свои синтаксисы для создания заголовков. В MediaWiki заголовки создаются с помощью равно (=) вокруг текста заголовка.
= Заголовок уровня 1 =
== Заголовок уровня 2 ==
=== Заголовок уровня 3 ===
==== Заголовок уровня 4 ====
===== Заголовок уровня 5 =====
====== Заголовок уровня 6 ======
🚩Заголовки в языках Часто не используются так же, как в разметке, но комментарии могут выполнять схожую роль для организации и документирования кода. Примеры синтаксиса для комментариев-заголовков: Python
# Заголовок уровня 1
## Заголовок уровня 2
### Заголовок уровня 3
JavaScript
// Заголовок уровня 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 чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений. Ставь 👍 и забирай 📚 Базу знаний

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