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

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

Kanalga Telegram’da o‘tish

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

Ko'proq ko'rsatish
2 342
Obunachilar
-224 soatlar
-67 kunlar
-2530 kunlar
Postlar arxiv
🤔 Что такое middleware? Это ПО, которое располагается между веб-сервером и приложением. Оно обрабатывает входящие запросы до того, как они достигнут вашего приложения, или обрабатывает исходящие ответы после того, как приложение их сгенерировало. 🚩Зачем нужен Middleware 🟠Управление запросами Может изменять или проверять запросы перед передачей их в приложение. Например, оно может проверять наличие валидных токенов доступа для аутентификации или осуществлять проверку прав доступа. 🟠Перехват ответов Также может изменять ответы перед тем, как они будут отправлены пользователю, например, добавлять нужные заголовки HTTP или сжимать данные. 🟠Логирование и мониторинг Оно может записывать информацию о запросах и ответах для анализа трафика или обнаружения ошибок. 🟠Обработка ошибок Часто используется для централизованной обработки ошибок, позволяя управлять ошибками элегантно и единообразно.
namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class CheckAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!Auth::check()) {
            return redirect('/login');
        }

        return $next($request);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое медленный запрос? Это запрос, выполнение которого занимает больше времени, чем заданный порог. 1. Причины: отсутствие индексов, сложные объединения, большой объём данных. 2. Оптимизация: использование индексов, анализ плана выполнения (EXPLAIN) и уменьшение объёма данных. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое нормализация, денормализация? Это два подхода к проектированию структуры баз данных. Они используются для оптимизации хранения данных и повышения производительности запросов. 🚩Нормализация Это процесс структурирования базы данных для уменьшения избыточности данных и устранения аномалий при обновлении, вставке или удалении данных. 🚩Цели нормализации 🟠Устранение дублирования данных Это помогает экономить место и поддерживать согласованность данных. 🟠Повышение целостности данных Например, если данные изменяются в одном месте, то изменения не нужно делать в других местах. 🚩Этапы нормализации 1⃣Первая нормальная форма (1NF) Удаление повторяющихся групп и дублирующихся данных. 2⃣Вторая нормальная форма (2NF) Устранение частичной зависимости данных от составного ключа. 3⃣Третья нормальная форма (3NF) Устранение транзитивной зависимости (когда данные зависят не от первичного ключа напрямую, а через другие поля). 4⃣Далее BCNF (нормальная форма Бойса-Кодда) и другие более сложные формы. 🚩Денормализация Это процесс намеренного добавления избыточности данных для повышения производительности запросов. 🚩Цели денормализации 🟠Ускорение чтения данных Объединение таблиц или добавление дублированных данных уменьшает количество соединений (JOIN) между таблицами.
SELECT o.OrderID, c.CustomerName, p.ProductName, p.ProductPrice
FROM Orders o
JOIN Customers c ON o.CustomerID = c.CustomerID
JOIN Products p ON o.ProductID = p.ProductID;
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое динамические переменные? Это переменные, имена которых определяются во время выполнения программы. Это позволяет создавать, модифицировать или обращаться к переменным динамически, основываясь на входных данных или условиях выполнения программы. Такой подход может быть полезен в сценариях, где структура данных неизвестна на момент написания кода или когда нужно генерировать переменные на лету в зависимости от контекста выполнения. 🚩PHP Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";

echo $variable; // Выведет "Hello, World!"
Плюсы и минусы Гибкость позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна. Удобство упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной. ➖Читаемость кода использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются. ➖Управление памятью динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое внешний ключ? Внешний ключ (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
);
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Factory? Это паттерн проектирования, который предоставляет способ создания объектов без указания точного класса. • Фабрика скрывает детали создания объектов, предоставляя интерфейс для их создания. • Пример: ShapeFactory может возвращать объекты разных классов (Circle, Square) на основе входных параметров. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Структуры данных в программировании какие знаешь? Структуры данных — это способы хранения и организации данных в памяти компьютера. Они помогают эффективно управлять данными и выбирать оптимальные алгоритмы. 🚩Основные структуры данных 🟠Массив (Array) Упорядоченная коллекция элементов, доступ к которым осуществляется по индексу. Когда нужно быстро получать элементы по индексу. Доступ: O(1) Поиск: O(n) Вставка/Удаление: O(n) (из-за необходимости сдвига элементов)
$numbers = [10, 20, 30, 40]; 
echo $numbers[2]; // 30
🟠Связанный список (Linked List) Элементы (узлы) хранят ссылку на следующий (а иногда и на предыдущий) элемент. Когда часто вставляете/удаляете элементы (без затрат на сдвиг). Доступ: O(n) Вставка/Удаление: O(1) (если известен указатель)
class Node {
    public int $data;
    public ?Node $next;

    public function __construct(int $data) {
        $this->data = $data;
        $this->next = null;
    }
}
🟠Стек (Stack) Структура LIFO (Last In, First Out). Элементы добавляются и удаляются только с одного конца. Для обратного прохода, отмены операций, рекурсии. Вставка/Удаление: O(1) Доступ: O(n)
$stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 2 (удаляется последний добавленный)
🟠Очередь (Queue) Структура FIFO (First In, First Out). Первым зашёл – первым вышел. Когда элементы должны обрабатываться по порядку (например, задачи в принтере). Вставка/Удаление: O(1)
$queue = new SplQueue();
$queue->enqueue(1);
$queue->enqueue(2);
echo $queue->dequeue(); // 1 (удаляется первый добавленный)
🟠Хэш-таблица (Hash Table) / Ассоциативный массив Хранит пары ключ → значение, обеспечивает быстрый доступ по ключу. Когда нужен быстрый поиск и хранение пар ключ-значение. Доступ/Поиск: O(1)
$hashTable = [
    "name" => "Alice",
    "age" => 25
];

echo $hashTable["name"]; // Alice
🟠Дерево (Tree) Иерархическая структура, где каждый узел может иметь несколько дочерних. Когда важны иерархии (например, файловые системы, база данных). Виды Двоичное дерево (Binary Tree) – у каждого узла до 2 детей. Двоичное дерево поиска (BST) – левый потомок меньше, правый больше. B-дерево – используется в базах данных. Trie (Префиксное дерево) – для хранения строк, часто в поисковых движках.
class TreeNode {
    public int $value;
    public ?TreeNode $left = null;
    public ?TreeNode $right = null;

    public function __construct(int $value) {
        $this->value = $value;
    }
}
🟠Граф (Graph) Набор вершин (узлов) и рёбер (связей между узлами). Для моделирования сетей, карт, социальных графов. Типы графов Ориентированный (направленный) / Неориентированный Взвешенный / Невзвешенный Ациклический (DAG)
$graph = [
    "A" => ["B", "C"],
    "B" => ["A", "D", "E"],
    "C" => ["A", "F"],
    "D" => ["B"],
    "E" => ["B", "F"],
    "F" => ["C", "E"]
];
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Как устроен типичный тест на opening point? Тест на Opening Point (OP-тест) используется для проверки скорости, с которой игрок или программа находят критически важное первое решение в задаче. Такой тест чаще всего применяется в шахматах, игровых стратегиях, а также в программировании при оценке эвристик. 🚩Как устроен тест на Opening Point? 🟠Задаётся начальная позиция или состояние Например, шахматная позиция, игровая ситуация или входные данные для алгоритма. 🟠Требуется найти оптимальный (или хороший) первый шаг В шахматах это может быть лучший ход. В алгоритмах — первое удачное разбиение задачи. 🟠Замеряется время и корректность ответа Важно, насколько быстро испытуемый (или программа) нашёл первый ход. Проверяется, соответствует ли он эталону (оптимальному решению). 🚩Пример из шахмат В шахматах Opening Point тест оценивает, насколько быстро игрок или движок могут найти правильный ход в дебюте. Например: > Позиция: > 1. e4 e5 > 2. Nf3 Nc6 > 3. Bb5 a6 > 4. ? Ожидаемый ход: Ba4 (Испанская партия). Программа должна как можно быстрее выбрать этот ход, а тест фиксирует время поиска. 🚩Пример из программирования Допустим, у нас есть массив чисел, и нужно быстро найти первый элемент, который удовлетворяет определённому условию.
function findOpeningPoint($arr, $condition) {
    foreach ($arr as $item) {
        if ($condition($item)) {
            return $item;
        }
    }
    return null; // Если не найдено
}

$array = [1, 3, 7, 10, 15];
$condition = fn($x) => $x > 5;

echo findOpeningPoint($array, $condition); // Выведет 7
Ставь 👍 и забирай 📚 Базу знаний

🤔 Принципы ООП Основные принципы объектно-ориентированного программирования включают инкапсуляцию (сокрытие деталей реализации), наследование (использование общих свойств и поведения базовых классов), полиморфизм (один интерфейс для разных типов данных) и абстракцию (определение шаблонного интерфейса для группы связанных объектов).? Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое Docker? Это платформа для разработки, доставки и запуска приложений в изолированных контейнерах. Она позволяет упаковывать приложения и все их зависимости в контейнеры, которые могут работать на любой системе, поддерживающей Docker, что делает приложения более переносимыми и независимыми от окружения. 🚩Основные концепции 🟠Контейнеры Контейнеры — это легковесные, автономные, исполняемые пакеты, которые включают в себя все необходимое для запуска приложения: код, библиотеки, зависимости и системные инструменты. Контейнеры изолированы друг от друга и от хоста, что обеспечивает консистентность работы приложения в различных средах. 🟠Образы (Images) Образ Docker — это неизменяемый шаблон, из которого создаются контейнеры. Образы могут базироваться на других образах и содержат все необходимое для запуска приложения. Например, образ может содержать операционную систему, веб-сервер и само приложение. 🟠Dockerfile Dockerfile — это текстовый файл с инструкциями по созданию Docker-образа. Он содержит последовательность команд, которые Docker выполняет для сборки образа.
          # Используем базовый образ
     FROM php:8.0-apache

     # Копируем локальные файлы в контейнер
     COPY src/ /var/www/html/

     # Устанавливаем зависимости
     RUN docker-php-ext-install mysqli
