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
🤔 Что такое 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
🤔 Что такое JSON?

JSON (JavaScript Object Notation) — это легковесный формат обмена данными, который легко читается и пишется людьми и легко анализируется и генерируется машинами. JSON основан на подмножестве языка программирования JavaScript, но доступен для использования многими языками программирования.

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

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

🟠Использование подзапросов в `SELECT`
Вы можете использовать подзапрос в операторе SELECT, чтобы извлечь данные из одной таблицы, используя значения из другой таблицы.
SELECT 
o.order_id,
o.order_date,
(SELECT c.customer_name FROM customers c WHERE c.customer_id = o.customer_id) AS customer_name
FROM
orders o;


🟠Использование подзапросов в `WHERE`
Вы можете использовать подзапрос в операторе WHERE, чтобы фильтровать данные на основе условий из другой таблицы.
SELECT 
o.order_id,
o.order_date
FROM
orders o
WHERE
o.customer_id IN (SELECT c.customer_id FROM customers c WHERE c.city = 'New York');


🟠Использование подзапросов в `FROM`
Вы можете использовать подзапрос в операторе FROM, чтобы создать временную таблицу и затем выбрать данные из нее.
SELECT 
c.customer_name,
latest_orders.order_id,
latest_orders.order_date
FROM
customers c,
(SELECT
o.customer_id,
o.order_id,
o.order_date
FROM
orders o
WHERE
o.order_date = (SELECT MAX(order_date) FROM orders o2 WHERE o2.customer_id = o.customer_id)
) AS latest_orders
WHERE
c.customer_id = latest_orders.customer_id;


🟠Использование подзапросов с агрегатными функциями
Подзапросы могут быть полезны при использовании агрегатных функций для получения обобщенной информации из одной таблицы, связанной с другой таблицей.
SELECT 
c.customer_name,
(SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.customer_id) AS total_orders
FROM
customers c;


🟠Использование подзапросов с операторами EXISTS
Оператор EXISTS проверяет наличие строк в подзапросе и возвращает TRUE, если подзапрос возвращает хотя бы одну строку.
SELECT 
c.customer_name
FROM
customers c
WHERE
EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id);


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

Индексы в базах данных — это структуры данных, которые улучшают скорость операций поиска/выборки данных за счет предоставления быстрых путей к данным в таблицах. Индексы часто создаются для ускорения поиска по ключевым столбцам и могут существенно увеличить производительность запросов.

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

Чтобы выбрать данные из двух таблиц в одном запросе, используется оператор JOIN. Например, INNER JOIN объединяет строки, где есть совпадения в обеих таблицах, а LEFT JOIN возвращает все строки из первой таблицы и соответствующие строки из второй, заполняя NULL там, где данных нет.

🚩Отличия между видами JOIN в SQL

В SQL существует несколько видов операторов JOIN, которые позволяют объединять данные из двух или более таблиц на основе определенных условий. Основные типы JOIN включают INNER JOIN, LEFT JOIN, RIGHT JOIN, и каждый из них имеет свои особенности и использование. Рассмотрим их различия на примере двух таблиц:

Таблица A:
id | name
-----------
1 | Alice
2 | Bob
3 | Charlie


Таблица B:
id | city
-----------
1 | New York
3 | Los Angeles
4 | Chicago


🟠INNER JOIN
INNER JOIN возвращает только те строки, которые имеют совпадения в обеих таблицах. Если нет совпадающих строк, такие строки не включаются в результат.
SELECT A.id, A.name, B.city
FROM A
INNER JOIN B ON A.id = B.id;


Результат:
id | name    | city
------------------------
1 | Alice | New York
3 | Charlie | Los Angeles


🟠LEFT JOIN (или LEFT OUTER JOIN)
LEFT JOIN возвращает все строки из левой таблицы (A) и совпадающие строки из правой таблицы (B). Если совпадения не найдено, в результате будут строки из левой таблицы с NULL значениями для столбцов из правой таблицы.
SELECT A.id, A.name, B.city
FROM A
LEFT JOIN B ON A.id = B.id;


Результат:
id | name    | city
------------------------
1 | Alice | New York
2 | Bob | NULL
3 | Charlie | Los Angeles


🟠RIGHT JOIN (или RIGHT OUTER JOIN)
RIGHT JOIN возвращает все строки из правой таблицы (B) и совпадающие строки из левой таблицы (A). Если совпадения не найдено, в результате будут строки из правой таблицы с NULL значениями для столбцов из левой таблицы.
SELECT A.id, A.name, B.city
FROM A
RIGHT JOIN B ON A.id = B.id;


Результат:
id | name    | city
------------------------
1 | Alice | New York
3 | Charlie | Los Angeles
4 | NULL | Chicago


🟠FULL JOIN (или FULL OUTER JOIN)
FULL JOIN возвращает все строки, когда есть совпадение в одной из таблиц. Это объединение LEFT JOIN и RIGHT JOIN. Если совпадения не найдено, результат будет содержать NULL значения для столбцов из другой таблицы.
SELECT A.id, A.name, B.city
FROM A
FULL JOIN B ON A.id = B.id;
id | name | city
------------------------
1 | Alice | New York
2 | Bob | NULL
3 | Charlie | Los Angeles
4 | NULL | Chicago


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 В чём разница между SQL и NoSQL?

SQL (Structured Query Language) — это язык запросов для работы с реляционными базами данных, которые организуют данные в таблицах. NoSQL — это общий термин для баз данных, которые не используют табличную модель и часто оптимизированы для работы с большими объемами распределенных данных. Основные различия включают модели данных, схемы, масштабируемость, и консистентность.

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

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

🚩MySQL (Реляционные базы данных)

🟠Структура данных
MySQL использует фиксированную схему, что означает, что структура таблиц (колонки, типы данных) должна быть определена заранее и изменения могут быть сложными. Данные хранятся в таблицах с фиксированным набором столбцов.

🟠Модель управления данными
MySQL использует SQL для определения, манипуляции и управления данными. Поддерживает ACID (Atomicity, Consistency, Isolation, Durability) свойства, что обеспечивает надежные и согласованные транзакции.

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

🟠Случаи использования
Хорошо подходит для приложений с четко определенными структурами данных, такими как CRM, ERP системы, финансовые приложения и системы управления содержимым (CMS).

🚩NoSQL (Нереляционные базы данных)

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

🟠Модель управления данными
Используют разные способы доступа и управления данными, которые не требуют использования SQL. NoSQL базы данных часто следуют принципу CAP-теоремы (Consistency, Availability, Partition tolerance), делая акцент на доступности и устойчивости к разделению, иногда жертвуя строгой консистентностью.

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

🟠Случаи использования
Подходят для приложений, работающих с большими объемами данных и требующих высокой скорости обработки, таких как социальные сети, интернет-магазины, системы аналитики, IoT приложения.

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

🟠Схема данных
MySQL: Фиксированная схема, данные хранятся в таблицах.
NoSQL: Гибкая схема, данные могут храниться в документах, ключ-значение, графах или столбцах.

🟠Запросы и управление данными
MySQL: SQL для запросов и управления данными.
NoSQL: Различные модели данных и запросов, не обязательно SQL.

🟠Консистентность и транзакции
MySQL: Поддерживает ACID транзакции.
NoSQL: Поддержка транзакций варьируется, часто следуют CAP-теореме, обеспечивая доступность и устойчивость к разделению.

🟠Масштабируемость:
MySQL: Для вертикальной масштабируемости.
NoSQL: Для горизонтальной масштабируемости.

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

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

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

🚩"Один к одному" (One-to-One)

Каждая запись в одной таблице связана с одной и только одной записью в другой таблице.

Пользователь (User) и Паспорт (Passport)
Каждому пользователю соответствует один уникальный паспорт. В реляционных базах данных можно реализовать эту связь с помощью уникального внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE passports (
id SERIAL PRIMARY KEY,
user_id INTEGER UNIQUE,
passport_number VARCHAR(50),
FOREIGN KEY (user_id) REFERENCES users(id)
);


🚩"Один ко многим" (One-to-Many)

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

Пользователь (User) и Заказы (Orders)
Один пользователь может сделать много заказов, но каждый заказ связан с одним пользователем. Эта связь обычно реализуется с помощью внешнего ключа.
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
);


🚩"Многие ко многим" (Many-to-Many)

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

Студенты (Students) и Курсы (Courses)

Один студент может записаться на множество курсов, и каждый курс может быть записан многими студентами. Эта связь обычно реализуется с помощью промежуточной таблицы (таблицы связи), которая содержит внешние ключи обеих связанных таблиц.
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100)
);

CREATE TABLE courses (
id SERIAL PRIMARY KEY,
course_name VARCHAR(100)
);

CREATE TABLE student_courses (
student_id INTEGER,
course_id INTEGER,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);


🚩Варианты связей в нереляционных базах данных (NoSQL)

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

