Это последовательность одной или нескольких операций над базой данных, которая выполняется как единое целое. Транзакции обеспечивают, что все операции в рамках транзакции либо успешно выполняются, либо полностью отменяются, что гарантирует целостность данных.
Транзакция должна быть либо выполнена полностью, либо не выполнена вовсе. Если какая-то часть транзакции не удается, вся транзакция откатывается (roll back) к исходному состоянию.
Транзакция переводит базу данных из одного согласованного состояния в другое. Это означает, что после завершения транзакции все правила целостности данных должны быть соблюдены.
Результаты выполнения транзакции не должны быть видны другим параллельно выполняющимся транзакциям до тех пор, пока данная транзакция не завершится. Это предотвращает влияние одной транзакции на другую.
После успешного завершения транзакции (коммита) ее результаты должны быть зафиксированы в базе данных и сохранены, даже если произойдет сбой системы.
На 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
👍2❤1
Forwarded from easyoffer
easyoffer
Backend
Python | Вопросы
Python | Удалёнка
Python | LeetCode
Python | Тесты
Frontend | Вопросы
Frontend | Удалёнка
JavaScript | LeetCode
Frontend | Тесты
Java | Вопросы
Java | Удалёнка
Java | LeetCode
Java | Тесты
Тестировщик | Вопросы
Тестировщик | Удалёнка
Тестировщик | Тесты
Data Science | Вопросы
Data Science | Удалёнка
Data Science | Тесты
C# | Вопросы
C# | Удалёнка
C# | LeetCode
C# | Тесты
C/C++ | Вопросы
C/C++ | Удалёнка
C/C++ | LeetCode
C/C++ | Тесты
Golang | Вопросы
Golang | Удалёнка
Golang | LeetCode
Golang | Тесты
DevOps | Вопросы
DevOps | Удалёнка
DevOps | Тесты
PHP | Вопросы
PHP | Удалёнка
PHP | LeetCode
PHP | Тесты
Kotlin | Вопросы
Kotlin | Удалёнка
Kotlin | LeetCode
Kotlin | Тесты
Swift | Вопросы
Swift | Удалёнка
Swift | LeetCode
Swift | Тесты
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯1
1. Каждый шард хранит часть данных, и они могут находиться на разных серверах.
2. Это повышает масштабируемость и производительность базы данных.
3. Сложность шардирования заключается в управлении распределением данных и маршрутизации запросов к нужным шардам.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Это подход к разработке программного обеспечения, который фокусируется на гибкости, сотрудничестве и быстрой адаптации к изменениям. Agile основывается на следующих принципах и ценностях:
Акцент на командную работу и эффективное общение.
Быстрая поставка работающих продуктов с минимально необходимой документацией.
Постоянное взаимодействие с заказчиком для удовлетворения его потребностей.
Гибкость в адаптации к изменениям требований и условий.
Итеративный процесс с фиксированными временными промежутками, называемыми спринтами. Роли: Product Owner, Scrum Master, Команда разработки. Артефакты: Product Backlog, Sprint Backlog, Инкремент. Встречи: Планирование спринта, Ежедневные стендап-совещания, Обзор спринта, Ретроспектива.
Визуализация процесса работы с помощью доски Kanban. Ограничение незавершенной работы (Work In Progress, WIP). Постоянное улучшение и адаптация.
Практики: Парное программирование, Частые релизы, Непрерывная интеграция, Тестирование.
Сокращение избыточности и увеличение ценности для клиента.- Принципы: Устранение потерь, Увеличение потока, Улучшение качества.
Возможность быстро реагировать на изменения требований или условий рынка.
Постоянное тестирование и интеграция.
Активное участие всех членов команды в процессе разработки.
Постоянное взаимодействие с заказчиками и предоставление им ценности на каждом этапе разработки.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Это практика автоматической доставки изменений в продакшен или на тестовые серверы.
1. Continuous Delivery: подготовка изменений для выпуска, но развёртывание требует ручного подтверждения.
2. Continuous Deployment: изменения автоматически разворачиваются после успешного прохождения тестов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
В конце спринта в гибких методологиях разработки (например, Scrum) проводится серия мероприятий и активностей, направленных на подведение итогов работы команды, оценку достигнутого результата и планирование улучшений. Эти процессы обеспечивают прозрачность, оценку эффективности и подготовку к следующему спринту.
Все задачи, включённые в спринт, должны быть либо выполнены, либо перенесены с соответствующими комментариями. Завершённые задачи проверяются на соответствие критериям "готовности" (Definition of Done, DoD). Если задачи не выполнены, они возвращаются в бэклог продукта для повторной оценки в будущем.
Показать заинтересованным сторонам результат работы команды. Команда демонстрирует готовый продукт или его обновления. Обсуждаются выполненные задачи, изменения в продукте и обратная связь от заказчиков или других участников. Результат: обновление бэклога продукта с учётом новой информации.
Цель: анализировать, что прошло хорошо, что можно улучшить и какие действия предпринять в будущем. Участники обсуждают положительные моменты, трудности и проблемы, возникшие в процессе работы. Генерируются идеи для улучшения, которые затем внедряются в следующих спринтах. Используются форматы для выявления проблем, такие как "Start, Stop, Continue" или "Что было хорошо, что плохо, что можно улучшить".
Обновление burndown chart, velocity chart или других метрик, используемых для отслеживания прогресса. Анализ выполнения целей спринта (например, процент выполненных задач). Уроки, извлечённые из анализа метрик, учитываются при планировании будущих спринтов.
С учётом новых идей, задач и обратной связи обновляется приоритет задач.
Команда и Product Owner готовятся к обсуждению целей нового спринта.
Фиксация результатов спринта, включая завершённые задачи, обратную связь и итоги ретроспективы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
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
Spring обнаруживает
@Transactional и создает прокси для класса или метода.Прокси перехватывает вызов метода, аннотированного
@Transactional.Прокси делегирует управление
TransactionInterceptor, который начинает транзакцию через PlatformTransactionManager.Исходный метод выполняется.
Если метод завершился успешно, транзакция фиксируется (
commit). Если метод выбросил исключение, транзакция откатывается (rollback).Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это инструмент для управления многоконтейнерными приложениями.
1. Использует файл docker-compose.yml для описания конфигурации сервисов, сетей и томов.
2. Упрощает запуск и координацию нескольких контейнеров в одной системе.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Celery поддерживает различные брокеры сообщений, включая RabbitMQ и Redis, для управления очередями задач.
Позволяет запускать длительные операции в фоновом режиме, освобождая основной поток выполнения приложения для других задач.
Поддержка периодических и плановых заданий, что позволяет автоматизировать повторяющиеся процессы.
Способен управлять задачами в распределенной системе, используя несколько рабочих узлов (workers) для параллельного выполнения задач.
Легко масштабируется, добавляя больше рабочих узлов для увеличения производительности.
Отправка электронной почты: Асинхронная отправка писем для улучшения производительности веб-приложений.
Обработка данных: Включает такие задачи, как анализ данных, обработка изображений или видео, преобразование форматов и другие ресурсоемкие операции.
Взаимодействие с API: Выполнение запросов к внешним API, которое может быть долгим или неэффективным при синхронном выполнении.
Обновление данных: Регулярное обновление кэшей, индексов поиска или других данных в базе данных.
Мониторинг и сбор метрик: Периодический сбор и обработка метрик для мониторинга состояния системы.
Очистка данных: Периодическая очистка устаревших или временных данных из базы данных.
Уведомления в реальном времени: Отправка уведомлений пользователям через различные каналы (email, SMS, push-уведомления).
Событийное оповещение: Реагирование на события и триггеры, такие как изменения в базе данных или действия пользователя.
Параллельная обработка данных: Выполнение параллельных вычислений для обработки больших объемов данных.
Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний на больших наборах данных.
Веб-скрейпинг: Асинхронный сбор данных с веб-сайтов для агрегации или анализа.
Интеграция данных: Асинхронная интеграция данных из различных источников и API.
Улучшение производительности веб-приложений за счет выполнения долгих операций в фоне.
Обработка заказов, обновление статусов заказов и управление инвентарем в фоновом режиме.
Обработка пользовательских данных, отправка уведомлений и обновление лент новостей.
Выполнение сложных вычислений и обработка больших объемов данных в распределенной среде.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
1. В Python это достигается через venv или virtualenv.
2. Обеспечивает независимость пакетов и версий, необходимых для конкретного проекта.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Асинхронные операции позволяют программам выполнять задачи в фоновом режиме, не блокируя основной поток выполнения. Это улучшает производительность и отзывчивость приложений.
HTTP-запросы: Асинхронные HTTP-запросы позволяют приложениям запрашивать данные у веб-серверов без блокировки пользовательского интерфейса. Например, загрузка данных из API, отправка форм и файлов. WebSockets: Поддержка двустороннего взаимодействия между клиентом и сервером в реальном времени. Это используется в чатах, онлайн-играх и других приложениях, где требуется мгновенная передача данных. API-вызовы: Асинхронные вызовы к внешним API позволяют продолжать выполнение других операций, не дожидаясь ответа от сервера.
Файловые операции: Асинхронное чтение и запись файлов позволяет обрабатывать большие объемы данных без блокировки основного потока выполнения. Работа с базами данных: Асинхронные запросы к базам данных уменьшают время ожидания и улучшают масштабируемость приложения.
Обработка задач в фоне: Выполнение длительных задач, таких как обработка изображений, видео, данных, без блокировки основного потока. Это позволяет улучшить пользовательский опыт, так как приложение остается отзывчивым. Периодические задания: Планирование и выполнение задач по расписанию, например, обновление данных, резервное копирование, мониторинг системы.
Асинхронные события: Обработка событий пользовательского интерфейса (например, нажатие кнопок, ввод данных) асинхронно для повышения отзывчивости приложений. Анимации и переходы: Асинхронное выполнение анимаций и переходов улучшает пользовательский опыт за счет плавности и непрерывности интерфейса.
Стриминг данных: Асинхронная обработка потоков данных в реальном времени, таких как видео, аудио, данные с датчиков. Это позволяет эффективно управлять непрерывными потоками информации. Реактивное программирование: Асинхронное реагирование на изменения данных и событий. Реактивные системы позволяют обрабатывать данные по мере их поступления, что особенно важно в приложениях, работающих с большим количеством данных.
Параллельные вычисления: Разделение больших задач на более мелкие части, которые выполняются параллельно. Это улучшает производительность при обработке больших объемов данных или выполнении сложных вычислений. Машинное обучение: Асинхронное обучение моделей и выполнение предсказаний позволяет эффективно использовать вычислительные ресурсы.
Асинхронная обработка пользовательских запросов, выполнение сетевых операций и взаимодействие с базами данных для повышения производительности и отзывчивости.
Асинхронные операции обеспечивают плавную работу интерфейса и эффективное использование ресурсов при выполнении сетевых запросов и операций ввода/вывода.
Асинхронное взаимодействие с серверами, обработка событий пользователя и управление игровыми объектами в реальном времени.
Параллельное выполнение вычислительных задач и обработка больших объемов данных для повышения эффективности исследований.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. В случае коллизий применяется метод цепочек или открытая адресация.
2. Это обеспечивает быстрый доступ к данным со сложностью в среднем O(1).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
1. Используется для создания ключей в хеш-таблицах, шифрования данных и проверки целостности.
2. Хорошая хеш-функция минимизирует коллизии и распределяет ключи равномерно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Индексы в базе данных - это структуры, которые улучшают скорость операций поиска данных в таблице базы данных. Они работают по принципу, аналогичному указателю в книге, который позволяет быстро находить нужную информацию. Индексы создаются на одном или нескольких столбцах таблицы и позволяют значительно ускорить выполнение запросов, особенно при работе с большими объемами данных.
Основная функция индексов - это сокращение времени, необходимого для поиска записей в таблице. Без индексов база данных должна бы была проверять каждую запись, чтобы найти нужные данные.
Индексы могут значительно повысить производительность запросов SELECT, особенно тех, которые часто выполняются.
Индексы могут использоваться для ускорения операций сортировки, так как данные в индексе могут быть отсортированы.
Индексы также используются для обеспечения уникальности значений в столбцах. Например, уникальный индекс гарантирует, что в столбце не будет повторяющихся значений.
Индексы создаются с помощью SQL-запросов, таких как
CREATE INDEX. Можно создавать индексы на один столбец или на несколько столбцов (составные индексы).Существует несколько типов индексов, включая B-дерево, хеш-индексы, битмап-индексы и другие. Каждый тип имеет свои особенности и применяется в зависимости от конкретных задач.
При выполнении запросов база данных автоматически использует индексы для оптимизации поиска данных. Это не требует дополнительных действий со стороны пользователя.
Важно понимать, что индексы требуют дополнительного пространства на диске и могут замедлять операции вставки, обновления и удаления данных, так как индексы нужно поддерживать в актуальном состоянии. Поэтому следует тщательно продумывать, какие индексы необходимы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. HTTP (HyperText Transfer Protocol): протокол передачи данных между клиентом и сервером без шифрования.
2. HTTPS: защищённая версия HTTP, использующая SSL/TLS для шифрования данных.
3. HTTPS обеспечивает безопасность, конфиденциальность и подлинность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Big O notation (О-большое) - это математическая нотация, используемая в информатике для описания производительности алгоритма. Она выражает, как время выполнения или потребление памяти алгоритма растет по мере увеличения размера входных данных. Big O notation фокусируется на худшем случае, что помогает оценить наихудший сценарий для работы алгоритма.
Big O notation используется для описания асимптотического поведения алгоритмов, то есть их поведения при приближении размера входных данных к бесконечности. Основное внимание уделяется ведущим слагаемым и игнорированию констант и менее значимых слагаемых, поскольку они имеют меньшее влияние на производительность при больших размерах входных данных.
Big O notation показывает наихудший возможный сценарий выполнения алгоритма, обеспечивая надежные гарантии его производительности.
Время выполнения не зависит от размера входных данных. Доступ к элементу массива по индексу.
Время выполнения увеличивается логарифмически с увеличением размера входных данных. Бинарный поиск.
Время выполнения растет линейно с увеличением размера входных данных. Линейный поиск.
Время выполнения растет линейно с логарифмическим множителем. Быстрая сортировка, сортировка слиянием.
Время выполнения растет пропорционально квадрату размера входных данных. Сортировка пузырьком, сортировка вставками.
Время выполнения удваивается с каждым добавлением нового элемента. Решение задачи о коммивояжере полным перебором.
Время выполнения растет факториально с увеличением размера входных данных. Полный перебор всех возможных перестановок.
Анализ эффективности различных алгоритмов сортировки (например, быстрая сортировка vs. сортировка пузырьком).
Оценка времени доступа, вставки и удаления в различных структурах данных (например, массивы, списки, деревья).
Помощь в выборе наиболее эффективных алгоритмов и структур данных для решения конкретных задач.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1. Используется для выполнения фоновых задач, таких как отправка писем или обработка данных.
2. Поддерживает распределённую архитектуру, масштабируемость и повторное выполнение задач.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM