TGViewer
Channel Public Channel
Backend

Backend

@easy_backend

Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @sendme_ads
Subscribers
3.74K
Photos
38
Videos
0
Links
995

Showing posts older than #1516 · Back to latest

Older Posts 20 shown
Post #1514 469
🤔 Расскажи про уровни изоляции ?

Уровни изоляции транзакций в SQL определяют, как взаимодействуют параллельные транзакции и какие аномалии данных они предотвращают.

🟠Read Uncommitted
Видит изменения, даже если они не зафиксированы. Аномалии: грязное чтение.
🟠Read Committed
Видит только зафиксированные изменения. Аномалии: неповторяющееся чтение.
🟠Repeatable Read
Сохраняет консистентность чтения данных в пределах одной транзакции. Аномалии: фантомные чтения.
🟠Serializable
Полная изоляция транзакций, как если бы они выполнялись последовательно. Аномалии: никаких.

Ставь 👍 и забирай 📚 Базу знаний
Post #1513 482
🤔 Для чего можно использовать celery?

Celery поддерживает различные брокеры сообщений, включая RabbitMQ и Redis, для управления очередями задач.

🚩Основные возможности

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

🚩Основные задачи

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

🟠Периодические задачи
Обновление данных: Регулярное обновление кэшей, индексов поиска или других данных в базе данных.
Мониторинг и сбор метрик: Периодический сбор и обработка метрик для мониторинга состояния системы.
Очистка данных: Периодическая очистка устаревших или временных данных из базы данных.

🟠Уведомления и оповещения
Уведомления в реальном времени: Отправка уведомлений пользователям через различные каналы (email, SMS, push-уведомления).
Событийное оповещение: Реагирование на события и триггеры, такие как изменения в базе данных или действия пользователя.

🟠Работа с большими данными и машинным обучением
Параллельная обработка данных: Выполнение параллельных вычислений для обработки больших объемов данных.
Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний на больших наборах данных.

🟠Веб-скрейпинг и интеграция данных
Веб-скрейпинг: Асинхронный сбор данных с веб-сайтов для агрегации или анализа.
Интеграция данных: Асинхронная интеграция данных из различных источников и API.

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

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

Ставь 👍 и забирай 📚 Базу знаний
Post #1512 443
🤔 Что такое CD (Continuous Delivery / Continuous Deployment)?

Это практика автоматизации и оптимизации процессов доставки приложений и их обновлений в рабочую среду. Она является частью DevOps-подхода и тесно связана с CI (Continuous Integration).

🚩Два основных значения CD

🟠Continuous Delivery (Непрерывная доставка)
Continuous Delivery подразумевает автоматизацию процессов сборки, тестирования и подготовки приложения к выпуску в продакшн. Однако процесс развертывания остаётся ручным, чтобы команда могла контролировать его выполнение. Ключевые особенности:
Автоматическое развертывание приложения в тестовые и предрелизные среды.
Возможность развернуть приложение в продакшн в любой момент с минимальными усилиями.
Финальное решение о развертывании принимает человек.
Цель: Быть готовым к безопасному и быстрому выпуску обновлений в любой момент.
Пример использования:
В интернет-магазине обновление функционала сначала разворачивается в тестовой среде. После успешной проверки QA-командой или бизнес-менеджером приложение вручную переносится в продакшн.

🟠Continuous Deployment (Непрерывное развертывание)
Continuous Deployment идёт дальше Continuous Delivery, автоматически развертывая обновления в продакшн после успешного прохождения всех тестов. Процесс полностью автоматизирован и исключает ручное вмешательство. Ключевые особенности:
Абсолютная автоматизация — каждый подтверждённый код (коммит) автоматически попадает в продакшн.
Постоянный выпуск обновлений, минимизирующий разницу между разработкой и рабочей средой.
Цель: Сократить время доставки функционала и исправлений до продакшна, обеспечивая быстрые релизы.
Пример использования:
В приложении социальной сети любые изменения (например, исправление ошибки или добавление нового поста) автоматически проходят через CI/CD pipeline и попадают в продакшн.

🚩Ключевые элементы CD

🟠CI/CD Pipeline
Автоматизированный процесс, включающий сборку, тестирование, развертывание.

🟠Тестирование
Юнит-тесты.
Интеграционные тесты.
Нагрузочные тесты.
Проверка безопасности.