Вложенные документы
Например, в MongoDB документы могут включать вложенные документы или массивы, что позволяет моделировать отношения "один ко многим" и "многие ко многим" внутри одного документа.
{
"_id": 1,
"name": "John",
"orders": [
{ "order_id": 1, "order_date": "2023-08-01" },
{ "order_id": 2, "order_date": "2023-08-05" }
]
}


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 В чем разница get от post?

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

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

Это вариации стандарта SQL, используемые различными системами управления базами данных (СУБД). Хотя основа SQL является стандартизированной и поддерживается всеми СУБД, каждая из них может добавлять свои расширения и специфические особенности. Эти уникальные элементы и образуют диалекты SQL.

🚩Причины существования

🟠Оптимизация производительности
Разные СУБД могут иметь оптимизации, которые лучше работают с их архитектурой, что приводит к созданию специфических синтаксических конструкций.
🟠Дополнительные возможности
Включение дополнительных функций, которые не охватываются стандартом SQL, для удовлетворения специфических потребностей пользователей.
🟠Исторические причины
Некоторые диалекты развивались на основе ранних версий SQL, и их отличия сохранились в современных реализациях.

🚩Примеры диалектов SQL

🟠MySQL
Поддержка специфичных функций, таких как LIMIT для ограничения числа возвращаемых строк, функции работы с датой и временем, специфичные для MySQL.
SELECT * FROM users LIMIT 10;     


🟠PostgreSQL
Расширенная поддержка типов данных, таких как JSON и массивы, поддержка оконных функций, богатый набор встроенных функций.
SELECT * FROM users WHERE age > 30 ORDER BY name OFFSET 10 LIMIT 10;     


🟠Oracle SQL
Сложные типы данных, PL/SQL для написания хранимых процедур и триггеров, поддержка соединений CONNECT BY для работы с иерархическими данными.
SELECT * FROM users WHERE ROWNUM <= 10;     


🟠Microsoft SQL Server (T-SQL)
Поддержка TOP для ограничения числа возвращаемых строк, встроенный язык T-SQL для написания процедур и триггеров, специфичные функции для работы с датой и временем.
SELECT TOP 10 * FROM users;     


🟠SQLite
Легковесная база данных, встраиваемая в приложения, поддержка ограниченного набора функций SQL, отсутствие полноценной поддержки некоторых функций, таких как внешние ключи до версии 3.6.19.
SELECT * FROM users LIMIT 10 OFFSET 0;


🚩Важные аспекты диалектов

🟠Совместимость
Не все SQL-запросы могут быть совместимы между различными СУБД из-за различий в синтаксисе и поддерживаемых функциях.
🟠Миграция
При переносе базы данных с одной СУБД на другую может потребоваться переписывание запросов и процедур для обеспечения совместимости.
🟠Документация
Каждая СУБД предоставляет документацию по своим диалектам SQL, где описаны специфичные функции и их использование.

MySQL и PostgreSQL
SELECT * FROM users LIMIT 10 OFFSET 20;  


SQL Server
SELECT * FROM users ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;  


Oracle
SELECT * FROM (
SELECT u.*, ROWNUM rnum
FROM (SELECT * FROM users ORDER BY name) u
WHERE ROWNUM <= 30
)
WHERE rnum > 20;


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

Индексы ускоряют поиск данных в базах данных за счет создания дополнительных структур данных, которые позволяют быстрее находить строки в таблице по ключевым столбцам. Они могут быть реализованы в виде деревьев (например, B-деревья), хэш-таблиц и других структур, оптимизирующих чтение данных за счет потенциального увеличения времени на обновление таблиц.

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

Это две разные системы управления базами данных (СУБД), каждая из которых имеет свои уникальные особенности, применения и случаи использования.

🟠Архитектура
SQLite
Встраиваемая СУБД: SQLite - это библиотека, которая встраивается непосредственно в приложение. Она не требует отдельного сервера для работы.
Без сервера: Работает без необходимости запуска серверного процесса, что упрощает установку и настройку.
Файловая система: Все данные хранятся в одном файле базы данных на диске.
SQL Server Express
Серверная СУБД: SQL Server Express - это урезанная версия Microsoft SQL Server, требующая установки и запуска серверного процесса.
Клиент-серверная архитектура: Клиенты подключаются к серверу базы данных через сеть.
Разделенные файлы данных и логов: Данные и логи хранятся в отдельных файлах.

🟠Производительность и масштабируемость
SQLite
Легковесная и быстрая: Подходит для приложений с небольшими или средними объемами данных и низкими требованиями к многопользовательскому доступу.
Ограниченная многопользовательская поддержка: Поддерживает ограниченное количество одновременных пользователей, так как блокировки осуществляются на уровне файла.
SQL Server Express
Масштабируемость: Подходит для приложений с высокими требованиями к производительности и поддерживает значительное количество одновременных пользователей.
Многопользовательская поддержка: Обеспечивает управление многопользовательским доступом и параллельностью транзакций.

🟠Функциональные возможности
SQLite:
Основные возможности SQL: Поддерживает основные команды SQL, такие как SELECT, INSERT, UPDATE, DELETE.
Ограниченные возможности: Отсутствие многих расширенных функций, таких как триггеры, хранимые процедуры, сложные типы данных и транзакции с несколькими заявлениями.
SQL Server Express:
Расширенные возможности: Поддержка триггеров, хранимых процедур, полнотекстового поиска, транзакций и других продвинутых функций.
Ограничения по сравнению с полной версией: SQL Server Express имеет ограничения по объему базы данных (до 10 ГБ на одну базу данных) и по использованию ресурсов (до 1 ГБ ОЗУ и 1 процессор).

🟠Установка и развертывание
SQLite
:
Простота установки: Не требует установки, просто включается как библиотека в приложение.
Легкость развертывания: Так как данные хранятся в одном файле, перемещение базы данных сводится к копированию этого файла.
SQL Server Express:
Требует установки: Необходимо установить серверную часть, что может включать несколько шагов настройки.
Администрирование: Требует определенного уровня администрирования для настройки безопасности, резервного копирования и восстановления данных.

🟠Случаи использования
SQLite:
Мобильные приложения: Часто используется в мобильных приложениях (например, Android и iOS) для локального хранения данных.
Встроенные системы: Подходит для встроенных систем и IoT устройств.
Прототипирование и тестирование: Удобен для быстрого создания прототипов и тестирования.
SQL Server Express:
Веб-приложения: Хорошо подходит для небольших веб-приложений и сервисов, особенно на платформе Windows.
Настольные приложения: Используется в настольных приложениях, требующих мощной базы данных.
Учебные цели: Часто используется в образовательных целях для обучения работе с SQL Server.

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

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

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

Это стандартный протокол для веб-серверов, который позволяет запускать внешние программы (скрипты) для генерации веб-страниц динамически. CGI скрипты могут быть написаны на различных языках программирования, таких как Perl, Python, PHP, C и других. Когда веб-сервер получает запрос на страницу, обрабатываемую CGI, он запускает соответствующий скрипт и передает ему данные запроса.

🚩Как работает

1⃣Запрос клиента: Клиент (например, веб-браузер) отправляет HTTP-запрос на веб-сервер.
2⃣Запуск CGI-скрипта: Веб-сервер определяет, что запрос предназначен для CGI-скрипта, и запускает его как отдельный процесс.
3⃣Передача данных: Веб-сервер передает данные запроса (например, параметры формы) в CGI-скрипт через стандартный ввод (stdin) и переменные окружения.
4⃣Выполнение скрипта: CGI-скрипт выполняет необходимые операции (например, доступ к базе данных) и генерирует HTML-страницу.
5⃣Ответ сервера: CGI-скрипт отправляет сгенерированную HTML-страницу обратно на веб-сервер через стандартный вывод (stdout), а сервер передает этот ответ клиенту.

🚩Плюсы

Простота и универсальность
CGI прост в реализации и не требует сложной настройки. Поддерживает множество языков программирования, что делает его универсальным решением.
Совместимость
CGI является стандартом и поддерживается практически всеми веб-серверами.
Изоляция процессов
Каждый запрос запускает новый процесс, что обеспечивает изоляцию запросов и повышает безопасность.

🚩Минусы

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

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

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

🚩Современные альтернативы

🟠FastCGI
Улучшенная версия CGI, которая повторно использует процессы для обработки нескольких запросов, что повышает производительность.

🟠Server-side scripting
Языки и фреймворки, такие как PHP, ASP.NET, Node.js, Django, Ruby on Rails, которые интегрируются непосредственно с веб-серверами и обеспечивают высокую производительность.

🟠Web Server Gateway Interface (WSGI)
Стандартный интерфейс для Python-приложений, позволяющий эффективную обработку запросов.

🟠Application Servers
Серверы приложений, такие как Apache Tomcat, JBoss, которые предоставляют контейнеры для выполнения веб-приложений и управления ими.

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

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

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