🟠Docker Hub Docker Hub — это облачный сервис для хранения и обмена Docker-образами. Он позволяет публиковать свои образы и загружать образы, созданные другими пользователями. 🚩Плюсы Портативность Контейнеры могут работать на любом сервере, где установлен Docker, что позволяет легко перемещать приложения между различными средами (разработка, тестирование, продакшн). ➕Изоляция Контейнеры изолируют приложения и их зависимости, предотвращая конфликты между различными версиями библиотек и инструментов, используемых на одном сервере. ➕Легковесность Контейнеры используют общие ресурсы ядра хостовой операционной системы, что делает их более легковесными по сравнению с виртуальными машинами. ➕Быстрое развертывание Контейнеры можно запускать и останавливать за считанные секунды, что ускоряет процессы разработки, тестирования и развертывания приложений. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие структуры данных в программировании существуют? Основные структуры: - Линейные: массивы, списки, очереди, стеки. - Нелинейные: деревья, графы. - Ассоциативные: хеш-таблицы, словари. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Для чего предназначены форматы запросов и ответов приложения? Форматы запросов и ответов в приложении предназначены для стандартизированного обмена данными между клиентом (браузером, мобильным приложением) и сервером (PHP-приложением). Они позволяют: Обеспечить совместимость между разными системами Облегчить обработку данных на сервере и клиенте Структурировать данные в удобном формате 🚩Форматы запросов (Request Formats) Когда клиент отправляет запрос на сервер, данные могут передаваться разными способами. 🟠GET – передача данных через URL Используется для получения информации. Данные передаются в строке запроса.
GET /api/users?id=10
Пример обработки в PHP
$id = $_GET['id']; // Получаем id из URL
🟠POST – передача данных в теле запроса Используется для отправки данных (например, формы).
POST /api/users
Content-Type: application/json

{
    "name": "Иван",
    "email": "ivan@example.com"
}
Пример обработки в PHP
$data = json_decode(file_get_contents("php://input"), true);
echo "Имя: " . $data['name'];
🟠PUT, PATCH, DELETE – для обновления и удаления данных Используются в REST API для изменения или удаления данных. 🚩Форматы ответов (Response Formats) Сервер отправляет ответ в определённом формате, который клиент сможет распознать. 🟠JSON – самый популярный формат Используется в API и веб-приложениях.
{
    "status": "success",
    "message": "Данные получены"
}
Пример ответа в PHP
header("Content-Type: application/json");
echo json_encode(["status" => "success", "message" => "Данные получены"]);
🟠XML – используется в старых системах Пример XML-ответа
<response>
    <status>success</status>
    <message>Данные получены</message>
</response>
🟠HTML – если сервер возвращает веб-страницу Например, при загрузке сайта.
echo "<h1>Привет, мир!</h1>";
🟠Текстовый формат (Plain Text) Если нужен простой текст
header("Content-Type: text/plain");
echo "Привет, это просто текст!";
🚩Как сервер определяет формат ответа? Сервер анализирует заголовок Accept в запросе:
Accept: application/json
PHP может обработать это так:
$accept = $_SERVER['HTTP_ACCEPT'];
if (strpos($accept, "application/json") !== false) {
    header("Content-Type: application/json");
    echo json_encode(["message" => "Привет, JSON!"]);
} else {
    echo "Привет, обычный текст!";
}
Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Что такое декремент? декремент — это операция, используемые для увеличения или уменьшения значения переменной на единицу соответственно. 🚩Декремент Оператор уменьшает значение переменной на единицу. Он представлен двумя минусами (--). Так же, как и инкремент, декремент бывает двух видов: 🟠Префиксный декремент (`--x`) Сначала уменьшает значение переменной на единицу, затем возвращает новое значение. 🟠Постфиксный декремент (`x--`) Возвращает текущее значение переменной, а затем уменьшает его на единицу.
<?php
$x = 10;
$y = 10;

// Пример префиксного инкремента
echo ++$x; // Выводит 11, x теперь равен 11

// Пример постфиксного инкремента
echo $y++; // Выводит 10, y теперь равен 11
echo $y; // Выводит 11

// Пример префиксного декремента
echo --$x; // Выводит 10, x теперь равен 10

// Пример постфиксного декремента
echo $y--; // Выводит 11, y теперь равен 10
echo $y; // Выводит 10
?>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как устроен типичный тест на opening point? Тест на Opening Point проверяет, корректно ли открывается доступ к ресурсу. Он может включать: - Авторизацию – доступ пользователя после входа. - Перенаправления – корректный редирект при попытке входа. - Доступность URL – проверка HTTP-ответа (например, 200 OK). - Безопасность – отсутствие утечек при открытии ресурса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Зачем использовать 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 чаще используется в корпоративных системах (банки, госструктуры), но хуже подходит для современных веб-приложений. Ставь 👍 и забирай 📚 Базу знаний