🟠Оркестрация и управление
Использование инструментов (Jenkins, GitLab CI/CD, CircleCI, GitHub Actions). Контейнеризация (Docker, Kubernetes).

🟠Мониторинг
Автоматическое отслеживание работоспособности приложений (Prometheus, Grafana).

🚩Плюсы

➕Скорость
Ускоряет доставку новых функций и исправлений.
➕Качество
Раннее выявление ошибок благодаря автоматическим тестам.
➕Прозрачность
Процесс развертывания становится понятным для всей команды.
➕Гибкость
Возможность быстро реагировать на изменения требований.

Ставь 👍 и забирай 📚 Базу знаний
Post #1511 457
🤔 Какая разница между аутентификацией и авторизацией?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 5
Post #1510 506
🤔 Почему goto — это зло?

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

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

🟠Разрушение структурного программирования
Одним из ключевых достижений программирования стало структурное программирование, предложенное в 1960-х годах. Оно основывается на трех базовых конструкциях:
Последовательность (команды выполняются одна за другой),
Разветвление (if-else, switch),
Циклы (for, while, do-while). Использование goto нарушает эту структуру, что приводит к так называемому "спагетти-коду", где невозможно понять, в каком порядке выполняются инструкции.

🟠Альтернативы `goto`
Вместо goto в большинстве случаев можно использовать:
Циклы (for, while, do-while) – для повторяющихся действий.
Рекурсию – если нужна сложная логика выполнения.
Исключения (try-catch) – для обработки ошибок, вместо goto для выхода из глубоко вложенных структур.
Флаги и условные операторы – когда нужно контролировать выход из определенного блока кода.

🟠Когда `goto` все же оправдан?
Несмотря на его репутацию, goto может быть полезен в низкоуровневом программировании, например:
В коде на C для обработки ошибок (например, единый выход из функции в драйверах ОС).
В компиляхторах или интерпретаторах языков программирования.
В ASM-вставках, где goto заменяется на jmp.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
Post #1509 541
🤔 Какие есть уровни изоляции транзакций ?

Уровни изоляции транзакций определяют степень видимости изменений, сделанных одной транзакцией, для других параллельно выполняющихся транзакций. Они помогают контролировать влияние транзакций друг на друга и управляют различными типами аномалий, такими как "грязное" чтение, неповторяющееся чтение и фантомные чтения. В стандарте SQL-92 определены четыре уровня изоляции транзакций:

🚩Read Uncommitted (Чтение неподтвержденных данных)

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

🟠Грязное чтение (Dirty Read)
Транзакция может прочитать данные, которые были изменены другой транзакцией, но не были зафиксированы.

🟠Неповторяющееся чтение (Non-repeatable Read)
Транзакция может видеть разные значения данных при повторном чтении, если другая транзакция изменила эти данные и зафиксировала изменения.

🟠Фантомные чтения (Phantom Read)
Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса.

🚩Read Committed (Чтение подтвержденных данных)

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

🟠Неповторяющееся чтение (Non-repeatable Read)
Транзакция может видеть разные значения данных при повторном чтении, если другая транзакция изменила и зафиксировала эти данные.
🟠Фантомные чтения (Phantom Read)
Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса.

🚩Repeatable Read (Повторяемое чтение)

Транзакция гарантирует, что если она прочитала данные в начале транзакции, эти данные останутся неизменными до конца транзакции. Транзакция не видит изменения данных, сделанные другими транзакциями после начала текущей транзакции.
Фантомные чтения (Phantom Read): Транзакция может видеть новые строки, добавленные другой транзакцией, при повторном выполнении запроса.

🚩Serializable (Сериализуемость)

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

-- Установка уровня изоляции
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;


Пример на Java (использование JDBC)
connection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
connection.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
connection.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 3
Post #1508 479
🤔 Расскажи про уровни изоляции ?

Уровни изоляции транзакций в SQL определяют, как взаимодействуют параллельные транзакции и какие аномалии данных они предотвращают.

🟠Read Uncommitted
Видит изменения, даже если они не зафиксированы. Аномалии: грязное чтение.
🟠Read Committed
Видит только зафиксированные изменения. Аномалии: неповторяющееся чтение.
🟠Repeatable Read
Сохраняет консистентность чтения данных в пределах одной транзакции. Аномалии: фантомные чтения.
🟠Serializable
Полная изоляция транзакций, как если бы они выполнялись последовательно. Аномалии: никаких.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #1507 479
🤔 Что такое чистый код?

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

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

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

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

🟠Последовательность
Следование единому стилю кодирования и соглашениям по наименованию. Это упрощает чтение и понимание кода.

🟠Минимум избыточности
Избегание дублирования кода, что способствует его упрощению и уменьшению ошибок.

🟠Модульность
Разделение кода на независимые модули или компоненты, которые можно разрабатывать, тестировать и поддерживать отдельно.

🟠Тестируемость
Код должен быть легким для тестирования. Хорошо написанный код обычно легко покрыть юнит-тестами.

🚩Принципы чистого кода

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


🟠Функции
Функции должны быть короткими и выполнять одну задачу.
     void calculateAndPrintTotal() {
int total = calculateTotal();
printTotal(total);
}


🟠Комментарии
Комментарии должны объяснять, почему был написан определенный код, а не что он делает. Хорошо написанный код должен быть самодокументируемым.
// Calculate the total price including tax
int totalPrice = calculateTotalPrice();


🟠Форматирование
Единый стиль форматирования делает код более читабельным. Используйте отступы, пробелы и пустые строки для улучшения структуры кода.
     if (isValid) {
process();
} else {
handleError();
}


🟠Обработка ошибок
Обработка ошибок должна быть понятной и не загромождать основной код.
     try {
processFile(file);
} catch (IOException e) {
logError(e);
}


🟠Магические числа и строки
Избегайте использования магических чисел и строк. Вместо этого используйте константы с осмысленными именами.
static final int MAX_USERS = 100;


Ставь 👍 и забирай 📚 Базу знаний
Post #1506 446
🤔 Какие есть статус коды?

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

🚩Информационные (100-199)

🟠100 Continue
Сервер получил начальную часть запроса клиента и ожидает продолжения.
🟠101 Switching Protocols
Клиент запросил изменение протокола, и сервер согласен выполнить это.

🚩Успешные (200-299)

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

🚩Перенаправления (300-399)

🟠301 Moved Permanently
Запрашиваемый ресурс был окончательно перемещен на новый URI.
🟠302 Found
Запрашиваемый ресурс временно доступен по другому URI.
🟠304 Not Modified
Данные не изменились, клиент может использовать кэшированную версию.

🚩Клиентские ошибки (400-499)

🟠400 Bad Request
Сервер не может обработать запрос из-за ошибки клиента (например, неверный синтаксис).
🟠401 Unauthorized
Для доступа к запрашиваемому ресурсу требуется аутентификация.
🟠403 Forbidden
У клиента нет прав на доступ к запрашиваемому ресурсу.
🟠404 Not Found
Запрашиваемый ресурс не найден на сервере.
🟠405 Method Not Allowed
Метод, указанный в запросе, не поддерживается данным ресурсом.

🚩Ошибки сервера (500-599)

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

Ставь 👍 и забирай 📚 Базу знаний
  • 💊 2
Post #1505 394
🤔 Расскажи об отличиях MVC от MVP?

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

🚩MVC (Model-View-Controller)

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

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

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

🚩MVP (Model-View-Presenter)

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

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

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

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний
  • 💊 3
Post #1504 428
🤔 Какие существуют нормальные формы в SQL?

Это процесс организации данных для минимизации избыточности и избегания аномалий при внесении данных. Нормальные формы (NF) — это набор правил, которые помогают в нормализации баз данных.

🟠Первая нормальная форма (1NF)
Таблица находится в 1NF, если: Все столбцы содержат атомарные значения, то есть каждое значение в столбце неделимо. Все строки уникальны, нет повторяющихся строк.
Пример: Если у вас есть таблица с заказами, и каждый заказ может содержать несколько продуктов, вместо хранения всех продуктов в одном столбце, нужно разбить их на отдельные строки.

🟠Вторая нормальная форма (2NF)
Таблица находится во 2NF, если: Она находится в 1NF. Все неключевые столбцы полностью зависят от всего первичного ключа, а не от его части.
Пример
Если в таблице "Заказы" у вас есть составной ключ (OrderID, ProductID), то столбцы, зависящие только от OrderID (например, OrderDate), должны быть вынесены в отдельную таблицу.

