🤔 Что такое 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 пропущен)
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что из себя представляет http-запрос?
HTTP-запрос — это сообщение, которое клиент отправляет серверу для выполнения определённой операции, например получения данных (GET) или их отправки (POST). Запрос содержит метод, URL, заголовки и тело запроса (если необходимо). Ответ сервера включает статус выполнения, заголовки и данные (если применимо).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие протоколы ты знаешь?
Протоколы в сетевых системах обеспечивают правила передачи данных. Они работают на разных уровнях модели OSI и TCP/IP. Вот основные виды протоколов:
🚩Основные виды протоколов
🟠Физический и канальный уровни
Ethernet: Передача данных по проводным сетям.
Wi-Fi (IEEE 802.11): Беспроводная передача данных.
PPP (Point-to-Point Protocol): Соединение между двумя узлами.
HDLC (High-Level Data Link Control): Передача данных на канальном уровне.
🟠Сетевой уровень
IP (Internet Protocol): Основной протокол для передачи данных в интернете (IPv4 и IPv6).
ICMP (Internet Control Message Protocol): Передача сообщений об ошибках и контроля.
🟠Транспортный уровень
TCP (Transmission Control Protocol): Надежная передача данных.
UDP (User Datagram Protocol): Быстрая, но ненадежная передача данных.
🟠Сеансовый и представительный уровни
SSL/TLS (Secure Sockets Layer / Transport Layer Security): Обеспечение безопасности передачи данных.
NetBIOS: Работа сетевых приложений в локальных сетях.
🟠Прикладной уровень
HTTP/HTTPS (HyperText Transfer Protocol / Secure): Передача веб-страниц.
FTP (File Transfer Protocol): Передача файлов.
SMTP (Simple Mail Transfer Protocol): Передача электронной почты.
POP3/IMAP: Получение электронной почты.
DNS (Domain Name System): Преобразование доменных имен в IP-адреса.
SSH (Secure Shell): Безопасное удаленное управление серверами.
SNMP (Simple Network Management Protocol): Управление сетевыми устройствами.
LDAP (Lightweight Directory Access Protocol): Доступ и управление каталогами.
DHCP (Dynamic Host Configuration Protocol): Динамическое назначение IP-адресов.
🟠Специализированные протоколы
VoIP (Voice over IP): Передача голосовых данных (SIP, RTP).
MQTT (Message Queuing Telemetry Transport): Обмен сообщениями в IoT.
CoAP (Constrained Application Protocol): Работа с ограниченными устройствами в IoT.
Ставь 👍 и забирай 📚 Базу знаний
Протоколы в сетевых системах обеспечивают правила передачи данных. Они работают на разных уровнях модели OSI и TCP/IP. Вот основные виды протоколов:
🚩Основные виды протоколов
🟠Физический и канальный уровни
Ethernet: Передача данных по проводным сетям.
Wi-Fi (IEEE 802.11): Беспроводная передача данных.
PPP (Point-to-Point Protocol): Соединение между двумя узлами.
HDLC (High-Level Data Link Control): Передача данных на канальном уровне.
🟠Сетевой уровень
IP (Internet Protocol): Основной протокол для передачи данных в интернете (IPv4 и IPv6).
ICMP (Internet Control Message Protocol): Передача сообщений об ошибках и контроля.
🟠Транспортный уровень
TCP (Transmission Control Protocol): Надежная передача данных.
UDP (User Datagram Protocol): Быстрая, но ненадежная передача данных.
🟠Сеансовый и представительный уровни
SSL/TLS (Secure Sockets Layer / Transport Layer Security): Обеспечение безопасности передачи данных.
NetBIOS: Работа сетевых приложений в локальных сетях.
🟠Прикладной уровень
HTTP/HTTPS (HyperText Transfer Protocol / Secure): Передача веб-страниц.
FTP (File Transfer Protocol): Передача файлов.
SMTP (Simple Mail Transfer Protocol): Передача электронной почты.
POP3/IMAP: Получение электронной почты.
DNS (Domain Name System): Преобразование доменных имен в IP-адреса.
SSH (Secure Shell): Безопасное удаленное управление серверами.
SNMP (Simple Network Management Protocol): Управление сетевыми устройствами.
LDAP (Lightweight Directory Access Protocol): Доступ и управление каталогами.
DHCP (Dynamic Host Configuration Protocol): Динамическое назначение IP-адресов.
🟠Специализированные протоколы
VoIP (Voice over IP): Передача голосовых данных (SIP, RTP).
MQTT (Message Queuing Telemetry Transport): Обмен сообщениями в IoT.
CoAP (Constrained Application Protocol): Работа с ограниченными устройствами в IoT.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое Low Coupling и High Cohesion?
• Low Coupling (низкая связанность): уменьшение зависимости между модулями, чтобы изменения в одном модуле минимально затрагивали другие.
• High Cohesion (высокая связность): логически связанные функции и данные группируются в одном модуле, делая его функционально независимым.
Совмещение этих принципов упрощает сопровождение и тестирование кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
• Low Coupling (низкая связанность): уменьшение зависимости между модулями, чтобы изменения в одном модуле минимально затрагивали другие.
• High Cohesion (высокая связность): логически связанные функции и данные группируются в одном модуле, делая его функционально независимым.
Совмещение этих принципов упрощает сопровождение и тестирование кода.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое метрики?
Это количественные показатели, используемые для оценки, мониторинга и улучшения различных аспектов работы систем, процессов и проектов. Они предоставляют объективные данные, которые помогают принимать обоснованные решения и улучшать эффективность и качество работы.
🚩Зачем нужны метрики
🟠Измерение производительности
Метрики позволяют оценивать, насколько эффективно работают системы или процессы. Например, метрики производительности могут показать, сколько запросов обрабатывается сервером в секунду или как быстро выполняются алгоритмы.
🟠Мониторинг и контроль
Постоянный мониторинг метрик помогает выявлять проблемы на ранних стадиях. Например, мониторинг времени отклика сервера позволяет обнаружить ухудшение производительности до того, как это повлияет на пользователей.
🟠Принятие решений
Объективные данные, предоставляемые метриками, помогают принимать обоснованные решения по улучшению процессов, распределению ресурсов и планированию. Например, данные о загрузке серверов могут помочь определить, когда нужно добавить новые ресурсы.
🟠Улучшение качества
Метрики качества позволяют оценивать, насколько хорошо продукт или процесс соответствует установленным стандартам и требованиям. Например, метрики кода, такие как количество ошибок или покрытие тестами, помогают улучшать качество программного обеспечения.
🟠Управление проектами
В проектном управлении метрики помогают следить за прогрессом, оценивать риски и управлять ресурсами. Например, метрики времени и затрат помогают следить за выполнением проекта в рамках бюджета и сроков.
🚩Примеры метрик
🟠Метрики производительности
Время отклика (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, памяти, дискового пространства помогают поддерживать высокую производительность и доступность серверов.
Безопасность: Метрики инцидентов безопасности, обнаружения уязвимостей и реагирования на угрозы помогают обеспечивать защиту данных и систем.
Ставь 👍 и забирай 📚 Базу знаний
Это количественные показатели, используемые для оценки, мониторинга и улучшения различных аспектов работы систем, процессов и проектов. Они предоставляют объективные данные, которые помогают принимать обоснованные решения и улучшать эффективность и качество работы.
🚩Зачем нужны метрики
🟠Измерение производительности
Метрики позволяют оценивать, насколько эффективно работают системы или процессы. Например, метрики производительности могут показать, сколько запросов обрабатывается сервером в секунду или как быстро выполняются алгоритмы.
🟠Мониторинг и контроль
Постоянный мониторинг метрик помогает выявлять проблемы на ранних стадиях. Например, мониторинг времени отклика сервера позволяет обнаружить ухудшение производительности до того, как это повлияет на пользователей.
🟠Принятие решений
Объективные данные, предоставляемые метриками, помогают принимать обоснованные решения по улучшению процессов, распределению ресурсов и планированию. Например, данные о загрузке серверов могут помочь определить, когда нужно добавить новые ресурсы.
🟠Улучшение качества
Метрики качества позволяют оценивать, насколько хорошо продукт или процесс соответствует установленным стандартам и требованиям. Например, метрики кода, такие как количество ошибок или покрытие тестами, помогают улучшать качество программного обеспечения.
🟠Управление проектами
В проектном управлении метрики помогают следить за прогрессом, оценивать риски и управлять ресурсами. Например, метрики времени и затрат помогают следить за выполнением проекта в рамках бюджета и сроков.
🚩Примеры метрик
🟠Метрики производительности
Время отклика (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, памяти, дискового пространства помогают поддерживать высокую производительность и доступность серверов.
Безопасность: Метрики инцидентов безопасности, обнаружения уязвимостей и реагирования на угрозы помогают обеспечивать защиту данных и систем.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое ACID?
ACID — это акроним, обозначающий четыре ключевых свойства транзакций в базах данных: Atomicity (атомарность), Consistency (согласованность), Isolation (изоляция), Durability (устойчивость). Эти свойства гарантируют надежное выполнение транзакций.?
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое агрегат?
Агрегат – это термин, часто используемый в области баз данных и программирования, который обозначает способ группировки данных для выполнения различных операций, таких как суммирование, подсчёт, нахождение среднего значения и другие. В реляционных базах данных агрегаты применяются для выполнения агрегатных функций, таких как
🚩Зачем нужны?
🟠Анализ данных:
Агрегаты позволяют получить сводные данные, которые помогают анализировать и понимать большие наборы данных. Например, можно узнать общее количество продаж, среднюю стоимость заказа, максимальную и минимальную зарплату сотрудников и т.д.
🟠Оптимизация запросов:
Использование агрегатных функций позволяет выполнять сложные вычисления на сервере базы данных, что экономит время и ресурсы по сравнению с выполнением этих операций на клиентской стороне.
🚩Примеры использования агрегатных функций:
Суммирование (
Подсчёт (
Среднее значение (
Максимальное значение (
Минимальное значение (
🚩 Группировка данных с использованием GROUP BY:
Для более сложных запросов можно использовать агрегатные функции вместе с оператором
Ставь 👍 и забирай 📚 Базу знаний
Агрегат – это термин, часто используемый в области баз данных и программирования, который обозначает способ группировки данных для выполнения различных операций, таких как суммирование, подсчёт, нахождение среднего значения и другие. В реляционных базах данных агрегаты применяются для выполнения агрегатных функций, таких как
SUM(), COUNT(), AVG(), MAX(), MIN() и других.🚩Зачем нужны?
🟠Анализ данных:
Агрегаты позволяют получить сводные данные, которые помогают анализировать и понимать большие наборы данных. Например, можно узнать общее количество продаж, среднюю стоимость заказа, максимальную и минимальную зарплату сотрудников и т.д.
🟠Оптимизация запросов:
Использование агрегатных функций позволяет выполнять сложные вычисления на сервере базы данных, что экономит время и ресурсы по сравнению с выполнением этих операций на клиентской стороне.
🚩Примеры использования агрегатных функций:
Суммирование (
SUM):-- Получение общей суммы всех заказов
SELECT SUM(total_amount) AS total_sales
FROM orders;
Подсчёт (
COUNT):-- Подсчёт общего количества заказов
SELECT COUNT(*) AS total_orders
FROM orders;
Среднее значение (
AVG):-- Нахождение средней суммы заказа
SELECT AVG(total_amount) AS average_order_value
FROM orders;
Максимальное значение (
MAX):-- Нахождение максимальной суммы заказа
SELECT MAX(total_amount) AS max_order_value
FROM orders;
Минимальное значение (
MIN):-- Нахождение минимальной суммы заказа
SELECT MIN(total_amount) AS min_order_value
FROM orders;
🚩 Группировка данных с использованием GROUP BY:
Для более сложных запросов можно использовать агрегатные функции вместе с оператором
GROUP BY, чтобы группировать данные по определённому критерию. В этом запросе результаты будут сгруппированы по customer_id, и для каждого клиента будет рассчитана общая сумма заказов.-- Получение общей суммы заказов для каждого клиента
SELECT customer_id, SUM(total_amount) AS total_sales_per_customer
FROM orders
GROUP BY customer_id;
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что такое ООП?
Объектно-ориентированное программирование (ООП) — это парадигма программирования, основанная на концепции классов и объектов. Основные принципы ООП включают инкапсуляцию (скрытие деталей реализации), наследование (передача поведения от одного класса к другому), полиморфизм (способность методов работать с разными типами объектов) и абстракцию (выделение важной функциональности). ООП помогает организовывать код в удобные для понимания и поддерживаемые структуры.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое di container?
Это специальный инструмент или объект в программировании, который управляет созданием и внедрением зависимостей в объекты. Этот контейнер автоматически решает, какие зависимости требуются объекту, и предоставляет их при создании объекта, тем самым упрощая управление зависимостями в приложении.
🚩Зачем нужен DI-контейнер
🟠Автоматизация управления зависимостями
DI-контейнер автоматически создает и внедряет зависимости, избавляя от необходимости вручную передавать их в объекты.
🟠Гибкость и модульность
Позволяет легко заменять реализации зависимостей, не изменяя код, который их использует.
🟠Упрощение тестирования
Обеспечивает легкую замену зависимостей на моки или заглушки для тестирования.
🟠Улучшение структуры кода
Разделяет создание объектов и их использование, способствуя более чистой архитектуре.
🚩Как используется DI-контейнер
DI-контейнеры предоставляют различные методы для регистрации зависимостей и их последующего получения. Ниже приведен пример реализации простого DI-контейнера.
1⃣Создание интерфейсов и реализаций зависимостей
2⃣Реализация DI-контейнера
3⃣Регистрация зависимостей и их использование
🚩Плюсы и минусы
➕Автоматизация
Снижает необходимость ручного создания и передачи зависимостей.
➕Гибкость
Легко изменять конкретные реализации зависимостей.
➕Тестируемость
Упрощает замену зависимостей на моки для тестирования.
➕Чистота кода
Упрощает код, делая его более модульным и читаемым.
➖Сложность настройки
Могут потребоваться значительные усилия для первоначальной настройки DI-контейнера.
➖Производительность
В некоторых случаях может снижать производительность из-за необходимости разрешения зависимостей.
Ставь 👍 и забирай 📚 Базу знаний
Это специальный инструмент или объект в программировании, который управляет созданием и внедрением зависимостей в объекты. Этот контейнер автоматически решает, какие зависимости требуются объекту, и предоставляет их при создании объекта, тем самым упрощая управление зависимостями в приложении.
🚩Зачем нужен 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-контейнера.
➖Производительность
В некоторых случаях может снижать производительность из-за необходимости разрешения зависимостей.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Что такое DRY и KISS?
Они помогают писать чистый, понятный и эффективный код.
🟠DRY (Don't Repeat Yourself – Не повторяйся)
Смысл: Избегайте дублирования кода, выносите повторяющуюся логику в функции, классы или модули.
Улучшает читаемость кода.
Упрощает поддержку: изменили код в одном месте – обновилось везде.
Исключает ошибки при дублировании кода.
Плохо (нарушение DRY)
Хорошо (принцип DRY)
🟠KISS (Keep It Simple, Stupid – Делай проще)
Смысл: Не усложняйте код, он должен быть простым и понятным.
Код легче понимать и исправлять.
Простота = меньше ошибок.
Улучшает производительность (сложные конструкции могут замедлять код).
Плохо (нарушение KISS)
Хорошо (KISS)
Ставь 👍 и забирай 📚 Базу знаний
Они помогают писать чистый, понятный и эффективный код.
🟠DRY (Don't Repeat Yourself – Не повторяйся)
Смысл: Избегайте дублирования кода, выносите повторяющуюся логику в функции, классы или модули.
Улучшает читаемость кода.
Упрощает поддержку: изменили код в одном месте – обновилось везде.
Исключает ошибки при дублировании кода.
Плохо (нарушение DRY)
// Дублирование кода для расчёта скидки
$price1 = 100;
$discount1 = $price1 * 0.1;
$price2 = 200;
$discount2 = $price2 * 0.1;
$price3 = 300;
$discount3 = $price3 * 0.1;
Хорошо (принцип DRY)
function calculateDiscount($price) {
return $price * 0.1;
}
$discount1 = calculateDiscount(100);
$discount2 = calculateDiscount(200);
$discount3 = calculateDiscount(300);🟠KISS (Keep It Simple, Stupid – Делай проще)
Смысл: Не усложняйте код, он должен быть простым и понятным.
Код легче понимать и исправлять.
Простота = меньше ошибок.
Улучшает производительность (сложные конструкции могут замедлять код).
Плохо (нарушение KISS)
function isEven($num) {
if ($num % 2 == 0) {
return true;
} else {
return false;
}
}Хорошо (KISS)
function isEven($num) {
return $num % 2 == 0;
}Ставь 👍 и забирай 📚 Базу знаний