MYSQL三大日志、隔离级别(MVCC+锁机制实现)
MySQL三大日志
Undo Log(回滚日志)
作用
事务回滚时恢复数据到修改前的状态。
支持 MVCC,为读操作提供历史版本数据。
存储
存放在 undo tablespace 中,通过回滚段管理。
格式
undo log 格式都有一个 roll_pointer 指针和一个 trx_id 事务id:
通过 trx_id 可以知道该记录是被哪个事务修改的;
通过 roll_pointer 指针可以将这些 undo log 串成一个链表,这个链表就被称为版本链;
Redo Log(重做日志)
作用
保证事务的持久性,记录物理页的修改(物理日志,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新,每当执行一个事务就会产生这样的一条或者多条物理日志),用于崩溃恢复。
写入时机
事务执行中按顺序循环写入,通过 innodb_flush_log_at_trx_commit 控制刷盘策略(0/1/2)。
组成
内存中的 redo log buffer 和磁盘上的 redo log file。
undo log 和 redo log 区别
undo log 记录了此次事务「开始前」的数据状态,记录的是更新之前的值;
redo log 记录了此次事务「完成后」的数据状态,记录的是更新之后的值;
事务提交之前发生了崩溃,重启后会通过 undo log 回滚事务,事务提交之后发生了崩溃,重启后会通过 redo log 恢复事务
Binlog(二进制日志)
MySQL 在完成一条更新操作后,Server 层还会生成一条 binlog,等之后事务提交的时候,会将该事物执行过程中产生的所有 binlog 统一写 入 binlog 文件。
作用
记录所有对数据库的修改操作(逻辑日志),用于主从复制、数据恢复(如通过 mysqlbinlog 工具恢复数据)。
写入时机
事务提交后顺序写入,通过参数 sync_binlog 控制刷盘策略。
格式
STATEMENT(记录SQL语句)、ROW(记录行数据变化)、MIXED(混合模式)。
redo log 和 binlog 区别
1、适用对象不同:
binlog 是 MySQL 的 Server 层实现的日志,所有存储引擎都可以使用;
redo log 是 Innodb 存储引擎实现的日志;
2、文件格式不同:
binlog 记录每一条修改数据的 SQL (相当于记录了逻辑操作,所以针对这种格式, binlog 可以称为逻辑日志),
redo log 是物理日志,记录的是在某个数据页做了什么修改,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新;
3、写入方式不同:
binlog 是追加写,写满一个文件,就创建一个新的文件继续写,不会覆盖以前的日志,保存的是全量的日志。
redo log 是循环写,日志空间大小是固定,全部写满就从头开始,保存未被刷入磁盘的脏页日志。
4、用途不同:
binlog 用于备份恢复、主从复制;
redo log 用于掉电等故障恢复。
MySQL Buffer Pool
核心概念
MySQL 的数据都是存在磁盘中的,那么我们要更新一条记录的时候,得先要从磁盘读取该记录,然后在内存中修改这条记录。修改完这条记录不是直接写回到磁盘,而是缓存起来。
为此,Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。
Buffer Pool 是 InnoDB 引擎的关键内存区域,用于缓存数据页和索引页,减少磁盘 I/O,提升数据库性能。
所有读写操作首先作用于 Buffer Pool,修改后的页称为脏页(Dirty Page),最终由后台线程刷回磁盘。
当读取数据时,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。
当修改数据时,如果数据存在于 Buffer Pool 中,那直接修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页(该页的内存数据和磁盘上的数据已经不一致),为了减少磁盘I/O,不会立即将脏页写入磁盘,后续由后台线程选择一个合适的时机将脏页写入到磁盘。
Buffer Pool 配置
大小设置:
通过参数 innodb_buffer_pool_size 配置,通常设为系统内存的 50%-70%。
多实例:
在高并发场景下,可通过 innodb_buffer_pool_instances 分割为多个实例,减少锁竞争。
内存管理与 LRU 算法
LRU 链表优化:
InnoDB 将 LRU 链表分为 Young 区(热点数据)和 Old 区(新加载数据),避免全表扫描冲刷热点数据。
Old SubList:新数据页首先插入 Old 区头部。
Young SubList:若 Old 区的页在 innodb_old_blocks_time(默认 1 秒)后被再次访问,则移到 Young 区。
预读机制:
线性预读(Linear Read-ahead):基于顺序访问模式,预读相邻页。
随机预读(Random Read-ahead):根据页的访问模式预测加载其他页(默认关闭)。
脏页刷新与持久化
刷新机制:
Checkpoint:定期将脏页刷盘,崩溃恢复时从 Checkpoint 位置开始重放 redo log。
自适应刷新(Adaptive Flushing):根据负载动态调整刷盘速率,避免 I/O 尖峰。
刷盘触发条件:
Buffer Pool 空间不足时。
Redo Log 空间不足(通过日志推进检查点)。
后台线程定期刷新。
与日志系统的协作
Redo Log:事务提交时先写 redo log,确保即使脏页未刷盘,崩溃后仍可通过 redo log 恢复。
Undo Log:用于事务回滚和 MVCC,其历史版本数据可能存储在 Buffer Pool 的 undo 页中。
事务隔离级别
MySQL 支持四种隔离级别,通过 MVCC 和锁机制实现:
READ UNCOMMITTED(读未提交)
事务可以读到其他未提交事务的修改。
问题:脏读、不可重复读、幻读。
READ COMMITTED(读已提交,RC)
事务只能读到其他已提交事务的修改。
实现:每次 SELECT 生成新的 ReadView。
问题:不可重复读、幻读。
REPEATABLE READ(可重复读,RR)
默认隔离级别,事务内多次读取同一数据的结果一致。
实现:事务第一次 SELECT 时生成 ReadView,后续复用。
解决:脏读、不可重复读;通过间隙锁(Gap Lock) 避免幻读(当前读时生效)。
SERIALIZABLE(串行化)
所有操作加锁,强制事务串行执行。
解决:所有并发问题,但性能最低。
MVCC
MVCC(多版本并发控制 Multi-Version Concurrency Control)是数据库实现高并发访问的核心机制,通过维护数据的多个版本,允许读操作不阻塞写操作,写操作也不阻塞读操作。InnoDB 引擎使用 MVCC 实现了 非阻塞读,显著提升了数据库的并发性能,尤其在高读低写的场景下效果显著。
MVCC 的核心原理
隐藏字段
InnoDB 的每行数据包含两个隐藏字段:
DB_TRX_ID:最近修改该行数据的事务 ID(事务提交时写入)。
DB_ROLL_PTR:指向 Undo Log 的回滚指针,用于构建数据的历史版本链。
Undo Log
存储数据的历史版本,通过回滚指针(DB_ROLL_PTR)串联成一个链表(版本链)。
作用:
事务回滚时恢复数据到旧版本。
提供 MVCC 所需的历史版本数据。
ReadView(读视图)
事务在发起读操作时生成的一个快照,用于判断数据版本的可见性。
关键信息:
m_ids:生成 ReadView 时活跃(未提交)的事务 ID 集合。
min_trx_id:活跃事务中的最小事务 ID。
max_trx_id:生成 ReadView 时系统将分配给下一个事务的 ID。
creator_trx_id:创建该 ReadView 的事务 ID(仅当该事务自身有修改时存在)。
数据可见性规则
MVCC 通过以下规则判断数据版本是否对当前事务可见:
如果数据版本的 DB_TRX_ID < min_trx_id,说明该版本在 ReadView 生成前已提交,可见。
如果数据版本的 DB_TRX_ID >= max_trx_id,说明该版本由未来事务修改,不可见。
如果 DB_TRX_ID 在 m_ids 中,说明该版本由未提交的事务修改,不可见。
如果 DB_TRX_ID 不在 m_ids 中且 DB_TRX_ID < max_trx_id,说明该版本已提交,可见。
特殊处理:
如果该版本由当前事务自身修改(DB_TRX_ID == creator_trx_id),则可见。
MVCC 与隔离级别
不同隔离级别下,MVCC 的行为差异主要体现在 ReadView 的生成时机:
READ COMMITTED(读已提交,RC)
每次 SELECT 都生成新的 ReadView。
效果:能读到其他事务已提交的最新数据,但可能导致不可重复读。
REPEATABLE READ(可重复读,RR)
事务第一次 SELECT 时生成 ReadView,后续复用。(每开启一个事物才会生成一个 readView,一个事务的所有SQL语句共享一个 readView。)
效果:整个事务中看到的数据版本一致,解决不可重复读。
MVCC 如何解决并发问题
脏读
不可见未提交事务的版本(通过 ReadView 过滤活跃事务的修改)。
例:
如下所示是 student 学生表中的一条数据
(1) 假设现在有事务A和事务B两个事务并发操作该行数据。事务A执行了两次查询操作,事务B执行了一次更新操作;
(2)事务A执行第一次查询操作,先生成 readView ,我们姑且称之为 readView_1,还未开始查询操作,事务B率先执行了更新操作,将数据进行了修改并提交,事务B结束,此时事务A第一次查询开始,但由于事务A已经生成了 readView_1 ,所以它不会读取到事务B修改过后的数据,读取到的是 readView_1 中事务B修改之前的数据,解决了脏读的问题;
(3)然后,事务A进行第二次查询操作。注意!!!这里它又生成了一个 readView,我们称之为 readView_2,此时的 readView_2 中的数据是已经被事务B修改后的数据了,事务A再次进行查询,发现查询到的数据和刚操第一次查询到的不一样了,就产生了不可重复读的问题。
(4)所以说,MVCC 在读已提交隔离级别下只解决了脏读的问题,没有解决不可重复读的问题。
不可重复读
RR 隔离级别下,复用同一个 ReadView 保证多次读取结果一致。
例:
仍以上面的学生表举例,如下所示
(1)假设现在事务A与事务B并发操作来查询 student 表。事务A 执行SELECT查询操作,执行查询操作之前会生成一个 readView,我们姑且称之为 readView_1 ,事务A从始至终使用的都是 readView_1;
(2)此时事务B来修改 student 数据,可重复读隔离级别中一个事务生成一个 readView ,所以事务B也生成了一个 readView ,我们称之为 readView_2,然后事务B率先修改完毕并提交;
(3)事务A在事务B提交之后才进行的查询,按道理来说因为事务B修改了数据,我们会产生不可重复读,但是因为事务A从始至终都是用的 readView_1 ,所以 事务A在进行查询操作的时候,查询到的其实还是事务B修改之前的数据,由此就解决了不可重复读;而且即便事务A后续进行了多次 SELECT 查询操作,仍然使用最开始生成的 readView,解决了 不可重复读的问题。
(4)总结:其实归根结底,读已提交,可重复读两种隔离级别最关键的因素就是 readView 生成的时机不同,造就了它们不同的隔离级别。
幻读
幻读(Phantom Read)是数据库事务隔离性问题的一种,表现为:同一事务中多次执行相同范围的查询,后续查询返回了其他事务插入的新行。MySQL 在 可重复读(RR) 隔离级别下,通过 MVCC 和 间隙锁(Gap Lock) 结合的方式解决幻读问题。以下是详细分析:
幻读的本质
场景示例:
事务 A 查询 age > 20 的用户,返回 10 条数据。
事务 B 插入一条 age = 25 的新用户并提交。
事务 A 再次查询 age > 20,发现返回了 11 条数据(多出事务 B 插入的行)。
核心问题:范围查询中新增的数据破坏了事务的一致性视图。
MySQL 解决幻读的机制
MVCC(快照读)
原理:
在 RR 隔离级别下,事务首次读取数据时生成 ReadView,后续查询复用该快照,确保多次读取同一范围的数据时,结果一致(基于历史版本)。
效果:
快照读(普通 SELECT):通过 MVCC 读取历史版本数据,不会看到其他事务插入的新行,避免了幻读。
局限性:若事务中执行写操作(如 UPDATE/DELETE),可能触发当前读,导致幻读风险。
间隙锁(Gap Lock)
原理:
对索引记录之间的“间隙”加锁,阻止其他事务在范围内插入新数据。
间隙范围:例如,表中现有 id=5 和 id=10 的记录,间隙锁会锁定 (5, 10) 区间。
加锁场景:
执行 SELECT … FOR UPDATE(当前读)。
执行 UPDATE 或 DELETE 影响范围内的数据。
效果:
其他事务无法在加锁的间隙内插入新数据,彻底避免幻读。
仅在 RR 隔离级别下生效。
不同隔离级别下的幻读行为
RR 隔离级别下的幻读解决方案
快照读 + MVCC(隐式解决)
场景:事务中仅执行普通 SELECT 查询(快照读)。
示例:
-- 事务 A(RR 隔离级别)
START TRANSACTION;
SELECT * FROM users WHERE age > 20; -- 生成 ReadView,返回 10 条数据-- 事务 B 插入新数据并提交
INSERT INTO users (age) VALUES (25);
COMMIT;-- 事务 A 再次查询
SELECT * FROM users WHERE age > 20; -- 仍返回 10 条数据(ReadView 未更新)
结果:事务 A 的两次查询结果一致,MVCC 屏蔽了事务 B 的插入操作。
当前读 + 间隙锁(显式解决)
场景:事务中执行 SELECT … FOR UPDATE、UPDATE 或 DELETE(当前读)。
示例:
-- 事务 A(RR 隔离级别)
START TRANSACTION;
SELECT * FROM users WHERE age > 20 FOR UPDATE; -- 当前读,对 age > 20 的间隙加锁-- 事务 B 尝试插入新数据(age=25)
INSERT INTO users (age) VALUES (25); -- 被阻塞,直到事务 A 提交或回滚-- 事务 A 提交后,事务 B 才能继续执行
COMMIT;
结果:事务 B 的插入操作被间隙锁阻塞,事务 A 的两次查询结果一致。
MVCC 的实现细节
版本链遍历
从当前数据行的 DB_ROLL_PTR 开始,沿着 Undo Log 链表查找符合可见性规则的版本。
Undo Log 清理
当没有事务需要访问某个历史版本时,对应的 Undo Log 会被 Purge 线程清理。
风险:长事务可能导致 Undo Log 堆积,引发存储膨胀。
事务 ID 分配
事务 ID(DB_TRX_ID)是全局自增的,每个事务在修改数据时被分配唯一 ID。
快照读 vs 当前读
快照读(Snapshot Read)
操作:普通 SELECT 语句(不加锁)。
实现:基于 MVCC 读取历史版本数据。
特点:不阻塞写操作,但可能读到旧数据。
当前读(Current Read)
操作:SELECT … FOR UPDATE、UPDATE、DELETE、INSERT。
实现:读取最新数据并加锁(如行锁、间隙锁),确保操作的一致性。
特点:阻塞其他事务的并发修改,保证数据最新。
相关文章:
MYSQL三大日志、隔离级别(MVCC+锁机制实现)
MySQL三大日志 Undo Log(回滚日志) 作用 事务回滚时恢复数据到修改前的状态。 支持 MVCC,为读操作提供历史版本数据。 存储 存放在 undo tablespace 中,通过回滚段管理。 格式 undo log 格式都有一个 roll_point…...
聚焦智能体未来,领驭科技在微软创想未来峰会大放异彩
2025年4月23日,微软创想未来峰会在北京中关村国际创新中心盛大举行。作为微软中国南区核心合作伙伴及HKCSP 1T首批授权云服务商,深圳领驭科技有限公司受邀参会,携瀚鹏工业AI应用解决方案亮相峰会,与全球AI领袖及行业精英共话智能体…...
043-代码味道-循环依赖
代码味道-循环依赖 代码异味之循环依赖:定义、特征与解决方案 一、循环依赖的定义与特征 循环依赖(Cyclic Dependencies)是指两个或多个软件模块之间形成相互依赖的闭环关系。这种代码味道会导致: 编译/构建困难:模…...
技术沙龙:Mybatis中resultMap使用案例分享
目录 一、联表查询和单表查询优劣分析 1.1 联表查询的优缺点 优点: 缺点: 1.2 单表查询的优缺点 优点: 缺点: 1.3 适用场景建议 联表查询更适合: 单表查询更适合: 1.4 优化建议 1.5 总结 …...
Linux基础篇、第一章_01_3安装虚拟机手动安装部署Ubuntu22.04服务器
题目安装部署Ubuntu22.04服务器 版本号: 1.0,0 作者: 老王要学习 日期: 2025.04.29 适用环境: Ubuntu22.04 文档说明 本文档聚焦 Ubuntu 22.04 服务器的安装部署,详细介绍了从虚拟机创建、系统安装、基础配置(如更新国内源、安装常用软件、修改静态 IP、…...
dma_request_slave_channel_compat 与 dma_request_channel 的区别
1.代码示例 dma_request_channel #define dma_request_channel(mask, x, y) \__dma_request_channel(&(mask), x, y, NULL)struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,dma_filter_fn fn, void *fn_param,struct device_node *np) {struct dma_d…...
【论文阅读】Partial Retraining Substitute Model for Query-Limited Black-Box Attacks
摘要 针对深度神经网络(DNN)分类器的黑盒攻击正受到越来越多的关注,因为它们在现实世界中比白盒攻击更实用。在黑盒环境中,对手对目标模型的了解有限。这使得难以估计用于制作对抗示例的梯度,从而无法将强大的白盒算法直接应用于黑盒攻击。因此,一种著名的黑盒攻击策略会…...
JAVA---集合ArrayList
集合 1. 自动扩容 ,集合长度可变 2. 只可以存引用数据类型,如果要存基本数据类型,需要将其转换成对应的包装类 ArrayList 定义在 java.util 下的,实现了 List 接口。ArrayList 内部以动态数组的形式存储元素,这意…...
快速了解Go+微服务(概念和一个例子)
更多个人笔记:(仅供参考,非盈利) gitee: https 文章目录 基本概念grpc和简单demo 基本概念 特点: 单一职责:一个服务用来解决一个业务问题面向服务:一个服务封装并对外提供服务&am…...
MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 是怎样练成的?
接上文MIT XV6 - 1.1 Lab: Xv6 and Unix utilities - sleep 探究sleep.c是如何’炼成’的? 老实讲,我不熟悉Makefile,最多写过简单的编译和辅助脚本,拿到Xv6的Makefile是一脸懵的,至今还是一脸懵,那么我们上篇中新加的…...
4月28号
初认web前端: web标准: HTML:...
React Native 太慢:kotlin-gradle-plugin-2.0.21-gradle76.jar 下载太慢
React Native 初次运行(已经连接手机USB调试)。 运行的命令:npx react-native run-android。 一直卡在jar包的下载部分,总是几十kb的速度。 > Evaluating settings > :gradle-plugin > Resolve files of :gradle-plug…...
面试篇 - Transformer前馈神经网络(FFN)使用什么激活函数?
1. FFN结构分解 原始Transformer的FFN层 FFN(x) max(0, xW₁ b₁)W₂ b₂ # 原始论文公式 输入:自注意力层的输出 x(维度 d_model512) 扩展层:xW₁ b₁(扩展为 d_ff2048) 激活函数:Re…...
Lua 第14部分 数据结构
14.1 数组 Lua 语言中的表并不是一种数据结构,它们是其他数据结构的基础。我们可以用 Lua 语言中的表来实现其他语言提供的数据结构,如数组、记录、列表、队列、集合等。而且,用Lua 语言中的表实现这些数据结构还很高效。 在像 C 和…...
杭州数据库恢复公司之Dell服务器RAID5阵列两块硬盘损坏报警离线
外地客户寄过来六块SAS服务器硬盘,说是组了RAID5磁盘阵列的戴尔DELL服务器突然崩溃了,更换阵列卡后开始可以进入系统,不过有一块盘亮黄灯报警,工程师打算把服务器放回机柜后更换新硬盘,但再重启就无法进系统了…...
linux 内核 debugfs 使用介绍
一:概述 debugfs 是 Linux 内核提供的一个特殊的虚拟文件系统,用于 暴露内核模块(如驱动)内部的调试信息或控制接口,供开发者、调试人员实时查看和排查问题。即 debugfs 就是一个“调试专用的 /proc 或 /sys”…...
MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式
MarkItDown:如何高效将各类文档转换为适合 LLM 处理的 Markdown 格式 引言项目概述分析基本信息主要功能支持的文件格式技术架构 为什么选择 Markdown?核心功能详解1. 文档转换机制2. LLM 集成能力3. 多种转换选项4. 插件系统 安装和使用教程安装可选依赖…...
解锁未来工作方式:什么是 AI Agent?| Unlocking the Future of Work: What Are AI Agents?
🇨🇳 解锁未来工作方式:什么是 AI Agent?| 🇺🇸 Unlocking the Future of Work: What Are AI Agents? 关键词提示:本文将介绍 AI agents, knowledge graph, LangChain, Graphiti 等相关术语&am…...
8分钟快速掌握Markdiwn
文档说明:本文档适合有编程基础的专业人士快速学习Markdown语法,从而立即上手使用Markdown来记笔记,新手可移步至Markdown入门到精通实战教程:使用Typora快速构建编辑MD文档_md文件编辑器typora-CSDN博客 进行入门学习 Markdown文档的元素包括块级元素、内联元素、HTML元素…...
多维驱动:负载均衡何以成为现代系统架构的基石
负载均衡的引入是现代网络架构和分布式系统发展的必然需求,除了上述提到的原因,还涉及以下多个关键层面,共同推动其成为复杂系统不可或缺的组成部分: 一、提升服务质量(QoS) 响应时间优化:用户…...
本地知识库工具FASTGPT的安装与搭建
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,将智能对话与可视化编排完美结合,让 AI 应用开发变得简单自然。无论您是开发者还是业务人员,都能轻松打造专属的 AI 应用。 今天来试着搭建下,使用docker安装比较简单&#x…...
【嘉立创EDA】如何找到曲线和直线的交点,或找到弧线和直线的交点
文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.38 本文使用嘉立创EDA,描述如何快速找到曲线和直线交点的方法,这里的曲线包括了弧线等。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题…...
余额分账和代付有什么区别?
余额分账和代付有什么区别?余额分账是把钱存到一起,但代付是把钱分开。看似简单的一字之差,却有着本质的区别。 余额分账是一种财务管理手段,在一个账户或平台上,根据一定的规则将账户内的余额进行划分,形…...
【Stable Diffusion】文生图进阶指南:采样器、噪声调度与迭代步数的解析
在Stable Diffusion文生图(Text-to-Image)的创作过程中,采样器(Sampler)、噪声调度器(Schedule type)和采样迭代步数(Steps)是影响生成效果的核心参数。本文将从技术原理、参数优化到实践应用,深入剖析DPM++ 2M采样器、Automatic噪声调度器以及采样步数的设计逻辑与协…...
1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
探索 LLaMA-Factory:大模型微调的一站式解决方案 引言 在大模型的时代,微调技术是将预训练模型适配到特定任务的关键。LLaMA-Factory 作为一款强大的工具,为开发者提供了便捷且高效的大模型微调解决方案。本文将深入介绍 LLaMA-Factory 的基…...
嵌入式开发面试常见编程题解析:pthread_join 与 pthread_detach 详解
一、引言 在多线程编程中,线程的资源管理至关重要。pthread_join 和 pthread_detach 是用于线程资源管理的两个重要函数。正确使用它们可以确保线程资源的合理回收,避免出现资源泄漏等问题。本文将详细介绍这两个函数的区别、使用方法、常见易错点以及拓…...
C#里嵌入lua脚本的例子
由于lua脚本比较小,并且适用性很强,非常适合嵌入式系统里加入。 比如在GD32的MCU里运行lua脚本,又者在ESP32里运行它,都是比较方便的。 当脚本要发送给MCU运行之前,我们需要在PC的软件里对脚本进行编译, 以便发现脚本有什么问题,不能在MCU里去发现问题,否则那样会比…...
git配置SSH KEY
1. 生成SSH密钥 ssh-keygen一直按回车 2.查看密钥 去.ssh目录查看生成的密钥文件 .pub结尾的文件即是密钥文件 3.配置SSH KEY 到代码仓库如GitHub,gitlab等配置SSH KEY,将密钥复制上去添加即可...
js day9
js当中与滚动相关的属性 <div>haha</div> <script>let boxdocument.querySelector("div")box.addEventListener("scoll",function(e)){console.log(window.scrolltop) }//往上走了 </script> ,box.scrollHeight——获取元素内容…...
【docker】启动临时MongoDB容器、挂载数据卷运行数据库服务,并通过备份文件恢复MongoDB数据库备份数据
启动临时 MongoDB 容器、挂载数据卷运行数据库服务,并通过备份文件恢复数据 1.命令分解与功能说明1.1.启动一个临时 MongoDB 容器,并进入交互式终端(1)执行命令(2)实现功能(3)…...
20_大模型微调和训练之-基于LLamaFactory+LoRA微调LLama3后格式合并
1. 什么是 GGUF GGUF 格式的全名为(GPT-Generated Unified Format),提到 GGUF 就不得不提到它的前身 GGML(GPT-Generated Model Language)。GGML 是专门为了机器学习设计的张量库,最早可 以追溯到 2022/10。其目的是为了有一个单文件共享的格式…...
LLamaFactory如何在Windows系统下部署安装训练(保姆级教程)
注意:以下教程编写和灵感来源均来自eogee开源作者(EOGEE_岳极技术_大模型与AI知识技术共享社区),大家有需要学习AI方面的知识可以关注他。 另我个人此次环境部署所用的显卡是5070ti16G显存,系统是Windows11。 如有问题…...
数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记7
前言 在前面文章的介绍中,已经介绍了数据定义、数据更新、数据查询,关于SQL语句的标准语言已经基本上介绍完毕,本文接下来将介绍另外两种便于操作的操作模式——视图与索引。其大致的语句代码与前文其实并无大的区别,在了解基本语…...
【LeetCode】彩灯装饰记录 III
题目 题目链接 一棵圣诞树记作根节点为 root 的二叉树,节点值为该位置装饰彩灯的颜色编号。请按照如下规则记录彩灯装饰结果: 第一层按照从左到右的顺序记录 除第一层外每一层的记录顺序均与上一层相反。即第一层为从左到右,第二层为从右到左…...
MongoDB的图形化工具robo3t,navicat
MongoDB 常用的两个图形化工具 —— Robo 3T 和 Navicat 的详细介绍、区别和基本使用方法: 🧰 一、Robo 3T(原 Robomongo) 📌 简介 Robo 3T 是一款专注于 MongoDB 的轻量级可视化客户端。由原 Robomongo 团队开发&am…...
python celery框架结合django的使用
学习目标: 通过文章了解celery的运行机制以及如何结合django去使用 熟悉celery的运行原理属性celery在django项目当中的配置如何启动运行celery框架 学习内容: 熟悉celery的运行原理,简单来说 Celery 是一个“任务排队机后台处理器”。帮你…...
Ansible 守护 Windows 安全(Ansible Safeguards Windows Security)
Ansible 守护 Windows 安全:自动化基线检查与加固 在当今网络威胁日益严峻的形势下,保障 Windows 系统安全至关重要。Ansible 作为一款强大的自动化运维工具,可通过自动化脚本实现 Windows 安全基线检查和加固,大幅提升运维效率并…...
【计算机架构】CISC(复杂指令集计算机)架构
一、引言 在计算机技术领域中,计算机架构是基石,决定着计算机系统的性能、功能和效率。CISC(复杂指令集计算机)架构作为一种经典的计算机架构,自诞生以来就在计算机发展历程中扮演着举足轻重的角色。从早期的大型计算机…...
【学习资源】知识图谱与大语言模型融合
知识图谱与大型语言模型结合参数知识和明确知识的可用性会带来一些机会和愿景。分享一些知识图谱和大语言模型融合的论文和文章、实践案例、关键技术和实用工具。 1 模型库获取 https://modelscope.cn/models 注 下载模型需运行 git lfs instal 2 论文和文章 2.1 大型语言模…...
探索微服务入口:Spring Cloud Gateway 实战指南
在微服务架构中,网关(Gateway)扮演着“请求入口”的角色。它不仅帮助我们统一入口、路由转发,还可以承担限流、安全认证、权限校验、熔断等功能。 本文将系统介绍 Spring Cloud Gateway 的基础概念、快速上手指南,以及…...
python的turtle库实现四叶草
实现代码: import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…...
医疗生态全域智能化:从技术革新到价值重塑的深度探析
引言 医疗人工智能正在经历从单一技术应用向全域生态系统演进的关键转折点。随着深度学习、自然语言处理和计算机视觉等技术的成熟,AI不再局限于辅助诊断等单一功能,而是逐渐渗透到医疗健康服务的全生命周期。从传统设备制造商向智慧医疗转型的东软医疗,正在构建"AI大…...
Rust 的 Web 世界:actix_web 轻松接收 JSON 请求体
前言 在现代 Web 世界,数据传输早已从“你问我答”的问卷时代,迈入“你扔我接”的快节奏赛道。其中最火的“传球”方式,非 JSON 请求体莫属。Rust 这门以高性能和强类型著称的语言,也不甘人后,推出 actix_web 框架,力求在 Web 世界中杀出一条血路。 今天我们不讲玄学,…...
1.3 点云数据获取方式——ToF相机
图1-3-1TOF相机 ToF 相机作为新兴的 3D 感知设备,凭借独特的技术优势崭露头角。其工作原理基于光飞行时间(Time of Flight)技术,通过测量光信号从发射到被物体反射后返回传感器的时间差,直接且快速地获取物体的深度信息。这种直接测量深度的方式使得 ToF 相机具备…...
数据结构每日一题day13(链表)★★★★★
题目描述:采用尾插法在头指针L处建立一个带头结点的单链表,输入-1表示结束结果返回建立的单链表。 算法思想: 1.初始化链表:创建一个头结点(不存储实际数据),头指针 L 指向该头结点。初始时,头…...
【网络编程】UDP协议 和 Socket编程
1. UDP的特点 UDP(User Datagram Protocol,用户数据报协议)是互联网协议套件中的一种传输层协议,与广泛使用的TCP(Transmission Control Protocol,传输控制协议)相比,它是一种无连接…...
【探寻C++之旅】第十二章:异常
请君浏览 前言1.异常的概念2.异常的使用2.1 抛出与捕获2.2 栈展开2.3 查找匹配的处理代码2.4 简单的异常使用2.5 异常重新抛出 2. 异常的安全问题3. 异常的规范4. 标准库的异常5. 异常处理建议尾声 前言 今天,我们继续踏入追寻C的冒险历程。今天我们让我们来讲讲C中…...
CSS的三大特性:层叠、继承与优先级
CSS作为网页设计的核心语言,其三大核心特性——层叠性、继承性和优先级共同构成了样式表现的底层逻辑。理解这些特性将帮助开发者写出更优雅、更易维护的样式代码。 一、层叠性(Cascading) 1.1 核心概念 "层叠"指多个样式规则同…...
Spring Cloud 项目中优雅地传递用户信息:基于 Gateway + ThreadLocal 的用户上下文方案
在 Spring Cloud 微服务架构中,我们通常使用 API 网关(如 Spring Cloud Gateway)作为流量入口,负责统一的用户身份校验和请求路由。本文将介绍一种通用的用户信息传递方案:网关完成认证后通过请求头传递用户信息&#…...
node.js 实战——mongoDB 续一
mongoDB的基本指令 进入mongodb mongo显示当前的所有数据库 show dbs # 或者 show databases切换数据库/进入指定数据库 使用这个命令的时候,是不要求这个数据库是否创建 use 数据库名显示当前数据库 db显示数据库中所有集合 show collections数据库的CRUD的…...