Это архитектурный паттерн, который разделяет операции чтения и записи на разные модели данных. Это улучшает производительность, масштабируемость и упрощает поддержку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Форматы запросов и ответов в приложении предназначены для стандартизированного обмена данными между клиентом (браузером, мобильным приложением) и сервером (PHP-приложением). Они позволяют:
Обеспечить совместимость между разными системами
Облегчить обработку данных на сервере и клиенте
Структурировать данные в удобном формате
Когда клиент отправляет запрос на сервер, данные могут передаваться разными способами.
Используется для получения информации. Данные передаются в строке запроса.
GET /api/users?id=10
Пример обработки в PHP
$id = $_GET['id']; // Получаем id из URL
Используется для отправки данных (например, формы).
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'];Используются в REST API для изменения или удаления данных.
Сервер отправляет ответ в определённом формате, который клиент сможет распознать.
Используется в API и веб-приложениях.
{
"status": "success",
"message": "Данные получены"
}Пример ответа в PHP
header("Content-Type: application/json");
echo json_encode(["status" => "success", "message" => "Данные получены"]);Пример XML-ответа
<response>
<status>success</status>
<message>Данные получены</message>
</response>
Например, при загрузке сайта.
echo "<h1>Привет, мир!</h1>";
Если нужен простой текст
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 "Привет, обычный текст!";
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
- Линейные: массивы, списки, очереди, стеки.
- Нелинейные: деревья, графы.
- Ассоциативные: хеш-таблицы, словари.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это платформа для разработки, доставки и запуска приложений в изолированных контейнерах. Она позволяет упаковывать приложения и все их зависимости в контейнеры, которые могут работать на любой системе, поддерживающей Docker, что делает приложения более переносимыми и независимыми от окружения.
Контейнеры — это легковесные, автономные, исполняемые пакеты, которые включают в себя все необходимое для запуска приложения: код, библиотеки, зависимости и системные инструменты. Контейнеры изолированы друг от друга и от хоста, что обеспечивает консистентность работы приложения в различных средах.
Образ Docker — это неизменяемый шаблон, из которого создаются контейнеры. Образы могут базироваться на других образах и содержат все необходимое для запуска приложения. Например, образ может содержать операционную систему, веб-сервер и само приложение.
Dockerfile — это текстовый файл с инструкциями по созданию Docker-образа. Он содержит последовательность команд, которые Docker выполняет для сборки образа.
# Используем базовый образ
FROM php:8.0-apache
# Копируем локальные файлы в контейнер
COPY src/ /var/www/html/
# Устанавливаем зависимости
RUN docker-php-ext-install mysqli
Docker Hub — это облачный сервис для хранения и обмена Docker-образами. Он позволяет публиковать свои образы и загружать образы, созданные другими пользователями.
Контейнеры могут работать на любом сервере, где установлен Docker, что позволяет легко перемещать приложения между различными средами (разработка, тестирование, продакшн).
Контейнеры изолируют приложения и их зависимости, предотвращая конфликты между различными версиями библиотек и инструментов, используемых на одном сервере.
Контейнеры используют общие ресурсы ядра хостовой операционной системы, что делает их более легковесными по сравнению с виртуальными машинами.
Контейнеры можно запускать и останавливать за считанные секунды, что ускоряет процессы разработки, тестирования и развертывания приложений.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Тест на Opening Point (OP-тест) используется для проверки скорости, с которой игрок или программа находят критически важное первое решение в задаче. Такой тест чаще всего применяется в шахматах, игровых стратегиях, а также в программировании при оценке эвристик.
Например, шахматная позиция, игровая ситуация или входные данные для алгоритма.
В шахматах это может быть лучший ход. В алгоритмах — первое удачное разбиение задачи.
Важно, насколько быстро испытуемый (или программа) нашёл первый ход. Проверяется, соответствует ли он эталону (оптимальному решению).
В шахматах 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Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это механизм выявления и реагирования на непредвиденные ситуации в коде.
- Ошибки (Errors) – критические сбои (OutOfMemoryError, StackOverflowError).
- Исключения (Exceptions) – проблемы в логике (NullPointerException, IOException).
Обрабатываются с помощью try-catch-finally, throw, throws, а также глобальных обработчиков (onError, fallback strategies).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Структуры данных — это способы хранения и организации данных в памяти компьютера. Они помогают эффективно управлять данными и выбирать оптимальные алгоритмы.
Упорядоченная коллекция элементов, доступ к которым осуществляется по индексу. Когда нужно быстро получать элементы по индексу.
Доступ:
O(1) Поиск:
O(n) Вставка/Удаление:
O(n) (из-за необходимости сдвига элементов) $numbers = [10, 20, 30, 40];
echo $numbers[2]; // 30
Элементы (узлы) хранят ссылку на следующий (а иногда и на предыдущий) элемент.
Когда часто вставляете/удаляете элементы (без затрат на сдвиг).
Доступ:
O(n) Вставка/Удаление:
O(1) (если известен указатель) class Node {
public int $data;
public ?Node $next;
public function __construct(int $data) {
$this->data = $data;
$this->next = null;
}
}Структура LIFO (Last In, First Out). Элементы добавляются и удаляются только с одного конца.
Для обратного прохода, отмены операций, рекурсии.
Вставка/Удаление:
O(1) Доступ:
O(n) $stack = new SplStack();
$stack->push(1);
$stack->push(2);
echo $stack->pop(); // 2 (удаляется последний добавленный)
Структура FIFO (First In, First Out). Первым зашёл – первым вышел.
Когда элементы должны обрабатываться по порядку (например, задачи в принтере).
Вставка/Удаление:
O(1) $queue = new SplQueue();
$queue->enqueue(1);
$queue->enqueue(2);
echo $queue->dequeue(); // 1 (удаляется первый добавленный)
Хранит пары ключ → значение, обеспечивает быстрый доступ по ключу.
Когда нужен быстрый поиск и хранение пар ключ-значение.
Доступ/Поиск:
O(1) $hashTable = [
"name" => "Alice",
"age" => 25
];
echo $hashTable["name"]; // Alice
Иерархическая структура, где каждый узел может иметь несколько дочерних.
Когда важны иерархии (например, файловые системы, база данных).
Виды
Двоичное дерево (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;
}
}Набор вершин (узлов) и рёбер (связей между узлами).
Для моделирования сетей, карт, социальных графов.
Типы графов
Ориентированный (направленный) / Неориентированный
Взвешенный / Невзвешенный
Ациклический (DAG)
$graph = [
"A" => ["B", "C"],
"B" => ["A", "D", "E"],
"C" => ["A", "F"],
"D" => ["B"],
"E" => ["B", "F"],
"F" => ["C", "E"]
];
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
• Фабрика скрывает детали создания объектов, предоставляя интерфейс для их создания.
• Пример: ShapeFactory может возвращать объекты разных классов (Circle, Square) на основе входных параметров.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Внешний ключ (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
);
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
2. Микросервисы: Laravel может быть избыточен из-за большого количества встроенных компонентов.
3. Проекты с крайне низким бюджетом: из-за сложности поддержки на минимальных конфигурациях серверов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5
Это переменные, имена которых определяются во время выполнения программы. Это позволяет создавать, модифицировать или обращаться к переменным динамически, основываясь на входных данных или условиях выполнения программы. Такой подход может быть полезен в сценариях, где структура данных неизвестна на момент написания кода или когда нужно генерировать переменные на лету в зависимости от контекста выполнения.
Имена переменных могут быть динамически сформированы с использованием переменных переменных
$name = "variable";
$$name = "Hello, World!";
echo $variable; // Выведет "Hello, World!"
Плюсы и минусы
позволяет создавать более адаптивные и динамические программы, которые могут работать с данными, структура которых заранее неизвестна.
упрощает работу с большим количеством похожих переменных или свойств объекта без необходимости явного объявления каждой переменной.
использование динамических переменных может сделать код менее понятным и труднее для отладки, поскольку не всегда ясно, какие переменные создаются и используются.
динамическое создание большого количества переменных может привести к неэффективному использованию памяти и снижению производительности.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Это два подхода к проектированию структуры баз данных. Они используются для оптимизации хранения данных и повышения производительности запросов.
Это процесс структурирования базы данных для уменьшения избыточности данных и устранения аномалий при обновлении, вставке или удалении данных.
Это помогает экономить место и поддерживать согласованность данных.
Например, если данные изменяются в одном месте, то изменения не нужно делать в других местах.
Удаление повторяющихся групп и дублирующихся данных.
Устранение частичной зависимости данных от составного ключа.
Устранение транзитивной зависимости (когда данные зависят не от первичного ключа напрямую, а через другие поля).
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;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Причины: отсутствие индексов, сложные объединения, большой объём данных.
2. Оптимизация: использование индексов, анализ плана выполнения (EXPLAIN) и уменьшение объёма данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это ПО, которое располагается между веб-сервером и приложением. Оно обрабатывает входящие запросы до того, как они достигнут вашего приложения, или обрабатывает исходящие ответы после того, как приложение их сгенерировало.
Может изменять или проверять запросы перед передачей их в приложение. Например, оно может проверять наличие валидных токенов доступа для аутентификации или осуществлять проверку прав доступа.
Также может изменять ответы перед тем, как они будут отправлены пользователю, например, добавлять нужные заголовки 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);
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
1. Они защищают от SQL-инъекций, так как параметры передаются отдельно от запроса.
2. Улучшают производительность, так как один запрос можно выполнить несколько раз с разными данными.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В PHP существуют различные уровни ошибок, которые помогают разработчикам выявлять и исправлять проблемы в коде. Эти уровни ошибок задаются с помощью констант и управляются функцией
error_reporting(). Рассмотрим основные уровни ошибок:Критическая ошибка, которая приводит к завершению работы скрипта.
Например, вызов несуществующей функции
someUndefinedFunction(); // Вызовет E_ERROR
Не фатальная ошибка, скрипт продолжит выполнение.
Например, деление на ноль или использование
include() для несуществующего файла:echo 10 / 0; // Вызовет E_WARNING
Ошибка синтаксиса в коде, обнаруживаемая на этапе компиляции.
Например, забытая точка с запятой:
echo "Hello" // Отсутствует ;
Сообщает о некритичных ошибках, например, об использовании неинициализированной переменной:
echo $undefinedVariable; // Вызовет E_NOTICE
Аналогична
E_ERROR, но возникает на этапе загрузки PHP. Аналогична
E_WARNING, но на этапе загрузки PHP. Ошибки, связанные с компиляцией скрипта, например, при ошибке в
require. Предупреждения компилятора.
Вызывается вручную с помощью
trigger_error(): trigger_error("Критическая ошибка!", E_USER_ERROR);Аналогично
E_WARNING, но создаётся пользователем. Аналогично
E_NOTICE, но вызывается вручную. Сообщает о потенциальных проблемах совместимости.
Фатальная ошибка, которую можно обработать через
set_error_handler(). Указывает, что используется устаревшая функция.
Вызывается пользователем через
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);Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Типизация в программировании — это механизм, который определяет, как значения различных типов (например, целые числа, строки, объекты и т.д.) обрабатываются и взаимодействуют в языке программирования. Типизация помогает предотвратить ошибки, связанные с некорректным использованием данных, и улучшает читаемость и поддержку кода.
Типы переменных известны и проверяются на этапе компиляции. Примеры языков: Java, C++, TypeScript.
Типы переменных определяются и проверяются во время выполнения программы. Примеры языков: Python, JavaScript, PHP.
Язык строго следит за типами, не позволяя неявные преобразования между ними. Примеры языков: Haskell, Java.
Язык допускает неявные преобразования между типами. Примеры языков: PHP, JavaScript.
PHP — язык с динамической и слабой типизацией, но с версией 7.0 и выше появилась возможность использовать строгую типизацию.
$number = 10;
$number = "ten"; // PHP позволяет это, так как тип переменной может изменяться
С PHP 7.0 можно использовать строгую типизацию для функций и методов. Это позволяет явно указывать, какого типа аргументы и возвращаемое значение должны быть.
declare(strict_types=1); // Включает строгую типизацию
function add(int $a, int $b): int {
return $a + $b;
}
echo add(2, 3); // Работает
// echo add(2, "3"); // Ошибка, так как второй аргумент не является целым числом
Типизация помогает обнаруживать ошибки на ранних этапах разработки, таких как попытка выполнения некорректных операций с данными.
Явное указание типов делает код более понятным и предсказуемым, что облегчает его поддержку и развитие.
Статически типизированные языки позволяют компиляторам оптимизировать выполнение кода, так как типы известны на этапе компиляции.
Типизация служит дополнительной документацией, помогая разработчикам понять, какие данные ожидаются и возвращаются функциями и методами.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM