当前位置: 首页 > news >正文

Seata客户端@GlobalTransactional核心源码解析

文章目录

  • 前言
  • 一、@GlobalTransactional
    • 1.1、wrapIfNecessary
    • 1.2、handleGlobalTransaction
    • 1.3、invoke
  • 二、总结


前言

  Seata是阿里开源的分布式事务解决方案。在Spring传统的事务中,开启事务,执行事务,回滚/提交事务,统一由Spring进行管理,向数据库发起指令。而分布式事务中,分为了客户端(微服务端)和服务端(Seata)、注册中心(通常使用Nacos)这三个部分。Nacos提供了服务注册与发现,以及管理Seata配置的作用。无论是开启事务,执行事务,还是提交事务,都不是单个微服务内部自己决定的,而是统一向服务端发起请求,由服务端进行一系列的处理后,再向微服务端发起请求,驱动微服务端执行操作。


一、@GlobalTransactional

  对于微服务端,通常会在分布式事务的入口方法,加上@GlobalTransactional注解,表示该服务在分布式事务中作为TM的角色。微服务端的源码解析,自然要从该注解开始。
  在注解的注释上,标注了三个关键方法:
在这里插入图片描述

1.1、wrapIfNecessary

  使用Seata,在微服务端需要引入一个依赖:

        <!-- seata--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

  通过自动配置机制,可以找到Seata客户端的核心类:
在这里插入图片描述
  在这个类中,装配了两个Bean:

  • FailureHandler:用于处理事务开始,执行,提交/回滚失败的情况,留给子类实现,发送邮件或通知告警。默认的实现DefaultFailureHandlerImpl则是进行日志记录。
  • GlobalTransactionScanner:是Seata的全局事务扫描器。

在这里插入图片描述
  GlobalTransactionScanner继承自AbstractAutoProxyCreator,重写了其关键方法wrapIfNecessary
在这里插入图片描述
  在wrapIfNecessary方法中,首先会判断当前模式是否为TCC,如果是TCC模式,创建TccActionInterceptor拦截器并设置清理任务,同时监听配置中心的开关DISABLE_GLOBAL_TRANSACTION
在这里插入图片描述
  否则就是AT模式,会检查目标类上是否存在@GlobalTransactional或方法上是否存在@GlobalTransactional@GlobalLock注解,如果存在,使用GlobalTransactionalInterceptor来代理。
在这里插入图片描述
  因为GlobalTransactionalInterceptor实现了MethodInterceptor接口,所以将创建出的GlobalTransactionalInterceptor实例赋值给MethodInterceptor类型的interceptor属性:
在这里插入图片描述


  判断是否存在@GlobalTransactional@GlobalLock注解,这一步非常关键,如果判断不通过,该类就不会做和Seata有关的增强。
在这里插入图片描述
existsAnnotation


  如果该Bean没有被代理过,则调用父类方法创建代理。如果已经是AOP代理,则动态插入Seata的Advisor。
在这里插入图片描述
  在super.wrapIfNecessary中,有一行关键代码getAdvicesAndAdvisorsForBean,目的是获取该 bean 适用的增强(Advice)或拦截器(Advisor),在Seata中选择图上的实现:

在这里插入图片描述
  如果是普通全局事务,就使用GlobalTransactionalInterceptor增强目标方法,执行其invoke方法。

在这里插入图片描述

wrapIfNecessary方法在Spring启动时,判断是否需要为 Bean 创建事务代理,并注入相应的拦截器(TCC 或 AT 模式)。

1.2、handleGlobalTransaction

  在1.1中,创建了GlobalTransactionalInterceptor的对象,其实现了MethodInterceptor
在这里插入图片描述
  在重写了MethodInterceptorinvoke方法中,如果当前方法上存在@GlobalTransactional注解,则会调用到handleGlobalTransaction方法:
在这里插入图片描述
  在handleGlobalTransaction方法中,首先会执行transactionalTemplateexecute方法:
在这里插入图片描述
  在执行execute方法的过程中,可能会发生异常,handleGlobalTransaction捕捉到异常后,会进行判断,如果当前是事务的参与者,也就是RM,则继续向上抛出异常,如果是事务的发起者TM,则解析出异常的code,执行各自失败的逻辑(SeataAutoConfiguration中注入的FailureHandler的逻辑)。