🟠Третья нормальная форма (3NF)
Таблица находится в 3NF, если: Она находится во 2NF. Все неключевые столбцы зависят только от первичного ключа, а не от других неключевых столбцов.
Пример
Если в таблице "Сотрудники" у вас есть столбцы EmployeeID, DepartmentID и DepartmentName, нужно вынести DepartmentName в отдельную таблицу "Департаменты", чтобы избежать зависимости между неключевыми столбцами.

🟠Бойс-Кодд нормальная форма (BCNF)
Таблица находится в BCNF, если: Она находится в 3NF. Для каждой функциональной зависимости X -> Y, X является суперключом.
Пример:
Если в таблице "Курс" есть зависимости (Professor, Course) -> Room и Room -> Capacity, необходимо реструктурировать таблицу так, чтобы не было зависимостей, где детерминанты не являются суперключами.

🟠Четвертая нормальная форма (4NF)
Таблица находится в 4NF, если: Она находится в BCNF. В ней нет многозначных зависимостей (Multivalued Dependencies).
Пример:
Если студент может записаться на несколько курсов и участвовать в нескольких клубах, то эти зависимости должны быть вынесены в отдельные таблицы.

🟠Пятая нормальная форма (5NF)
Таблица находится в 5NF, если: Она находится в 4NF. В ней нет соединительных зависимостей (Join Dependencies), которые нельзя разделить без потери данных.
Пример:
Если у вас есть сложные зависимости между несколькими таблицами, то нужно убедиться, что все соединения этих таблиц могут быть разложены обратно без потери информации.

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

Ставь 👍 и забирай 📚 Базу знаний
Post #1503 394
🤔 Какие существуют типы баз данных?

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

🟠Реляционные базы данных (RDBMS)
Организуют данные в таблицы с заранее определенными схемами. Используют SQL для управления данными. MySQL, PostgreSQL, Oracle, Microsoft SQL Server.

🟠Документные базы данных (Document-Oriented)
Хранят данные в виде документов (обычно в формате JSON или BSON), что позволяет хранить сложные и гибкие структуры данных. MongoDB, CouchDB.

🟠Колонковые базы данных (Columnar)
Хранят данные столбцами вместо строк, что оптимизирует производительность для операций чтения и агрегации. Apache Cassandra, HBase.

🟠Ключ-значение базы данных (Key-Value)
Хранят данные в виде пар "ключ-значение", что позволяет быстрое извлечение данных по ключу. Redis, Riak, Amazon DynamoDB.

🟠Графовые базы данных (Graph)
Оптимизированы для хранения и обработки графовых структур, таких как узлы, ребра и свойства, что удобно для социальных сетей, рекомендательных систем и др. Neo4j, ArangoDB, Amazon Neptune.

🟠Базы данных временных рядов (Time Series)
Специализируются на хранении и анализе временных рядов данных, таких как метрики, события или показания датчиков. InfluxDB, TimescaleDB.

🟠Базы данных на основе объектов (Object-Oriented)
Хранят данные в виде объектов, как в объектно-ориентированном программировании, что позволяет хранить более сложные структуры данных. db4o, ObjectDB.

🟠Многомодельные базы данных (Multi-Model)
Поддерживают несколько типов моделей данных (например, реляционные, документные, графовые) в рамках одной базы данных. ArangoDB, OrientDB.

🟠Базы данных, ориентированные на массивы (Array)
Оптимизированы для работы с большими массивами данных, часто используемыми в научных вычислениях и аналитике. SciDB, Rasdaman.

🟠Распределенные базы данных (Distributed)
Распределяют данные по нескольким узлам или серверам, обеспечивая масштабируемость и отказоустойчивость. Google Spanner, CockroachDB.

Ставь 👍 и забирай 📚 Базу знаний
Post #1502 376
🤔 Какие бывают ограничения в Базе Данных?

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

🟠NOT NULL
Обеспечивает, что столбец не может содержать NULL значения. Это ограничение гарантирует, что данные всегда будут присутствовать в этом столбце.
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100) NOT NULL
);


🟠UNIQUE
Обеспечивает, что все значения в столбце или группе столбцов уникальны. Это ограничение предотвращает дублирование данных.
CREATE TABLE employees (
emp_id INT UNIQUE,
email VARCHAR(100) UNIQUE
);


🟠PRIMARY KEY
Сочетает в себе ограничения NOT NULL и UNIQUE. Обеспечивает уникальную идентификацию каждой строки в таблице. В таблице может быть только один первичный ключ.
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);


🟠FOREIGN KEY
Обеспечивает ссылочную целостность между таблицами. Столбец с внешним ключом (или группа столбцов) ссылается на первичный ключ или уникальный ключ в другой таблице.
CREATE TABLE departments (
dept_id INT PRIMARY KEY,
dept_name VARCHAR(100)
);

CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);


🟠CHECK
Обеспечивает, что значения в столбце соответствуют заданному условию. Это ограничение проверяет данные при вставке или обновлении.
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100),
salary DECIMAL(10, 2),
CHECK (salary > 0)
);


🟠DEFAULT
Устанавливает значение по умолчанию для столбца, если при вставке строки значение для этого столбца не указано.
CREATE TABLE employees (
emp_id INT,
name VARCHAR(100),
hire_date DATE DEFAULT CURRENT_DATE
);


🟠INDEX
Создает индекс на один или несколько столбцов таблицы для ускорения поиска данных. Хотя индекс не является ограничением в строгом смысле, он помогает оптимизировать запросы к базе данных.
CREATE INDEX idx_name ON employees(name);


Пример создания таблицы с различными ограничениями
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
dept_id INT,
salary DECIMAL(10, 2) CHECK (salary > 0),
hire_date DATE DEFAULT CURRENT_DATE,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 2
Post #1501 431
🤔 Что такое MVVM?

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

🚩Пример

Model
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}


ViewModel
public class UserViewModel : INotifyPropertyChanged
{
private ObservableCollection<User> _users;
public ObservableCollection<User> Users
{
get { return _users; }
set
{
_users = value;
OnPropertyChanged(nameof(Users));
}
}

public UserViewModel()
{
Users = new ObservableCollection<User>
{
new User { Name = "John Doe", Age = 30 },
new User { Name = "Jane Doe", Age = 25 }
};
}

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}


View (XAML)
<Window x:Class="MVVMExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox ItemsSource="{Binding Users}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>


Код за View (Code-behind)
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new UserViewModel();
}
}


Ставь 👍 и забирай 📚 Базу знаний
Post #1500 438
🤔 Какие бывают блокировки в 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 автоматически обнаруживает дедлоки и прерывает одну из транзакций для их разрешения.

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

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

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

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

Ставь 👍 и забирай 📚 Базу знаний
Post #1499 432
🤔 Чем отличается RIGHT, LEFT, INNER, JOIN?

JOIN в SQL используется для объединения строк из двух таблиц на основе связанного между ними столбца. Существует несколько видов JOIN, и каждый из них определяет, какие строки из таблиц попадут в итоговый результат.

🟠INNER JOIN
Выбирает только те строки, у которых есть совпадения в обеих таблицах. Если в одной из таблиц нет соответствующего значения, строка не попадет в результат.

🟠LEFT JOIN (или LEFT OUTER JOIN)
Возвращает все строки из левой таблицы, а из правой – только совпадающие. Если в правой таблице нет совпадения, в итоговом наборе будут NULL-значения.

🟠RIGHT JOIN (или RIGHT OUTER JOIN)
Возвращает все строки из правой таблицы, а из левой – только совпадающие. Если в левой таблице нет соответствующего значения, в результате появятся NULL.

🟠FULL JOIN (или FULL OUTER JOIN)
Возвращает все строки из обеих таблиц. Если в одной из таблиц нет соответствующей записи, подставляются NULL.

Ставь 👍 и забирай 📚 Базу знаний
Post #1497 406
🤔 Для чего подходят асинхронные операции?

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

🚩Методы

🟠Сетевое взаимодействие
HTTP-запросы: Асинхронные HTTP-запросы позволяют приложениям запрашивать данные у веб-серверов без блокировки пользовательского интерфейса. Например, загрузка данных из API, отправка форм и файлов. WebSockets: Поддержка двустороннего взаимодействия между клиентом и сервером в реальном времени. Это используется в чатах, онлайн-играх и других приложениях, где требуется мгновенная передача данных. API-вызовы: Асинхронные вызовы к внешним API позволяют продолжать выполнение других операций, не дожидаясь ответа от сервера.

🟠Ввод/вывод (I/O)
Файловые операции: Асинхронное чтение и запись файлов позволяет обрабатывать большие объемы данных без блокировки основного потока выполнения. Работа с базами данных: Асинхронные запросы к базам данных уменьшают время ожидания и улучшают масштабируемость приложения.

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

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

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

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

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

🟠Веб-приложения
Асинхронная обработка пользовательских запросов, выполнение сетевых операций и взаимодействие с базами данных для повышения производительности и отзывчивости.

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

🟠Игровая индустрия
Асинхронное взаимодействие с серверами, обработка событий пользователя и управление игровыми объектами в реальном времени.

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

Ставь 👍 и забирай 📚 Базу знаний
Post #1496 418
🤔 Что такое join'ы?

Это операции в языке SQL, которые позволяют объединять строки из двух или более таблиц на основе логических связей между ними. Существует несколько типов JOIN'ов, каждый из которых используется для разных сценариев объединения данных.

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

🟠INNER JOIN
Возвращает только те строки, которые имеют совпадающие значения в обеих таблицах.
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;


🟠LEFT JOIN (LEFT OUTER JOIN)
Возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, то в столбцах правой таблицы будут NULL.
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;


🟠RIGHT JOIN (RIGHT OUTER JOIN)
Возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, то в столбцах левой таблицы будут NULL.
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;


🟠FULL JOIN (FULL OUTER JOIN)
Возвращает все строки, когда есть совпадения в одной из таблиц. Если совпадений нет, то в соответствующих столбцах будут NULL.
SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;


🟠CROSS JOIN
Возвращает декартово произведение строк из двух таблиц. Каждая строка из первой таблицы соединяется со всеми строками из второй таблицы.
SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;


🟠SELF JOIN
Использует JOIN для объединения таблицы с самой собой. Это полезно, когда нужно сравнить строки внутри одной таблицы.
SELECT e1.name AS Employee1, e2.name AS Employee2
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;


Ставь 👍 и забирай 📚 Базу знаний
Post #1495 407
🤔 Что такое 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⃣Оптимизация программ:
Помощь в выборе наиболее эффективных алгоритмов и структур данных для решения конкретных задач.

Ставь 👍 и забирай 📚 Базу знаний
Post #1494 442
🤔 Что такое Web Sockets (веб сокет)?

WebSockets (веб-сокеты) — это коммуникационный протокол, предоставляющий возможность устанавливать постоянное, двустороннее соединение между клиентом (обычно веб-браузером) и сервером через один TCP-соединение. Это позволяет обмениваться данными в реальном времени с минимальной задержкой и без необходимости повторного открытия соединения для каждого обмена сообщениями, как это происходит в традиционных HTTP-соединениях.

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

🟠Двусторонняя коммуникация: WebSockets поддерживают полноценную двустороннюю (или full-duplex) коммуникацию, что позволяет как клиенту, так и серверу отправлять данные в любое время без необходимости инициирования запроса.
🟠Постоянное соединение: После установления WebSocket-соединение остается открытым, что значительно уменьшает задержки, связанные с установлением новых соединений, характерных для HTTP-запросов.
🟠Меньший накладной расход: WebSockets используют меньше заголовков по сравнению с HTTP-запросами, что делает передачу данных более эффективной и менее затратной по времени и ресурсам.
🟠Протокол: WebSocket протокол стандартизирован в RFC 6455 и поддерживается большинством современных веб-браузеров. Соединение начинается с обычного HTTP-запроса, который затем "обновляется" до WebSocket-соединения через HTTP-заголовок Upgrade.

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

🟠Установление соединения: Клиент отправляет HTTP-запрос с заголовком Upgrade: websocket на сервер, указывая на желание перейти к протоколу WebSocket. Сервер отвечает подтверждением, если поддерживает WebSockets, и соединение устанавливается.
🟠Передача данных: После установления соединения клиент и сервер могут обмениваться данными в обе стороны по мере необходимости. Сообщения передаются как фреймы (frames), которые могут содержать текстовые или бинарные данные.
🟠Закрытие соединения: Соединение может быть закрыто любой стороной в любой момент времени с отправкой соответствующего фрейма закрытия.

🚩Применения WebSocket:

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

Преимущества WebSocket:
🟠Эффективность: Меньший накладной расход и постоянное соединение делают WebSockets более эффективными для приложений, требующих частого обмена данными.
🟠Скорость: WebSockets обеспечивают более низкую задержку, что делает их идеальными для приложений, работающих в реальном времени.
🟠Простота использования: WebSockets имеют простой API, который легко интегрируется с современными веб-приложениями.

Ставь 👍 и забирай 📚 Базу знаний
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →