Backend
3.95K subscribers
38 photos
717 links
Комьюнити Backend программистов.
Python, Java, Golang, PHP, C#, C/C++, DevOps

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Какие есть паттерны в объектном проектировании?

Существуют три группы паттернов:
- Порождающие (Singleton, Factory).
- Структурные (Adapter, Proxy).
- Поведенческие (Observer, Strategy).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое Docker Compose?

Это инструмент, который позволяет определить и управлять многоконтейнерными Docker приложениями. С помощью Docker Compose можно описать конфигурацию всех сервисов вашего приложения в одном файле и затем легко запустить их вместе с помощью одной команды.

🚩Функции

🟠Определение многоконтейнерного приложения
Docker Compose использует YAML-файл (docker-compose.yml) для описания всех контейнеров (сервисов), которые составляют ваше приложение. В этом файле можно указать образы, настройки сети, монтируемые тома и переменные окружения.

🟠Управление зависимостями
Позволяет указать зависимости между сервисами, что обеспечивает правильный порядок запуска контейнеров.

🟠Запуск и остановка сервисов
С помощью простой команды docker-compose up можно запустить все контейнеры, указанные в docker-compose.yml. Команда docker-compose down останавливает и удаляет все контейнеры, сети и тома, созданные up.

🟠Поддержка масштабирования
Можно легко масштабировать сервисы (запускать несколько экземпляров одного контейнера) с помощью команды docker-compose up --scale.

🚩Пример использования

docker-compose.yml для веб-приложения, состоящего из веб-сервера и базы данных:
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- db

db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
volumes:
- db_data:/var/lib/mysql

volumes:
db_data:


🚩Команды

🟠docker-compose up
Создает и запускает все контейнеры, указанные в docker-compose.yml.
🟠docker-compose down
Останавливает и удаляет все контейнеры, сети и тома, созданные docker-compose up.
🟠docker-compose ps
Показывает статус запущенных контейнеров.
🟠docker-compose logs
Выводит логи всех контейнеров.
🟠docker-compose exec [service] [command]
Выполняет команду в запущенном контейнере.

🚩Плюсы

Упрощение разработки
Легко настроить и запустить все необходимые сервисы для разработки.
Легкость в использовании
Простота в управлении многоконтейнерными приложениями с помощью нескольких команд.
Унификация окружения
Единый файл конфигурации для разработки, тестирования и производства, что снижает вероятность ошибок из-за различий в конфигурациях.
Масштабируемость
Легко масштабировать отдельные сервисы приложения.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что известно о хеш-функции?

Хеш-функция преобразует данные в хеш-код фиксированной длины. Она используется для индексирования и проверки целостности данных. Эффективность хеш-функции влияет на производительность структур данных, таких как хеш-таблицы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что означает принцип open closed?

Принцип "открытости/закрытости" (Open/Closed Principle, OCP) — это один из пяти принципов SOLID, разработанных для создания устойчивого и легко поддерживаемого кода в объектно-ориентированном программировании. Принцип был предложен Бертраном Мейером в 1988 году и заключается в следующем:

🚩Что это означает

🟠Открыты для расширения
Поведение класса можно расширить, добавив новый код. Это достигается путем создания новых классов, которые наследуют или композируют существующие классы, или путем использования интерфейсов и абстрактных классов.

🟠Закрыты для модификации
Существующий код класса не должен изменяться. Это помогает избежать ошибок, которые могут возникнуть при изменении уже протестированного и проверенного кода.

Без соблюдения принципа OCP
public class Shape {
public void drawCircle() {
// рисуем круг
}

public void drawSquare() {
// рисуем квадрат
}
}

public class GraphicEditor {
private Shape shape;

public GraphicEditor(Shape shape) {
this.shape = shape;
}

public void draw(String shapeType) {
if (shapeType.equals("circle")) {
shape.drawCircle();
} else if (shapeType.equals("square")) {
shape.drawSquare();
}
}
}


С соблюдением принципа OCP
public interface Shape {
void draw();
}

public class Circle implements Shape {
@Override
public void draw() {
// рисуем круг
}
}

public class Square implements Shape {
@Override
public void draw() {
// рисуем квадрат
}
}

public class GraphicEditor {
private Shape shape;

public GraphicEditor(Shape shape) {
this.shape = shape;
}

public void draw() {
shape.draw();
}
}


🚩Плюсы

Повышение гибкости
Система становится более гибкой и расширяемой, так как новые функциональности добавляются без изменения существующего кода.

Уменьшение количества ошибок
Снижается вероятность введения ошибок в существующий код, так как изменения сосредоточены в новых классах.

Упрощение тестирования
Легче тестировать новые компоненты отдельно, не затрагивая и не изменяя существующие.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какие есть уровни изоляции транзакций?

Уровни изоляции:
- READ UNCOMMITTED – минимальная изоляция, допускаются грязные чтения.
- READ COMMITTED – предотвращает грязные чтения.
- REPEATABLE READ – защищает от повторного чтения.
- SERIALIZABLE – полная изоляция, максимальная защита.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что можешь рассказать про HTML?

HTML (HyperText Markup Language) — это основной язык разметки, используемый для создания и структурирования веб-страниц. HTML позволяет создавать веб-страницы с текстом, изображениями, ссылками, формами и другими элементами, которые могут быть отображены в браузере. Он является фундаментом веб-технологий и работает в тандеме с CSS (Cascading Style Sheets) и JavaScript для создания полноценных веб-приложений.

🚩Основные аспекты HTML:

Структура документа: HTML-документ состоит из различных элементов, каждый из которых представлен тегами. Теги определяют, как различные части документа должны быть отображены в браузере.
🟠 <!DOCTYPE html>: Определяет тип документа и версию HTML.
🟠 <html>: Корневой элемент документа.
🟠<head>: Содержит метаданные о документе, такие как теги <title>, <meta>, стили и скрипты.
🟠 <body>: Содержит видимую часть документа, включая текст, изображения, ссылки и другие элементы.

Элементы и теги: HTML использует теги для определения различных элементов. Теги обычно идут в парах: открывающий тег <tag> и закрывающий тег </tag>. Некоторые теги являются самозакрывающимися, например, <img /> и <br />.
🟠<h1> - <h6>: Заголовки различных уровней.
🟠 <p>: Параграф текста.
🟠<a>: Гиперссылка.
🟠 <img>: Изображение.
🟠<ul>, <ol>, <li>: Ненумерованные и нумерованные списки и элементы списка.
🟠<table>, <tr>, <td>: Таблицы и их элементы.

Атрибуты: Теги могут иметь атрибуты, которые предоставляют дополнительную информацию о элементе. Атрибуты записываются внутри открывающего тега и имеют формат имя="значение".
🟠href для <a>: Указывает URL, на который ведёт ссылка.
🟠src для <img>: Указывает путь к изображению.
🟠alt для <img>: Описывает изображение для поисковых систем и пользователей с ограниченными возможностями.

Формы: HTML позволяет создавать интерактивные формы для сбора данных от пользователей. Формы могут содержать различные типы полей ввода, такие как текстовые поля, радиокнопки, чекбоксы и кнопки отправки.
🟠 <input>: Общее поле ввода. Атрибут type определяет тип ввода (например, text, password, email).
🟠<textarea>: Многострочное текстовое поле.
🟠 <select> и <option>: Выпадающий список.
🟠 <button>: Кнопка.

🚩Преимущества HTML:

🟠Простота использования: HTML легко изучить и использовать. Он не требует сложных инструментов для написания или редактирования.
🟠Совместимость: HTML поддерживается всеми веб-браузерами, что обеспечивает кроссплатформенность и широкую доступность.
🟠Расширяемость: HTML можно расширять с помощью CSS и JavaScript для создания более сложных и интерактивных веб-страниц.
🟠Стандартизация: HTML является стандартом, поддерживаемым W3C (World Wide Web Consortium), что обеспечивает его надежность и предсказуемость.

🚩Как используется HTML:

🟠Создание веб-страниц:
Основное применение HTML — это создание веб-страниц и веб-приложений. Каждый веб-сайт, который вы посещаете, использует HTML для структурирования своего контента.
🟠Электронные письма:
HTML также используется для создания форматированных электронных писем с текстом, изображениями и ссылками.
🟠Документация и справочные системы:
HTML используется для создания интерактивной документации и справочных систем, которые могут включать текст, ссылки, изображения и другие элементы.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое HTTP?

