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

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Что такое http?

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

🚩Основные компоненты HTTP:

🟠Клиент и сервер
HTTP работает по модели клиент-сервер. Клиент, например, веб-браузер, инициирует запросы к серверу, который предоставляет доступ к запрашиваемым ресурсам.

🟠URI (Uniform Resource Identifier)
Используется для идентификации ресурсов. Наиболее распространенным типом URI является URL (Uniform Resource Locator).

🟠Методы HTTP
Определяют действия, которые клиент хочет выполнить над ресурсом. Основные методы включают:
GET: Запрос данных с сервера.
POST: Отправка данных на сервер для обработки.
PUT: Обновление ресурса на сервере.
DELETE: Удаление ресурса с сервера.

🟠Статус-коды
Серверы возвращают клиентам статус-коды, чтобы сообщить о результате обработки запроса. Например, 200 (OK) означает успешное выполнение запроса, а 404 (Not Found) — что ресурс не найден.

🟠Заголовки HTTP
Несут метаданные о запросе или ответе, такие как тип содержимого (Content-Type), длина содержимого (Content-Length), информация об авторизации и так далее.

🟠Сообщения HTTP
Состоят из запроса от клиента и ответа от сервера, каждый из которых включает стартовую строку, заголовки и тело сообщения.

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

🟠Веб-серфинг
Каждый раз, когда пользователь вводит URL в адресной строке браузера или нажимает на ссылку, браузер отправляет HTTP-запрос к серверу, который возвращает HTML-страницу.

🟠API
HTTP широко используется для взаимодействия между различными системами через RESTful API. Программы могут отправлять HTTP-запросы для получения данных или выполнения действий на удаленных серверах.

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

🟠Загрузка файлов
HTTP используется для скачивания файлов из Интернета.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🤔 Какой из следующих форматов используется для обмена данными в веб-приложениях?
Anonymous Quiz
96%
XML
2%
JPEG
1%
MP3
2%
PNG
🤔 Что такое "Сложность алгоритма"?

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

🚩Виды сложности

🟠Временная сложность
Оценивает, сколько времени требуется алгоритму для выполнения задачи в зависимости от размера входных данных. Обычно выражается в терминах асимптотического анализа, таких как O(n), O(log n), O(n^2) и т.д., где n — размер входных данных.

🟠Пространственная (памятная) сложность
Оценивает объем памяти, который алгоритм потребляет во время выполнения. Также выражается в асимптотических терминах, например, O(1), O(n), O(n^2).

🚩Асимптотический анализ

Основным инструментом для анализа сложности алгоритмов является асимптотический анализ, который позволяет оценить поведение алгоритма при больших значениях n:

🟠O-большое (Big O)
Характеризует верхнюю границу времени выполнения алгоритма. Например, если временная сложность алгоритма составляет O(n), это означает, что время выполнения увеличивается линейно с ростом размера входных данных.
🟠Ω-большое (Omega)
Характеризует нижнюю границу времени выполнения.
🟠Θ-большое (Theta)
Оценивает точное время выполнения, если верхняя и нижняя границы совпадают.

🚩Практическое применение

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

🚩Примеры

🟠Сортировка
Алгоритмы сортировки имеют разную сложность. Например, сортировка пузырьком имеет временную сложность O(n^2), в то время как быстрая сортировка имеет среднюю временную сложность O(n log n).
🟠Поиск
Для поиска элемента в отсортированном массиве алгоритм бинарного поиска имеет временную сложность O(log n), что значительно быстрее линейного поиска с O(n).

Ставь
👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какой из следующих протоколов обеспечивает шифрование передачи данных между клиентом и сервером?
Anonymous Quiz
17%
HTTP
4%
FTP
78%
SSL/TLS
1%
SMTP
🔥2
🤔 Какие есть коды ответов HTTP?

Коды ответов HTTP — это трехзначные числовые коды, используемые для обозначения результата запроса клиента к серверу. Они помогают клиенту (например, браузеру) понять, как обрабатывать ответ. Все коды делятся на пять категорий:

🟠1xx: Информационные
Эти коды указывают, что запрос был получен, и процесс продолжается.
100 Continue: Клиент должен продолжать запрос.
101 Switching Protocols: Сервер переключается на другой протокол по запросу клиента.

🟠2xx: Успех
Эти коды указывают на успешное выполнение запроса.
200 OK: Запрос успешно выполнен, и сервер вернул нужные данные.
201 Created: Запрос успешно выполнен, и был создан новый ресурс.
202 Accepted: Запрос принят, но еще не обработан.
204 No Content: Запрос успешно выполнен, но в ответе нет содержимого.

🟠3xx: Перенаправление
Эти коды указывают, что клиент должен предпринять дополнительные действия для завершения запроса.
301 Moved Permanently: Ресурс был перемещен на постоянный новый URL.
302 Found: Ресурс временно находится по другому URL.
304 Not Modified: Ресурс не изменился с последнего запроса клиента.

🟠4xx: Ошибки клиента
Эти коды указывают на ошибки клиента при формировании запроса.
400 Bad Request: Некорректный запрос из-за синтаксической ошибки.
401 Unauthorized: Запрос требует аутентификации.
403 Forbidden: У клиента нет прав доступа к ресурсу.
404 Not Found: Ресурс не найден.
409 Conflict: Конфликт запроса с текущим состоянием ресурса.

🟠5xx: Ошибки сервера
Эти коды указывают на ошибки сервера при обработке корректного запроса клиента.
500 Internal Server Error: Внутренняя ошибка сервера.
501 Not Implemented: Сервер не поддерживает функциональность, необходимую для выполнения запроса.
502 Bad Gateway: Сервер получил некорректный ответ от вышестоящего сервера.
503 Service Unavailable: Сервер временно недоступен.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🤔 Какой из следующих методов HTTP используется для удаления ресурса?
Anonymous Quiz
1%
GET
0%
POST
3%
PUT
97%
DELETE
🤔 Что такое Docker?

Docker - это платформа для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Она позволяет разработчикам создавать, тестировать и разворачивать приложения в изолированных средах, называемых контейнерами.

🚩Основные компоненты Docker:

🟠Docker Engine
Это серверное ПО, которое запускает и управляет контейнерами. Состоит из двух частей:
Docker Daemon: Служба, которая управляет всеми объектами Docker (контейнерами, образами и т.д.).
Docker CLI: Командная строка, через которую пользователи взаимодействуют с Docker Daemon.

🟠Образы (Images)
Это шаблоны для создания контейнеров. Образ включает в себя все зависимости, библиотеки, конфигурационные файлы, скрипты и код, необходимый для запуска приложения.

🟠Контейнеры (Containers)
Это изолированные среды, в которых выполняются приложения. Контейнеры создаются на основе образов и содержат всё необходимое для работы приложения.

🟠Docker Hub
Это облачный сервис для хранения и распределения Docker-образов. Разработчики могут загружать свои образы в Docker Hub и делиться ими с другими пользователями.

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

🚩Плюсы

Изоляция
Каждый контейнер работает в своей собственной изолированной среде, что предотвращает конфликты между приложениями.
Портативность
Образы Docker могут работать на любом сервере с установленным Docker, независимо от операционной системы.
Масштабируемость
Контейнеры можно легко масштабировать в зависимости от нагрузки.
Быстрое развёртывание
Контейнеры запускаются гораздо быстрее, чем виртуальные машины.
Упрощение CI/CD
Docker интегрируется с системами непрерывной интеграции и доставки, упрощая процессы разработки и развёртывания.

🚩Основные команды:

docker build: Создание образа из Dockerfile.
docker run: Запуск нового контейнера из образа.
docker ps: Список запущенных контейнеров.
docker stop: Остановка работающего контейнера.
docker rm: Удаление остановленного контейнера.
docker pull: Загрузка образа из Docker Hub.
docker push: Загрузка образа в Docker Hub.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Какой из следующих типов баз данных лучше всего подходит для хранения иерархических данных?
Anonymous Quiz
29%
Реляционные базы данных
53%
Графовые базы данных
8%
Ключ-значение базы данных
9%
Документные базы данных
🤔 Что тебе известно про нереляционные базы данных?

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

🚩Основные типы нереляционных баз данных:

🟠Документные базы данных
Хранят данные в формате документов (например, JSON, BSON, XML). Например, MongoDB, CouchDB. Подходит для приложений, работающих с данными, которые могут иметь гибкую и изменяющуюся структуру.

🟠Колонковые базы данных
Хранят данные в виде столбцов, а не строк. Это позволяет эффективно обрабатывать большие объемы данных и выполнять аналитические запросы. Например Apache Cassandra, HBase. Аналитика, обработка больших данных, телекоммуникации.

🟠Ключ-значение базы данных
Хранят данные в виде пар "ключ-значение". Очень проста по своей природе и обеспечивает быструю работу. Например Redis, Riak, DynamoDB. Кеширование, сессии пользователей, реализация простых хранилищ данных.

🟠Графовые базы данных
Хранят данные в виде графов с узлами, ребрами и свойствами. Отлично подходят для моделирования связей и взаимосвязей между данными. Например Neo4j, OrientDB. Социальные сети, рекомендательные системы, управление сетями.

🚩Плюсы

Гибкость модели данных: Легко справляются с изменяющимися и разнообразными данными.
Масштабируемость: Хорошо масштабируются как горизонтально (добавление новых серверов), так и вертикально (увеличение мощности серверов).
Производительность: Обеспечивают высокую производительность для специфичных типов операций и больших объемов данных.
Обработка больших данных: Способны эффективно обрабатывать большие объемы данных и быстро реагировать на запросы.

🚩Минусы

Отсутствие стандартов: Разные системы могут использовать разные модели и API, что может усложнять переход между ними.
Ограниченная поддержка сложных запросов: Могут не поддерживать сложные SQL-запросы и транзакции, привычные для реляционных баз данных.
Консистентность данных: Некоторые NoSQL базы данных жертвуют строгой консистентностью ради доступности и масштабируемости (в соответствии с теоремой CAP).

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

🟠Социальные сети
Графовые базы данных для моделирования взаимоотношений между пользователями.
🟠Интернет-магазины
Документные базы данных для хранения информации о продуктах с различной структурой данных.
🟠Аналитические платформы
Колонковые базы данных для выполнения сложных аналитических запросов на больших объемах данных.
🟠Кеширование
Ключ-значение базы данных для быстрого доступа к часто используемым данным.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🤔 Какой из следующих языков программирования чаще всего используется для написания серверного кода?
Anonymous Quiz
3%
HTML
1%
CSS
85%
JavaScript (Node.js)
11%
SQL
🤔 Что такое транзакция?

Транзакция в контексте баз данных - это последовательность операций, выполняемых как единое целое. Она должна быть полностью выполнена или полностью отменена, чтобы обеспечить целостность и консистентность данных. Основные свойства транзакции определяются набором правил, известных как ACID:

🚩ACID свойства

🟠Atomicity (Атомарность):
Транзакция либо выполняется полностью, либо не выполняется вовсе. Если происходит ошибка, все операции транзакции откатываются. Например, в банковской системе перевод денег между счетами требует списания суммы с одного счета и зачисления на другой. Если одна из операций не выполнится, другая также должна быть отменена.

🟠Consistency (Консистентность):
После завершения транзакции данные должны оставаться в согласованном состоянии, соответствующем всем определенным правилам и ограничениям. В инвентарной системе при добавлении нового товара должна проверяться допустимость всех значений, таких как положительное количество и правильная категория.

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

🟠Durability (Долговечность):
После завершения транзакции её результаты сохраняются даже в случае сбоя системы. Если транзакция по записи данных в базу данных завершилась успешно, данные останутся сохраненными даже после перезагрузки сервера.

🚩Этапы выполнения транзакции

1⃣начало выполнения транзакции.
2⃣Выполняются все необходимые операции (вставка, обновление, удаление и т.д.).
3⃣Если все операции выполнены успешно, изменения фиксируются.
4⃣Если произошла ошибка, все изменения отменяются, возвращая базу данных в исходное состояние.

🚩Применение транзакций

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой из следующих инструментов используется для оркестрации контейнеров?
Anonymous Quiz
93%
Kubernetes
1%
Git
5%
Jenkins
1%
Maven
🤔 Что такое BigO notation?

Big O notation (О-большое) - это математическая нотация, используемая в информатике для описания производительности алгоритма. Она выражает, как время выполнения или потребление памяти алгоритма растет по мере увеличения размера входных данных. Big O notation фокусируется на худшем случае, что помогает оценить наихудший сценарий для работы алгоритма.

🚩Основные концепции Big O notation

🟠Асимптотический анализ:
Big O notation используется для описания асимптотического поведения алгоритмов, то есть их поведения при приближении размера входных данных к бесконечности. Основное внимание уделяется ведущим слагаемым и игнорированию констант и менее значимых слагаемых, поскольку они имеют меньшее влияние на производительность при больших размерах входных данных.

🟠Оценка худшего случая:
Big O notation показывает наихудший возможный сценарий выполнения алгоритма, обеспечивая надежные гарантии его производительности.

🚩Основные классы сложности

🟠O(1) - Константная сложность:
Время выполнения не зависит от размера входных данных. Доступ к элементу массива по индексу.
🟠O(log n) - Логарифмическая сложность:
Время выполнения увеличивается логарифмически с увеличением размера входных данных. Бинарный поиск.
🟠O(n) - Линейная сложность:
Время выполнения растет линейно с увеличением размера входных данных. Линейный поиск.
🟠O(n log n) - Линейно-логарифмическая сложность:
Время выполнения растет линейно с логарифмическим множителем. Быстрая сортировка, сортировка слиянием.
🟠 O(n^2) - Квадратичная сложность:
Время выполнения растет пропорционально квадрату размера входных данных. Сортировка пузырьком, сортировка вставками.
🟠O(2^n) - Экспоненциальная сложность:
Время выполнения удваивается с каждым добавлением нового элемента. Решение задачи о коммивояжере полным перебором.
🟠O(n!) - Факториальная сложность:
Время выполнения растет факториально с увеличением размера входных данных. Полный перебор всех возможных перестановок.

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

1⃣Поиск и сортировка:
Анализ эффективности различных алгоритмов сортировки (например, быстрая сортировка vs. сортировка пузырьком).
2⃣Анализ алгоритмов и структур данных:
Оценка времени доступа, вставки и удаления в различных структурах данных (например, массивы, списки, деревья).
3⃣Оптимизация программ:
Помощь в выборе наиболее эффективных алгоритмов и структур данных для решения конкретных задач.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
🤔 Какой из следующих типов тестирования используется для проверки взаимодействия между различными компонентами системы?
Anonymous Quiz
16%
Юнит-тестирование
75%
Интеграционное тестирование
7%
Системное тестирование
1%
Приемочное тестирование
🔥1
🤔 Как можно заблокировать конкретные поля в Postgres?

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

🟠Использование блокировок уровня строки (Row-Level Locks)
PostgreSQL поддерживает блокировки уровня строки с помощью команд SELECT FOR UPDATE и SELECT FOR SHARE. Эти команды позволяют заблокировать конкретные строки для изменения другими транзакциями, пока текущая транзакция не завершится.SELECT FOR UPDATE:
BEGIN;  -- Начало транзакции

-- Выбираем и блокируем строки для обновления
SELECT * FROM my_table WHERE id = 1 FOR UPDATE;

-- Выполняем необходимые операции
UPDATE my_table SET field = 'new_value' WHERE id = 1;

COMMIT; -- Завершение транзакции


SELECT FOR SHARE:
BEGIN;  -- Начало транзакции

-- Выбираем и блокируем строки для чтения
SELECT * FROM my_table WHERE id = 1 FOR SHARE;

-- Выполняем необходимые операции
-- Изменение данных будет заблокировано для других транзакций
-- Однако, можно выполнять SELECT
COMMIT; -- Завершение транзакции


🟠Использование политик доступа (Row-Level Security Policies)
Политики безопасности на уровне строк позволяют определить, кто и при каких условиях может видеть или изменять данные в таблице. Это обеспечивается с помощью функций и политик безопасности.
-- Включаем безопасность на уровне строк для таблицы
ALTER TABLE my_table ENABLE ROW LEVEL SECURITY;

-- Создаем роль, которая будет иметь доступ
CREATE ROLE limited_role;

-- Создаем политику, которая позволяет только чтение данных
CREATE POLICY read_only_policy ON my_table
FOR SELECT
USING (true); -- Условие для выполнения SELECT

-- Применяем политику для роли limited_role
GRANT SELECT ON my_table TO limited_role;


🟠Использование триггеров (Triggers)
Триггеры позволяют автоматически выполнять определенные действия перед или после операции INSERT, UPDATE, DELETE. Можно создать триггер, который будет блокировать изменение конкретных полей.
CREATE OR REPLACE FUNCTION prevent_update()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.field IS DISTINCT FROM OLD.field THEN
RAISE EXCEPTION 'Field "field" cannot be updated';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Применяем триггер к таблице
CREATE TRIGGER prevent_update_trigger
BEFORE UPDATE ON my_table
FOR EACH ROW
EXECUTE FUNCTION prevent_update();


🟠Ограничения на уровне столбца (Column-Level Constraints)
Ограничения на уровне столбца могут использоваться для ограничения возможных значений или для создания выражений, которые должны быть выполнены для выполнения изменения.
ALTER TABLE my_table
ADD CONSTRAINT field_check CHECK (field IS NOT NULL);


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

SOLID — это акроним, обозначающий пять основных принципов объектно-ориентированного программирования и проектирования, направленных на создание более понятного, гибкого и поддерживаемого кода. Принципы включают: Single Responsibility (Принцип единственной ответственности), Open/Closed (Принцип открытости/закрытости), Liskov Substitution (Принцип подстановки Барбары Лисков), Interface Segregation (Принцип разделения интерфейса), и Dependency Inversion (Принцип инверсии зависимостей).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Какие бывают блокировки в 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
🤔 Какие есть паттерны проектирования?

Паттерны проектирования — это проверенные решения типичных проблем, возникающих при проектировании программного обеспечения. Они делятся на три основные категории: порождающие (например, Singleton, Factory, Builder), структурные (например, Adapter, Decorator, Facade) и поведенческие (например, Observer, Strategy, Command).

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

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

🚩Основные типы

🟠Блокировки уровня таблицы (Table-Level Locks):
ACCESS SHARE: Позволяет чтение данных, блокирует команды, изменяющие таблицу.
ROW SHARE: Применяется для команд SELECT FOR UPDATE и SELECT FOR SHARE.
ROW EXCLUSIVE: Используется при вставке, обновлении или удалении строк.
SHARE UPDATE EXCLUSIVE: Используется для команд VACUUM.
SHARE: Обеспечивает видимость текущего состояния данных (ANALYZE).
SHARE ROW EXCLUSIVE: Используется для операций, требующих более строгого контроля (CREATE INDEX CONCURRENTLY).
EXCLUSIVE: Требуется для команд, изменяющих структуру таблицы (ALTER TABLE).
ACCESS EXCLUSIVE: Блокирует все команды, включая SELECT (DROP TABLE, ALTER TABLE).

🟠Блокировки уровня строки (Row-Level Locks):
SELECT FOR UPDATE: Блокирует строки для изменения.
SELECT FOR NO KEY UPDATE: Похоже на SELECT FOR UPDATE, но позволяет другим транзакциям выполнять SELECT FOR SHARE и SELECT FOR KEY SHARE.
SELECT FOR SHARE: Блокирует строки для чтения.
SELECT FOR KEY SHARE: Похоже на SELECT FOR SHARE, но позволяет другим транзакциям выполнять SELECT FOR NO KEY UPDATE и SELECT FOR UPDATE.

🟠Консультативные блокировки (Advisory Locks):
Устанавливаются вручную для синхронизации произвольных ресурсов.
pg_advisory_lock: Устанавливает консультативную блокировку.
pg_advisory_unlock: Снимает консультативную блокировку.
pg_try_advisory_lock: Пытается установить консультативную блокировку без ожидания.

🚩Основные цели

🟠Предотвращение гонок (race conditions):
Обеспечивают корректность данных при одновременном доступе нескольких транзакций.
🟠Изоляция транзакций:
Выполнение каждой транзакции в изолированном контексте.
🟠Защита целостности данных:
Предотвращение одновременного изменения данных, что может привести к их несогласованности.

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

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

🚩Проблемы, связанные с блокировками

🟠Дедлоки (Deadlocks):
Ситуация, когда транзакции блокируют друг друга, ожидая освобождения ресурсов.
🟠Гранулярность блокировок:
Блокировки высокой гранулярности могут снижать производительность.

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

ACID — это набор свойств транзакций баз данных, гарантирующих надёжное выполнение транзакций в многопользовательской и многоуровневой среде. ACID включает четыре свойства: Atomicity (Атомарность), Consistency (Согласованность), Isolation (Изолированность), и Durability (Стойкость).

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

🚩Методы и инструменты.

🟠Включение журналирования медленных запросов
Настройка параметров конфигурации PostgreSQL для журналирования медленных запросов позволяет отслеживать запросы, выполнение которых занимает много времени.
1⃣Откройте файл конфигурации PostgreSQL (postgresql.conf).
2⃣Настройте следующие параметры:
# Включить логирование всех запросов
log_statement = 'all'

# Либо логирование только медленных запросов
log_min_duration_statement = 1000 # Логировать запросы, выполнение которых заняло более 1000 мс (1 секунда)


3⃣Перезапустите сервер PostgreSQL для применения изменений:
sudo systemctl restart postgresql


🟠Использование инструмента `pg_stat_statements`
Расширение pg_stat_statements позволяет собирать статистику по выполненным запросам и предоставляет информацию о частоте, времени выполнения и других характеристиках запросов.
1⃣Включите расширение в postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'


2⃣Перезапустите сервер PostgreSQL:
sudo systemctl restart postgresql


3⃣Создайте расширение в нужной базе данных:
CREATE EXTENSION pg_stat_statements;


4⃣Используйте запрос для получения информации о медленных запросах:
SELECT
query,
calls,
total_time,
mean_time,
stddev_time,
rows,
min_time,
max_time
FROM
pg_stat_statements
ORDER BY
total_time DESC
LIMIT 10;


🟠Анализ запросов с помощью `EXPLAIN` и `EXPLAIN ANALYZE`
Команды EXPLAIN и EXPLAIN ANALYZE позволяют понять, как PostgreSQL планирует и выполняет запросы, предоставляя детальную информацию о плане выполнения.
1⃣Выполните команду EXPLAIN для запроса:
EXPLAIN SELECT * FROM my_table WHERE id = 1;


2⃣Выполните команду EXPLAIN ANALYZE для запроса:
EXPLAIN ANALYZE SELECT * FROM my_table WHERE id = 1;


3⃣Анализируйте выходные данные, чтобы понять, какие операции занимают больше всего времени (например, полное сканирование таблицы, узкие места при соединении таблиц и т.д.).

🟠Использование системных представлений и утилит
pg_stat_activity: Показывает текущую активность базы данных, включая выполняемые запросы и их состояние.
SELECT
pid,
usename,
state,
query,
now() - query_start AS duration
FROM
pg_stat_activity
WHERE
state != 'idle'
ORDER BY
duration DESC;


pg_locks: Отображает информацию о текущих блокировках в базе данных.
SELECT * FROM pg_locks;


1⃣Индексы:
Убедитесь, что для часто используемых условий WHERE и JOIN существуют соответствующие индексы.
2⃣Переписывание запросов:
Попробуйте переписать запросы для улучшения их производительности.
3⃣Материализованные представления:
Используйте материализованные представления для часто выполняемых сложных запросов.
4⃣Конфигурация сервера:
Настройте параметры конфигурации PostgreSQL для оптимизации производительности (например, work_mem, shared_buffers, maintenance_work_mem).

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