高并发下的 MySQL 锁治理:从行锁、间隙锁、死锁到 MDL 雪崩的生产级实战
高并发下的 MySQL 锁治理:从行锁、间隙锁、死锁到 MDL 雪崩的生产级实战文章定位:不是罗列锁名词,而是建立一套从“SQL 如何加锁”到“生产事故如何止损”的完整方法论。导读高并发系统中的数据库锁问题,通常不是“某一条 SQL 很慢”这么简单。一次锁事故往往会沿着下面的路径扩散:事务持锁时间变长 ↓ 后续事务进入锁等待 ↓ 数据库活跃连接快速堆积 ↓ 连接池耗尽、线程池阻塞、接口超时 ↓ 客户端和服务端触发重试 ↓ 数据库并发进一步升高 ↓ 锁等待雪崩更危险的是,InnoDB 行锁、间隙锁、插入意向锁、Server 层元数据锁并不是彼此孤立的。长事务、低选择性索引、不合理的事务边界、DDL 变更和无差别重试,会把多个锁维度串联起来,最终拖垮整个业务链路。本文将围绕以下问题展开:MySQL 到底锁的是“行”、索引记录还是索引区间普通SELECT为什么通常不加行锁,却仍可能阻塞 DDLRR 与 RC 隔离级别下,间隙锁行为有什么本质差异锁等待、死锁、MDL 等待应该如何快速定位Spring Boot 服务如何缩短事务、正确重试并保证幂等在线 DDL 为什么仍然可能造成生产阻塞如何建立开发、发布、监控和应急处置的锁治理闭环一、事故复盘:一条 DDL 如何拖垮订单中心以下案例经过脱敏和场景化整理,用于说明典型故障链路。凌晨 00:03,订单服务连续触发告警:API P99 延迟超过 5 秒数据库活跃连接数持续上升HikariCP 等待连接线程增加订单创建、支付状态更新同时超时MySQL 中大量会话显示Waiting for table metadata lock当时,DBA 正在执行:ALTERTABLEordersADDCOLUMNpromo_idBIGINTNULL;团队最初认为,这只是一个“新增可空字段”的轻量变更,不会阻塞订单写入。但现场实际形成了如下等待链:会话 A:开启事务后查询 orders,但迟迟未提交 ↓ 持有 orders 的共享 MDL 会话 B:执行 ALTER TABLE,申请排他 MDL,进入等待 ↓ 会话 C、D、E:后续访问 orders 的请求排队 ↓ 订单接口超时,应用自动重试 ↓ 连接池和数据库会话数快速增长 ↓ 订单中心雪崩这里有三个容易被忽略的事实:普通SELECT通常是 MVCC 一致性读,不会给数据行加排他锁,但语句仍需要获取表的元数据锁。在显式事务中,语句获取的 MDL 通常要等事务提交或回滚后才释放。即使 DDL 使用ALGORITHM=INSTANT或LOCK=NONE,也不代表完全不需要 MDL。DDL 在准备或提交表定义时仍可能需要排他元数据锁。所以,事故的根因不是“DDL 本身执行很慢”,而是:长事务占有共享 MDL,DDL 排他 MDL 在队列中等待,后续请求继续排队,再叠加应用重试,形成级联拥塞。重启数据库只能强制清空会话和锁状态,却没有消除长事务、发布流程和重试策略上的问题,因此故障很容易再次出现。二、先建立正确心智模型:MySQL 锁的边界是索引很多人把 InnoDB 行锁理解为“锁住这一整行数据”。这个说法便于入门,但不够准确。更准确的理解是:InnoDB 的行级锁主要加在索引记录和索引区间上。SQL 通过哪个索引扫描、扫描了多少索引记录,直接决定锁住什么。这也是为什么两条业务含义相近的 SQL,锁范围可能完全不同。例如:UPDATEordersSETstatus='PAID'WHEREid=10001;如果id是主键,InnoDB 可以快速定位单条聚簇索引记录,锁范围通常很小。但下面这条 SQL:UPDATEordersSETstatus='PAID'WHEREexternal_no='PAY-20260803-001';如果external_no没有索引,InnoDB 可能需要扫描大量记录。对于UPDATE、DELETE和锁定读,InnoDB 会对扫描过程中需要锁定的索引记录设置锁。即使最终只修改一行,也可能产生近似“锁住大量行”的效果。因此,分析锁问题不能只看WHERE条件,还必须看:实际使用了哪个索引是否命中唯一索引的完整列扫描了多少记录查询条件是等值还是范围隔离级别是 RR 还是 RC语句是普通一致性读还是锁定读三、MySQL 锁体系:Server 层与 InnoDB 层3.1 锁类型总览锁类型所属层次典型粒度主要作用常见风险Metadata Lock,MDLMySQL Server 层对象级保护表、视图、存储过程等元数据一致性长事务阻塞 DDL,等待中的 DDL 进一步阻塞业务访问Table LockServer 层或引擎层表级显式表锁、引擎内部协调并发度显著降低Intention LockInnoDB表级表示事务准备或已经持有行级共享锁或排他锁通常不是性能问题根因Record LockInnoDB索引记录锁定已有索引记录热点行更新冲突Gap LockInnoDB索引间隙阻止其他事务向间隙插入RR 下范围锁扩大,插入阻塞Next-Key LockInnoDB记录与前方间隙Record Lock 与 Gap Lock 的组合范围查询产生大范围锁Insert Intention LockInnoDB索引间隙表示事务准备在间隙中插入与已有间隙锁冲突时等待AUTO-INC LockInnoDB表级或轻量机制协调自增值分配特定批量插入及配置下影响并发Predicate LockInnoDB 空间索引谓词范围支持空间索引隔离语义GIS 场景下的特殊锁行为3.2 MVCC 与行锁不是二选一InnoDB 同时使用:MVCC 多版本并发控制两阶段锁协议Undo LogRead View行级锁和间隙锁普通一致性读通常通过 MVCC 读取某个可见版本,不需要阻塞正在修改该记录的事务。SELECT*FROMordersWHEREid=10001;但以下语句属于锁定读或写操作:SELECT*FROMordersWHEREid=10001FORUPDATE;SELECT*FROMordersWHEREid=10001FORSHARE;UPDATEordersSETstatus='PAID'WHEREid=10001;DELETEFROMordersWHEREid=10001;这些语句会根据访问路径设置相应锁。需要特别注意:普通SELECT不加 InnoDB 数据行排他锁,不代表它“不持有任何锁”。它仍需要 MDL 来保证执行期间表结构稳定。四、InnoDB 行级锁:Record、Gap 与 Next-Key4.1 Record Lock:锁定已有索引记录记录锁锁定的是索引记录。假设表结构如下:CREATETABLEorders(idBIGINTPRIMARYKEY,user_idBIGINTNOTNULL,order_noVARCHAR(64)NOTNULL,statusVARCHAR(16)NOTNULL,amountDECIMAL(18,2)NOTNULL,created_atDATETIME(3)NOTNULL,UNIQUEKEYuk_order_no(order_no),KEYidx_user_status(user_id,status),KEYidx_created_at(created_at))ENGINE=InnoDB;执行:SELECT*FROMordersWHEREid=10001FORUPDATE;若主键记录存在,通常锁定主键索引中id = 10001的记录。如果通过二级索引执行更新,InnoDB 还需要访问对应的聚簇索引记录。例如:UPDATEordersSETamount=amount+10WHEREorder_no='O202608030001';执行过程中会涉及唯一二级索引uk_order_no和对应的主键记录。4.2 Gap Lock:锁住“还不存在的数据位置”假设索引中已有值:10, 20, 30间隙包括:(-∞, 10) (10, 20) (20, 30) (30, +∞)Gap Lock 不锁定现有记录本身,而是阻止其他事务向指定间隙插入新记录。它的核心目标是控制范围内的新插入,从而支持 RR 隔离级别下的幻读防护和锁定读语义。一个重要细节是:多个事务持有同一间隙的 Gap Lock 并不一定互斥,但插入意向锁会被不兼容的 Gap Lock 阻塞。4.3 Next-Key Lock:记录锁与前方间隙锁的组合Next-Key Lock 可以理解为:Gap Lock + Record Lock如果索引值为:10, 20, 30可能形成的临键区间为:(-∞, 10] (10, 20] (20, 30] (30, +∞)在 RR 隔离级别下,范围锁定读、范围更新和范围删除通常会对扫描到的索引区间设置 Next-Key Lock。4.4 Insert Intention Lock:插入前的“占位申请”多个事务准备向同一间隙的不同位置插入时,不一定要互相阻塞。例如,索引中已有10和20,两个事务分别插入12和18。如果没有其他 Gap Lock 阻止该间隙插入,两个插入操作可以并发推进。但如果另一个事务已经通过范围锁定读锁住(10, 20),插入意向锁就会等待。五、RR 与 RC:隔离级别如何改变锁范围MySQL InnoDB 默认隔离级别通常为REPEATABLE READ。生产中是否切换到READ COMMITTED,不能只凭“RC 锁更少”做决定。5.1 行为对比维度REPEATABLE READREAD COMMITTED普通一致性读同一事务内通常复用首次一致性读建立的快照每条一致性读通常建立新快照范围锁定读常使用 Gap Lock 或 Next-Key Lock通常减少 Gap Lock,主要锁定索引记录幻读处理MVCC 加 Next-Key Lock 语义每条语句读取最新已提交版本非匹配记录锁释放锁行为更保守对不满足条件的记录可更早释放锁复制与一致性考虑需结合业务与复制模式评估需评估业务是否依赖 RR 语义适合场景需要稳定事务快照、已有逻辑依赖 RR高并发写入、希望缩小范围锁,但业务能接受 RC 语义RC 并不是完全没有 Gap Lock。外键约束检查和重复键检查等场景仍可能使用间隙相关锁。5.2 唯一索引等值查询的关键前提常见结论是:唯一索引等值查询命中记录时,Next-Key Lock 可以退化为 Record Lock。但必须满足:使用的是唯一索引查询使用了唯一索引的全部列是精确等值匹配假设有复合唯一索引:UNIQUEKEYuk_tenant_order(tenant_id,order_no)下面的查询可以唯一定位:SELECT*FROMordersWHEREtenant_id=10ANDorder_no='O001'FORUPDATE;但只使用前导列:SELECT*FROMordersWHEREtenant_id=10FORUPDATE;并不能唯一定位一条记录,锁范围也不会简单退化为单记录锁。5.3 不存在记录时为什么仍会锁住间隙假设user_id是非唯一索引,现有值为:1, 2, 3, 8事务 A 在 RR 下执行:SELECT*FROMordersWHEREuser_id=5FORUPDATE;虽然user_id = 5不存在,但为了防止另一个事务在当前锁定范围中插入匹配记录,InnoDB 可能锁住包含5的索引间隙(3, 8)。事务 B 执行:INSERTINTOorders(id,user_id,order_no,status,amount,created_at)VALUES(100,6,'O100','INIT',100,NOW(3));因为user_id = 6也位于(3, 8),插入可能等待。这就是“查询一个不存在的值,却阻塞了另一个不同值插入”的根本原因。六、不同 SQL 到底如何加锁6.1 普通 SELECTSELECT*FROMordersWHEREid=10001;默认是非锁定一致性读:通过 MVCC 读取可见版本通常不设置 InnoDB 记录锁会获取执行所需的 MDL在显式事务中,MDL 可能持续到事务结束6.2 SELECT … FOR UPDATESELECT*FROMordersWHEREid=10001FORUPDATE;用于读取后修改:对扫描到的索引记录设置排他类锁在 RR 下,范围扫描可能产生 Next-Key Lock锁持续到事务提交或回滚不要把它当成“防并发万能开关”。如果访问路径不准确,它可能扩大锁范围。6.3 SELECT … FOR SHARESELECT*FROMordersWHEREid=10001FORSHARE;适用于需要保证记录在当前事务结束前不被不兼容修改的场景。它允许其他事务获取兼容共享锁,但会阻塞不兼容的更新或删除。6.4 UPDATE 与 DELETEUPDATEordersSETstatus='CLOSED'WHEREuser_id=100ANDstatus='INIT';InnoDB 根据实际索引访问路径加锁。关键不是最终修改几条,而是扫描和锁定了哪些索引记录。因此必须执行:EXPLAINUPDATEordersSETstatus='CLOSED'WHEREuser_id=100ANDstatus='INIT';并重点关注:keykey_lenrowsfiltered是否出现全表扫描联合索引是否覆盖主要过滤条件6.5 INSERT普通插入涉及:新记录写入唯一性检查插入意向锁可能的自增值分配二级索引维护外键检查如果插入目标间隙被 Gap Lock 覆盖,INSERT 会等待。6.6 INSERT … ON DUPLICATE KEY UPDATEINSERTINTOinventory(product_id,available,version)VALUES(10001,100,0)ONDUPLICATEKEYUPDATEavailable=VALUES(available),version=version+1;它可以减少“先查询、再判断、再插入或更新”的往返,但并不意味着没有锁冲突。命中重复键后会进入更新路径,并对对应记录设置写锁。是否使用它,应根据业务语义、唯一键设计和更新逻辑决定,而不是为了简单地“少写一条 SQL”。6.7 NOWAIT 与 SKIP LOCKEDMySQL 8.x 支持锁定读选项:SELECT*FROMtask_queueWHEREstatus='READY'ORDERBYidLIMIT10FORUPDATESKIP LOCKED;SKIP LOCKED不等待已被其他事务锁定的行,适合多消费者任务领取、批处理队列等场景。SELECT*FROMordersWHEREid=10001FORUPDATENOWAIT;NOWAIT在无法立即获取锁时快速失败,适合由上层明确处理竞争的场景。注意:SKIP LOCKED返回的不是完整一致视图不适合依赖全量顺序和严格集合一致性的普通业务查询必须有后续状态机、幂等和超时回收机制七、MDL:最容易被低估的生产级风险7.1 MDL 解决什么问题假设一个查询正在读取orders:SELECTid,statusFROMorders;与此同时,另一个会话删除status列。如果没有元数据锁,查询解析阶段和执行阶段看到的表结构可能不一致。因此,MySQL 使用 MDL 保护数据库对象定义的一致性。7.2 普通查询也持有 MDL会话 A:STARTTRANSACTION;SELECT*FROMordersWHEREid=10001;-- 故意不提交即使这是普通一致性读,会话 A 仍持有访问orders所需的共享 MDL,直到事务结束。会话 B:SETSESSIONlock_wait_timeout=10;ALTERTABLEordersADDCOLUMNremarkVARCHAR(255)NULL,ALGORITHM=INSTANT;会话 B 需要获取相应 MDL。如果会话 A 长时间不提交,DDL 会等待。7.3 为什么等待中的 DDL 会放大事故典型情况下,排他 MDL 请求进入队列后,后续对该表的访问可能为了锁优先级和避免排他请求长期饥饿而排队。于是形成:长事务 ↓ DDL 等待排他 MDL ↓ 后续 DML / SELECT 排队 ↓ 连接池耗尽 ↓ 服务超时与重试 ↓ 数据库雪崩这也是为什么生产 DDL 的首要目标不是“尽快跑完”,而是:无法快速获取必要锁时立即失败,不要在业务高峰期排队等待。7.4 Online DDL 不等于无锁 DDLALGORITHM=INSTANT:主要修改数据字典元数据不需要扫描或重建整张表的操作可以非常快仍需要在执行阶段获取必要的 MDLALGORITHM=INPLACE:很多操作不需要完整复制表某些操作仍会重建表可以允许并发 DML,也可能受到操作类型限制开始和结束阶段通常仍需要 MDLLOCK=NONE:表示要求允许并发读写不代表完全不获取任何锁如果操作不支持该锁级别,语句应失败,而不是默默降级生产建议显式声明能力边界:SETSESSIONlock_wait_timeout=5;ALTERTABLEordersADDCOLUMNpromo_idBIGINTNULL,ALGORITHM=INSTANT;对于需要INPLACE的操作:SETSESSIONlock_wait_timeout=5;ALTERTABLEordersADDINDEXidx_status_created_at(status,created_at),ALGORITHM=INPLACE,LOCK=NONE;显式指定算法和锁模式的价值是“能力不满足就失败”,避免变更工具选择比预期更重的执行路径。八、死锁与锁等待超时:两类问题不能混为一谈8.1 锁等待事务 B 需要的锁由事务 A 持有,只要 A 提交或回滚,B 就可以继续。这是普通锁等待。A 持有 id=10 B 等待 id=10如果等待超过innodb_lock_wait_timeout,B 收到:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction默认情况下,锁等待超时通常回滚当前语句,而不是自动回滚整个事务。应用必须明确执行回滚,避免继续使用处于不确定业务状态的事务。8.2 死锁事务 A 持有资源 1,等待资源 2;事务 B 持有资源 2,等待资源 1:A:持有 id=10,等待 id=20 B:持有 id=20,等待 id=10形成环路后,不可能通过继续等待自行解除。InnoDB 默认启用死锁检测,并选择一个事务作为牺牲者回滚:ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction8.3 为什么“业务代码没错”也要处理死锁死锁是并发事务系统的正常现象之一。即使每条 SQL 都正确,只要不同事务以不同顺序访问多个资源,就可能产生死锁。正确策略是:缩短事务统一资源访问顺序减少一次事务涉及的记录数量使用准确索引缩小扫描范围对可安全重试的事务实施有限次数重试重试前保证业务幂等使用随机抖动的退避策略,避免同时重试8.4 不要无条件关闭死锁检测innodb_deadlock_detect=ON是默认配置。在极端热点行竞争下,死锁检测本身可能带来额外 CPU 开销。一些场景会考虑关闭检测并依赖innodb_lock_wait_timeout。但这不是通用优化项。关闭前必须确认:热点竞争模型确实导致检测开销显著锁等待超时足够短应用能够正确回滚和重试监控能够区分等待超时与其他错误已经过专项压测验证否则,关闭死锁检测只会让死锁从“快速失败”变成“等待到超时”。九、MySQL 8.4 锁诊断:生产排障 SQL 手册9.1 第一步:确认是否存在长事务SELECTtrx_id,trx_state,trx_started,TIMESTAMPDIFF(SECOND,trx_started,NOW())AStrx_age_seconds,trx_mysql_thread_id

