- LEFT JOIN – возвращает все записи из левой таблицы и только совпадающие из правой. Если совпадений нет, недостающие значения будут NULL.
- INNER JOIN – возвращает только записи, у которых есть совпадения в обеих таблицах.
LEFT JOIN используют, если важны все данные из первой таблицы, INNER JOIN – если нужны только совпадающие записи.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Основное различие между протоколами 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, так как это указывает на то, что сайт заботится о безопасности данных.
Поисковые системы, такие как Google, предпочитают сайты, использующие HTTPS, и ранжируют их выше по сравнению с сайтами, использующими HTTP.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Это распределенная система контроля версий (VCS), которая позволяет отслеживать изменения в коде, работать с разными версиями и объединять их.
Основные возможности:
- Ведение истории изменений
- Ветки (branching) и слияния (merge/rebase)
- Работа с удаленными репозиториями (GitHub, GitLab)
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
В PostgreSQL существует несколько видов блокировок, которые используются для управления конкурентным доступом к данным и обеспечения целостности транзакций.
Эти блокировки применяются к целым таблицам и используются для операций, которые требуют эксклюзивного доступа к таблице.
Блокировка на уровне доступа для чтения данных из таблицы (например, при выполнении команды
SELECT). Не блокирует другие команды SELECT.Блокировка уровня строки, позволяющая другим транзакциям выполнять команды
SELECT FOR UPDATE и SELECT FOR SHARE.Блокировка, применяемая при вставке, обновлении или удалении строк (
INSERT, UPDATE, DELETE). Блокирует блокировки SHARE и EXCLUSIVE.Используется для выполнения команд, которые обновляют индексы, но не данные (
VACUUM). Блокирует другие блокировки SHARE UPDATE EXCLUSIVE и более строгие.Блокировка для чтения данных из таблицы с возможностью блокировки изменений. Используется для операций, которые должны видеть согласованное состояние данных (
ANALYZE).Используется для команд, которые выполняют чтение с возможностью блокировки последующих изменений, таких как
CREATE INDEX CONCURRENTLY.Блокирует доступ к таблице для всех операций, кроме команд
SELECT и команд с уровнем блокировки ACCESS SHARE.Самая строгая блокировка, блокирующая все другие операции. Применяется для структурных изменений таблицы (
ALTER TABLE, DROP TABLE).Эти блокировки применяются к отдельным строкам таблицы и используются для управления конкурентным доступом к данным на более детальном уровне.
Блокирует выбранные строки для обновления другими транзакциями. Строки с такой блокировкой могут быть изменены только текущей транзакцией.
Блокирует строки для чтения, но не для изменения. Другие транзакции могут читать эти строки, но не изменять их.
Похоже на
SELECT FOR UPDATE, но позволяет другим транзакциям выполнять операции, не изменяющие ключи.Похоже на
SELECT FOR SHARE, но позволяет другим транзакциям выполнять операции, не изменяющие строки.Эти блокировки применяются к индексам и используются для управления доступом к индексированным данным.
Используются автоматически при доступе к индексам для обеспечения целостности данных. Это может включать блокировки при обновлении индексов или их чтении.
Дедлоки возникают, когда две или более транзакций блокируют друг друга, ожидая освобождения ресурсов, которые заблокированы друг другом. PostgreSQL автоматически обнаруживает дедлоки и прерывает одну из транзакций для их разрешения.
Использование блокировок для предотвращения конкурентных изменений данных.
Применение блокировок для управления доступом к ресурсам в многопользовательских средах.
Выбор оптимальных типов блокировок для балансировки между целостностью данных и производительностью.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
HTTP-ответ сервера включает:
1. Статус-код (например, 200 OK, 404 Not Found)
2. Заголовки (Content-Type, Content-Length) – описывают параметры ответа
3. Тело ответа – HTML, JSON, файл или другой контент
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это объект, который позволяет поочередно проходить через элементы коллекции (например, списка или множества) без необходимости знать внутреннее представление этой коллекции. Итераторы предоставляют стандартный интерфейс для доступа к элементам, что делает их важной частью объектно-ориентированного программирования и функционального программирования.
Объекты, которые поддерживают протокол итерации, называются итерабельными. Примеры включают списки, кортежи, множества и словари.
В Python, чтобы объект был итерабельным, он должен реализовать метод
__iter__(), который возвращает итератор.Итератор — это объект, который реализует методы
__iter__() и __next__(). Метод __next__() возвращает следующий элемент последовательности, а когда элементы заканчиваются, возбуждает исключение StopIteration.Пример с использованием встроенного итератора
numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers) # Получение итератора из списка
print(next(iterator)) # Вывод: 1
print(next(iterator)) # Вывод: 2
print(next(iterator)) # Вывод: 3
print(next(iterator)) # Вывод: 4
print(next(iterator)) # Вывод: 5
# print(next(iterator)) # Вызывается StopIteration
Пример создания собственного итератора
class MyIterator:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1
# Использование собственного итератора
my_iter = MyIterator(1, 5)
for num in my_iter:
print(num) # Вывод: 1 2 3 4
Итераторы предоставляют единый интерфейс для прохода по элементам коллекции, независимо от их типа.
Итераторы генерируют элементы по одному, что экономит память при работе с большими наборами данных.
Итераторы инкапсулируют логику обхода элементов, упрощая код и делая его более читаемым.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤯1
Да, SDLC (Software Development Life Cycle) – это процесс создания ПО, включающий:
1. Анализ требований – сбор информации о проекте.
2. Проектирование – создание архитектуры системы.
3. Разработка – написание кода.
4. Тестирование – поиск и исправление ошибок.
5. Деплой – развертывание продукта.
6. Поддержка – обновления и исправления.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Каждая запись в одной таблице связана с одной и только одной записью в другой таблице.
Пользователь (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)
);
Каждая запись в одной таблице может быть связана с несколькими записями в другой таблице, но каждая запись в другой таблице связана только с одной записью в первой таблице.
Пользователь (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)
);
Каждая запись в одной таблице может быть связана с множеством записей в другой таблице, и наоборот.
Студенты (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)
);
В нереляционных базах данных связи могут быть организованы иначе, поскольку они часто не поддерживают традиционные реляционные модели.
Вложенные документы
Например, в 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
Это атомарная последовательность операций в базе данных, которая выполняется как единое целое. Она гарантирует целостность данных с помощью ACID-принципов:
- Atomicity (Атомарность) – все операции выполняются либо полностью, либо не выполняются вовсе.
- Consistency (Согласованность) – данные остаются в корректном состоянии после выполнения.
- Isolation (Изоляция) – параллельные транзакции не мешают друг другу.
- Durability (Долговечность) – изменения сохраняются даже при сбое системы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Разница между SQL и NoSQL базами данных заключается в их архитектуре, структуре, методах хранения данных и использовании. Рассмотрим эти различия подробнее.
SQL (Structured Query Language) базы данных
Реляционные базы данных: SQL базы данных являются реляционными и используют таблицы для хранения данных. Каждая таблица состоит из строк и столбцов, что позволяет структурировать данные в виде отношений.
Схемы данных: SQL базы данных требуют четко определенных схем (schemas), которые строго контролируют структуру данных. Все записи в таблице должны следовать заранее определенной структуре.
Язык запросов: SQL использует структурированный язык запросов для манипуляции данными. Язык SQL стандартизирован и включает команды для создания, чтения, обновления и удаления данных (CRUD).
Нереляционные базы данных: NoSQL базы данных не обязательно используют таблицы для хранения данных. Вместо этого они могут использовать различные модели данных, такие как документы, графы, ключ-значение и столбцы
Гибкость схем: NoSQL базы данных часто не требуют фиксированных схем. Это позволяет хранить данные разной структуры в одной и той же коллекции или таблице.
Разнообразие языков запросов: В NoSQL базах данных отсутствует единый стандарт языка запросов. Они могут использовать различные методы доступа к данным, включая REST API и собственные языки запросов.
Вертикальная масштабируемость: SQL базы данных обычно масштабируются вертикально, то есть увеличивая мощность сервера (CPU, RAM, дисковое пространство).
Транзакции и консистентность: SQL базы данных поддерживают ACID транзакции (Atomicity, Consistency, Isolation, Durability), что обеспечивает высокую надежность и консистентность данных.
Горизонтальная масштабируемость: NoSQL базы данных предназначены для горизонтального масштабирования, что позволяет распределять данные по множеству серверов.
Гибкость и скорость: NoSQL базы данных обычно более гибки и могут обеспечивать высокую производительность при работе с большими объемами данных и высокими нагрузками на запись и чтение.
MySQL, PostgreSQL, Oracle, Microsoft SQL Server.
Финансовые системы, системы управления запасами, системы управления клиентами (CRM), где требуется сложные запросы и транзакции.
MongoDB, Cassandra, Redis, Couchbase.
Системы больших данных, реального времени аналитика, социальные сети, приложения для интернета вещей (IoT), где требуется высокая производительность и гибкость.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Хотя паттерн Singleton обеспечивает глобальную точку доступа к объекту, он считается антипаттерном, потому что:
- Нарушает SRP (Single Responsibility Principle), смешивая управление объектом и его логику.
- Создает скрытые зависимости, усложняя тестирование.
- Увеличивает связность кода, усложняя поддержку и расширение.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Это конструкция SQL, используемая для группировки строк в таблице на основе значений одного или нескольких столбцов. Она часто используется в сочетании с агрегатными функциями (такими как
COUNT, SUM, AVG, MAX, MIN), чтобы выполнять вычисления для каждой группы в результате запроса.Операция
GROUP BY группирует строки, имеющие одинаковые значения в указанных столбцах, в одну группу.В сочетании с
GROUP BY часто используются агрегатные функции для выполнения вычислений на уровне групп, а не отдельных строк.SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это фиксированный временной отрезок (обычно 1-4 недели), в течение которого команда Scrum работает над задачами из бэклога и выпускает инкремент продукта.
Основные события спринта:
1. Планирование (Sprint Planning) – выбираются задачи.
2. Ежедневные митинги (Daily Scrum) – синхронизация работы.
3. Демонстрация (Sprint Review) – показ результата.
4. Ретроспектива (Sprint Retrospective) – анализ ошибок и улучшений.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Коды ответов HTTP — это трехзначные числовые коды, используемые для обозначения результата запроса клиента к серверу. Они помогают клиенту (например, браузеру) понять, как обрабатывать ответ. Все коды делятся на пять категорий:
Эти коды указывают, что запрос был получен, и процесс продолжается.
100 Continue: Клиент должен продолжать запрос.
101 Switching Protocols: Сервер переключается на другой протокол по запросу клиента.
Эти коды указывают на успешное выполнение запроса.
200 OK: Запрос успешно выполнен, и сервер вернул нужные данные.
201 Created: Запрос успешно выполнен, и был создан новый ресурс.
202 Accepted: Запрос принят, но еще не обработан.
204 No Content: Запрос успешно выполнен, но в ответе нет содержимого.
Эти коды указывают, что клиент должен предпринять дополнительные действия для завершения запроса.
301 Moved Permanently: Ресурс был перемещен на постоянный новый URL.
302 Found: Ресурс временно находится по другому URL.
304 Not Modified: Ресурс не изменился с последнего запроса клиента.
Эти коды указывают на ошибки клиента при формировании запроса.
400 Bad Request: Некорректный запрос из-за синтаксической ошибки.
401 Unauthorized: Запрос требует аутентификации.
403 Forbidden: У клиента нет прав доступа к ресурсу.
404 Not Found: Ресурс не найден.
409 Conflict: Конфликт запроса с текущим состоянием ресурса.
Эти коды указывают на ошибки сервера при обработке корректного запроса клиента.
500 Internal Server Error: Внутренняя ошибка сервера.
501 Not Implemented: Сервер не поддерживает функциональность, необходимую для выполнения запроса.
502 Bad Gateway: Сервер получил некорректный ответ от вышестоящего сервера.
503 Service Unavailable: Сервер временно недоступен.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. S – Single Responsibility Principle (Принцип единственной ответственности) – у класса должна быть только одна причина для изменения.
2. O – Open/Closed Principle (Принцип открытости/закрытости) – классы должны быть открыты для расширения, но закрыты для модификации.
3. L – Liskov Substitution Principle (Принцип подстановки Барбары Лисков) – подклассы должны заменять родительские классы без изменения поведения.
4. I – Interface Segregation Principle (Принцип разделения интерфейсов) – интерфейсы не должны заставлять классы реализовывать ненужные методы.
5. D – Dependency Inversion Principle (Принцип инверсии зависимостей) – классы должны зависеть от абстракций, а не от конкретных реализаций.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это стандартный протокол для веб-серверов, который позволяет запускать внешние программы (скрипты) для генерации веб-страниц динамически. CGI скрипты могут быть написаны на различных языках программирования, таких как Perl, Python, PHP, C и других. Когда веб-сервер получает запрос на страницу, обрабатываемую CGI, он запускает соответствующий скрипт и передает ему данные запроса.
CGI прост в реализации и не требует сложной настройки. Поддерживает множество языков программирования, что делает его универсальным решением.
CGI является стандартом и поддерживается практически всеми веб-серверами.
Каждый запрос запускает новый процесс, что обеспечивает изоляцию запросов и повышает безопасность.
Каждый запрос создает новый процесс, что может быть ресурсоемким и замедлять работу сервера при большом количестве запросов. Создание и завершение процессов занимает время, что увеличивает задержку ответа.
Плохая производительность при высоких нагрузках делает CGI плохо подходящим для масштабируемых веб-приложений. Ограниченная возможность использования пула процессов для повышения эффективности.
Сложнее интегрироваться с современными технологиями и фреймворками. Отсутствие встроенных средств для работы с сессиями, аутентификацией и другими функциями современных веб-приложений.
Улучшенная версия CGI, которая повторно использует процессы для обработки нескольких запросов, что повышает производительность.
Языки и фреймворки, такие как PHP, ASP.NET, Node.js, Django, Ruby on Rails, которые интегрируются непосредственно с веб-серверами и обеспечивают высокую производительность.
Стандартный интерфейс для Python-приложений, позволяющий эффективную обработку запросов.
Серверы приложений, такие как Apache Tomcat, JBoss, которые предоставляют контейнеры для выполнения веб-приложений и управления ими.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
- PostgreSQL – объектно-реляционная СУБД (поддерживает JSONB, XML, GIS).
- MySQL – реляционная СУБД (быстрее при простых операциях).
2. Производительность
- PostgreSQL – лучше работает с сложными запросами и большими объемами данных.
- MySQL – быстрее на чтении и простых операциях.
3. Расширяемость
- PostgreSQL – поддерживает кастомные типы данных, индексы, процедурные языки.
- MySQL – более ограничен в расширяемости.
4. Транзакции и ACID
- PostgreSQL – строго соблюдает ACID.
- MySQL – зависит от типа таблицы (InnoDB поддерживает ACID, MyISAM – нет).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Идемпотентность — это свойство операции, при котором повторное выполнение этой операции приводит к тому же результату, что и однократное выполнение. Это понятие часто используется в контексте HTTP методов, API запросов и транзакций в системах с распределенной архитектурой.
GET: Получение ресурса. Повторный запрос не изменяет состояние ресурса.
PUT: Обновление или создание ресурса. Повторный запрос с одинаковыми данными приводит к одному и тому же состоянию ресурса.
DELETE: Удаление ресурса. Повторный запрос удаляет ресурс, если он существует, или не изменяет состояние, если ресурс уже удален.
POST: Создание нового ресурса. Повторный запрос приводит к созданию нового ресурса с новым идентификатором, что изменяет состояние системы.
GET запрос
GET /user/123
PUT запрос
PUT /user/123
{
"name": "John Doe",
"age": 30
}
Идемпотентная операция
UPDATE users SET name = 'John Doe' WHERE id = 123;
Неидемпотентная операция
INSERT INTO users (name, age) VALUES ('John Doe', 30);Идемпотентные операции помогают в обеспечении надежности и устойчивости систем, особенно в условиях повторных запросов из-за сетевых сбоев или таймаутов.
При сбоях в системе легче повторно выполнить идемпотентную операцию, не беспокоясь о непредвиденных изменениях состояния.
Идемпотентность упрощает разработку и тестирование, так как позволяет предсказуемо управлять состоянием системы при повторных запросах.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
HTTP-запрос включает:
1. Метод (GET, POST, PUT, DELETE) – определяет действие.
2. URL (Uniform Resource Locator) – адрес ресурса.
3. Заголовки (Headers) – передают метаданные (User-Agent, Content-Type).
4. Тело запроса (Body) – содержит данные (например, JSON).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Клиент-серверная архитектура — это модель взаимодействия в сетях, где задачи распределяются между поставщиками ресурсов или услуг, называемыми серверами, и потребителями, называемыми клиентами. Это одна из самых распространенных архитектурных моделей в разработке программного обеспечения и сетевых приложений.
Это программа или устройство, которое инициирует запросы к серверу для доступа к ресурсу или услуге.
Отправка запросов к серверу.
Получение и отображение данных или выполнения действий на основе ответа от сервера.
Это программа или устройство, которое обрабатывает запросы от клиентов и предоставляет им необходимые ресурсы или услуги.
Обработка запросов от клиентов.
Управление доступом к ресурсам (например, базам данных, файлам, услугам).
Возврат соответствующих данных или результатов выполнения запросов клиентам.
Клиент инициирует запрос к серверу. Это может быть запрос на получение данных, отправка данных для обработки, выполнение определенной задачи и т.д.
Сервер получает запрос и обрабатывает его. Это может включать выполнение операций над базой данных, запуск скриптов или программ, обработку данных и т.д.
Сервер отправляет ответ клиенту. Ответ может содержать запрашиваемые данные, подтверждение успешного выполнения операции или сообщение об ошибке.
Клиент получает ответ от сервера и использует его для выполнения дальнейших действий, таких как отображение данных пользователю, обработка данных и т.д.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Это метод, при котором функция вызывает саму себя.
Используется, когда задачу можно разбить на подзадачи того же типа (например, факториал, обход дерева).
Важно контролировать условия выхода, иначе возникает бесконечная рекурсия и переполнение стека.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1🤯1