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

Сайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp
Download Telegram
🤔 Как протестировать отказоустойчивость системы?

Отказоустойчивость системы — это её способность продолжать работать в случае отказа компонентов. Тестирование отказоустойчивости (resilience testing) направлено на проверку того, как система ведёт себя при сбоях, выявление уязвимостей и подтверждение эффективности мер по их устранению.

🚩Основные подходы к тестированию отказоустойчивости

🟠Инъекция отказов (Failure Injection Testing)
Этот метод предполагает преднамеренное внесение сбоев в систему, чтобы проверить её реакцию. Используются инструменты или ручные действия для моделирования отказов.
Недоступность узла.
Потеря сети или задержка.
Перегрузка памяти или процессора.

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

🟠Тестирование восстановления (Recovery Testing)
Проверяется, насколько быстро и корректно система может восстановиться после сбоя.
Перезапуск сервисов.
Переключение на резервные копии данных.

🟠Тестирование с изоляцией (Chaos Engineering)
Моделируются случайные сбои в производственной среде или её имитации для изучения поведения системы.
Chaos Monkey от Netflix.

🚩Что тестировать для отказоустойчивости?

🟠Сетевые сбои
Потеря соединения между сервисами.
Высокая задержка (latency).
Нестабильность сети (пакеты теряются, приходят с ошибками).

🟠Сбой аппаратного обеспечения
Отключение сервера или узла кластера.
Отказ жёсткого диска.
Уменьшение доступной памяти.

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

🟠Перегрузка системы
Всплеск количества пользователей.
Увеличение объёма входящих данных (например, в API или БД).

🟠Проблемы с внешними зависимостями
Недоступность внешних API или сервисов.
Непредсказуемое поведение внешних систем (например, возвращают неверные данные).

🚩Методы проведения тестов

🟠Симуляция отказов вручную
Выключение серверов. Уменьшение доступной памяти или процессорных ресурсов. Отключение или замедление сети.

🟠Использование инструментов для тестирования отказов
Chaos Monkey: Генерация случайных сбоев в продакшене.
Gremlin: Моделирование различных видов отказов (сети, ресурсов, зависимостей).
Toxiproxy: Симуляция проблем с сетевым соединением (задержки, потеря пакетов).
Fault Injection Tool (FIT): Моделирование аппаратных и программных сбоев.

🟠Эмуляция перегрузки
Использование инструментов для нагрузочного тестирования, таких как JMeter или Locust, для увеличения нагрузки до критических значений.

🟠Тестирование сценариев восстановления
Ручное или автоматическое выключение сервисов и проверка работы механизмов восстановления (например, перезапусков через Orchestrator типа Kubernetes).

🚩Ключевые показатели эффективности отказоустойчивости

🟠Время простоя
Как долго система остаётся недоступной после сбоя?
🟠Время восстановления (Recovery Time Objective, RTO)
За сколько времени система восстанавливает свою работоспособность?
🟠Потеря данных (Data Loss)
Какой объём данных теряется при сбоях?
🟠Стабильность после восстановления
Система возвращается в нормальное состояние или остаётся уязвимой?

🚩Советы по тестированию отказоустойчивости

🟠Тестировать на всех уровнях
От отдельных компонентов до всей системы.
🟠Автоматизировать тесты
Регулярное выполнение сценариев отказа.
🟠Начинать с изолированной среды
Минимизировать риски в продакшене.
🟠Проводить тесты в реальных условиях
Только в зрелой системе для точных результатов.
🟠Документировать результаты
Для анализа и улучшения системы.

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

Это способ подстановки значений переменных в строку.
• В JavaScript используются шаблонные строки с синтаксисом ${expression}.
• В CSS, например, в препроцессорах (Sass), интерполяция позволяет динамически подставлять значения в свойства.


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

Восстановление работоспособности системы после сбоя — это процесс возвращения её в стабильное состояние, при котором она может продолжать выполнение своих функций. Однако, этот процесс может быть сложным из-за множества потенциальных проблем, возникающих на этапах диагностики, исправления и восстановления.

🟠Идентификация причины сбоя
Выявление корневой причины (root cause) может быть затруднено в сложных распределённых системах. Ложные сигналы и ошибки усложняют диагностику.
Сбой вызван внешним API, но он маскируется внутренними проблемами. Непредсказуемые сбои в сети.
Использование инструментов для логирования и мониторинга (например, ELK Stack, Prometheus). Внедрение распределённого трейсинга (Jaeger, Zipkin).

🟠Потеря данных
Если данные не были надёжно сохранены, сбой может привести к их потере или неконсистентности.
Запрос был частично обработан перед сбоем. Утеря транзакции из-за недоступности базы данных.
Использовать механизмы журналирования (write-ahead logging). Реализовать стратегии резервного копирования и восстановления (backup & restore). Использовать идемпотентные операции для повторного выполнения.

🟠Недостаточная автоматизация восстановления
Ручное восстановление занимает больше времени и подвержено ошибкам.
Сложная последовательность действий для перезапуска зависимых сервисов. Зависимость от человеческого фактора при переключении на резервные системы.
Автоматизировать восстановление с помощью оркестрации (Kubernetes, Ansible). Внедрить механизмы самовосстановления (self-healing systems).

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

🟠Конфликтующие версии системы
Во время восстановления разные узлы системы могут использовать несовместимые версии программного обеспечения или данных.
Некорректная миграция базы данных. Разные версии микросервисов вызывают ошибки при взаимодействии.
Использовать механизм версионирования API и схем данных. Внедрять "blue-green" или "canary" деплойменты.

🟠Ручные ошибки
Операторы могут допустить ошибки при восстановлении системы, особенно в стрессовых условиях.
Неправильный ввод команд, ведущий к удалению данных. Неполное восстановление конфигурации после сбоя. Разрабатывать чёткую документацию и сценарии действий при сбоях. Использовать инфраструктуру как код (IaC) для автоматизации настройки среды.

🟠Долгое время восстановления (RTO)
Система может быть недоступна слишком долго, что приводит к значительным убыткам.
Затянувшийся процесс восстановления базы данных. Задержки из-за необходимости ручного вмешательства. Оптимизировать процессы резервного копирования и восстановления. Использовать резервные копии с минимальными задержками (например, репликация данных в режиме реального времени).

🟠Консистентность данных
После восстановления состояние данных может быть неконсистентным между компонентами.
Пользователь видит устаревшие данные после переключения на резервный сервер. Несогласованные транзакции в распределённых базах данных. Использовать механизмы консенсуса (например, Raft, Paxos). Внедрить стратегии "eventual consistency" для распределённых систем.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что известно о принципах программирования KISS?

Это принцип проектирования, направленный на упрощение кода.
1. Программы должны быть простыми, минималистичными и легко читаемыми.
2. Усложнения должны быть введены только в случае необходимости.
3. Упрощение структуры и логики снижает вероятность ошибок и упрощает сопровождение.
Этот принцип помогает создавать более надёжный и поддерживаемый код.


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

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

🚩Основные принципы работы индексов

🟠Структура данных
Индексы организованы в специализированные структуры данных, такие как B-деревья, B+-деревья или хеш-таблицы. Эти структуры оптимизированы для быстрого поиска, вставки и удаления данных.

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

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

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

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

🚩Виды индексов

🟠Первичный ключ (Primary Key)
Это уникальный индекс, который не допускает дубликатов и обычно используется для идентификации строк в таблице.

🟠Уникальный индекс (Unique Index)
Обеспечивает уникальность значений в индексируемом столбце, но допускает одно или несколько NULL значений.

🟠Обычный индекс (Non-Unique Index)
Используется для ускорения поиска и может содержать дублирующиеся значения.

🟠Составной индекс (Composite Index)
Индекс, созданный на нескольких столбцах. Полезен, когда запросы часто включают условия на несколько столбцов одновременно.

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

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

🟠Поиск и выборка данных
Запросы типа SELECT * FROM users WHERE age > 30 значительно ускоряются, если столбец age индексирован.

🟠Сортировка данных
Запросы типа SELECT * FROM users ORDER BY name будут быстрее, если столбец name индексирован.

🟠Соединение таблиц
Запросы, которые соединяют несколько таблиц по индексируемым столбцам, выполняются быстрее, так как индексы облегчают поиск соответствующих строк.

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

Это способ описания времени выполнения или использования памяти алгоритмом в зависимости от размера входных данных.
Например: O(1) (константное время), O(n) (линейное), O(log n) (логарифмическое).
Она помогает оценить эффективность алгоритмов и выбрать оптимальный для задачи.


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

Это протокол для обмена структурированными сообщениями в распределённых вычислительных средах. Он основан на XML и используется для передачи данных между различными приложениями через сеть, часто по протоколу HTTP или SMTP.

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

🟠Протокол на основе XML
SOAP сообщения формируются в формате XML, что обеспечивает независимость от платформы и языка программирования.

🟠Стандартизованное сообщение
SOAP сообщение состоит из обязательных и необязательных элементов:
Envelope: Определяет начало и конец сообщения.
Header: Опциональный элемент, содержащий метаинформацию о сообщении.
Body: Основное содержимое сообщения, включающее данные и команды.
Fault: Опциональный элемент для обработки ошибок.

🟠Транспортные протоколы
Чаще всего используется с HTTP/HTTPS, но может работать и с другими протоколами, такими как SMTP.

🟠Расширяемость
SOAP легко расширяется, позволяя добавлять дополнительные функциональные возможности через заголовки и другие элементы.