在这里插入图片描述
  这里的TransactionalTemplate,是seata的实现:在这里插入图片描述
  在execute方法中,首先会进行事务传播级别的判断,是否应该新开启一个事务,挂起当前事务等操作:Seata 的传播级别与 Spring 的传播语义一致,但实现机制完全不同,Spring 操作本地事务,Seata 操作的是全局分布式事务上下文。

在这里插入图片描述
  然后就会执行一套标准的事务流程:开启事务,执行事务,提交/回滚。
在这里插入图片描述

handleGlobalTransaction 方法代表了事务执行的整体流程。

1.3、invoke

  invoke是在AOP拦截到对原始DataSource的调用时,将调用路由到Seata的代理DataSource上,使得数据库连接支持全局事务的上下文控制。

  1. 判断拦截的方法是否为javax.sql.DataSource接口中定义的方法。
  2. 获取当前原始的DataSource,从DataSourceProxyHolde中获取其对应的SeataDataSourceProxy,最终将方法调用代理到 SeataDataSourceProxy 上。

在这里插入图片描述

Seata 使 SeataDataSourceProxy来增强连接的行为,如记录 UndoLog,绑定 XID,向 TC 注册分支事务

二、总结

Spring 容器启动时

  • GlobalTransactionScanner 会扫描所有 bean 的方法是否包含@GlobalTransactional@GlobalLock注解。
  • 如果有,就为该方法添加一个 AOP Advisor,代理增强逻辑就是 GlobalTransactionalInterceptor

方法执行时

  • Spring AOP 会调用 GlobalTransactionalInterceptor#invoke()
  • Seata 会根据事务传播级别、当前事务上下文,决定是否发起或加入全局事务。
  • 正常执行业务逻辑(调用 invocation.proceed())。
  • 执行完毕后:
    • 如果方法正常返回,Seata 提交全局事务;
    • 如果方法抛出异常,Seata 回滚事务

相关文章:

Seata客户端@GlobalTransactional核心源码解析

文章目录 前言一、GlobalTransactional1.1、wrapIfNecessary1.2、handleGlobalTransaction1.3、invoke 二、总结 前言 Seata是阿里开源的分布式事务解决方案。在Spring传统的事务中&#xff0c;开启事务&#xff0c;执行事务&#xff0c;回滚/提交事务&#xff0c;统一由Spring…...

某大麦某眼手机端-抢票

引言 仅供学习研究&#xff0c;欢迎交流 抢票难&#xff0c;难于上青天&#xff01;无论是演唱会、话剧还是体育赛事&#xff0c;大麦网的票总是秒光。作为一名技术爱好者&#xff0c;你是否想过用技术手段提高抢票成功率&#xff1f;本文将为你揭秘大麦手机端抢票的核心技术…...

深入探索ChatClient:简化AI模型交互的强大工具

深入探索ChatClient&#xff1a;简化AI模型交互的强大工具 前言 在人工智能飞速发展的当下&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用越来越广泛。然而&#xff0c;构建基于LLM的应用程序并非易事&#xff0c;通常需要多个组件协同工作&#xff0c;如提示词模…...

AI 知识库:企业知识管理的利器

在数字化转型的今天&#xff0c;企业每天都会产生海量的信息和数据。从客户资料到内部文档&#xff0c;从市场调研到项目经验&#xff0c;这些宝贵的知识资源构成了企业的核心竞争力。然而&#xff0c;你是否注意到这样一个问题&#xff1a;很多企业在快速发展的同时&#xff0…...

【STM32实物】基于STM32的RFID多卡识别语音播报系统设计

演示视频: 基于STM32的RFID多卡识别语音播报系统设计 前言:本项目可实现多个电子标签IC卡RFID识别,刷卡识别后进行中文语音播报反馈,同时进行控制对应的灯光开关。以此也可扩展开发更多功能。 本项目所需主要硬件包括:STM32F103C8T6最小系统板、RFID-RC522模块、五个IC电…...

[实战] Petalinux驱动开发以及代码框架解读

目录 Petalinux驱动开发以及代码框架解读一、引言二、步骤2.1 创建PetaLinux工程2.2 配置硬件描述文件2.3 设备树配置2.4 建立驱动框架2.5 编辑 .bb 文件2.6 编写驱动文件2.7 编写 Makefile2.8 验证配方配置2.9 集成驱动到 RootFS2.10 全系统编译与部署2.11 启动验证 三、框架解…...

ArcGIS Pro几个小知识点分享

相信熟悉ArcGIS 10.X系统的朋友接触ArcGIS Pro或者QGIS的上手难度都很低&#xff0c;因此向大家分享我最近才注意到的一些ArcGIS Pro小的知识点或者注意事项等&#xff0c;用来查缺补漏。如果是GIS新手小白&#xff0c;建议先去了解GIS相关理论基础&#xff0c;再摸索GIS相关软…...

运维仙途 第1章 灵机突现探监控

第1章 灵机突现探监控 情节梗概 凌运维本是青云门杂役弟子&#xff0c;负责看守藏经阁灵脉枢纽。某日子夜&#xff0c;护山大阵突然灵力紊乱&#xff0c;阁中古籍无风自动。危急时刻&#xff0c;他意外触发祖师留下的「混沌钟」&#xff0c;获得观测灵脉状态的能力… 技术映…...

深入解析Java架构师面试:从核心技术到AI应用

深入解析Java架构师面试&#xff1a;从核心技术到AI应用 在互联网大厂的Java求职者面试中&#xff0c;技术深度和项目经验是成功的关键。本文以严肃的面试官与资深Java架构师马架构&#xff08;拥有十年研发及架构设计经验&#xff09;之间的对话为背景&#xff0c;详细展示了…...

Grounding DINO

论文标题&#xff1a; Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection 代码地址&#xff1a; GitHub - IDEA-Research/GroundingDINO: [ECCV 2024] Official implementation of the paper "Grounding DINO: Marrying DINO …...

MCP协议:自然语言与结构化数据的双向桥梁 ——基于JSON-RPC 2.0的标准化实践

MCP协议&#xff1a;自然语言与结构化数据的双向桥梁 ——基于JSON-RPC 2.0的标准化实践 一、MCP的本质&#xff1a;标准化共识的协议框架 MCP&#xff08;Model Context Protocol&#xff09;是Anthropic于2024年提出的开放通信协议&#xff0c;其核心价值在于建立自然语言…...

区块链+医疗:破解数据共享困局,筑牢隐私安全防线

在医疗健康领域&#xff0c;数据共享与隐私保护一直是一对难以调和的矛盾。一方面&#xff0c;分散在不同机构的医疗数据&#xff08;如电子病历、检查报告、用药记录&#xff09;阻碍了诊疗效率和科研进展&#xff1b;另一方面&#xff0c;患者隐私泄露事件频发&#xff0c;加…...

Arduino IDE中更新esp32 3.2.0版本的办法

在Arduino IDE中更新esp32-3.2.0版本是个不可能的任务&#xff0c;下载文件速度极慢。网上提供了离线的办法&#xff0c;提供了安装文件&#xff0c;但是没有3.2.0的版本。 下面提供了一种离线安装方法 一、腾讯元宝查询解决办法 通过打开开发板管理地址&#xff1a;通过在腾…...

关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/146354088 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

毫米波通信的技术挑战与解决方案

毫米波通信的技术挑战与解决方案 随着5G技术的迅速发展&#xff0c;毫米波通信&#xff08;Millimeter Wave, mmWave&#xff09;作为一种具有巨大潜力的通信技术&#xff0c;正在成为实现超高速数据传输、低延迟和大规模连接的关键。然而&#xff0c;毫米波通信虽然在理论上具…...

软考中级-软件设计师 数据库(手写笔记)

基本概念 数据库分析设计过程 E-R模型 关系模式 关系模式相关名词和完整性约束和关系的三种类型 七种基本算法 并交查和笛卡尔积 投影选择和连接 题 规范化-函数依赖 求候选码 非规范化可能处于的问题 问题 题 关系-模型分解 事务管理 备份和恢复 数据仓库和数据挖掘...

Compose笔记(二十一)--AnimationVisibility

这一节主要了解一下Compose的AnimationVisibility,AnimatedVisibility 是 Jetpack Compose 里用于实现组件可见性动画效果的组件&#xff0c;借助它能让组件在显示和隐藏时带有平滑的过渡动画&#xff0c;从而提升用户体验。现总结如下: API 1. visible 含义&#xff1a;这是一…...

生物化学笔记:神经生物学概论05 感受野 视觉中枢 高级视皮层中的信息走向

信息传递中的“击鼓传花” 新特性的突现 功能柱&#xff1a;简化节点 高级视皮层中的信息走向...

