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

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理

1. 什么是死锁?

当 多个事务 在并发执行时,每个事务都 持有其他事务需要的锁,同时又在 等待对方释放锁,导致所有事务都无法继续执行的状态,称为 死锁(Deadlock)。

2. 死锁的四个必要条件

  • 互斥条件:资源(如某行数据)一次只能被一个事务独占。

  • 请求与保持条件:事务在持有某些锁的同时,请求新的锁。

  • 不剥夺条件:事务已获得的锁不能被强制剥夺。

  • 循环等待条件:事务之间形成 环形等待链,如事务A等待事务B,事务B又等待事务A。

MySQL 中死锁的常见场景

1. 场景1:交叉更新不同顺序

-- 事务1:先更新表A,再更新表B
BEGIN;
UPDATE table_a SET col = 1 WHERE id = 1;
UPDATE table_b SET col = 2 WHERE id = 2;
COMMIT;-- 事务2:先更新表B,再更新表A
BEGIN;
UPDATE table_b SET col = 3 WHERE id = 2;
UPDATE table_a SET col = 4 WHERE id = 1;
COMMIT;
  • 事务1持有table_a.id=1的锁,请求table_b.id=2的锁。

  • 事务2持有table_b.id=2的锁,请求table_a.id=1的锁。

  • 形成循环等待,触发死锁。

2. 场景2:索引缺失导致全表锁

当 SQL 语句的 WHERE 条件字段无索引 时,InnoDB 引擎无法通过索引快速定位目标行,必须通过 全表扫描 逐行检查数据。在此过程中,InnoDB 会对 所有扫描到的行加锁(具体锁类型由隔离级别决定)。这种机制会导致以下问题:

锁范围扩大:即使实际需要修改的行很少,也可能因全表扫描锁定大量无关行。

间隙锁扩散:在可重复读(REPEATABLE READ)隔离级别下,InnoDB 会为全表扫描的行加上 间隙锁,锁定整个表的间隙。

锁冲突概率激增:多个事务并发执行全表扫描操作时,可能因锁竞争导致死锁。

场景示例

假设有一张 users 表,存储用户信息,其中 age 字段无索引:

CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),age INT,          -- 无索引status VARCHAR(20)
);

两个事务并发执行以下操作:

-- 事务1:更新年龄大于30的用户状态
BEGIN;
UPDATE users SET status = 'inactive' WHERE age > 30;  -- age字段无索引-- 事务2:更新年龄小于20的用户状态
BEGIN;
UPDATE users SET status = 'active' WHERE age < 20;    -- age字段无索引

锁行为分析

事务1 执行 UPDATE 时,由于 age 无索引,InnoDB 必须 全表扫描,对所有扫描到的行加锁:

  • 若隔离级别为 可重复读(REPEATABLE READ),会加 Next-Key 锁(记录锁 + 间隙锁),锁定全表所有行及其间隙。
  • 若隔离级别为 读已提交(READ COMMITTED),仅加 记录锁,但全表扫描仍可能锁定大量行。

事务2 同样执行全表扫描,尝试锁定符合条件的行。若两事务锁定的行存在 交叉或重叠,可能导致相互等待,最终触发死锁。

3. 场景3:间隙锁(Gap Lock)冲突

隔离级别为可重复读(REPEATABLE READ) 时,InnoDB 会使用 间隙锁(锁定一个范围)。

例如:SELECT * FROM users WHERE id > 100 FOR UPDATE; 会锁定 id > 100 的所有间隙。

两个事务锁定不同的间隙范围时,可能因间隙交叉导致死锁。

 分析死锁

1. 查看死锁日志

执行以下命令获取死锁信息:

SHOW ENGINE INNODB STATUS;

在输出中查找 LATEST DETECTED DEADLOCK 部分,关键信息包括:

  • 涉及的事务:事务ID、执行的SQL语句。

  • 持有的锁:事务当前持有的锁类型(行锁、间隙锁等)。

  • 等待的锁:事务正在请求的锁。

2. 示例日志分析

LATEST DETECTED DEADLOCK
------------------------
2023-10-01 10:00:00 0x7f8e12345600
*** (1) TRANSACTION:
TRANSACTION 1001, ACTIVE 2 sec updating
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 1, OS thread handle 123456, query id 100 localhost root
UPDATE table_b SET col = 3 WHERE id = 2;*** (1) HOLDS THE LOCK(S):
RECORD LOCKS space id 10 page no 3 n bits 72 index PRIMARY of table `test`.`table_b` 
trx id 1001 lock_mode X locks rec but not gap*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 10 page no 4 n bits 72 index PRIMARY of table `test`.`table_a` 
trx id 1001 lock_mode X locks rec but not gap waiting*** (2) TRANSACTION:
TRANSACTION 1002, ACTIVE 1 sec updating
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 2, OS thread handle 123457, query id 101 localhost root
UPDATE table_a SET col = 4 WHERE id = 1;*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 10 page no 4 n bits 72 index PRIMARY of table `test`.`table_a` 
trx id 1002 lock_mode X locks rec but not gap*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 10 page no 3 n bits 72 index PRIMARY of table `test`.`table_b` 
trx id 1002 lock_mode X locks rec but not gap waiting
  • 务1 持有 table_b.id=2 的锁,等待 table_a.id=1 的锁。

  • 事务2 持有 table_a.id=1 的锁,等待 table_b.id=2 的锁。

  • 结论:典型的交叉更新死锁。

解决死锁

1. 统一资源访问顺序

  • 核心思想:所有事务按固定顺序访问资源(如先操作表A,再操作表B)。

  • 示例:修改事务2的更新顺序:

-- 事务2调整为先更新表A,再更新表B
BEGIN;
UPDATE table_a SET col = 4 WHERE id = 1;
UPDATE table_b SET col = 3 WHERE id = 2;
COMMIT;

2.优化索引

  • 避免全表扫描:为 WHERE 条件字段添加索引。

ALTER TABLE users ADD INDEX idx_age (age);

优化后,UPDATE users SET name = 'Tom' WHERE age = 20; 只会锁定符合条件的行,而非全表。

3. 缩短事务时间

  • 尽早提交事务:减少锁的持有时间。

  • 避免长事务:不在事务中执行耗时操作(如文件IO、网络请求)。

4. 调整隔离级别

  • 降低隔离级别:将隔离级别从 REPEATABLE READ 改为 READ COMMITTED,减少间隙锁的使用。

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

5.锁定读(FOR UPDATE)

  • 提前获取锁:在事务开始时锁定所有需要的资源。

  • 示例

BEGIN;
SELECT * FROM table_a WHERE id = 1 FOR UPDATE; -- 提前锁定行
UPDATE table_a SET col = 1 WHERE id = 1;
COMMIT;

6.使用锁超时

  • 设置 innodb_lock_wait_timeout(默认50秒),强制终止长时间等待锁的事务:

SET GLOBAL innodb_lock_wait_timeout = 30; -- 设置为30秒

补充

Mysql锁

一、锁的分类

1. 按锁的粒度划分
  • 全局锁:锁定整个数据库实例,用于全库备份。

  • 表级锁:锁定整张表,MyISAM 默认使用。

  • 行级锁:锁定表中的特定行,InnoDB 支持。

2. 按锁的兼容性划分
  • 共享锁(S锁):允许读,阻止写。

    SELECT * FROM table WHERE id = 1 LOCK IN SHARE MODE;
  • 排他锁(X锁):阻止读和写。

    SELECT * FROM table WHERE id = 1 FOR UPDATE;
3. 按锁的实现方式划分
  • 悲观锁:默认认为并发冲突会发生,先加锁再操作。

  • 乐观锁:假设冲突较少,通过版本号(如CAS)控制。

二、InnoDB 的行级锁类型

1. 记录锁(Record Locks)
  • 作用:锁定索引中的一行记录。

  • 场景:精确匹配索引的查询。

UPDATE users SET name = 'Tom' WHERE id = 1; -- 锁定 id=1 的行
2.间隙锁(Gap Locks)
  • 作用:锁定索引记录之间的间隙(范围,不包含记录本身)。

  • 场景:防止其他事务插入数据(解决幻读)。