相关新闻

成都CAAC视距内和超视距怎么选?考试内容、用途与费用区别

成都CAAC视距内和超视距怎么选?考试内容、用途与费用区别

成都CAAC视距内和超视距怎么选?考试内容、用途与费用区别 如果确定只在能持续看清无人机的范围内飞行,主要用于近距离航拍、现场勘查或基础操作,通常先选视距内课程;准备从事大范围测绘、长距离巡检、航线飞行等工作,…

2026/8/4 6:10:28 阅读更多 →
VTK入门:从彩色立方体理解可视化管线与数据映射

VTK入门:从彩色立方体理解可视化管线与数据映射

1. 项目概述:为什么从彩色立方体开始VTK之旅?如果你刚接触VTK(Visualization Toolkit),面对这个庞大的三维可视化库,可能会感到无从下手。官方示例虽然丰富,但往往过于复杂,一个简单…

2026/8/5 6:44:49 阅读更多 →
嵌入式开发中DMA技术详解:解放CPU,实现高效数据搬运

嵌入式开发中DMA技术详解:解放CPU,实现高效数据搬运

最近在嵌入式开发中,你是否遇到过这样的场景:外设(比如ADC、UART)需要高速、不间断地向内存搬运数据,而CPU如果全程参与,不仅效率低下,还会被频繁中断,导致主程序“卡顿”。这时&…

