mysql-锁的算法(记录锁、间隙锁、临键锁)
1.行锁的三种算法
有3种行锁算法,分别是:
- Record Lock:单个行记录上的锁,没有主键,会使用隐式的主键进行锁定
- Gap Lock:间隙锁,锁定一个范围,但不包含记录本身
- Next-Key Lock:Gap Lock + Record Lock,锁定一个范围,并且锁定记录本身
2.锁区间
锁区间:区间从字⾯意思解释就是⼀个范围。
创建时机:mysql的锁区间是在当前会话创建后事物开始时当前数据库已存在数据相邻数据之间两两作为区间边界值。
Record Lock总是会去锁住索引记录,如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,那么这时InnoDB存储引擎会使用隐式的主键来进行锁定。
例如一个索引有10,11,13,和20这四个值,那么该索引可能被Next-Key Locking的区间为:
2.1间隙锁锁区间
触发条件:
- 范围查询落入一个锁区间
- 主键索引或者辅助等值查询不存在,等值落入一个锁区间
- 辅助索引等值查询存在,落入2个锁区间(其中一个是间隙锁锁区间)
可锁定的区间
(-∞, 10)、(10,11)、(11,13)、(13,20)、(20,+∞)
2.2临键锁锁区间
触发条件:
- 当范围查询超过多个间隙锁锁区间
- 辅助索引等值查询存在,落入2个锁区间(其中一个是临键锁锁区间)
Next-Key Lock 是结合了Gap Lock和Record Lock的一种锁定算法,在Next-Key Lock算法下,InnoDB对于行的查询都是采用这种锁定算法。
可锁定的区间
(-∞, 10]、(10,11]、(11,13]、(13,20]、(20,+∞)
采用Next-Key Lock的锁定技术称为Next-key Locking。其设计目的是为了解决Phantom Problem(幻读),而利用这种锁定技术,锁定的不是单个值,而是一个范围,是谓词锁的一种改进。除了next-key locking,还有previous-key locking技术。同样上诉的索引10、11、13和20,若采用previous-可以locking技术, 那么可锁定的区间为:
(-∞, 10)、[10,11)、[11,13)、[13,20)、[20,+∞)
辅助索引锁区间的锁定会造成该区间内所有主键索引记录锁也进行锁定
若事务T1已经通过next-key locking锁定了如下范围:
(10,11]、(11,13]
当插入新的人记录12时,则锁定的范围会变成:
(10,11]、(11,12]、(12,13]
3.记录锁(Record Lock)
当查询的索引还有唯一属性时,InnoDB存储引擎会对Next-key Lock进行优化吗,将其降为Record Lock,即仅锁住索引本身,而不是范围。看下面的例子,首先根据如下代码创建测试表t
DROP TABLE IF EXISTS t;
CREATE TABLE t(a INT PRIMARY KEY);INSERT INTO t SELECT 1;
INSERT INTO t SELECT 2;
INSERT INTO t SELECT 5;
接着来执行表的SQL语句。
时间 | 会话A | 会话2 |
---|---|---|
1 | BEGIN; | |
2 | SELECT * FROM t WHERE a=5 FOR UPDATE | |
3 | BEGIN; | |
4 | INSERT INTO t serlect 4; | |
5 | COMMIT; #成功,不需要等待 | |
6 | COMMIT |
表t共有1、2、5三个值,在上面的例子中,在会话A中首先对a=5进行X锁定。而由于a是主键且唯一,因此锁定的仅是5这个值而不是(2,5)这个范围,这样在会话B中插入值4而不会阻塞,可以立即插入并返回。即锁定由Next-key Lock 算法降级为了Record Lock,从而提高应用的并发性。
正如前面锁介绍的,Next-Key Lock 降级为Record Lock 仅在查询的列是唯一索引的情况下。若辅助索引,则情况会完全不同。同样,首先根据如下代码创建测试表z:
CREATE TABLE z(a INT, b INT, PRIMARY KEY(a), KEY(b));
insert into z select 1,1;
insert into z select 3,1;
insert into z select 5,3;
insert into z select 7,6;
insert into z select 10,8;
表z的列b是辅助索引,若在会话A中执行下面的SQL语句:
SELECT * FROM z WHERE b=3 FOR UPDATE
很明显,这是SQL语句通过索引列b进行查询,因此其使用传统的Next-Key Locking技术枷锁,并且由于有两个索引,其需要分别进行锁定。对于聚簇索引,其仅对列a等于5的索引加上Record Lock。而对于辅助索引,其加上的是Next-Key Lock,锁定的范围(1,3],特别需要注意的是,InnoDB存储引擎还会对辅助索引下一个键值加上gap Lock,即还有一个辅助索引范围(3,6)的锁。因此,若在新会话B中运行下面sql语句,都会阻塞:
SELECT * FROM z WHERE a=5 LOCK IN SHARE MODE;
INSERT INTO z SELECT 4,2;
INSERT INTO z SELECT 6,7;
UPDATE z SET b=1 WHERE a=5;
第一个和第四个SQL语句不能执行,因为会话A中执行的SQL语句已经对聚簇索引列中a=5的值加上X锁,因此执行会被阻塞。第二个SQL语句,主键插入4,没问题,但是插入的辅助索引值2在锁定的范围(1,3]中,因此执行同样会被阻塞。第三个SQL语句,插入的主键6没有杯锁定,5也不在范围(1,3]之间,但插入的值5在另一个锁定的范围(3,6)中,故同样需要等待。而下面的SQL语句,不会被阻塞,可以立即执行:
INSERT INTO z SELECT 8,6;
INSERT INTO z SELECT 2,0;
INSERT INTO z SELECT 6,7;
从上面的例子中可以看到,Gap Lock的作用是为了组织多个事务将记录插入到同一个范围内,而这会导致Phantom Problem问题的产生。
用户可以通过以下两种方式显式地关闭Gap Lock:
将事务的隔离级别设置为 READ COMMITED
将参数innodb_locks_unsafe_for_binlog设置为1
在上述的配置下,除外键约束和唯一性检查依然需要的Gap Lock,其余情况仅使用Record Lock进行锁定。单需要牢记的是,上述设置破坏了事务的隔离性,并且对于replication,可能会导致主从数据的不一致。此外从性能上来看,READ COMMITED也不会优于默认的事务隔离级别READ REPEATABLE.
在InnoDB存储引擎中,对于INSERT的操作,其会检查插入记录的下一条记录是否被锁定,若已经被锁定,则不允许查询。对于上面的例子,会话A已经锁定了表z中b=3的记录,即锁定了(1,3]的范围,这是若在其他会话中进行如下的插入同样会导致阻塞:
INSERT INTO z SELECT 2,2
因为在辅助索引列b上插入值为2的记录时,会检测到下一个记录3已经被索引。而将加插入修改为如下的值,可以立即执行:
INSERT INTO z SELECT 2,0
最后需再次提醒的时,对于唯一键值的锁定,Next-key Lock 降级为 Record Lock仅存在于查询所有的唯一索引列。若唯一索引由多个列组成,而查询进士查找多个唯一索引列中的其中一个,那么查询其实是range类型查询,而不是point类型查询,故InnoDB存储引擎依然使用 Next-key Lock进行锁定。
4.解释
在上述的配置下,除外键约束和唯一性检查依然需要的Gap Lock,其余情况仅使用Record Lock进行锁定。
现在我们对该句话举例说明
即使在关闭间隙锁(Gap Lock)的情况下,某些操作如外键约束检查和唯一性约束检查仍然可能需要使用间隙锁来确保数据的一致性和完整性。这是因为这些操作需要防止并发事务在特定条件下插入违反约束的新记录。
1. 关闭 Gap Lock
在 MySQL 的 InnoDB 存储引擎中,可以通过设置 innodb_locks_unsafe_for_binlog=ON
或者将事务隔离级别设置为“读已提交”(Read Committed),来禁用范围查询中的间隙锁。这意味着对于普通的 SELECT ... FOR UPDATE
或 SELECT ... LOCK IN SHARE MODE
查询,InnoDB 不会对索引间隙加锁。
然而,为了维护数据库的完整性和一致性,某些特殊场景下的操作依然会使用间隙锁。
2. 外键约束与 Gap Lock
当一个表存在外键约束时,InnoDB 需要确保父表中的相关记录不能被删除或更新,除非子表中没有依赖这些记录的数据。即使关闭了 Gap Lock,InnoDB 也会对外键约束相关的操作加间隙锁,以防止违反外键约束的情况发生。
示例
假设我们有两个表:orders
和 customers
,其中 orders
表有一个外键引用 customers
表的 id
字段。
CREATE TABLE customers (id INT PRIMARY KEY,name VARCHAR(50)
);CREATE TABLE orders (order_id INT PRIMARY KEY,customer_id INT,amount DECIMAL(10, 2),FOREIGN KEY (customer_id) REFERENCES customers(id)
);
现有数据如下:
customers
表:
id | name |
---|---|
1 | Alice |
3 | Bob |
orders
表:
order_id | customer_id | amount |
---|---|---|
1 | 1 | 100.00 |
2 | 3 | 200.00 |
事务 A
尝试删除 customers
表中的一个客户:
BEGIN;
DELETE FROM customers WHERE id = 2;
尽管 id = 2
的记录不存在,InnoDB 仍会在 customers
表的 id
列上对 (1, 3)
这个间隙加间隙锁。这是为了防止其他事务在这个间隙中插入新的订单记录(例如 customer_id = 2
),否则这会导致外键约束失效。
事务 B
尝试插入一个新的订单记录:
INSERT INTO orders (order_id, customer_id, amount) VALUES (3, 2, 150.00); -- 阻塞,因为 `customer_id = 2` 在间隙 (1, 3) 中
事务 B 的插入操作会被事务 A 持有的间隙锁阻塞,直到事务 A 提交或回滚。
3. 唯一性约束与 Gap Lock
当表中定义了唯一性约束(Unique Constraint)时,InnoDB 需要确保不会插入重复的值。即使关闭了 Gap Lock,InnoDB 也会对唯一性约束相关的操作加间隙锁,以防止并发事务插入相同的值。
示例
假设有一个表 users
,其中包含一个唯一性约束:
CREATE TABLE users (id INT PRIMARY KEY,email VARCHAR(50),UNIQUE KEY uk_email (email)
);
现有数据如下:
users
表:
id | |
---|---|
1 | alice@example.com |
2 | bob@example.com |
事务 A
尝试插入一个新的用户记录:
BEGIN;
INSERT INTO users (id, email) VALUES (3, 'charlie@example.com');
此时,InnoDB 会在 email
列上对相应的间隙加间隙锁,以防止其他事务同时插入相同的 email
值。
事务 B
尝试插入另一个用户记录:
INSERT INTO users (id, email) VALUES (4, 'charlie@example.com'); -- 阻塞,因为 `charlie@example.com` 在间隙中
事务 B 的插入操作会被事务 A 持有的间隙锁阻塞,直到事务 A 提交或回滚。如果事务 A 提交且插入成功,则事务 B 将失败并抛出唯一性约束冲突错误。
4. 总结
-
外键约束:即使关闭了 Gap Lock,InnoDB 仍然会在涉及外键约束的操作中使用间隙锁,以确保父表中的记录不会被删除或更新,除非子表中没有依赖这些记录的数据。
-
唯一性约束:同样地,即使关闭了 Gap Lock,InnoDB 也会在涉及唯一性约束的操作中使用间隙锁,以防止并发事务插入重复的值。
这些特殊的锁定机制是为了保证数据库的完整性和一致性,避免并发事务导致的数据不一致问题。因此,在设计数据库架构和编写事务逻辑时,需要考虑到这些隐含的锁定行为。
相关文章:
mysql-锁的算法(记录锁、间隙锁、临键锁)
1.行锁的三种算法 有3种行锁算法,分别是: Record Lock:单个行记录上的锁,没有主键,会使用隐式的主键进行锁定Gap Lock:间隙锁,锁定一个范围,但不包含记录本身Next-Key Lock&#x…...
SAP Business One系统标准功能之外的不允许负库存控制
SqlServer版本写法: --在存储过程SBO_SP_TransactionNotification里加上这段代码,记得定义一个全局变量用于接收提醒具体是哪个物料 IF transaction_type IN (A) BEGINIF EXISTS (SELECT 1 FROM OIVL T0INNER JOIN OITW T1 ON T0.ItemCode T1.ItemCode…...
AI与5G的融合:如何实现更快速、更智能的物联网应用?
引言 AI和5G的结合,正在加速物联网(IoT)应用的发展,让万物互联变得更加智能、高效。5G提供超高速率、低时延和海量连接的网络能力,而AI则赋予物联网设备更强的数据分析、预测和自动决策能力。当AI与5G融合,…...
Redis的哨兵
Redis的哨兵 Sentinel 一.哨兵概念1.相关名词解释图 二.主节点恢复方式1.人工恢复主节点故障流程图2.哨兵自动恢复主节点流程 三.使用docker搭建环境1.安装docker-compose2.安装docker3.停止之前的redis服务器4.使用docker获取到redis的镜像5.使用docker-compose进行容器编排创…...
初识Redis · 简单理解Redis
目录 前言: 分布式系统 开源节流 认识Redis 负载均衡 缓存 微服务 前言: 本文只是作为Redis的一篇杂谈,简单理解一下Redis为什么要存在,以及它能做到和它不能做到的事儿,简单提及一下它对应的优势有什么&#…...
Python设计模式-抽象工厂模式
1. 什么是抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这种模式是所有形式的工厂模式中最为抽象和最具一般性的一种。…...
【中检在线-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…...
第16届蓝桥杯单片机模拟试题Ⅲ
试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //sys.c extern unsigned char UI; //界面标志(0湿度界面、1参数界面、2时间界面) extern unsigned char time; //时间间隔(1s~10S) extern bit ssflag; //启动/停止标志…...
软件系统安全设计方案,信息化安全建设方案(Word原件)
1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完…...
UE5 尝试接入 C# 脚本方案
最近团结替代 Unity6 的事官宣了,只能唏嘘不已,顺带的也就研究了一下在 UE5 中接入 C# 的方案,也算是提前帮广大 Unity 开发者蹚一下转 UE 的路~ 当前我发现的,维护比较勤快的 UE C# 方案有2个,UnrealCSharp 和 Unrea…...
力扣hot100 81-90记录
81-90(动态规划) leetcodehot100 81: class Solution { public:int climbStairs(int n) {int p 0, q 0, count 1;for(int i 1; i < n; i){p q; q count;count p q;}return count;} };//81class Solution { public:vector<vect…...
深入解析以太坊虚拟机(EVM)架构与状态机特性
以太坊(Ethereum)作为第二代区块链平台,其不仅仅是一部分布式账本,而是一个支持智能合约与去中心化应用(DApps)的全球计算机。其核心架构中,以太坊虚拟机(Ethereum Virtual Machine&…...
MySQL---Ubuntu环境安装
1.首先我们要安装MySQL的安装包(APT 配置包) 这个是适合我的Ubuntu版本的MySQL安装包 下载安装包(MySQL APT 配置包) wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb2.安装 APT 配置包: sudo d…...
Vue 3 中 ref 与 reactive 的对比
Vue 3 中 ref 与 reactive 的对比 Vue 3 中 ref 与 reactive 的对比一、定义和基本使用refreactive 二、响应式原理refreactive 三、适用场景refreactive 四、注意事项refreactive Vue 3 中 ref 与 reactive 的对比 在 Vue 3 中,ref 和 reactive 都是用于创建响应式…...
【数据结构 · 初阶】- 单链表
目录 一.相关指针知识点 二.链表 1.为什么学了顺序表还要学链表 2.优点 三.实现 1.链表的打印 —— 理解链表结构 (2) 物理结构图 2.链表的尾插 —— 入门 错误写法:tail ! NULL 总结: 正确代码物理图解: (2) 尾插整体代码 (思考…...
【前端】【React】useCallback的作用与使用场景总结
一、useCallback 的作用与使用场景总结 useCallback 是 React 提供的一个 Hook,用于缓存函数的引用,避免因为组件重新渲染而导致函数地址发生变化。它返回一个记忆(memoized)后的回调函数,只有当依赖项发生变化时才会…...
什么是 React Router?如何使用?
React Router 详解 1. 引言 在现代 web 开发中,单页面应用(SPA)越来越流行,React 是构建 SPA 的热门库之一。React Router 是一个标准的路由库,专为 React 应用设计,允许开发者在应用中实现动态路由和 UR…...
jQuery 插件
在现代Web开发中,jQuery以其简洁的语法和强大的功能成为了前端开发者们喜爱的工具之一。为了进一步扩展jQuery的功能,社区贡献了大量的插件,使得开发者能够更加高效地实现各种复杂的交互效果和功能。本文将介绍什么是jQuery插件、如何编写自己…...
未来杭州:科技与茶香交织的生态诗篇
故事背景 故事发生在中国浙江杭州,融合智能科技与传统茶文化,描绘未来城市中人与自然共生的诗意画卷。通过六个充满未来感的生态场景,展现科技如何重塑龙井茶园、古运河、西湖等经典地标,编织出一曲科技与人文共鸣的生态交响诗。 …...
微服务多模块构建feign项目过程与一些报错(2025详细版)
目录 1.eureka-server的注意事项 2.eureka-feign的注意事项 3.多模块构建feign项目过程 3.1创建父项目 3.2创建子项目eureka-server 3.3创建子项目eureka-provider 3.4创建子项目eureka-feign 3.5运行 给个点赞谢谢 1.eureka-server的注意事项 eureka-server的yml文件…...
AWS云安全实践:基于CISA关键措施的检测与实施指南
1. 引言 随着越来越多的组织将其基础设施迁移到云端,确保AWS环境的安全变得至关重要。美国网络安全与基础设施安全局(CISA)提出的关键措施为我们提供了一个可靠的框架。本文将探讨如何在AWS环境中实施这些措施,特别关注检测类别和可实施的关键措施。 2. AWS云安全中的CISA关…...
超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型|文献速递-深度学习医疗AI最新文献
Title 题目 Beyond the eye: A relational model for early dementia detection using retinal OCTA images 超越肉眼所见:一种利用视网膜光学相干断层扫描血管成像(OCTA)图像进行早期痴呆检测的关联模型 01 文献速递介绍 阿尔茨海默病&…...
终端使用python出现segmentation fault (core dumped)的一种解法
有时候在终端输入python,希望交互式运行命令或者通过pdb调试,但是出现如下错误: [1] 7476 segmentation fault (core dumped) python 但是单独运行python xxx.py 或者 python -c "xxx" 又是可以的! 经过与AI大模…...
分布式id生成算法(雪花算法 VS 步长id生成)
分布式ID生成方案详解:雪花算法 vs 步长ID 一、核心需求 全局唯一性:集群中绝不重复有序性:有利于数据库索引性能高可用:每秒至少生成数万ID低延迟:生成耗时<1ms二、雪花算法(Snowflake) 1. 数据结构(64位) 0 | 0000000000 0000000000 0000000000 0000000000 0 |…...
h265为什么没有大范围应用
H.265(也称为 HEVC,High Efficiency Video Coding)是一种视频压缩标准,旨在提供比 H.264(AVC)更高的压缩效率。然而,尽管 H.265 在技术上具有许多优势,但其大范围应用受到了以下几个…...
Linux图形化界面
一、Linux图形化界面 桌面对于Linux系统来说,只是一个应用程序,所以是可以移植的。 Linaro公司针对于半导体厂商推出的芯片,开发了ARM开发工具、Linux内核以及Linux发行版(包括Android及Ubuntu)。 所以无需自己移植&am…...
LangChain-检索系统 (Retrieval)
检索系统 (Retrieval) 检索系统是LangChain的核心组件之一,它提供了从各种数据源获取相关信息的能力,是构建知识增强型应用的基础。本文档详细介绍LangChain检索系统的组件、工作原理和最佳实践。 概述 检索系统解决了大型语言模型知识有限和过时的问…...
【Linux】进程概念
目录 一、进程概念 (一)什么是进程 (二)描述进程-PCB 二、fork创建进程 (一)bash概念 (二)如何创建子进程 一、进程概念 (一)什么是进程 结论&#x…...
【JavaScript】十七、事件委托(冒泡阶段的利用)
文章目录 1、事件委托2、tab栏切换案例:使用事件委托优化3、阻止元素默认行为 1、事件委托 以送快递为例,某班有20名同学,每人有一个快递,快递员可以一个个送,需要送40次,很繁琐,换个方式&…...
Android InstalldNativeService::getAppSize源码分析
InstalldNativeService::getAppSize 是 Android 系统中用于计算应用程序存储空间的核心方法,其逻辑可分为以下几个关键模块(结合代码和上下文分析): 一、基础校验与初始化 1. 权限校验 通过 ENFORCE_UID(AID_SYSTEM) 确…...
微信小程序跳
/** * 画布文本换行绘制 * canvasContext 画布实例 * text 要写入的文本 * x 初始x轴位置 * y 初始y轴位置 * ySpacing 换行后,每行直接的间隔 * maxWidth 此文本写入画布的最大宽度,超过此宽度就换行 * color 文本颜色 * size 文本字体大小 * align 文本…...
openlayers入门01 -- 环境配置和初始化地图
openlayers入门 openlayers开发环境配置 1.下载VSCode 官网地址:https://code.visualstudio.com/ 点击Download for Windows 2.安装汉化插件和openlayers插件 搜索chinese,下载Chinese (Simplified) (简体中文) Language Pack 更改语言并重启 搜…...
window实现多jdk共存、便捷切换
背景 如今大模型技术流行,想要跟上发展就也得学一学,比如Spring-AI等框架,但这些AI相关的框架对jdk版本都有要求,一般都要不低于17。 而在企业开发中,很多时候还使用着jdk8,如何重新安装17,则需…...
常见的 set 选项与空变量检查
在编写 Bash 脚本时,使用 set 命令中的一些选项可以帮助我们在脚本执行过程中及时捕获错误和潜在问题,避免脚本在出错时继续执行,提高脚本的可靠性和健壮性。 set -e:遇到错误就停 set -e 的作用是:一旦脚本中的某个…...
JS 创建对象方法
创建对象的三种方法 3 通过构造函数 自定义构造函数 构造函数 快速定义多个对象 自定义构造函数...
IMX6ULL2025年最新部署方案:最新的UBootLinux和Rootfs部署正点原子Alpha开发板指南
正点原子Alpha IMX6ULL开发板2025年最新部署方案:基于Ubuntu24.04平台开发,部署最新的UBoot/Linux和BusyBox Rootfs部署指南 前言 笔者实在绷不住比较旧的方案了,广义流行的方案是使用2016年发布的Uboot来引导Linux4.1.15,配…...
threeJs实现裸眼3D小狗
一、实现效果 使用threeJs实现裸眼3D小狗,效果如下,其实如果将小狗换成建模小狗,效果更好,这个是模拟了一只小狗。 二、实现代码 代码如下: <!DOCTYPE html> <html> <head><title>星空小狗…...
ZYNQ笔记(二):MIO 、EMIO
版本:Vivado2020.2(Vitis) 任务:使用GPIO MIO 和 EMIO 实现按键 KEY 控制 LED( 两个PL端LED、两个PS端KEY) 目录 一、MIO 、EMIO 介绍 二、硬件设计 三、软件设计 四、效果 一、MIO 、EMIO 介绍 …...
Cygwin编译安装Acise
本文记录Windows下使用Cygwin编译安装Acise的流程。 零、环境 操作系统Windows11Visual Studio CodeVisual Studio Code 1.92.0Cygwin 一、工具及依赖 1.1 Visual Studio Code 下载并安装Visual Studio Code, 同时安装以下插件, Task Explorer Output Colorizer …...
ubuntu22.04 安装-ODBC驱动-SQLserver
1.ISO下载 中科大 Index of /ubuntu-releases/http://mirrors.ustc.edu.cn/ubuntu-releases/ 2.VMware Workstation创建虚拟机 3.更换清华源或者中科大的源 Ubuntu 24.04更换清华源_哔哩哔哩_bilibili 中科大镜像源: Ubuntu - USTC Mirror Help 清华源 ubuntu | 镜…...
[数据结构]Trie字典树
GPT的介绍 🧠 一句话总结: 字典树是一种专门用来存很多字符串的“超级前缀树”,查找某个字符串或前缀的时候,特别快! ✍️ 举个生活例子(类比): 你想做一个词典(Dictio…...
【网络安全】Linux 命令大全
未经许可,不得转载。 文章目录 前言正文文件管理文档编辑文件传输磁盘管理磁盘维护网络通讯系统管理系统设置备份压缩设备管理其它命令前言 在网络安全工作中,熟练掌握 Linux 系统中的常用命令对于日常运维、日志分析和安全排查等任务至关重要。 以下是常用命令的整理汇总,…...
Xcode警报“Ignoring duplicate libraries: ‘-lc++’” 警报
目录 前言 一、问题出现的原因 二、解决步骤 1. 检查构建设置中的链接器标志 2. 检查依赖中的重复库 3. 清除派生数据: 4. 检查冲突的 C 库 5. 更新 CocoaPods: 前言 有时候我们会看到Xcode警报:Ignoring duplicate libraries: ‘-lc…...
WebStorm中使用live-server插件
文章目录 1. 前提条件1.1 已安装Node1.1.1 淘宝的镜像1.2 安装live-server1.3 安装WebStorm2. Windows配置hosts3. WebStorm配置live-server3.1 WebStorm创建3.2 启动 live-server1. 前提条件 1.1 已安装Node Windows PowerShell 版权所有(C) Microsoft Corporation。保留所…...
Python 中使用单例模式
有这么一种场景,Web服务中有一个全局资源池,在需要使用的地方就自然而言引用该全局资源池即可,此时可以将该资源池以单例模式实现。随后,需要为某一特殊业务场景专门准备一个全局资源池,于是额外复制一份代码新建了一个…...
【基于LangChain的千问大模型工具调用】 Function CallingTool Calling简易示例
目录 示例代码 运行结果 功能:根据用户输入自动选择数学计算/天气查询工具处理 "用户输入 → 意图分析 → 工具调用 → 结果返回" 库名解析:【langchain库名解析】-CSDN博客 示例代码 # 模块1:依赖导入 from langc…...
银河麒麟服务器操作系统 V10 SP1 中玩转firewalld防火墙
Hey小伙伴们~👋 今天来聊聊怎么在银河麒麟服务器操作系统 V10 SP1 中玩转firewalld防火墙!🛡️ 这个强大的工具能帮你动态管理防火墙规则,还支持区域概念,让你的网络流量控制更灵活!🎉 &#x…...
信创服务器网络更稳了!链路聚合Bonding实战
原文链接:信创服务器网络更稳了!链路聚合Bonding实战 Hello,大家好啊!今天给大家带来一篇信创服务器操作系统上链路聚合(Bonding)配置实战的文章。链路聚合可以让两块网卡协同工作,提高服务器网…...
沐渥科技详解氮气柜操作指南
氮气柜是一种通过持续注入高纯度氮气,维持柜内惰性气体环境的设备,用于存储半导体晶圆或其他敏感元件,防止氧化、吸湿和污染。氮气柜操作指南是怎样的?下面沐渥小编给大家介绍一下。 一、操作前准备 (1)安全…...
Netty之ChannelOutboundBuffer详解与实战
深入理解Netty的高低水位线机制及其应用实践 在高性能网络编程中,Netty作为一个广泛使用的异步事件驱动的Java框架,其高效的流量控制机制对于系统的稳定性和性能至关重要。本文将深入探讨Netty中的高低水位线(High/Low Water Mark࿰…...