记录idea可以运行但是maven install打包却找不到问题

解决idea使⽤maven多模块install报依赖模块的包找不到的问题 如果被依赖项⽬是springboot项⽬&#xff0c;那么可以把相关的springboot的东西移除掉&#xff0c;改造成普通项⽬。如果不想改造项⽬&#xff0c;那就添加部分的配置&#xff0c;因为springboot项⽬打包的时候会⽣…...

牛客:AB5 点击消除

链接&#xff1a;点击消除_牛客题霸_牛客网 题解&#xff1a; 利用栈&#xff0c;遍历输入的字符串&#xff0c;栈为空则入栈&#xff0c;栈不为空则去除栈顶字符和当前遍历到的字符比较&#xff0c;相等则栈顶字符出栈&#xff0c;当前遍历的字符也不入栈&#xff0c;不相等…...

vue3 动态修改系统title

vue3 动态修改系统title 修改前 修改后 1、封装 useTitle 工具函数 创建组合式 API&#xff0c;通过 watchEffect 监听标题变化&#xff1a; // composables/useTitle.js import { ref, watchEffect } from vue;export function useTitle(initialTitle) {const title r…...

产品经理.产品设计.产品设计工具

一、 产品经理常用工具 1. 业务流程图---系统流程图 业务流程图&#xff0c;面向用户调研&#xff0c;描述业务的流转和数据的处理要求&#xff0c;跟用户和业务方确认&#xff1b;---业务角色的泳道流程图。 系统流程图&#xff0c;面向产品需求设计&#xff0c; prd系描述各…...

kibana重建es索引

kibana如何重命名es索引名 背景 在初期设计es索引文档的时候考虑不是很周全&#xff0c;会多出很多无效字段。如果不删除或禁用对后续数据增量以及文档维护会有不良影响。 技术实现 使用 _reindex 1.执行Reindex # 复制旧索引数据到新索引 POST _reindex {"source&qu…...

windows系统常用快捷键(CMD常用命令,DOS常用命令)

Windows系统常用快捷键 Win E: 打开“文件资源管理器”&#xff08;我的电脑&#xff09;。Win S: 打开“搜索”功能&#xff0c;可以搜索文件、应用、设置等。Win I: 打开“设置”菜单&#xff0c;用于调整系统设置。Win X: 打开“快速链接”菜单&#xff0c;包含电源选项…...

使用 ossutil 上传文件到阿里云 OSS

在处理文件存储和传输时&#xff0c;阿里云的对象存储服务&#xff08;OSS&#xff09;是一个非常方便的选择。特别是在需要批量上传文件或通过命令行工具进行文件管理时&#xff0c;ossutil提供了强大的功能。本文将详细说明如何使用 ossutil 上传文件到阿里云 OSS&#xff0c…...

专家访谈:从文本到视频,GEO多模态优化的实战法则

提问者&#xff1a;什么是生成引擎优化&#xff08;GEO&#xff09;&#xff1f;它与传统SEO的核心差异是什么&#xff1f; 源易GEO专家&#xff1a;生成引擎优化&#xff08;GEO&#xff09;是一种新兴策略&#xff0c;旨在提升内容在生成式AI引擎&#xff08;如DeepSeek、…...

7.计算机网络相关术语