🟠Независимость от платформы и языка
SOAP может быть использован в любой среде и на любом языке программирования, что обеспечивает высокую совместимость между различными системами.

<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:example="https://example.com/">
<soapenv:Header/>
<soapenv:Body>
<example:getExampleRequest>
<example:parameter1>Value1</example:parameter1>
<example:parameter2>Value2</example:parameter2>
</example:getExampleRequest>
</soapenv:Body>
</soapenv:Envelope>


🚩Плюсы

Независимость от платформы и языка
SOAP может взаимодействовать с любыми системами, поддерживающими XML и HTTP/SMTP.
Строгое соблюдение стандартов
SOAP основывается на строгих стандартах, что обеспечивает надежность и предсказуемость взаимодействия.
Расширяемость
Легко адаптируется для специфических потребностей через расширения и заголовки.
Встроенная обработка ошибок
Использует элемент Fault для детальной обработки и передачи ошибок.
Поддержка сложных операций
Подходит для сложных операций и распределённых транзакций.

🚩Минусы

Сложность
SOAP-сообщения могут быть сложными и громоздкими из-за использования XML.
Производительность
Использование XML увеличивает объем передаваемых данных, что может снизить производительность.
Оверхед
Требует дополнительных ресурсов для обработки и передачи XML-сообщений.

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

1. Повышенные затраты на запись: Индексы замедляют операции вставки, удаления и обновления, так как требуется обновлять индекс вместе с данными.
2. Использование памяти: Индексы занимают дополнительное пространство на диске и в оперативной памяти.
3. Сложность управления: Неоптимальное использование индексов может привести к ухудшению производительности запросов.


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

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

🚩Основные свойства транзакций (ACID)

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

🟠Consistency (Согласованность)
Транзакция переводит базу данных из одного согласованного состояния в другое. Это означает, что после завершения транзакции все правила целостности данных должны быть соблюдены.

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

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

🚩Пример работы с транзакциями

На SQL
BEGIN TRANSACTION;

-- Пример операций внутри транзакции
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- Если все операции прошли успешно
COMMIT;

-- Если произошла ошибка
ROLLBACK;


Пример на Java (использование JDBC)
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "user", "password");
connection.setAutoCommit(false); // Начало транзакции

// Пример операций внутри транзакции
PreparedStatement pstmt1 = connection.prepareStatement("UPDATE accounts SET balance = balance - 100 WHERE account_id = ?");
pstmt1.setInt(1, 1);
pstmt1.executeUpdate();

PreparedStatement pstmt2 = connection.prepareStatement("UPDATE accounts SET balance = balance + 100 WHERE account_id = ?");
pstmt2.setInt(1, 2);
pstmt2.executeUpdate();

connection.commit(); // Коммит транзакции
} catch (SQLException e) {
if (connection != null) {
try {
connection.rollback(); // Откат транзакции при ошибке
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}


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

Это процесс разделения больших наборов данных на более мелкие части (шарды) для распределённого хранения и обработки.
1. Каждый шард хранит часть данных, и они могут находиться на разных серверах.
2. Это повышает масштабируемость и производительность базы данных.
3. Сложность шардирования заключается в управлении распределением данных и маршрутизации запросов к нужным шардам.


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

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

🚩Основные принципы

🟠Индивидуумы и взаимодействия важнее процессов и инструментов
Акцент на командную работу и эффективное общение.

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

🟠Сотрудничество с заказчиком важнее согласования условий контракта
Постоянное взаимодействие с заказчиком для удовлетворения его потребностей.

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

🚩Основные методологии

🟠Scrum
Итеративный процесс с фиксированными временными промежутками, называемыми спринтами. Роли: Product Owner, Scrum Master, Команда разработки. Артефакты: Product Backlog, Sprint Backlog, Инкремент. Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива.

🟠Kanban
Визуализация процесса работы с помощью доски Kanban. Ограничение незавершенной работы (Work In Progress, WIP). Постоянное улучшение и адаптация.

🟠Extreme Programming (XP)
Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование.

🟠Lean
Сокращение избыточности и увеличение ценности для клиента.- Принципы: Устранение потерь, Увеличение потока, Улучшение качества.

🚩Плюсы

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

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

Это практика автоматической доставки изменений в продакшен или на тестовые серверы.
1. Continuous Delivery: подготовка изменений для выпуска, но развёртывание требует ручного подтверждения.
2. Continuous Deployment: изменения автоматически разворачиваются после успешного прохождения тестов.


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

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

🚩Основные события в конце спринта

🟠Завершение задач спринта
Все задачи, включённые в спринт, должны быть либо выполнены, либо перенесены с соответствующими комментариями. Завершённые задачи проверяются на соответствие критериям "готовности" (Definition of Done, DoD). Если задачи не выполнены, они возвращаются в бэклог продукта для повторной оценки в будущем.

🟠Демонстрация инкремента (Sprint Review)
Показать заинтересованным сторонам результат работы команды. Команда демонстрирует готовый продукт или его обновления. Обсуждаются выполненные задачи, изменения в продукте и обратная связь от заказчиков или других участников. Результат: обновление бэклога продукта с учётом новой информации.

🟠Ретроспектива спринта (Sprint Retrospective)
Цель: анализировать, что прошло хорошо, что можно улучшить и какие действия предпринять в будущем. Участники обсуждают положительные моменты, трудности и проблемы, возникшие в процессе работы. Генерируются идеи для улучшения, которые затем внедряются в следующих спринтах. Используются форматы для выявления проблем, такие как "Start, Stop, Continue" или "Что было хорошо, что плохо, что можно улучшить".

🟠Обновление метрик
Обновление burndown chart, velocity chart или других метрик, используемых для отслеживания прогресса. Анализ выполнения целей спринта (например, процент выполненных задач). Уроки, извлечённые из анализа метрик, учитываются при планировании будущих спринтов.

🚩Итоговые действия перед началом нового спринта

🟠Рефайнмент бэклога продукта
С учётом новых идей, задач и обратной связи обновляется приоритет задач.
🟠Подготовка к планированию следующего спринта (Sprint Planning)
Команда и Product Owner готовятся к обсуждению целей нового спринта.
🟠Документирование
Фиксация результатов спринта, включая завершённые задачи, обратную связь и итоги ретроспективы.

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

1. Postgres: поддерживает расширенные функции, такие как JSONB, сложные индексы, транзакции с ACID и CTE.
2. MySQL: быстрее на простых запросах, но ограничен в функциях для сложных операций.
3. Postgres больше подходит для аналитики, а MySQL — для высокопроизводительных веб-приложений.


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

🟠Порождающие паттерны
Обеспечивает создание единственного экземпляра класса.
Factory Method: Создает объекты через вызов метод, без указания конкретного класса.
Abstract Factory: Создает семейства связанных объектов без указания их конкретных классов.
Builder: Шаг за шагом создает сложный объект.
Prototype: Создает объекты через клонирование существующих экземпляров.

🟠Структурные паттерны
Adapter: Преобразует интерфейс класса в другой интерфейс, ожидаемый клиентами.
Bridge: Разделяет абстракцию и реализацию, позволяя изменять их независимо.
Composite: Организует объекты в древовидные структуры для представления иерархий.
Decorator: Динамически добавляет новые обязанности объектам.
Facade: Предоставляет унифицированный интерфейс к набору интерфейсов подсистемы.
Flyweight: Поддерживает большое количество мелких объектов, разделяя их состояние.
Proxy: Представляет суррогатный объект, который контролирует доступ к другому объекту.

🟠Поведенческие паттерны
Chain of Responsibility: Передает запрос по цепочке обработчиков.
Command: Инкапсулирует запрос как объект.
Interpreter: Определяет грамматику для языка и интерпретатор для предложений этого языка.
Iterator: Предоставляет способ последовательного доступа ко всем элементам коллекции.
Mediator: Обеспечивает взаимодействие множества объектов, избегая их прямых ссылок друг на друга.
Memento: Сохраняет и восстанавливает внутреннее состояние объекта.
Observer: Оповещает зависимые объекты о изменениях состояния.
State: Позволяет объекту изменять свое поведение при изменении внутреннего состояния.
Strategy: Определяет семейство алгоритмов, инкапсулирует их и делает их взаимозаменяемыми.
Template Method: Определяет скелет алгоритма в методе, оставляя реализацию шагов подклассам.
Visitor: Позволяет добавлять новые операции к объектам, не изменяя их классы.

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

Это процесс организации данных в БД для уменьшения избыточности и улучшения целостности.
1. Делится на формы: 1NF, 2NF, 3NF и др., каждая из которых убирает определённые типы дублирования данных.
2. Помогает уменьшить объём хранимой информации и улучшить производительность запросов.


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

🟠Создание прокси
Spring обнаруживает @Transactional и создает прокси для класса или метода.
🟠Перехват вызова
Прокси перехватывает вызов метода, аннотированного @Transactional.
🟠Начало транзакции
Прокси делегирует управление TransactionInterceptor, который начинает транзакцию через PlatformTransactionManager.
🟠Выполнение метода
Исходный метод выполняется.
🟠Фиксация или откат транзакции
Если метод завершился успешно, транзакция фиксируется (commit). Если метод выбросил исключение, транзакция откатывается (rollback).

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

Это инструмент для управления многоконтейнерными приложениями.
1. Использует файл docker-compose.yml для описания конфигурации сервисов, сетей и томов.
2. Упрощает запуск и координацию нескольких контейнеров в одной системе.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Для чего можно использовать celery?

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

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

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

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

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

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

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

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

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

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

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

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