2026/8/4 6:09:28 阅读更多 →

最新新闻

PL-2303老芯片Windows 10/11驱动实战:让被淘汰的硬件重获新生

PL-2303老芯片Windows 10/11驱动实战:让被淘汰的硬件重获新生

PL-2303老芯片Windows 10/11驱动实战:让被淘汰的硬件重获新生 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 你是否遇到过这样的场景:抽屉里翻…

2026/8/5 12:46:41 阅读更多 →
DTC产生与恢复

DTC产生与恢复

本文记录一下学习DTC测试的一些基础知识与canoe配置,在这个过程中遇到的一些问题 一、什么是IL,有什么作用 参考文档: 1.CAN Interaction Layer (谈谈我对交互层的理解)_蚂蚁小兵-CSDN博客_interaction layer 2.总线仿真,还可以这…

2026/8/5 12:46:41 阅读更多 →
呆啵宠物:你的桌面AI伙伴,让虚拟角色真正“活“起来

呆啵宠物:你的桌面AI伙伴,让虚拟角色真正“活“起来

呆啵宠物:你的桌面AI伙伴,让虚拟角色真正"活"起来 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾幻想过让喜欢的二次元角色真正"…

2026/8/5 12:46:41 阅读更多 →
字符串交替合并算法详解与优化实践

字符串交替合并算法详解与优化实践

1. 字符串交替合并问题解析 字符串交替合并是编程面试和算法练习中的经典问题,题目通常要求将两个字符串中的字符按交替顺序组合成一个新字符串。比如输入"abc"和"123",输出应为"a1b2c3"。这个问题看似简单,但…

2026/8/5 12:46:41 阅读更多 →
2026年上海B端工业抖音运营公司五强榜单:工厂靠谱获客选型指南

2026年上海B端工业抖音运营公司五强榜单:工厂靠谱获客选型指南

一、开篇引入依据《2026 年华东地区企业短视频营销服务白皮书》调研数据,长三角工业、机械、工程类企业短视频渗透率达 71.2%,但仅 22.6% 企业能稳定通过抖音企业号获取有效采购询盘。超 68% 上海工厂企业主深陷三大营销困境:自主运营播放低迷…

2026/8/5 12:46:41 阅读更多 →
Windows 11 + WSL2 环境部署 OpenClaw 2026 最佳实践指南

Windows 11 + WSL2 环境部署 OpenClaw 2026 最佳实践指南

1. 从“能用”到“好用”:为什么需要最佳实践? 最近在折腾OpenClaw的最新版本,配合Windows 11和WSL2,想搭建一个顺手的开发环境。相信很多朋友和我一样,在Windows上做开发,尤其是涉及Linux工具链的项目&…

2026/8/5 12:45:40 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →