🤔 Расскажи про фабрики
Это шаблон проектирования, который относится к порождающим шаблонам и используется для создания объектов без необходимости указывать точный класс создаваемого объекта. Основная идея фабрики заключается в том, чтобы делегировать создание объектов специальному классу или методу, что упрощает управление кодом и позволяет добиться большей гибкости и расширяемости.
🚩Зачем нужны фабрики?
🟠Инкапсуляция процесса создания объектов
Если создание объекта требует сложной логики или конфигурации, фабрика позволяет скрыть эту сложность от остальной части кода.
🟠Снижение зависимости от конкретных классов
Вы используете интерфейсы или абстрактные классы вместо конкретных реализаций. Это упрощает замену одного типа объекта на другой.
🟠Гибкость и расширяемость
Фабрики позволяют добавлять новые классы без изменения существующего кода.
🚩Типы фабрик
🟠Простая фабрика (Simple Factory)
Это метод, который возвращает объект одного из нескольких возможных классов в зависимости от переданных параметров.
🟠Фабричный метод (Factory Method)
В этом шаблоне создание объекта делегируется подклассам. Основной класс определяет интерфейс для создания объектов, но сам не знает, какие конкретные классы будут созданы.
🟠Абстрактная фабрика (Abstract Factory)
Этот шаблон используется для создания семейств взаимосвязанных объектов.
🚩Как использовать фабрики?
Если вы работаете с приложением, где объекты часто меняются, например, в зависимости от окружения (Windows, MacOS).
Когда создание объектов сложное и требует дополнительной логики.
Когда нужно уменьшить зависимость между модулями.
Ставь 👍 и забирай 📚 Базу знаний
Это шаблон проектирования, который относится к порождающим шаблонам и используется для создания объектов без необходимости указывать точный класс создаваемого объекта. Основная идея фабрики заключается в том, чтобы делегировать создание объектов специальному классу или методу, что упрощает управление кодом и позволяет добиться большей гибкости и расширяемости.
🚩Зачем нужны фабрики?
🟠Инкапсуляция процесса создания объектов
Если создание объекта требует сложной логики или конфигурации, фабрика позволяет скрыть эту сложность от остальной части кода.
🟠Снижение зависимости от конкретных классов
Вы используете интерфейсы или абстрактные классы вместо конкретных реализаций. Это упрощает замену одного типа объекта на другой.
🟠Гибкость и расширяемость
Фабрики позволяют добавлять новые классы без изменения существующего кода.
🚩Типы фабрик
🟠Простая фабрика (Simple Factory)
Это метод, который возвращает объект одного из нескольких возможных классов в зависимости от переданных параметров.
class ShapeFactory {
public static function createShape(string $type) {
return match ($type) {
'circle' => new Circle(),
'square' => new Square(),
default => throw new Exception("Unknown shape type"),
};
}
}
$circle = ShapeFactory::createShape('circle'); // Возвращает объект Circle
🟠Фабричный метод (Factory Method)
В этом шаблоне создание объекта делегируется подклассам. Основной класс определяет интерфейс для создания объектов, но сам не знает, какие конкретные классы будут созданы.
interface Logger {
public function log(string $message);
}
class FileLogger implements Logger {
public function log(string $message) {
echo "Logging to a file: $message";
}
}
class DatabaseLogger implements Logger {
public function log(string $message) {
echo "Logging to a database: $message";
}
}
abstract class LoggerFactory {
abstract public function createLogger(): Logger;
}
class FileLoggerFactory extends LoggerFactory {
public function createLogger(): Logger {
return new FileLogger();
}
}
$factory = new FileLoggerFactory();
$logger = $factory->createLogger();
$logger->log("Hello World");
🟠Абстрактная фабрика (Abstract Factory)
Этот шаблон используется для создания семейств взаимосвязанных объектов.
interface GUIFactory {
public function createButton(): Button;
public function createCheckbox(): Checkbox;
}
class WindowsFactory implements GUIFactory {
public function createButton(): Button {
return new WindowsButton();
}
public function createCheckbox(): Checkbox {
return new WindowsCheckbox();
}
}
class MacOSFactory implements GUIFactory {
public function createButton(): Button {
return new MacOSButton();
}
public function createCheckbox(): Checkbox {
return new MacOSCheckbox();
}
}
$factory = new WindowsFactory();
$button = $factory->createButton();
$checkbox = $factory->createCheckbox();
🚩Как использовать фабрики?
Если вы работаете с приложением, где объекты часто меняются, например, в зависимости от окружения (Windows, MacOS).
Когда создание объектов сложное и требует дополнительной логики.
Когда нужно уменьшить зависимость между модулями.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое индекс?
Индекс в контексте баз данных — это структура данных, которая улучшает скорость операций поиска/выборки данных, но может замедлить добавление, удаление и обновление данных из-за необходимости поддерживать индекс в актуальном состоянии.?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Какие есть виды join?
В SQL есть 5 основных видов
🟠`INNER JOIN`
пересечение двух таблиц (только совпадающие записи).
🟠`LEFT JOIN`
все записи из левой таблицы + совпадения из правой.
🟠`RIGHT JOIN`
все записи из правой таблицы + совпадения из левой.
🟠`FULL JOIN`
объединяет все записи из обеих таблиц.
🟠`CROSS JOIN`
декартово произведение (каждая строка первой таблицы соединяется с каждой строкой второй).
🚩`INNER JOIN` – только совпадения
Возвращает только те строки, у которых есть совпадения в обеих таблицах.
🚩`LEFT 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
🤔 Что известно про фабрики?
Это порождающий паттерн, создающий объекты без явного указания их класса.
1. Simple Factory: один метод создаёт разные объекты.
2. Factory Method: делегирует создание объектов подклассам.
3. Abstract Factory: создаёт семейства связанных объектов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Simple Factory: один метод создаёт разные объекты.
2. Factory Method: делегирует создание объектов подклассам.
3. Abstract Factory: создаёт семейства связанных объектов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какой синтаксис у заголовков?
Заголовки в языках и разметки часто используются для указания ключевой информации, на которую стоит обратить внимание, и они различаются в зависимости от конкретного контекста и языка. Ниже приведены примеры синтаксиса заголовков в различных контекстах:
🚩Заголовки в HTML
Поддерживает шесть уровней заголовков, от
🚩Заголовки в Markdown
Это язык разметки, который упрощает форматирование текста, особенно для написания документации. Заголовки создаются с помощью символа
🚩Заголовки в LaTeX
Это система подготовки документов, широко используемая для научных и технических документов. В LaTeX заголовки создаются с помощью команд
🚩Заголовки в Языке разметки Wiki
Многие вики-движки (например, MediaWiki) используют свои синтаксисы для создания заголовков. В MediaWiki заголовки создаются с помощью равно (
🚩Заголовки в языках
Часто не используются так же, как в разметке, но комментарии могут выполнять схожую роль для организации и документирования кода. Примеры синтаксиса для комментариев-заголовков:
Python
JavaScript
Ставь 👍 и забирай 📚 Базу знаний
Заголовки в языках и разметки часто используются для указания ключевой информации, на которую стоит обратить внимание, и они различаются в зависимости от конкретного контекста и языка. Ниже приведены примеры синтаксиса заголовков в различных контекстах:
🚩Заголовки в 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
// ~~~~~~~~~~~~~~~~~
Ставь 👍 и забирай 📚 Базу знаний
💊1
🤔 Принципы ООП
Основные принципы объектно-ориентированного программирования включают инкапсуляцию (сокрытие деталей реализации), наследование (использование общих свойств и поведения базовых классов), полиморфизм (один интерфейс для разных типов данных) и абстракцию (определение шаблонного интерфейса для группы связанных объектов).?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое стрелочные и анонимные функции?
Стрелочные функции (также известные как лямбда-функции) и анонимные функции служат для создания функций без имени, которые могут быть использованы в качестве значений переменных, параметров функций или просто для выполнения некоторого действия на месте.
🚩Анонимные функции
Это функции без имени, которые часто используются для создания функций-замыканий. Замыкания позволяют функциям захватывать переменные из своей области видимости. Анонимные функции создаются с использованием ключевого слова
🚩Стрелочные функции
Были введены в PHP 7.4 и представляют собой более компактный способ создания анонимных функций. Они используют синтаксис
🚩Зачем это нужно?
🟠Удобство
Создание функций на месте без необходимости придумывать имена.
🟠Замыкания
Возможность захвата переменных из внешней области видимости.
🟠Читабельность кода
Стрелочные функции делают код более лаконичным и читаемым.
🚩Как это используется?
🟠Фильтрация и сортировка массивов
Часто используются в функциях вроде
🟠Колбэки
Передача функции в качестве аргумента в другие функции (например, для обработки событий).
Ставь 👍 и забирай 📚 Базу знаний
Стрелочные функции (также известные как лямбда-функции) и анонимные функции служат для создания функций без имени, которые могут быть использованы в качестве значений переменных, параметров функций или просто для выполнения некоторого действия на месте.
🚩Анонимные функции
Это функции без имени, которые часто используются для создания функций-замыканий. Замыкания позволяют функциям захватывать переменные из своей области видимости. Анонимные функции создаются с использованием ключевого слова
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 )
?>
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое инкапсуляция?
Инкапсуляция — это принцип ООП, при котором детали реализации скрыты от внешнего мира, предоставляя доступ к данным через методы. В PHP это реализуется с помощью модификаторов доступа (private, protected, public). Она обеспечивает безопасность данных и облегчает поддержку кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В чём суть абстрактного класса?
Абстрактный класс и в ООП в целом — это специальный тип класса, который не может быть инстанциирован напрямую. Это означает, что вы не можете создать объект абстрактного класса используя оператор
Ставь 👍 и забирай 📚 Базу знаний
Абстрактный класс и в ООП в целом — это специальный тип класса, который не может быть инстанциирован напрямую. Это означает, что вы не можете создать объект абстрактного класса используя оператор
new напрямую. Суть его заключается в том, чтобы служить основой для других классов, от которых будут создаваться объекты.abstract class ТранспортноеCредство {
protected $скорость;
public function установитьСкорость($скорость) {
$this->скорость = $скорость;
}
abstract public function двигаться();
}
class Автомобиль extends ТранспортноеCредство {
public function двигаться() {
echo "Движется на скорости: " . $this->скорость . " км/ч";
}
}
// $транспорт = new ТранспортноеCредство(); // Ошибка: не может быть инстанциирован
$автомобиль = new Автомобиль();
$автомобиль->установитьСкорость(60);
$автомобиль->двигаться();Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое CQRS?
Это архитектурный паттерн, который разделяет операции чтения и записи на разные модели данных. Это улучшает производительность, масштабируемость и упрощает поддержку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это архитектурный паттерн, который разделяет операции чтения и записи на разные модели данных. Это улучшает производительность, масштабируемость и упрощает поддержку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое Rest?
Это архитектурный стиль для создания веб-сервисов, который был предложен Роем Филдингом в его докторской диссертации в 2000 году. В его основе лежит принцип использования стандартных HTTP методов (GET, POST, PUT, DELETE и др.) для взаимодействия с ресурсами, представленными в виде URL.
🚩Основные принципы
🟠Адресуемость (Addressability)
Каждому ресурсу (например, пользователю, товару) соответствует уникальный URL.
🟠Использование стандартных методов HTTP
Использует методы HTTP для выполнения операций с ресурсами.
🟠Статусность (Statelessness)
Каждый запрос к серверу должен содержать всю необходимую информацию для его обработки. Сервер не хранит информацию о состоянии клиента между запросами.
🟠Кэширование (Caching)
Ответы от сервера могут кэшироваться, чтобы улучшить производительность и снизить нагрузку на сервер.
🟠Единообразие интерфейса (Uniform Interface)
Все взаимодействия между клиентом и сервером стандартизированы, что упрощает интеграцию и взаимодействие между системами.
🚩Примеры
🟠Получение списка пользователей (GET)
Запрос
Ответ
🟠Получение информации о конкретном пользователе (GET)
Запрос
Ответ
🟠Создание нового пользователя (POST)
Запрос
Ответ (Успешное создание)
🟠Обновление информации о пользователе (PUT)
Запрос
Ответ
🟠Удаление пользователя (DELETE)
Запрос
Ответ (Успешное удаление)
Ставь 👍 и забирай 📚 Базу знаний
Это архитектурный стиль для создания веб-сервисов, который был предложен Роем Филдингом в его докторской диссертации в 2000 году. В его основе лежит принцип использования стандартных HTTP методов (GET, POST, PUT, DELETE и др.) для взаимодействия с ресурсами, представленными в виде URL.
🚩Основные принципы
🟠Адресуемость (Addressability)
Каждому ресурсу (например, пользователю, товару) соответствует уникальный URL.
🟠Использование стандартных методов HTTP
Использует методы HTTP для выполнения операций с ресурсами.
GET: Получение данных.POST: Создание нового ресурса.PUT: Обновление существующего ресурса.DELETE: Удаление ресурса.🟠Статусность (Statelessness)
Каждый запрос к серверу должен содержать всю необходимую информацию для его обработки. Сервер не хранит информацию о состоянии клиента между запросами.
🟠Кэширование (Caching)
Ответы от сервера могут кэшироваться, чтобы улучшить производительность и снизить нагрузку на сервер.
🟠Единообразие интерфейса (Uniform Interface)
Все взаимодействия между клиентом и сервером стандартизированы, что упрощает интеграцию и взаимодействие между системами.
🚩Примеры
🟠Получение списка пользователей (GET)
Запрос
GET /users
Ответ
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
🟠Получение информации о конкретном пользователе (GET)
Запрос
GET /users/1
Ответ
{
"id": 1,
"name": "Alice"
}🟠Создание нового пользователя (POST)
Запрос
POST /users
Content-Type: application/json
{
"name": "Charlie"
}
Ответ (Успешное создание)
{
"id": 3,
"name": "Charlie"
}🟠Обновление информации о пользователе (PUT)
Запрос
PUT /users/1
Content-Type: application/json
{
"name": "Alice Updated"
}
Ответ
{
"id": 1,
"name": "Alice Updated"
}🟠Удаление пользователя (DELETE)
Запрос
DELETE /users/1
Ответ (Успешное удаление)
{
"message": "User deleted"
}Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое динамическая типизация
Динамическая типизация — это свойство языка программирования, где тип переменной определяется во время выполнения, а не во время компиляции. Это позволяет использовать одну переменную для хранения данных разных типов, упрощая код, но также увеличивая вероятность ошибок, так как проверки типов происходят в процессе выполнения. Языки с динамической типизацией, такие как Python и JavaScript, предлагают большую гибкость, но требуют внимательности при работе с типами.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Чем отличается Require от Includ'а?
В PHP есть две схожие конструкции для подключения файлов:
🟠Основное различие: Ошибки при отсутствии файла
Результат (если файла
Пример с
Результат (если файла
🟠Использование и рекомендации
🟠`require_once` и `include_once`
Дополнительно существуют
Ставь 👍 и забирай 📚 Базу знаний
В PHP есть две схожие конструкции для подключения файлов:
require и include. Однако между ними есть важные различия.🟠Основное различие: Ошибки при отсутствии файла
require вызывает фатальную ошибку (Fatal Error), если указанный файл не найден или содержит ошибку. Это приведёт к немедленному завершению выполнения скрипта.include вызывает предупреждение (Warning), но код продолжит выполняться дальше.require 'somefile.php'; // Если файла нет, скрипт завершится с ошибкой
echo "Этот код не выполнится";
Результат (если файла
somefile.php нет):Fatal error: require(): Failed opening 'somefile.php'...
Пример с
includeinclude 'somefile.php'; // Если файла нет, скрипт выдаст предупреждение, но продолжит выполняться
echo "Этот код выполнится";
Результат (если файла
somefile.php нет):Warning: include(somefile.php): failed to open stream...
Этот код выполнится
🟠Использование и рекомендации
require используют, когда файл обязателен для работы скрипта (например, файл с настройками или важными функциями).include используют, когда файл необязателен, и его отсутствие не должно прерывать выполнение (например, дополнительный шаблон страницы).🟠`require_once` и `include_once`
Дополнительно существуют
require_once и include_once, которые работают аналогично, но не подключают файл повторно, если он уже был подключён.require_once 'config.php'; // Подключится только один раз, даже если вызвано несколько раз
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое HTTP?
HTTP (HyperText Transfer Protocol) — это протокол передачи гипертекста, используемый для обмена данными между веб-браузером и сервером. HTTP определяет методы (GET, POST, DELETE и др.), которые управляют отправкой и получением данных через Интернет.?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Имеет ли значение регистр заголовка?
Значение регистра заголовков может варьироваться в зависимости от конкретного контекста или системы разметки, в которой используются заголовки. Рассмотрим несколько примеров, чтобы понять, как различные системы относятся к регистру заголовков.
🚩HTML
Регистр заголовков не имеет значения. Теги HTML не чувствительны к регистру, поэтому
🚩Markdown
Регистр заголовков также не имеет значения для самой разметки, но обычно принято использовать заглавные буквы для первых букв слов в заголовках, чтобы улучшить читаемость.
🚩LaTeX
Регистр заголовков тоже не имеет значения с точки зрения разметки, но стандартной практикой является использование заглавных букв в начале каждого важного слова для улучшения читаемости.
🚩Wiki-разметка (например, MediaWiki)
Регистр заголовков не влияет на разметку, но для консистентности и лучшей читаемости заголовки часто оформляют с заглавными буквами
🚩Языки программирования
Как таковые не используются, но комментарии-заголовки могут быть оформлены по-разному. Регистр здесь также не имеет значения для компилятора или интерпретатора, но для людей, читающих код, использование заглавных букв может сделать заголовки более заметными
Оба варианта являются допустимыми комментариями
Ставь 👍 и забирай 📚 Базу знаний
Значение регистра заголовков может варьироваться в зависимости от конкретного контекста или системы разметки, в которой используются заголовки. Рассмотрим несколько примеров, чтобы понять, как различные системы относятся к регистру заголовков.
🚩HTML
Регистр заголовков не имеет значения. Теги HTML не чувствительны к регистру, поэтому
<H1>Заголовок</H1> и <h1>Заголовок</h1> будут интерпретироваться одинаково.<h1>Заголовок</h1>
<H1>Заголовок</H1>
🚩Markdown
Регистр заголовков также не имеет значения для самой разметки, но обычно принято использовать заглавные буквы для первых букв слов в заголовках, чтобы улучшить читаемость.
# Заголовок
# заголовок
🚩LaTeX
Регистр заголовков тоже не имеет значения с точки зрения разметки, но стандартной практикой является использование заглавных букв в начале каждого важного слова для улучшения читаемости.
\section{Заголовок}
\section{заголовок}🚩Wiki-разметка (например, MediaWiki)
Регистр заголовков не влияет на разметку, но для консистентности и лучшей читаемости заголовки часто оформляют с заглавными буквами
= Заголовок =
= заголовок =
🚩Языки программирования
Как таковые не используются, но комментарии-заголовки могут быть оформлены по-разному. Регистр здесь также не имеет значения для компилятора или интерпретатора, но для людей, читающих код, использование заглавных букв может сделать заголовки более заметными
# ЗАГОЛОВОК УРОВНЯ 1
# заголовок уровня 1
Оба варианта являются допустимыми комментариями
// ЗАГОЛОВОК УРОВНЯ 1
// заголовок уровня 1
Ставь 👍 и забирай 📚 Базу знаний
🤔 Чем класс отличается от объекта?
1. Класс — это шаблон или "чертёж", описывающий свойства и поведение объектов.
2. Объект — это экземпляр класса, созданный с использованием его структуры.
3. Класс определяет, что объект может делать, а объект выполняет это поведение.
4. Класс — это абстракция, объект — конкретное воплощение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Объект — это экземпляр класса, созданный с использованием его структуры.
3. Класс определяет, что объект может делать, а объект выполняет это поведение.
4. Класс — это абстракция, объект — конкретное воплощение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое автоматическая загрузка классов?
Автоматическая загрузка классов (Autoloading) — это механизм, который позволяет не подключать вручную файлы с классами с помощью
🚩Как работает автозагрузка?
Без автозагрузки (ручное подключение)
С автозагрузкой (PHP сам загружает классы)
🚩Современный способ – автозагрузка через Composer
Если проект использует Composer, можно настроить автозагрузку по стандарту PSR-4.
1⃣В
2⃣В папке
-
-
3⃣Запускаем команду
4⃣Теперь можно использовать классы без
Ставь 👍 и забирай 📚 Базу знаний
Автоматическая загрузка классов (Autoloading) — это механизм, который позволяет не подключать вручную файлы с классами с помощью
require или include. Вместо этого PHP автоматически загружает нужный класс при его первом использовании. 🚩Как работает автозагрузка?
Без автозагрузки (ручное подключение)
require_once "Car.php";
require_once "Bike.php";
$car = new Car();
$bike = new Bike();
С автозагрузкой (PHP сам загружает классы)
spl_autoload_register(function ($class) {
require_once $class . ".php";
});
$car = new Car(); // PHP сам загрузит "Car.php"
$bike = new Bike(); // PHP сам загрузит "Bike.php"🚩Современный способ – автозагрузка через Composer
Если проект использует Composer, можно настроить автозагрузку по стандарту PSR-4.
1⃣В
composer.json добавляем:"autoload": {
"psr-4": {
"App\\": "src/"
}
}2⃣В папке
src/ создаём классы, например -
src/Car.php -
src/Bike.php 3⃣Запускаем команду
composer dump-autoload
4⃣Теперь можно использовать классы без
require:require 'vendor/autoload.php';
use App\Car;
use App\Bike;
$car = new Car();
$bike = new Bike();
Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Что такое транзакция?
Транзакция — это последовательность операций с базой данных, которые выполняются как единое целое. Транзакции обеспечивают целостность данных, гарантируя, что все операции будут завершены успешно или, в случае ошибки, откатятся к исходному состоянию. Основные свойства транзакций описываются понятием ACID: атомарность, согласованность, изолированность и долговечность. Транзакции часто используются для обеспечения надежности при работе с критически важными данными.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Чем HTTP первой версии отличается от второй?
HTTP/1.1 и HTTP/2 — это две версии протокола передачи гипертекста (HTTP), которые имеют ряд ключевых отличий. Каждая версия протокола внесла значительные улучшения в эффективность, производительность и возможности веб-коммуникации.
🚩HTTP/1.1
🟠Постоянные соединения
По умолчанию соединения остаются открытыми после завершения запроса, что позволяет отправлять несколько запросов по одному соединению и уменьшает нагрузку на сеть и серверы.
🟠Кэширование
Введены более сложные механизмы кэширования с использованием заголовков
🟠Коды состояния HTTP
Добавлены новые коды состояния для более точного представления различных сценариев веб-взаимодействия.
🟠Чанковая передача данных
Поддержка передачи данных в частях (chunks), что позволяет динамически генерировать содержимое и отправлять его по мере готовности.
🟠Хосты и виртуальные хосты
Поддержка заголовка
🚩HTTP/2
🟠Бинарный протокол
В отличие от текстового HTTP/1.1, HTTP/2 использует бинарный формат, который упрощает и ускоряет его разбор.
🟠Мультиплексирование
Одно соединение теперь может одновременно передавать несколько потоков данных, что устраняет проблему "заголовочного блока" и значительно повышает производительность.
🟠Управление потоками
HTTP/2 позволяет приоритизировать запросы, что улучшает загрузку ресурсов на странице.
🟠Сжатие заголовков
В HTTP/2 используется сжатие заголовков HPACK для уменьшения накладных расходов, связанных с метаданными HTTP.
🟠Server Push
Серверы могут активно отправлять ресурсы клиенту до того, как клиент явно запросит их, что улучшает время загрузки страниц.
Ставь 👍 и забирай 📚 Базу знаний
HTTP/1.1 и HTTP/2 — это две версии протокола передачи гипертекста (HTTP), которые имеют ряд ключевых отличий. Каждая версия протокола внесла значительные улучшения в эффективность, производительность и возможности веб-коммуникации.
🚩HTTP/1.1
🟠Постоянные соединения
По умолчанию соединения остаются открытыми после завершения запроса, что позволяет отправлять несколько запросов по одному соединению и уменьшает нагрузку на сеть и серверы.
🟠Кэширование
Введены более сложные механизмы кэширования с использованием заголовков
ETag, If-Modified-Since, что улучшает управление кэшем и эффективность передачи данных.🟠Коды состояния HTTP
Добавлены новые коды состояния для более точного представления различных сценариев веб-взаимодействия.
🟠Чанковая передача данных
Поддержка передачи данных в частях (chunks), что позволяет динамически генерировать содержимое и отправлять его по мере готовности.
🟠Хосты и виртуальные хосты
Поддержка заголовка
Host, позволяющего размещать несколько доменов на одном IP-адресе.🚩HTTP/2
🟠Бинарный протокол
В отличие от текстового HTTP/1.1, HTTP/2 использует бинарный формат, который упрощает и ускоряет его разбор.
🟠Мультиплексирование
Одно соединение теперь может одновременно передавать несколько потоков данных, что устраняет проблему "заголовочного блока" и значительно повышает производительность.
🟠Управление потоками
HTTP/2 позволяет приоритизировать запросы, что улучшает загрузку ресурсов на странице.
🟠Сжатие заголовков
В HTTP/2 используется сжатие заголовков HPACK для уменьшения накладных расходов, связанных с метаданными HTTP.
🟠Server Push
Серверы могут активно отправлять ресурсы клиенту до того, как клиент явно запросит их, что улучшает время загрузки страниц.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какими способами организовать порции?
Разделение данных на порции (batch processing) может быть организовано разными методами:
1. LIMIT и OFFSET – классический способ для пагинации в SQL.
2. Cursor-based pagination – используется в API, позволяет получать новые данные без смещения.
3. Частичная загрузка данных – загружать данные по мере необходимости (lazy loading).
4. Очереди (Message Queues) – например, RabbitMQ или Kafka для обработки данных в потоках.
5. Шардирование данных – разделение больших таблиц на более мелкие логические части.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Разделение данных на порции (batch processing) может быть организовано разными методами:
1. LIMIT и OFFSET – классический способ для пагинации в SQL.
2. Cursor-based pagination – используется в API, позволяет получать новые данные без смещения.
3. Частичная загрузка данных – загружать данные по мере необходимости (lazy loading).
4. Очереди (Message Queues) – например, RabbitMQ или Kafka для обработки данных в потоках.
5. Шардирование данных – разделение больших таблиц на более мелкие логические части.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое составной индекс?
Составной индекс (Composite Index) – это индекс, который создаётся сразу на несколько колонок таблицы.
🚩Как работает составной индекс?
🟠Пример без индекса (медленный поиск)
Допустим, у нас есть таблица
И мы выполняем поиск по
Создаём составной индекс (ускоряем поиск)
Как SQL использует составной индекс? (Правило слева направо)
Важный момент: составной индекс работает слева направо.
НЕ работает
Ставь 👍 и забирай 📚 Базу знаний
Составной индекс (Composite Index) – это индекс, который создаётся сразу на несколько колонок таблицы.
🚩Как работает составной индекс?
🟠Пример без индекса (медленный поиск)
Допустим, у нас есть таблица
orders CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
status VARCHAR(50),
created_at DATETIME
);
И мы выполняем поиск по
user_id и status SELECT * FROM orders WHERE user_id = 5 AND status = 'paid';
Создаём составной индекс (ускоряем поиск)
CREATE INDEX idx_user_status ON orders(user_id, status);
Как SQL использует составной индекс? (Правило слева направо)
Важный момент: составной индекс работает слева направо.
SELECT * FROM orders WHERE user_id = 5 AND status = 'paid'; -- ✅ Использует индекс
SELECT * FROM orders WHERE user_id = 5; -- ✅ Использует индекс (user_id - первый в индексе)
НЕ работает
SELECT * FROM orders WHERE status = 'paid'; -- ❌ Индекс не используется (user_id пропущен)
Ставь 👍 и забирай 📚 Базу знаний