SELECT * FROM users WHERE age > 20 FOR UPDATE; -- 锁定 age > 20 的间隙
3.临键锁(Next-Key Locks)
  • 作用:记录锁 + 间隙锁,锁定一个左开右闭的区间。

  • 场景:可重复读(REPEATABLE READ)下的默认锁机制。

SELECT * FROM users WHERE id BETWEEN 5 AND 10 FOR UPDATE; -- 锁定 (5,10]
4.插入意向锁(Insert Intention Locks)
  • 作用:标记一个间隙,表示事务准备在此插入数据。

  • 场景:插入新数据前触发,与间隙锁互斥。

INSERT INTO users (id, name) VALUES (6, 'Jerry'); -- 对 id=6 的间隙加插入意向锁

三、锁的兼容性

锁类型记录锁(X)间隙锁(Gap)临键锁(Next-Key)插入意向锁
记录锁(X)冲突冲突冲突冲突
间隙锁(Gap)兼容兼容冲突冲突
临键锁(Next-Key)冲突冲突冲突冲突
插入意向锁兼容冲突冲突兼容

四、不同隔离级别的锁行为

隔离级别脏读不可重复读幻读锁机制
READ UNCOMMITTED允许允许允许不加锁(仅快照读)
READ COMMITTED禁止允许允许仅记录锁,无间隙锁
REPEATABLE READ禁止禁止禁止记录锁 + 间隙锁(Next-Key Locks)
SERIALIZABLE禁止禁止禁止所有操作加锁,强制串行执行

当前读和快照读

当前读

当前读是指直接读取数据库中最新的已提交数据版本,并且会对读取的数据加锁(如行锁、间隙锁等),确保在事务结束前其他事务无法修改这些数据。 当前读(如 SELECT ... FOR UPDATEUPDATEDELETE)会通过 间隙锁(Gap Lock) 或 临键锁(Next-Key Lock) 锁定查询的范围,阻止其他事务在该范围内插入新数据。

触发场景:

SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE

特性LOCK IN SHARE MODEFOR UPDATE
锁类型共享锁(S Lock)排他锁(X Lock)
其他事务能否加 S 锁✅ 是❌ 否
其他事务能否加 X 锁❌ 否❌ 否
典型用途保护数据不被修改,但允许并发读保护数据不被读或写,准备后续修改

解决的问题:

  • 解决的问题

    • 避免丢失更新(Lost Update)
      通过加锁保证事务在修改数据时,其他事务无法同时修改同一数据。

    • 保证数据强一致性
      确保事务中读取的是最新的数据版本。

    • 解决幻读

 快照读

快照读是基于 MVCC(多版本并发控制)机制读取数据的某个历史版本(通常是事务开始时的数据快照),不会对数据加锁。

触发场景:

普通 SELECT 语句(在 READ COMMITTED 或 REPEATABLE READ 隔离级别下)

解决问题:

  • 高并发读性能
    通过 MVCC 避免读-写冲突,读操作不会阻塞写操作。

  • 一致性视图
    在 REPEATABLE READ 隔离级别下,事务内的多次读取会基于同一个快照,保证可重复读

特性当前读快照读
数据版本最新已提交数据历史快照数据(基于事务开始时间点)
加锁加锁(行锁、间隙锁等)不加锁
触发语句SELECT ... FOR UPDATEUPDATEDELETE普通 SELECT
隔离级别所有隔离级别依赖隔离级别(RC 或 RR)
一致性强一致性(最新数据)最终一致性(历史数据)

 

相关文章:

破局 MySQL 死锁:深入理解锁机制与高效解决方案

死锁的原理 1. 什么是死锁&#xff1f; 当 多个事务 在并发执行时&#xff0c;每个事务都 持有其他事务需要的锁&#xff0c;同时又在 等待对方释放锁&#xff0c;导致所有事务都无法继续执行的状态&#xff0c;称为 死锁&#xff08;Deadlock&#xff09;。 2. 死锁的四个必要…...

机器学习——分类、回归、聚类、LASSO回归、Ridge回归(自用)

纠正自己的误区&#xff1a;机器学习是一个大范围&#xff0c;并不是一个小的方向&#xff0c;比如&#xff1a;线性回归预测、卷积神经网络和强化学都是机器学习算法在不同场景的应用。 机器学习最为关键的是要有数据&#xff0c;也就是数据集 名词解释&#xff1a;数据集中的…...

脚本语言 Lua

概念 Lua由标准C编写而成&#xff0c;几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C 代码调用&#xff0c;也可以反过来调用C/C的函数&#xff0c;这使得Lua在应用程序中可以被广泛应用。Lua并没有提供强大的库&#xff0c;它是不适合作为开发独立应…...

Spring相关面试题

目录 Spring中常用的注解有哪些 Spring Boot中RestController和Controller注解有什么区别&#xff1f; Spring的注解requestBody和responseBody的区别 说说Bean和componentscan的区别 简单介绍一下springboot Spring Boot有哪些常用的Starter依赖&#xff1f; 说说sprin…...

Python学习- 数据结构类型

一. list list_data [10, 20, 30]列表&#xff1a;是一个不限制类型&#xff0c;可增加&#xff0c;修改&#xff0c;删除的数据类型 可操作的方法&#xff1a;append&#xff0c;extend, pop&#xff0c;del &#xff0c;insert append: 可向list最后一个位置添加一个元…...

Azure Delta Lake、Databricks和Event Hubs实现实时欺诈检测

设计Azure云架构方案实现Azure Delta Lake和Azure Databricks&#xff0c;结合 Azure Event Hubs/Kafka 摄入实时数据&#xff0c;通过 Delta Lake 实现 Exactly-Once 语义&#xff0c;实时欺诈检测&#xff08;流数据写入 Delta Lake&#xff0c;批处理模型实时更新&#xff0…...

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...

C#零基础入门篇(18. 文件操作指南)

## 一、文件操作基础 在C#中&#xff0c;文件操作主要通过System.IO命名空间中的类来实现&#xff0c;例如File、FileStream、FileInfo等。 ## 二、常用文件操作方法 ### &#xff08;一&#xff09;文件读取 1. **使用File.ReadAllText方法读取文件内容为字符串** …...

深入探究 JVM 堆的垃圾回收机制(一)— 判活

垃圾回收分为两步&#xff1a;1&#xff09;判定对象是否存活。2&#xff09;将“消亡”的对象进行内存回收。 1 判定对象存活 可达性分析算法&#xff1a;通过一系列“GC Roots”对象作为起始节点集&#xff0c;从这些节点开始&#xff0c;根据引用关系向下搜索&#xff0c;…...

SQL优化主要有哪些方式

对经常查询的区分度高的条件字段建立索引&#xff0c;也就是用在where条件里的字段。使用没有建立索引的非主键字段作为条件查询时&#xff0c;会进行全表扫描&#xff0c;因为这个字段的数据分步是不规律的&#xff0c;但是需要避免在频繁更新的字段上建立索引&#xff0c;因为…...

基于Spring Boot的公司资产网站的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

笔记本电脑关不了机是怎么回事 这有解决方法

在快节奏的现代生活中&#xff0c;笔记本电脑已成为我们工作、学习和娱乐的得力助手。在使用电脑的过程中&#xff0c;笔记本电脑突然关不了机了&#xff0c;怎么回事&#xff1f;下面驱动人生就来讲一讲笔记本电脑不能正常关机的解决方法&#xff0c;有需要的可以来看看。 一、…...

OSPF 协议详解:从概念原理到配置实践的全网互通实现

什么是OSPF OSPF&#xff08;开放最短路径优先&#xff09;是由IETF开发的基于链路状态的自治系统内部路由协议&#xff0c;用来代替存在一些问题的RIP协议。与距离矢量协议不同&#xff0c;链路状态路由协议关心网络中链路活接口的状态&#xff08;包括UP、DOWN、IP地址、掩码…...

【C++】多态

目录 文章目录 前言 一、多态的概念 二、多态的定义及实现 三、重载/重写/隐藏的对比 四、纯虚函数和抽象类 五、多态的原理 总结 前言 本文主要讲述C中的多态&#xff0c;涉及的概念有虚函数、协变、纯虚函数、抽象类、虚表指针和虚函数表等。 一、多态的概念 多态分…...

CentOS 8 停止维护后通过 rpm 包手动安装 docker

根据 Docker官方文档 的指引&#xff0c;进入 Docker rpm 包下载的地址&#xff0c;根据自己系统的架构和具体版本选择对应的路径 这里使用 Index of linux/centos/7/x86_64/stable/ 版本&#xff0c;根据 docker 官方的给出的安装命令选择性的下载对应的 rpm 包 最终使用 yum …...

STT-MRAM CIM 赋能边缘 AI:高性能噪声鲁棒贝叶斯神经网络宏架构详解

引言 近年来&#xff0c;基于卷积神经网络&#xff08;CNN&#xff09;和视觉转换器&#xff08;ViT&#xff09;的存算一体&#xff08;CIM&#xff09;边缘AI设备因其低延迟、高能效、低成本等性能受到越来越广泛的关注。然而&#xff0c;当环境中存在噪声时&#xff08;例如…...

Performance Hub Active Report

Performance Hub 是 Oracle Enterprise Manager Database Express &#xff08;EM Express&#xff09; 中的一项功能&#xff0c;可提供给定时间范围内所有性能数据的新整合视图。用户可以使用 Database Express 页面顶部的时间选择器选择时间范围&#xff0c;详细信息选项卡将…...

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…...

【数学建模】TOPSIS法简介及应用

文章目录 TOPSIS法的基本原理TOPSIS法的基本步骤TOPSIS法的应用总结 在 多目标决策分析中&#xff0c;我们常常需要在多个选择中找到一个最优解。 TOPSIS&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09;法是一个广泛应用的决策方法…...

优选算法训练篇08--力扣15.三数之和(难度中等)

目录 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 3.解法(排序双指针) 1.题目链接&#xff1a;15.三数之和 2.题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &…...

【docker】--- 详解 WSL2 中的 Ubuntu 和 Docker Desktop 的区别和关系!

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【WSL 】--- Windows11 迁移 WSL 超详细指南 —— 给室友换一个宿舍! 开发环境一、引…...

RAG 架构地基工程-Retrieval 模块的系统设计分享

目录 一、知识注入的关键前奏——RAG 系统中的检索综述 &#xff08;一&#xff09;模块定位&#xff1a;连接语言模型与知识世界的桥梁 &#xff08;二&#xff09;核心任务&#xff1a;四大关键问题的协调解法 &#xff08;三&#xff09;系统特征&#xff1a;性能、精度…...

解决stm32引脚如果选择输入模式

1. 输入模式分类 STM32的GPIO输入模式主要分为以下四种&#xff1a; 浮空输入&#xff08;Floating Input / Input Floating&#xff09; 上拉输入&#xff08;Input Pull-Up&#xff09; 下拉输入&#xff08;Input Pull-Down&#xff09; 模拟输入&#xff08;Analog Inp…...

Java 填充 PDF 模版

制作 PDF 模版 安装 OnlyOffice 从 OnlyOffice 官网下载 OnlyOffice Desktop&#xff0c;安装过程很简单&#xff0c;一路下一步即可。用 OnlyOffice 制作 PDF 模版&#xff08;表单&#xff09; 使用 OnlyOffice 表单设计器&#xff0c;制作表单&#xff0c;如下图 注意命名…...

Maven安装与环境配置

首先我们先介绍一些关于Maven的知识&#xff0c;如果着急直接看下面的安装教程。 目录 Maven介绍 Maven模型 Maven仓库 Maven安装 下载 安装步骤 Maven介绍 Apache Maven是一个项目管理和构建工具&#xff0c;它基于项目对象模型(Project Object Model , 简称: POM)的概念…...

鸿蒙HarmonyOS NEXT应用崩溃分析及修复

鸿蒙HarmonyOS NEXT应用崩溃分析及修复 如何保证应用的健壮性&#xff0c;其中一个指标就是看崩溃率&#xff0c;如何降低崩溃率&#xff0c;就需要知道存在哪些崩溃&#xff0c;然后对症下药&#xff0c;解决崩溃。那么鸿蒙应用中存在哪些崩溃类型呢&#xff1f;又改如何解决…...

基于PySide6的CATIA自动化工具开发实战——空几何体批量清理系统

一、功能概述 本工具通过PySide6构建用户界面&#xff0c;结合PyCATIA库实现CATIA V5的自动化操作&#xff0c;提供两大核心功能&#xff1a; ​空几何体清理&#xff1a;智能识别并删除零件文档中的无内容几何体&#xff08;Bodies&#xff09;​空几何图形集清理&#xff1…...

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…...

Mysql深分页的解决方案

在数据量非常大的情况下&#xff0c;深分页查询则变得很常见&#xff0c;深分页会导致MySQL需要扫描大量前面的数据&#xff0c;从而效率低下。例如&#xff0c;使用LIMIT 100000, 10时&#xff0c;MySQL需要扫描前100000条数据才能找到第10000页的数据。 在MySQL中解决深分页…...

使用pycel将Excel移植到Python

1.适用需求 有些工作可能长期适用excel来进行公式计算&#xff0c;当需要把工作流程转换为可视化界面时&#xff0c;开发人员不懂专业逻辑&#xff0c;手动摸索公式很大可能出错&#xff0c;而且费时费力 2.可用工具及缺点 pandas 方便进行数据处理&#xff0c;支持各种格…...

Apache Tomcat CVE-2025-24813 安全漏洞

Apache Tomcat CVE-2025-24813被广泛利用&#xff0c;但是他必须要满足两个点&#xff1a; 1.被广泛的使用&#xff0c;并且部署在服务器中。 2.漏洞必须依赖在服务器中的配置。 并且漏洞补丁已经发布。 漏洞攻击方式&#xff1a; CVE-2025-24813 是 Apache Tomcat 部分 PUT…...

Spring常用注解汇总

1. IOC容器与Bean管理 注解说明示例Component通用注解&#xff0c;标记类为Spring Bean Component public class MyService { ... } Controller标记Web控制器&#xff08;应用在MVC的控制层&#xff09; Controller public class UserController { ... } Service标记业务逻辑层…...

【CXX-Qt】2.1.1 为 WebAssembly 构建

CXX-Qt 及其编写的应用程序可以编译为 WebAssembly&#xff0c;但存在一些限制。以下是关于如何为 WASM 目标构建的详细说明。 你需要安装 Qt for WebAssembly。下一篇将展示已测试的版本。 此外&#xff0c;如果尚未完成&#xff0c;请从此处克隆 emsdk git 仓库。 使用正确…...

MySql创建分区表并且按月分区

前言 在mysql中&#xff0c;按月份分区&#xff0c;再使用分区字段时间来查询数据将会很快&#xff0c;因为这样只需要扫描指定的分区。因此&#xff0c;在处理大量数据时&#xff0c;使用分区表是一个非常好的选择。 1、创建表&#xff0c;并使用RANGE COLUMNS分区 按创建时间…...

YOLO-UniOW: 高效通用开放世界目标检测模型【附论文与源码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

Flink实战教程从入门到精通(基础篇)(一)Flink简介

目录 一、Flink 二、谁在用Flink? 三、Flink特点 1、批流统一 2、性能卓越 3、规模计算 4、生态兼容性 5、高容错性 四、Flink介绍 1、无界数据 2、有界数据流 3、有状态流处理 五、Flink的发展历史 六、Flink的核心特点 1、高吞吐和低延迟 2、结果的准确性 …...

C/C++编程:Openssl使用 Windows安装包32和64位 RSA加密/解密、AES-GCM加密/解密以及ECDSA签名/验证示例

Openssl的头文件和库 C/C使用openssl&#xff0c;需要openssl的头文件和库&#xff0c;这些都在安装包里。从http://slproweb.com/products/Win32OpenSSL.html下载已经编译好的包含 lib 和 include 文件的安装包。 也可以从官网下载源码&#xff0c;再编译成安装包&#xff0…...

Es6新特性

1. let 和 const 概念 let&#xff1a;用于声明 块级作用域 的变量。const&#xff1a;用于声明 块级作用域 的常量&#xff0c;声明后不可重新赋值&#xff08;但可以修改对象的属性或数组的内容&#xff09;。 原理 JavaScript 在 ES5 中只有全局作用域和函数作用域&…...

大数据学习(80)-数仓分层

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

StarRocks 升级注意事项

前段时间升级了生产环境的 StarRocks&#xff0c;从 3.3.3 升级到了 3.3.9&#xff0c;期间还是踩了不少坑所以在这里记录下。 因为我们的集群使用的是存算分离的版本&#xff0c;也是使用官方提供的 operator 部署在 kubernetes 里的&#xff0c;所以没法按照官方的流程进入虚…...

Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

LabVIEW软件长时间运行导致蓝屏问题排查与优化

计算机在长时间运行LabVIEW或其他软件后出现蓝屏&#xff08;BSOD&#xff09;&#xff0c;通常由硬件资源耗尽、驱动冲突或软件内存泄漏引发。本文提供从日志分析到根本性优化的全流程解决方案&#xff0c;确保系统稳定运行。 一、蓝屏记录查询方法 1. 查看Windows事件日志 操…...

【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行

导读&#xff1a;本文介绍ACAI&#xff0c;其构建一个基于CCA的解决方案&#xff0c;使得机密虚拟机能够安全地使用加速器&#xff0c;同时保持与现有应用程序的兼容性和安全性&#xff0c;能够实现对加速器的安全访问。 原文链接&#xff1a;ACAI: Protecting Accelerator Ex…...

【WRF模拟】WPS预处理设置生成文件地址

目录 WPS 运行 geogrid.exe在 namelist.wps 中指定 geogrid.exe 输出路径WPS 运行 ungrid.exe方法 1:在 namelist.wps 中指定输出路径方法 2:手动移动 FILE:* 文件方法 3:使用环境变量 WPS_UNGRIB_OUTPUT(不推荐)另:设置文件链接地址WPS 运行 metgrid.exe方法 1:在 name…...

Midjourney使用教程—2.作品修改

当您已生成第一张Midjourney图像的时候&#xff0c;接下来该做什么&#xff1f;了解我们用于修改图像的工具&#xff01;使用 Midjourney 制作图像后&#xff0c;您的创意之旅就不会止步于此。您可以使用各种工具来修改和增强图像。 一、放大操作 Midjourney每次会根据提示词…...

基于 ABAP RESTful 应用程序编程模型开发 OData V4 服务

一、概念 以个人图书管理为例&#xff0c;创建一个ABAP RESTful 应用程序编程模型项目。最终要实现的效果&#xff1a; 用于管理书籍的程序。读取、修改和删除书籍。 二、Data Model-数据模型 2.1 创建项目基础数据库表 首先&#xff0c;创建一个图书相关的表&#xff0c;点…...

微信小程序登陆之反向代理

一.背景 在互联网架构中&#xff0c;反向代理是连接客户端与后端服务的核心组件。它的核心价值在于&#xff1a; 安全性&#xff1a;隐藏内部服务细节&#xff0c;防止直接暴露到公网。 负载均衡&#xff1a;分散请求到多个后端实例&#xff0c;提升吞吐量。 SSL终止&#x…...

[解决] PDF转图片,中文乱码或显示方框的解决方案

在Java开发中,将PDF文件转换为图片是一项常见的需求,但过程中可能会遇到中文乱码或显示方框的问题。本文将深入探讨这一问题,并提供详细的解决方案,帮助开发者顺利地完成PDF到图片的转换。 一、问题现象 在使用Java库(如Apache PDFBox)将PDF转换为图片时,如果PDF文件中…...

面试康复训练-SQL语句

一&#xff0c;数据库操作 1查看所有库 show databases; --查看所有库2使用数据库 use 数据库名; --使用数据库&#xff1b; 3查看当前使用数据库 select database(); --查看当前使用的数据库 4 创建数据库 create databse 数据库名 charsetutf8; --创建数据库 5删…...

经典面试题:C/C++中static关键字的三大核心作用与实战应用

一、修饰局部变量&#xff1a;改变生命周期&#xff0c;保留跨调用状态 核心作用&#xff1a; ​延长生命周期&#xff1a;将局部变量从栈区移至静态存储区&#xff08;数据段或BSS段&#xff09;&#xff0c;生命周期与程序一致​保留状态&#xff1a;变量在函数多次调用间保…...