7. 计算机网络相关术语 ACK (Acknowledgement) 确认 ADSL (Asymmetric Digital Subscriber Line) 非对称数字用户线 AP (Access Point) 接入点 AP (Application) 应用程序 API (Application Programming Interface) 应用编程接口 APNIC (Asia Pacific Network Informatio…...

openEuler 22.03 安装 Redis 6.2.9,支持离线安装

目录 一、环境检查1.1 必要环境检查1.2 在线安装&#xff08;有网络&#xff09;1.3 离线安装&#xff08;无网络&#xff09; 二、下载Redis2.1 在线下载2.2 离线下载 三、安装Redis四、配置Redis服务五、开机自启服务六、开放防火墙端口七、常用命令 一、环境检查 1.1 必要环…...

Java架构师深度技术面试:从核心基础到分布式架构全解析

一场关于互联网大厂Java求职者的深度技术面试 在当今竞争激烈的互联网行业中&#xff0c;作为一名Java程序员&#xff0c;如何在众多候选人中脱颖而出显得尤为重要。本文通过一个完整的面试故事场景&#xff0c;以严肃的面试官和经验丰富的Java架构师马架构之间的问答形式&…...

你的项目有‘哇‘点吗?

你的项目有哇点吗&#xff1f; 刷了一下午招聘软件&#xff0c;发现没&#xff1f;大厂JD里总爱写有创新力者优先——可你们的简历&#xff0c;创新力还不如食堂菜单&#xff01; 程序员写项目最大的误区&#xff1a;把创新当彩蛋藏最后&#xff01;什么参与需求评审负责模块…...

RPG3.角色输入

流程&#xff1a; 需要创建原生的标签。 需要创建输入配置数据资产&#xff0c;通过这个资产&#xff0c;将标签映射到角色的唯一动作&#xff0c;通过输入的文本来识别应该做哪一个动作。需要创建自定义的输入组件。 需要绑定输入&#xff0c;创建不同的输入回调。 需要在…...

【python】-基础语法3

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …...

毕业论文 | 传统特征点提取算法与匹配算法对比分析

传统特征点提取算法与匹配算法对比分析 一、特征点提取算法对比二、特征匹配算法对比三、核心算法原理与公式1. **Harris角点检测**2. **SIFT描述子生成**3. **ORB描述子**四、完整Matlab代码示例1. **Harris角点检测与匹配**2. **SIFT特征匹配(需VLFeat库)**3. **ORB特征匹配…...

TM1668芯片学习心得三

一、键扫数据储存地址如下所示&#xff0c;先发读键命令后&#xff0c;开始读取按键数据BYTE1-BYTE5字节&#xff0c;读数据从低位开始输出&#xff0c;其中B6和B7位为无效位&#xff0c;此时芯片输出为0。芯片K和KS引脚对应的按键按下时&#xff0c;相对应的字节内的 BIT位为1…...

精益数据分析(34/126):深挖电商运营关键要点与指标

精益数据分析&#xff08;34/126&#xff09;&#xff1a;深挖电商运营关键要点与指标 在创业和数据分析的学习之旅中&#xff0c;我们都在不断探寻如何让业务更上一层楼。今天&#xff0c;我依旧带着和大家共同进步的想法&#xff0c;深入解读《精益数据分析》中电商运营的关…...

Dify 获取天气数据并以echarts图表显示

Dify 获取天气数据并以echarts图表显示 1. 创建一个 Chatflow2. 创建一个 HTTP 请求节点3. 创建一个代码执行节点4. 创建一个直接回复节点5. 发布并预览 1. 创建一个 Chatflow 2. 创建一个 HTTP 请求节点 请求地址&#xff1a;https://weather.cma.cn/api/climate?stationid5…...

vtk 读取ply或者stl点云进行ICP配准(不可直接使用vtkPolyData)

在vtk中&#xff0c;读取ply或stl文件使用ICP进行点云配准时&#xff0c;需要注意不要直接使用vtkPolyData进行配准&#xff0c;这种方式会报错。 vtkPLYReader读取的文件可能仅包含点数据&#xff0c;而没有显式的顶点定义。例如&#xff0c;PLY文件可能只列出点的坐标&#x…...

ArrayList的特点及应用场景

ArrayList的特点及应用场景 一、ArrayList核心特点 基于动态数组实现 底层使用Object[]数组存储元素 默认初始容量为10 扩容机制&#xff1a;每次扩容为原来的1.5倍&#xff08;int newCapacity oldCapacity (oldCapacity >> 1)&#xff09; 快速随机访问 实现了R…...

【QT】编写第一个 QT 程序 对象树 Qt 编程事项 内存泄露问题

目录 1. 编写第一个 QT 程序 1.1 使用 标签 实现 1.2 纯代码形式实现 1.3 使用 按钮 实现 1.3.1 图形化界面实现 1.3.2 纯代码形式实现 1.4 使用 编辑框 实现 1.4.1 图形化界面实现 1.4.2 纯代码形式实现 1.4.3 内存泄露 2. 认识对象模型&#xff08;对象树&…...

92.一个简单的输入与显示示例 Maui例子 C#例子

一、关于项目命名的注意事项 在开发.NET MAUI项目时&#xff0c;项目命名是一个不可忽视的细节。如果你习惯了在C#控制台或WPF项目中使用中文项目名称&#xff0c;那么在.NET MAUI中&#xff0c;你可能会遇到一些问题。我之前就因为使用中文项目名称而导致项目无法直接运行&am…...

SpringAI实现AI应用-搭建知识库

SpringAI实战链接 1.SpringAl实现AI应用-快速搭建-CSDN博客 2.SpringAI实现AI应用-搭建知识库-CSDN博客 概述 想要使用SpringAI搭建知识库&#xff0c;就要使用SpringAI中的TikaDocumentReader&#xff0c;它属于ETL&#xff08;提取、转换、加载&#xff09;框架中的提取&…...

大连理工大学选修课——机器学习笔记(4):NBM的原理及应用

NBM的原理及应用 贝叶斯决策及相关 贝叶斯决策 对于给定数据集 X [ X 1 , X 2 , ⋯ , X d ] T X[X_1,X_2,\cdots,X_d]^T X[X1​,X2​,⋯,Xd​]TK个类 C i , i 1 , ⋯ , K C_i,i1,\cdots,K Ci​,i1,⋯,K, 满足 P ( C i ) > 0 a n d ∑ P ( C i ) 1 P(C_i)>0\ and\ …...

SQL Server 数据库重命名

通过将 SQL Server 数据库置于单用户模式&#xff0c;对其重命名 使用下列步骤在 SSMS 中使用 T-SQL 重命名 SQL Server 数据库。 1.为实例连接到 master 数据库。 2.打开一个查询窗口。 3.将以下示例复制并粘贴到查询窗口中&#xff0c;然后选择“执行”。 此示例将 MyTes…...

5W1H分析法——AI与思维模型【86】

一、定义 5W1H分析法思维模型是一种通过对问题或事件从原因&#xff08;Why&#xff09;、对象&#xff08;What&#xff09;、地点&#xff08;Where&#xff09;、时间&#xff08;When&#xff09;、人员&#xff08;Who&#xff09;和方法&#xff08;How&#xff09;六个…...

【closerAI ComfyUI】开源社区炸锅!comfyUI原生支持Step1X-Edit 图像编辑!离简单免费高效又进一步

添加图片注释,不超过 140 字(可选) 更多AI前沿科技资讯,请关注我们: closerAI-一个深入探索前沿人工智能与AIGC领域的资讯平台 【closerAI ComfyUI】开源社区炸锅!comfyUI原生支持Step1X-Edit 图像编辑!离简单免费高效又进一步! 大家好,我是Jimmy。前面有介绍了阶跃…...

spring中关键字Assert和jdk的assert关键字

你提出的问题非常关键&#xff0c;涉及到 Java 中两种不同的 assert 用法&#xff1a; ✅ 一、你提到的两种 assert 类型 示例 来源 特点 JDK 自带的 assert 关键字 assert str ! null; Java 原生语言特性&#xff08;JDK 1.4&#xff09; 可开关控制&#…...

git分支分叉强制更改为线性

git分支分叉更改为线性 远端分支情况 本地分支情况 在执行 git pull origin main 时遇到了一个提示&#xff0c;说明本地分支和远程分支发生了分歧&#xff08;divergent branches&#xff09;。 这通常是因为远程分支上有新的提交&#xff0c;而本地分支也有未推送的提交&a…...

从实列中学习linux shell6: 写一个 shell 脚本 过滤 恶意ip 攻击

下面是检测和过滤恶意IP攻击的Shell脚本&#xff0c;包含自动分析日志、封锁IP、白名单管理等功能&#xff1a; 第一步&#xff1a;过滤脚本 #!/bin/bash# 配置区域&#xff08;根据需求修改&#xff09; LOG_FILES(/var/log/auth.log /var/log/nginx/access.log) # 监控的日…...

代码随想录打卡|Day31动态规划(最后一块石头的重量2、目标和、一和零)

动态规划Part 04 最后一块石头的重量 II 力扣题目链接 代码随想录链接 视频讲解链接 题目描述&#xff1a; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉…...

一区思路!挑战5天一篇NHANES预测模型 DAY1-5

挑战5天一篇预测模型NHANES Day1! 近期美国关闭seer数据库的信息在互联网上广泛传播&#xff0c;大家都在担心数据库挖掘是否还能做。这个问题其实是有答案的&#xff0c;数据库挖掘肯定能做&#xff0c;做没被关的数据库即可&#xff0c;同时留意一些国产数据库&#xff5e;…...