Это протокол передачи гипертекста. Используется для обмена данными между клиентами и серверами в интернете. Версия HTTPS включает шифрование для безопасности.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какие знаешь принципы ООП?

Объектно-ориентированное программирование (ООП) базируется на нескольких ключевых принципах, которые помогают создавать гибкие, понятные и легко поддерживаемые программы.

🟠Абстракция (Abstraction)
Абстракция заключается в выделении значимых характеристик объекта и игнорировании незначимых. Это позволяет создавать упрощенные модели реальных объектов.

🟠Инкапсуляция (Encapsulation)
Инкапсуляция скрывает внутренние детали объекта и позволяет взаимодействовать с объектом только через определенные методы. Это защищает данные от некорректного использования и облегчает изменение и поддержку кода.

🟠Наследование (Inheritance)
Наследование позволяет создавать новые классы на основе существующих. Новый класс (наследник) получает все свойства и методы родительского класса и может добавлять новые или изменять существующие.

🟠Полиморфизм (Polymorphism)
Полиморфизм позволяет объектам разных классов обрабатывать запросы одинаковым образом. Это достигается через переопределение методов в наследуемых классах и интерфейсы.

🟠Композиция (Composition)
Композиция предполагает создание объектов других классов внутри данного класса. Это позволяет использовать функциональность существующих классов, не создавая зависимостей через наследование.

🟠Агрегация (Aggregation)
Агрегация - это специальный вид композиции, который позволяет одному объекту быть частью другого с возможностью существования вне этого объекта. Агрегация описывает "имеет" отношения.

🚩Важность принципов ООП

🟠Упрощение разработки
Принципы ООП позволяют создавать более понятный и структурированный код.
🟠Повторное использование кода
Наследование и полиморфизм способствуют использованию уже написанных классов в новых контекстах.
🟠Поддерживаемость кода
Инкапсуляция и абстракция делают код легче в сопровождении и модификации.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Какие существуют нормальные формы в SQL?

Нормальные формы (1NF, 2NF, 3NF, BCNF) устраняют избыточность и повышают целостность данных, минимизируя повторяющиеся данные в таблицах.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чем разница char и varchar в SQL ?

Это два типа данных в SQL, которые используются для хранения строковых данных. Основные различия между ними касаются способа хранения данных и управления памятью.

🚩`CHAR` (Fixed-length Character Data)

🟠Фиксированная длина
CHAR(n) хранит строки фиксированной длины n. Если строка короче, она дополняется пробелами до указанной длины.

🟠Использование памяти
Использует фиксированное количество памяти, равное указанной длине n, независимо от фактической длины строки.

🟠Производительность
Может быть быстрее в некоторых случаях, так как длина строк фиксирована и известна заранее, что упрощает управление памятью.

🟠Пример использования
Подходит для хранения данных, которые всегда имеют одинаковую длину, например, коды стран, идентификаторы и т.д.

CREATE TABLE example (
fixed_char CHAR(10)
);


🚩`VARCHAR` (Variable-length Character Data)

🟠Переменная длина
VARCHAR(n) хранит строки переменной длины, где n — это максимальная длина строки. Реальная длина строки определяется по количеству символов в ней.

🟠Использование памяти
Использует только столько памяти, сколько необходимо для хранения фактической длины строки, плюс дополнительные байты для хранения информации о длине строки.

🟠Производительность
Может быть менее эффективным в некоторых случаях по сравнению с CHAR, так как длина строки не фиксирована и требует дополнительной обработки для управления памятью.

🟠Пример использования
Подходит для хранения данных, длина которых может варьироваться, например, имена, адреса, описания и т.д.

CREATE TABLE example (
variable_char VARCHAR(50)
);


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Чем отличается rebase от merge?

- merge объединяет изменения из одной ветки в другую, создавая новый коммит слияния. История остается неизменной, но ветка получает точку слияния.
- rebase переносит коммиты из одной ветки на другую, изменяя историю, но без создания дополнительного коммита.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Какие минусы есть у индекса?

Дополнительное пространство на диске
Индексы требуют дополнительного места на диске для хранения. Чем больше данных в таблице, тем больше место занимает индекс. Если таблица содержит большое количество индексов, это может значительно увеличить объем хранимых данных.

Замедление операций записи
Вставка, обновление и удаление данных в таблице с индексами требует дополнительных операций для обновления индексов. Это может существенно замедлить производительность операций модификации данных, особенно в таблицах с большим количеством индексов.

Сложность управления
Администрирование и оптимизация индексов требует дополнительных усилий. Необходимо периодически проверять и оптимизировать индексы, чтобы избежать фрагментации и падения производительности. Неэффективное использование индексов может привести к ухудшению производительности запросов.

Проблемы с блокировками
При выполнении операций модификации данных индексы могут вызывать блокировки, что может приводить к конфликтам и снижению производительности в условиях высокой конкурентности.

Проблемы с выбором индексов
Неправильный выбор колонок для индексирования может не только не улучшить, но и ухудшить производительность запросов. Индексы должны быть тщательно подобраны и настроены в соответствии с типичными запросами к базе данных.

Риск избыточности
Избыточные или дублирующие индексы могут привести к ненужному расходу ресурсов и снижению производительности операций модификации данных.

Неэффективность для малых таблиц
В небольших таблицах накладные расходы на поддержку индексов могут превышать выигрыш в производительности запросов. В таких случаях индексы могут быть неэффективными.

Сложность при изменении структуры данных
Изменение структуры таблиц (например, добавление или удаление колонок) может потребовать перестройки существующих индексов, что может быть трудоемким процессом.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как выбрать данные из двух таблиц без метода JOIN()?

Можно использовать:
- Подзапросы (SELECT ... WHERE ... IN) – выбираем данные из одной таблицы, используя фильтр из другой.
- Объединение (UNION) – соединение строк двух таблиц, если у них одинаковая структура.
- Перекрестное соединение (CROSS JOIN) – аналог JOIN, но без явного указания соединения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Расскажи об отличиях MVC от MVP?

MVC (Model-View-Controller) и MVP (Model-View-Presenter) – это архитектурные шаблоны, используемые в разработке программного обеспечения для разделения логики приложения на отдельные компоненты. Хотя обе архитектуры помогают улучшить структуру и поддерживаемость кода, между ними существуют важные различия.

🚩MVC (Model-View-Controller)

🟠Model (Модель)
Отвечает за управление данными и бизнес-логикой приложения. Она не знает о существовании View и Controller.

🟠View (Представление)
Отображает данные, полученные от Model, и отправляет пользовательский ввод в Controller.

🟠Controller (Контроллер)
Получает ввод от View, обновляет Model и выбирает, какое View должно быть обновлено.

🚩MVP (Model-View-Presenter)

🟠Model (Модель)
Отвечает за управление данными и бизнес-логикой приложения.

🟠View (Представление)
Отображает данные и передает пользовательский ввод Presenter'у.

🟠Presenter (Презентер)
Получает ввод от View, обновляет Model и передает данные обратно в View для отображения.

🚩Основные отличия

🟠Взаимодействие View и других компонентов
В MVC View взаимодействует напрямую с Model. В MVP View взаимодействует только с Presenter, а Presenter уже работает с Model.

🟠Уведомления об изменениях
В MVC Model уведомляет View об изменениях напрямую. В MVP Model уведомляет Presenter, а Presenter обновляет View.

🟠Роль Controller и Presenter
В MVC Controller отвечает за определение, какое View отображать. В MVP Presenter отвечает за всю логику взаимодействия между Model и View, а также за обновление View.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое IP?

Это сетевой протокол, который определяет правила адресации и передачи данных между устройствами в сети.
Разделяется на:
- IPv4 – классические 32-битные адреса (например,
192.168.1.1).
- IPv6 – 128-битные адреса (например, 2001:db8::ff00:42:8329), решающие проблему нехватки IP-адресов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое JSON?

Это легкий формат обмена данными, который легко читается и пишется человеком, а также легко парсится и генерируется компьютером. Он используется для представления структурированных данных в текстовом формате и основан на подмножестве языка программирования JavaScript, но независим от него. JSON часто используется для передачи данных между сервером и веб-приложением в формате, который легко обрабатывается.

🚩Основные характеристики

🟠Простота
JSON имеет простой и понятный синтаксис, состоящий из двух основных структур: коллекций пар "ключ-значение" (объектов) и упорядоченных списков значений (массивов). Это делает его легким для понимания и работы как для людей, так и для машин.

🟠Легковесность
В отличие от более сложных форматов, таких как XML, JSON занимает меньше места благодаря лаконичному синтаксису, что делает его идеальным для передачи данных по сети, особенно в веб-приложениях.

🟠Язык-независимость
Хотя JSON основан на синтаксисе JavaScript, он поддерживается практически всеми языками программирования. В большинстве современных языков существуют библиотеки для парсинга и генерации JSON, что облегчает его интеграцию в различные системы.

🟠Читаемость человеком
JSON форматы легко читаются человеком благодаря своей структурированности и использованию простой текстовой нотации.

🚩Структура

🟠Объекты
Представляют собой коллекции пар "ключ-значение", заключенные в фигурные скобки {}. Ключи являются строками, а значения могут быть любыми допустимыми типами данных JSON (строки, числа, массивы, объекты, логические значения, null).
  {
"name": "John",
"age": 30,
"isStudent": false,
"address": {
"street": "123 Main St",
"city": "Anytown"
},
"courses": ["Math", "Science", "History"]
}


🟠Массивы
Представляют собой упорядоченные списки значений, заключенные в квадратные скобки []. Значения могут быть любого типа данных JSON.
["apple", "banana", "cherry"]  


🟠Примитивные типы данных
Включают строки, числа, логические значения (true или false), и null.
  {
"stringExample": "Hello, World!",
"numberExample": 42,
"booleanExample": true,
"nullExample": null
}


🚩Использование JSON

🟠Передача данных между клиентом и сервером
JSON широко используется в веб-разработке для обмена данными между клиентскими приложениями и сервером через HTTP-запросы, обычно с использованием методов GET или POST.

🟠Конфигурационные файлы
JSON используется для хранения конфигурационных настроек в различных приложениях, поскольку его структура легко читаема и редактируема.

🟠Хранение данных
В некоторых базах данных, таких как MongoDB, JSON используется как формат для хранения документов.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Чем отличаются LEFT JOIN от INNER JOIN?

- LEFT JOIN – возвращает все записи из левой таблицы и только совпадающие из правой. Если совпадений нет, недостающие значения будут NULL.
- INNER JOIN – возвращает только записи, у которых есть совпадения в обеих таблицах.
LEFT JOIN используют, если важны все данные из первой таблицы, INNER JOIN – если нужны только совпадающие записи.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какая разница у протоколов http и https ?

Основное различие между протоколами HTTP (HyperText Transfer Protocol) и HTTPS (HyperText Transfer Protocol Secure) заключается в уровне безопасности, который они обеспечивают при передаче данных между клиентом (например, веб-браузером) и сервером.

🚩Основные различия

🟠Шифрование
HTTP: Данные передаются в открытом виде, что делает их уязвимыми для перехвата и чтения злоумышленниками.
HTTPS: Данные передаются в зашифрованном виде с использованием SSL/TLS (Secure Sockets Layer/Transport Layer Security). Это обеспечивает защиту данных от перехвата и несанкционированного доступа.

🟠Аутентификация
HTTP: Отсутствует механизм аутентификации, что затрудняет проверку подлинности веб-сайта.
HTTPS: Использует сертификаты SSL/TLS, которые удостоверяют подлинность веб-сайта, подтверждая, что соединение установлено с тем сервером, с которым намеревался связаться пользователь.

🟠Интегритет данных
HTTP: Данные могут быть изменены или повреждены во время передачи, и это не будет обнаружено.
HTTPS: Гарантирует целостность данных, так как любые изменения данных при передаче будут обнаружены, и соединение будет разорвано.

🟠Порт
HTTP: Использует порт 80 по умолчанию.
HTTPS: Использует порт 443 по умолчанию.

🚩Плюсы

Безопасность
Обеспечивает защиту конфиденциальной информации, такой как логины, пароли, номера кредитных карт.

Доверие пользователей
Пользователи склонны больше доверять веб-сайтам, использующим HTTPS, так как это указывает на то, что сайт заботится о безопасности данных.

SEO
Поисковые системы, такие как Google, предпочитают сайты, использующие HTTPS, и ранжируют их выше по сравнению с сайтами, использующими HTTP.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Что такое Git?

Это распределенная система контроля версий (VCS), которая позволяет отслеживать изменения в коде, работать с разными версиями и объединять их.
Основные возможности:
- Ведение истории изменений

- Совместная работа над проектами
- Ветки (branching) и слияния (merge/rebase)
- Работа с удаленными репозиториями (GitHub, GitLab)


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Какие бывают блокировки в PostgreSQL?

В PostgreSQL существует несколько видов блокировок, которые используются для управления конкурентным доступом к данным и обеспечения целостности транзакций.

🚩Блокировки уровня таблицы (Table-Level Locks)

Эти блокировки применяются к целым таблицам и используются для операций, которые требуют эксклюзивного доступа к таблице.

🟠ACCESS SHARE:
Блокировка на уровне доступа для чтения данных из таблицы (например, при выполнении команды SELECT). Не блокирует другие команды SELECT.

🟠ROW SHARE:
Блокировка уровня строки, позволяющая другим транзакциям выполнять команды SELECT FOR UPDATE и SELECT FOR SHARE.

🟠ROW EXCLUSIVE:
Блокировка, применяемая при вставке, обновлении или удалении строк (INSERT, UPDATE, DELETE). Блокирует блокировки SHARE и EXCLUSIVE.

🟠SHARE UPDATE EXCLUSIVE:
Используется для выполнения команд, которые обновляют индексы, но не данные (VACUUM). Блокирует другие блокировки SHARE UPDATE EXCLUSIVE и более строгие.

🟠SHARE:
Блокировка для чтения данных из таблицы с возможностью блокировки изменений. Используется для операций, которые должны видеть согласованное состояние данных (ANALYZE).

🟠SHARE ROW EXCLUSIVE:
Используется для команд, которые выполняют чтение с возможностью блокировки последующих изменений, таких как CREATE INDEX CONCURRENTLY.

🟠EXCLUSIVE:
Блокирует доступ к таблице для всех операций, кроме команд SELECT и команд с уровнем блокировки ACCESS SHARE.

🟠ACCESS EXCLUSIVE:
Самая строгая блокировка, блокирующая все другие операции. Применяется для структурных изменений таблицы (ALTER TABLE, DROP TABLE).

🚩Блокировки уровня строки (Row-Level Locks)

Эти блокировки применяются к отдельным строкам таблицы и используются для управления конкурентным доступом к данным на более детальном уровне.

🟠SELECT FOR UPDATE:
Блокирует выбранные строки для обновления другими транзакциями. Строки с такой блокировкой могут быть изменены только текущей транзакцией.

🟠SELECT FOR SHARE:
Блокирует строки для чтения, но не для изменения. Другие транзакции могут читать эти строки, но не изменять их.

🟠SELECT FOR NO KEY UPDATE:
Похоже на SELECT FOR UPDATE, но позволяет другим транзакциям выполнять операции, не изменяющие ключи.

🟠SELECT FOR KEY SHARE:
Похоже на SELECT FOR SHARE, но позволяет другим транзакциям выполнять операции, не изменяющие строки.

🚩Блокировки на уровне индексов (Index-Level Locks)

Эти блокировки применяются к индексам и используются для управления доступом к индексированным данным.

🟠Блокировки индексов:
Используются автоматически при доступе к индексам для обеспечения целостности данных. Это может включать блокировки при обновлении индексов или их чтении.

🚩Дедлоки (Deadlocks)

Дедлоки возникают, когда две или более транзакций блокируют друг друга, ожидая освобождения ресурсов, которые заблокированы друг другом. PostgreSQL автоматически обнаруживает дедлоки и прерывает одну из транзакций для их разрешения.

🚩Примеры использования

🟠Обеспечение целостности данных:
Использование блокировок для предотвращения конкурентных изменений данных.

🟠Управление конкурентным доступом:
Применение блокировок для управления доступом к ресурсам в многопользовательских средах.

🟠Оптимизация производительности:
Выбор оптимальных типов блокировок для балансировки между целостностью данных и производительностью.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3