- merge объединяет изменения из одной ветки в другую, создавая новый коммит слияния. История остается неизменной, но ветка получает точку слияния.
- rebase переносит коммиты из одной ветки на другую, изменяя историю, но без создания дополнительного коммита.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Индексы требуют дополнительного места на диске для хранения. Чем больше данных в таблице, тем больше место занимает индекс. Если таблица содержит большое количество индексов, это может значительно увеличить объем хранимых данных.
Вставка, обновление и удаление данных в таблице с индексами требует дополнительных операций для обновления индексов. Это может существенно замедлить производительность операций модификации данных, особенно в таблицах с большим количеством индексов.
Администрирование и оптимизация индексов требует дополнительных усилий. Необходимо периодически проверять и оптимизировать индексы, чтобы избежать фрагментации и падения производительности. Неэффективное использование индексов может привести к ухудшению производительности запросов.
При выполнении операций модификации данных индексы могут вызывать блокировки, что может приводить к конфликтам и снижению производительности в условиях высокой конкурентности.
Неправильный выбор колонок для индексирования может не только не улучшить, но и ухудшить производительность запросов. Индексы должны быть тщательно подобраны и настроены в соответствии с типичными запросами к базе данных.
Избыточные или дублирующие индексы могут привести к ненужному расходу ресурсов и снижению производительности операций модификации данных.
В небольших таблицах накладные расходы на поддержку индексов могут превышать выигрыш в производительности запросов. В таких случаях индексы могут быть неэффективными.
Изменение структуры таблиц (например, добавление или удаление колонок) может потребовать перестройки существующих индексов, что может быть трудоемким процессом.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно использовать:
- Подзапросы (SELECT ... WHERE ... IN) – выбираем данные из одной таблицы, используя фильтр из другой.
- Объединение (UNION) – соединение строк двух таблиц, если у них одинаковая структура.
- Перекрестное соединение (CROSS JOIN) – аналог JOIN, но без явного указания соединения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
MVC (Model-View-Controller) и MVP (Model-View-Presenter) – это архитектурные шаблоны, используемые в разработке программного обеспечения для разделения логики приложения на отдельные компоненты. Хотя обе архитектуры помогают улучшить структуру и поддерживаемость кода, между ними существуют важные различия.
Отвечает за управление данными и бизнес-логикой приложения. Она не знает о существовании View и Controller.
Отображает данные, полученные от Model, и отправляет пользовательский ввод в Controller.
Получает ввод от View, обновляет Model и выбирает, какое View должно быть обновлено.
Отвечает за управление данными и бизнес-логикой приложения.
Отображает данные и передает пользовательский ввод Presenter'у.
Получает ввод от View, обновляет Model и передает данные обратно в View для отображения.
В MVC View взаимодействует напрямую с Model. В MVP View взаимодействует только с Presenter, а Presenter уже работает с Model.
В MVC Model уведомляет View об изменениях напрямую. В MVP Model уведомляет Presenter, а Presenter обновляет View.
В MVC Controller отвечает за определение, какое View отображать. В MVP Presenter отвечает за всю логику взаимодействия между Model и View, а также за обновление View.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Это сетевой протокол, который определяет правила адресации и передачи данных между устройствами в сети.
Разделяется на:
- IPv4 – классические 32-битные адреса (например,
- IPv6 – 128-битные адреса (например, 2001:db8::ff00:42:8329), решающие проблему нехватки IP-адресов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это легкий формат обмена данными, который легко читается и пишется человеком, а также легко парсится и генерируется компьютером. Он используется для представления структурированных данных в текстовом формате и основан на подмножестве языка программирования 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 широко используется в веб-разработке для обмена данными между клиентскими приложениями и сервером через HTTP-запросы, обычно с использованием методов
GET или POST.JSON используется для хранения конфигурационных настроек в различных приложениях, поскольку его структура легко читаема и редактируема.
В некоторых базах данных, таких как MongoDB, JSON используется как формат для хранения документов.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
- 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