🟠Использование HTTPS
Передача данных через HTTPS (SSL/TLS) обеспечивает шифрование данных между клиентом и сервером, что предотвращает их перехват и чтение третьими лицами. Настройте ваш веб-сервер для использования HTTPS, получив и установив SSL/TLS сертификат.

🟠Флаг Secure
Куки передаются только по HTTPS-соединениям. Добавьте флаг Secure при установке куки.
Set-Cookie: sessionId=abc123; Secure


🟠Флаг HttpOnly
Куки недоступны через JavaScript, что предотвращает их кражу с помощью XSS (Cross-Site Scripting) атак. Добавьте флаг HttpOnly при установке куки.
Set-Cookie: sessionId=abc123; HttpOnly


🟠Флаг SameSite
Предотвращает отправку куки на другие сайты, что защищает от CSRF (Cross-Site Request Forgery) атак. Добавьте флаг SameSite при установке куки. Варианты включают Strict, Lax, и None.
Set-Cookie: sessionId=abc123; SameSite=Strict


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

🟠Подпись куки
С помощью HMAC (Hash-based Message Authentication Code) позволяет проверить целостность и подлинность данных в куки. Используйте секретный ключ для генерации HMAC подписи и добавьте её к куки.
import hmac
import hashlib

secret_key = b'secret'
cookie_value = b'sessionId=abc123'
signature = hmac.new(secret_key, cookie_value, hashlib.sha256).hexdigest()

cookie = f'{cookie_value.decode()}; Signature={signature}'


🟠Защита от XSS атак
Могут использоваться для кражи куки. Включает в себя валидацию и фильтрацию пользовательских вводов, использование Content Security Policy (CSP) и безопасное кодирование данных. Внедрите валидацию и фильтрацию вводов на стороне сервера, настройте CSP заголовки.
Content-Security-Policy: script-src 'self'


🟠Регулярное обновление и истечение срока действия куки
Значений куки и установка короткого срока действия уменьшает временное окно для атакующих. Устанавливайте короткий срок действия и обновляйте значение куки при каждой сессии.
Set-Cookie: sessionId=abc123; Max-Age=3600  # 1 час


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 В чем разница между MVC и MVVM?

MVC (Model-View-Controller) и MVVM (Model-View-ViewModel) — это шаблоны проектирования для разделения данных и логики приложения от пользовательского интерфейса. MVC разделяет приложение на три компонента: модель, представление и контроллер. MVVM заменяет контроллер на ViewModel, который обеспечивает специфическую для представления логику и связывание данных, что упрощает управление пользовательским интерфейсом и разработку.

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

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

🚩Аутентификация (Authentication)

Она подтверждает, что пользователь является тем, за кого он себя выдает.

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

🟠Методы аутентификации
Пароли: Пользователь вводит пароль, который проверяется на соответствие сохраненному в системе.
Биометрические данные: Отпечатки пальцев, распознавание лица, голосовая идентификация.
Токены: Аппаратные устройства или программные токены, генерирующие одноразовые коды.
Сертификаты: Использование цифровых сертификатов для проверки подлинности.
Многофакторная аутентификация (MFA): Комбинация нескольких методов (например, пароль + одноразовый код).

🟠Пример
Вход в систему с помощью имени пользователя и пароля.

🚩Авторизация (Authorization)

Она контролирует доступ к ресурсам и действиям на основе уровня доступа пользователя.

🟠Цель
Определить, какие действия пользователю разрешено выполнять и к каким ресурсам он имеет доступ.

🟠Методы авторизации
Ролевое управление доступом (RBAC): Назначение ролей пользователям, каждая из которых имеет определенные права доступа.
Управление доступом на основе атрибутов (ABAC): Использование атрибутов (например, время дня, местоположение) для определения прав доступа.
Списки контроля доступа (ACL): Определение конкретных прав доступа для каждого ресурса и пользователя.

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

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

🟠Цель
Аутентификация: Подтвердить личность пользователя.
Авторизация: Определить, к каким ресурсам и действиям пользователь имеет доступ.

🟠Когда происходит
Аутентификация: Первым шагом перед предоставлением доступа к системе.
Авторизация: После аутентификации, для контроля доступа к ресурсам и действиям.

🟠Основные вопросы
Аутентификация: Кто вы?
Авторизация: Что вам разрешено делать?

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

MVVM (Model-View-ViewModel) — это архитектурный паттерн, который облегчает разделение разработки графического интерфейса от логики бизнес-процессов. ViewModel в MVVM обрабатывает большинство логики представления и обеспечивает двунаправленное связывание между View (интерфейсом пользователя) и Model (данными), что упрощает тестирование и поддержку.

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