
Backend
Очень активная и лояльная аудитория Backend разработчиков сайта easyoffer
Статистика канала
rebase и merge используются для объединения изменений из разных веток, но делают это по-разному. Основное различие между ними заключается в том, как они сохраняют историю коммитов и как они влияют на структуру репозитория.
🚩Основные отличия
🟠Merge (Слияние)
Объединяет две ветки, создавая новый коммит слияния (merge commit), который имеет две родительских ветки. Сохраняет всю историю коммитов обеих веток без изменений. История ветвления и слияния сохраняется. Если есть конфликты, Git предложит их разрешить перед созданием коммита слияния.
git merge <branch>
git checkout main
git merge feature-branch{}
🟠Rebase (Перебазирование)
Переносит все коммиты текущей ветки на вершину целевой ветки. Это делает историю линейной, как если бы изменения были сделаны последовательно. Изменяет историю коммитов, создавая новые коммиты для каждого коммита из текущей ветки. История ветвления исчезает. Если есть конфликты, Git предложит их разрешить по мере переноса каждого коммита.
git rebase <branch>
git checkout feature-branch
git rebase main{}
🚩Плюсы и минусы
🟠Merge
➕Простота
Процесс слияния прост и понятен.
➕Сохранение истории
Вся история коммитов сохраняется, включая информацию о ветвлении и слиянии.
➖Коммиты слияния
Создаются дополнительные коммиты слияния, что может усложнить историю.
🟠Rebase
➕Чистая история
История линейная и более читабельная.
➕Упрощение навигации
Проще следить за последовательностью изменений.
➖Изменение истории
Изменение коммитов может привести к проблемам, если кто-то уже основывается на этих коммитах.
➖Конфликты
Может потребоваться больше усилий для разрешения конфликтов, особенно если коммитов много.
🚩Когда использовать
🟠Merge
Когда важно сохранить полную историю изменений, включая ветвление и слияние. В крупных командных проектах, где история изменений важна для отслеживания.
🟠Rebase
Когда важно иметь чистую и линейную историю изменений. Для интеграции изменений из основной ветки в текущую рабочую ветку перед отправкой изменений в основную ветку.
Ставь 👍 и забирай 📚 Базу знанийSELECT FOR UPDATE и SELECT FOR SHARE. Эти команды позволяют заблокировать конкретные строки для изменения другими транзакциями, пока текущая транзакция не завершится.SELECT FOR UPDATE:
BEGIN; -- Начало транзакции
-- Выбираем и блокируем строки для обновления
SELECT * FROM my_table WHERE id = 1 FOR UPDATE;
-- Выполняем необходимые операции
UPDATE my_table SET field = 'new_value' WHERE id = 1;
COMMIT; -- Завершение транзакции{}
SELECT FOR SHARE:
BEGIN; -- Начало транзакции
-- Выбираем и блокируем строки для чтения
SELECT * FROM my_table WHERE id = 1 FOR SHARE;
-- Выполняем необходимые операции
-- Изменение данных будет заблокировано для других транзакций
-- Однако, можно выполнять SELECT
COMMIT; -- Завершение транзакции{}
🟠Использование политик доступа (Row-Level Security Policies)
Политики безопасности на уровне строк позволяют определить, кто и при каких условиях может видеть или изменять данные в таблице. Это обеспечивается с помощью функций и политик безопасности.
-- Включаем безопасность на уровне строк для таблицы
ALTER TABLE my_table ENABLE ROW LEVEL SECURITY;
-- Создаем роль, которая будет иметь доступ
CREATE ROLE limited_role;
-- Создаем политику, которая позволяет только чтение данных
CREATE POLICY read_only_policy ON my_table
FOR SELECT
USING (true); -- Условие для выполнения SELECT
-- Применяем политику для роли limited_role
GRANT SELECT ON my_table TO limited_role;{}
🟠Использование триггеров (Triggers)
Триггеры позволяют автоматически выполнять определенные действия перед или после операции INSERT, UPDATE, DELETE. Можно создать триггер, который будет блокировать изменение конкретных полей.
CREATE OR REPLACE FUNCTION prevent_update()
RETURNS TRIGGER AS $$
BEGIN
IF NEW.field IS DISTINCT FROM OLD.field THEN
RAISE EXCEPTION 'Field "field" cannot be updated';
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Применяем триггер к таблице
CREATE TRIGGER prevent_update_trigger
BEFORE UPDATE ON my_table
FOR EACH ROW
EXECUTE FUNCTION prevent_update();{}
🟠Ограничения на уровне столбца (Column-Level Constraints)
Ограничения на уровне столбца могут использоваться для ограничения возможных значений или для создания выражений, которые должны быть выполнены для выполнения изменения.
ALTER TABLE my_table
ADD CONSTRAINT field_check CHECK (field IS NOT NULL);{}
Ставь 👍 и забирай 📚 Базу знаний
def calculate_area(radius):
"""Calculate the area of a circle given its radius."""
import math
if radius < 0:
raise ValueError("Radius cannot be negative")
return math.pi * radius ** 2{}
Тестируемость
def add(a, b):
"""Add two numbers and return the result."""
return a + b
# Unit test for the add function
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
assert add(0, 0) == 0
test_add(){}
Ставь 👍 и забирай 📚 Базу знаний
def simple_hash(key, table_size):
return len(key) % table_size{}
🟠Хеш-функция для строк (например, DJB2):
def djb2_hash(key):
hash_value = 5381
for char in key:
hash_value = ((hash_value << 5) + hash_value) + ord(char) # hash_value * 33 + ord(char)
return hash_value{}
🚩Методы разрешения коллизий
🟠Метод цепочек (chaining): В каждой ячейке массива хранится список значений, которые хешируются в один и тот же индекс.
🟠Открытая адресация (open addressing): При коллизии ищется другая свободная ячейка по определённому алгоритму (например, линейное пробирование, квадратичное пробирование или двойное хеширование).
Ставь 👍 и забирай 📚 Базу знанийОтзывы канала
всего 2 отзыва
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Backend — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 3.9K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 5.4, количество отзывов – 2, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 839.16 ₽, а за 25 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий