Mysql之事务(下)
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客
🌅主页:猫咪-9527-CSDN博客“欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。”
目录
5. 事务的隔离级别与并发控制
5.1事务的隔离级别
5.2查看与设置事务的隔离级别
查看全局隔离级别:
编辑 查看当前(会话)隔离级别:
设置全局隔离级别vs设置当前(会话)隔离级别
设置全局隔离级别
设置当前会话的隔离级别:
总结:
5.3读未提交(Read Uncommitted)
5.4读提交(Read Committed)
5.5可重复读(Repeatable Read)
5.6串行化(Serializable)
6. 并发问题及其解决
7. 数据库引擎的支持
5. 事务的隔离级别与并发控制
5.1事务的隔离级别
-
读未提交(Read Uncommitted):可能导致脏读,其他事务未提交的数据会被读取。
-
读提交(Read Committed):避免脏读,但可能发生不可重复读。
-
可重复读(Repeatable Read):避免不可重复读,但可能出现幻读。
-
串行化(Serializable):最严格的隔离级别,强制事务顺序执行,避免幻读,但影响性能。
5.2查看与设置事务的隔离级别
查看全局隔离级别:
select @@global.tx_isolation;
查看当前(会话)隔离级别:
方案一:
select @@tx_isolation
方案二:
select @@session.tx_isolation;
在处理并发事务时,MySQL通过多版本并发控制(MVCC)来避免并发问题。MVCC允许事务读取数据的历史版本而不加锁,从而减少了锁争用,提高了并发性能。
设置全局隔离级别vs设置当前(会话)隔离级别
set global transaction isolation level read committed;
设置全局隔离级别
现象:全局隔离级别发生变化,会话隔离级别没有变化
重新启动一个新的会话:
设置当前会话的隔离级别:
set session transaction isolation level read committed;
重新启动一个会话:
总结:
-
全局与会话隔离权限的关系:在大多数系统中,会话和全局权限是两者独立的,但又有关系。全局权限通常决定了系统中的默认行为和限制,而会话的权限则可以根据用户的需求做出适当的修改。在此系统中,修改全局的隔离权限时,现有会话的权限不会立刻发生变化,因为当前会话已被初始化并已经从全局权限中导入了隔离配置。
-
会话的初始化与导入:当启动新会话时,系统会从全局隔离权限中导入当前的配置。此时新会话会继承全局隔离权限的设置。由于会话和全局权限是分离的,当当前会话发生变化时,它并不会影响到全局设置,反之亦然。
-
修改全局隔离权限的时效性:这种机制的设计可以确保当前会话的稳定性,在进行全局权限修改时,避免对现有会话产生影响。但在重新启动会话时,新的会话会基于当前全局权限的状态进行初始化。
-
对系统设计的影响:这种设计确保了全局权限的统一性和管理的集中性,同时又能保持会话的灵活性,使得管理员或系统能够灵活调整权限,而不需要影响到现有的会话状态。
5.3读未提交(Read Uncommitted)
-
脏读:在读未提交隔离级别下,事务可以读取到其他事务尚未提交的数据。这意味着一个事务可以读取另一个事务修改了但还未提交的数据,这种读取是脏数据,可能会在其他事务回滚时消失。
-
最低的隔离性:读未提交是所有事务隔离级别中最低的一个,它对数据的隔离性很差,容易引发数据不一致的问题。
-
不可重复读和幻读:除了脏读外,读未提交还会出现不可重复读和幻读的现象。例如,事务 A 在读取某个数据后,事务 B 修改了这个数据并提交,事务 A 之后再读取相同数据时会得到不同的结果。
5.4读提交(Read Committed)
-
避免脏读:读提交隔离级别避免了读未提交隔离级别中的脏读问题。即事务只能读取到其他事务已经提交的数据,不能读取到其他事务未提交的数据。因此,避免了一个事务读取到另一个事务正在修改但尚未提交的数据的情况。
-
不可重复读:虽然读提交避免了脏读,但它仍然可能出现不可重复读的现象。即在一个事务内,读取同一数据的两次结果可能不同,因为其他事务可以在当前事务运行期间对数据进行修改并提交。例如,事务 A 读取数据后,事务 B 修改数据并提交,事务 A 再次读取数据时得到的结果会与第一次不同。
-
幻读:幻读是指在一个事务内,某个查询的结果集在事务执行过程中发生了变化(即增加或删除了符合条件的行)。由于其他事务可以在事务执行过程中提交数据,读提交隔离级别可能会出现幻读现象。
5.5可重复读(Repeatable Read)
- 可重复读(Repeatable Read):避免不可重复读,但可能出现幻读。
- 幻读:事务读取的数据集在事务执行过程中发生变化。例如,事务查询到一定范围内的数据,但在事务执行过程中,其他事务插入了新的数据,导致结果集发生变化。串行化隔离级别能有效防止幻读。
现象:从你第一次读取开始,到后面事务结束之前你的读取结果都不会放生改变。
开始事务 | 开始事务 |
select *from account;(快照读) | |
插入(1,‘张飞’,100) | |
插入(2,'刘备',111) | |
commit; | |
select *from account;(快照读) |
开始事务 | 开始事务 |
插入(1,‘张飞’,100) | |
插入(2,'刘备',111) | |
commit; | |
select *from account;(快照读) |
5.6串行化(Serializable)
- 串行化(Serializable):最严格的隔离级别,强制事务顺序执行,避免幻读,但影响性能
6.多版本并发控制(MVCC)
6.1数据库并发的三种场景及MVCC
- 读-读:不存在任何问题,也不需要并发控制
- 读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读
- 写-写:有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失(后面补充)
多版本并发控制( MVCC )是一种用来解决读-写冲突的无锁并发控制
- 在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能
- 同时还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题
6.2三个隐藏字段
- DB_TRX_ID :6 byte,最近修改( 修改/插入)事务ID,记录创建这条记录/最后一次修改该记录的事务ID
- DB_ROLL_PTR : 7 byte,回滚指针,指向这条记录的上一个版本(简单理解成,指向历史版本就行,这些数据一般在undo log 中)
- DB_ROW_ID : 6 byte,隐含的自增ID(隐藏主键),如果数据表没有主键, InnoDB 会自动以DB_ROW_ID 产生一个聚簇索引
我们查看到的数据库:
实际的数据库:
id | name | DB_TRX_ID(事务ID) | DB_ROW_ID(隐式主键) | DB_ROLL_PTR(回滚指针) |
1 | 张飞 | 1 | 1 | null |
通过事务2将张飞修改为刘备。
这样的一个个的版本合在一起我们称为快照。
6.3undo log
MySQL 中的一段内存缓冲区,用来保存日志数据的。
6.4READ VIEW
class ReadView {
// 省略...
private:
/** 高水位,大于等于这个ID的事务均不可见*/
trx_id_t m_low_limit_id
/** 低水位:小于这个ID的事务均可见 */
trx_id_t m_up_limit_id;
/** 创建该 Read View 的事务ID*/
trx_id_t m_creator_trx_id;
/** 创建视图时的活跃事务id列表*/
ids_t m_ids;
/** 配合purge,标识该视图不需要小于m_low_limit_no的UNDO LOG,
* 如果其他视图也不需要,则可以删除小于m_low_limit_no的UNDO LOG*/
trx_id_t m_low_limit_no;
/** 标记视图是否被关闭*/
bool m_closed;
// 省略...
};
m_ids; //一张列表,用来维护Read View生成时刻,系统正活跃的事务ID
up_limit_id; //记录m_ids列表中事务ID最小的ID(没有写错)
low_limit_id; //ReadView生成时刻系统尚未分配的下一个事务ID,也就是目前已出现过的事务ID的
最大值+1(也没有写错)
creator_trx_id //创建该ReadView的事务ID
//判断当前id能否被看到if(id<m_up_limit_id||id==m_creator_trx_id) return true;//如果比最小的小,则一定能看到,或者就是我本身自己的id
if(id>m_low_limit_id) return false;//在我这个事务形成时,这个事务还没有被创建,所以不能被看到
else
{//遍历m_ids表,如果不在这个表中 return true;//如果在这个表中就直接 return false;
}
6.5事务简单流程
id | name | DB_TRX_ID(事务ID) | DB_ROW_ID(隐式主键) | DB_ROLL_PTR(回滚指针) |
1 | 张飞 | 1 | 1 | null |
事务:
事务四:将张飞修改为刘备
m_ids; //1 3
up_limit_id; //1
low_limit_id; //5
creator_trx_id //2
//事务2的 Read View
m_ids; //1 3
up_limit_id; //1
low_limit_id; //5 原因:ReadView生成时刻,系统尚未分配的下一个事务ID
creator_trx_id //2
//事务4提交的记录对应的事务ID
DB_TRX_ID=4
//比较步骤
DB_TRX_ID(4)< up_limit_id(1) ? 不小于,下一步
DB_TRX_ID(4)>= low_limit_id(5) ? 不大于,下一步
m_ids.contains(DB_TRX_ID) ? 不包含,说明,事务4不在当前的活跃事务中。故,事务4的更改,应该看到。
所以事务2能读到的最新数据记录是事务4所提交的版本,而事务4提交的版本也是全局角度上最新的版本
7.REPEATABLE READ vs READ COMMITTED
7.1REPEATABLE READ
测试表一:
测试表二:
- 用例1与用例2:唯一区别仅仅是表1 的事务B在事务A修改age前快照读过一次age数据
- 而表2 的事务B在事务A修改age前没有进行过快照读。
结论:
- 事务中快照读的结果是非常依赖该事务首次出现快照读的地方,即某个事务中首次出现快照读,决定该事务后续快照读结果的能力
- delete同样如此
7.2 REPEATABLE READ vs READ COMMITTED
- 正是Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同
- 在RR级别下的某个事务的对某条记录的第一次快照读会创建一个快照及Read View, 将当前系统活跃的其他事务记录起来
- 此后在调用快照读的时候,还是使用的是同一个Read View,所以只要当前事务在其他事务提交更新之前使用过快照读,那么之后的快照读使用的都是同一个Read View,所以对之后的修改不可见;
- 即RR级别下,快照读生成Read View时,Read View会记录此时所有其他活动事务的快照,这些事务的修改对于当前事务都是不可见的。而早于Read View创建的事务所做的修改均是可见
- 而在RC级别下的,事务中,每次快照读都会新生成一个快照和Read View, 这就是我们在RC级别下的事务中可以看到别的事务提交的更新的原因
- 总之在RC隔离级别下,是每个快照读都会生成并获取最新的Read View;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。
- 正是RC每次快照读,都会形成Read View,所以,RC才会有不可重复读问题。
8.常见的名词解释
脏读: | 一个事务读取到另一个事务未提交的数据。由于另一个事务尚未提交,它所做的修改可能会被回滚,从而导致第一个事务读取到的数据是无效的或不一致的。 |
不可重复读: | 在一个事务中,多次读取同一条记录时,得到的结果不同。 |
可重复读: | 在一个事务中,多次读取同一条记录时,得到的结果相同。 |
幻读: | 事务在多次执行相同查询条件的情况下,第二次查询发现之前不存在的记录突然“出现”了,或者之前存在的记录“消失”了。这种现象通常发生在 INSERT 或 DELETE 操作时。 |
相关文章:
Mysql之事务(下)
🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客 🌅主页:猫咪-9527-CSDN博客 “欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。” 目录 5. 事务的隔离级别与并发控制 5.1事务的隔离级别 5.2查看与设置事务的…...
LabVIEW液压控制系统开发要点
液压控制系统开发需兼顾高实时性、强抗干扰性和安全性,尤其在重工业场景中,毫秒级响应延迟或数据异常都可能导致设备损坏。本文以某钢厂液压升降平台项目为例,从硬件选型、控制算法、安全机制三方面,详解LabVIEW开发中的关键问题与…...
mybatis-genertor(代码生成)源码及扩展笔记
文章目录 生成过程MyBatisGenerator.generate()代码入口 pid0,id0context.generateFiles()代码 pid0,id1introspectedTable.getGeneratedJavaFiles() java部分生成 pid1,id11introspectedTable.getGeneratedXmlFiles() xml部分生成 pid1,id12这里是一波三连调用XMLMapperGenera…...
Mysql-数据库、安装、登录
一. 数据库 1. 数据库:DataBase(DB),是存储和管理数据的仓库。 2. 数据库管理系统:DataBase Management System(DBMS),操纵管理数据库的大型软件 3. SQL:Structured Query Language&…...
HTTP 请求方法
HTTP 请求方法 引言 HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。它定义了客户端与服务器之间通信的规则。HTTP请求方法,也称为HTTP动词,是客户端向服务器发送请求时使用的操作类型。本文将详细介绍HTTP请求方法的概念、分类、常用方法及其在实际应用中的…...
群体智能优化算法-算术优化算法(Arithmetic Optimization Algorithm, AOA,含Matlab源代码)
摘要 算术优化算法(Arithmetic Optimization Algorithm, AOA)是一种新颖的群体智能优化算法,灵感来源于加、减、乘、除四种基本算术运算。在优化过程中,AOA 通过乘除操作实现全局探索,通过加减操作强化局部开发&#…...
4.1-python操作wrod/pdf 文件
1.读取word文件 首先安装软件包 pip3 install python-docx from docx import Documentimport os path os.path.join(os.getcwd(),你的文档名字.docx)# 加载文档 doc Document(path)# 遍历数据 for p in doc.paragraphs:print(p.text)# 遍历文档中所有表格 for t in doc.t…...
C# 窗体应用(.FET Framework) 线程操作方法
一、Thread线程使用方法 初始化方法 Thread th1; th1 new Thread(方法名); th1.IsBackground true; th1.Start();传参 ///定义一个object接受参数的方法 private void Test(object n){string str1 n as string; MessageBox.Show(str1); }// 调用方法 Thread th2 string s…...
vscode/cursor编辑器中vue3文件里面的css不能注释解决办法
升级了cursor后发现css或者html里面的代码不能单行注释了,真的很烦人,找了很多解决办法,还是定位到插件上,有一个vue的插件,把它禁用掉就可以注释了,然后再把这个插件启用,就可以使用了…...
Jenkins详细安装配置部署
Jenkins是一款流行的开源持续集成/持续交付(CI/CD)工具,可以实现自动化构建、测试和部署软件。下面是Jenkins的详细安装、配置和部署过程。 安装Jenkins 1. 安装Java Jenkins运行需要Java环境,因此需要先安装Java。具体安装方式根据不同的操作系统有所…...
《Linux运维总结:基于银河麒麟V10+ARM64架构CPU源码编译部署单实例redis7.2.6》
总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、环境信息 环境信息如下: 主机IP 操作系统 Redis版本 CPU架构 192.168.1.111 K…...
音视频开发---常用工具
一、VLC播放器 1. 简介 VLC多媒体播放器(最初命名为VideoLAN客户端)是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘、VCD影音光盘和各类流式协议。它也能作为unicast或multicast的流式服务器在IPv4或IPv6的高速连接下使用。 它融…...
Java 大视界 -- 基于 Java 的大数据分布式计算在基因测序数据分析中的性能优化(161)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
关于跨域与.NET的处理方案
在 Web 开发里,浏览器的同源策略是一项关键的安全机制。同源指的是两个 URL 的协议、域名和端口都相同。当浏览器从一个源(域名、协议、端口)的网页去请求另一个源的资源时,就会产生跨域问题。例如,从 http://www.exam…...
中级:Maven面试题精讲
一、引言 在Java开发中,Maven作为一款强大的项目管理和构建工具,被广泛应用于项目构建、依赖管理和插件机制等方面。面试官通过相关问题考察候选人对Maven核心功能的理解和实际应用能力,以及在复杂项目场景下合理配置和优化Maven的能力。本文…...
MySQL与Redis数据一致性保障方案详解
前言 在现代分布式系统中,MySQL和Redis的结合使用非常普遍。MySQL作为关系型数据库负责持久化存储,而Redis则作为高性能缓存层提升系统的响应速度。然而,在这种架构下,如何保证MySQL与Redis之间的数据一致性是一个重要的挑战。本…...
外观模式详解
以下是一个结合外观模式解决实际开发问题的Java实现案例,涵盖复杂系统整合、接口简化、版本兼容等场景需求,附带逐行中文注释: 场景描述 开发一个智能家居控制系统,需整合多个子系统: 灯光系统:多房间灯光…...
JavaScript单例模式
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 用一个变量来标志是否创建过对象,如果是,则在下次直接返回这个已经创建好的对象,示例代码如下: 单例模式的核心思想是让指定的类只存在唯一一个实例&…...
Kong网关研究
目录 概述 部署kong docker服务 kong初始化与启动 验证 部署konga 网关功能 JWT认证 若依的鉴权认证 kong的JWT支持 限流 黑名单 概述 Kong网关基于OpenResty,而OpenResty基于Nginx,Nginx本身是性能强大的方向代理与web容器,Ope…...
LangChain 结构化输出:用 Pydantic + PydanticOutputParser 驯服 LLM 的“自由发挥”
目录 一、Pydantic 二、PydanticOutputParser 1、为什么需要 PydanticOutputParser? 2、Pydantic和PydanticOutputParser核心区别 3、Pydantic的不足 (1)无法直接解析非结构化文本 (2)缺乏对 LLM 输出的适配性 …...
source(WEB)
##解题思路 首先打开kali,使用dirsearch扫描下网站目录,发现网站有.git源码泄露 dirsearch -u URL 接着使用wget将源码下载到本地(尝试过使用githack,但是得到的信息是flag不在这) wget -r URL/.git/ 接着cd到wget的…...
【蓝桥杯】单片机设计与开发,温度传感器DS18B20
一、温度传感器概述 结构图 二、通信过程 三、onewire单总线协议概述 四、单总线的工作原理 黑粗线是单片机发送的,浅的是s18b20回应的 五、温度传感器的应用 六、onewire 七、课后习题...
trae.ai 编辑器:前端开发者的智能效率革命
一、为什么我们需要更智能的编辑器? 作为从业5年的前端开发者,我使用过从Sublime到VSCode的各种编辑器。但随着现代前端技术的复杂度爆炸式增长(想想一个React组件可能涉及JSX、CSS-in-JS、TypeScript和GraphQL),传统…...
【FPGA实战】基于DE2-115实现数字秒表
【FPGA实战】基于DE2-115实现数字秒表 一、项目概述二、层次化设计架构三、核心模块实现原理1. 时钟分频模块(clock_divider.v)2. 按键处理模块2.1 消抖(debounce .v)2.2 边沿检测(edge_detector .v) 3. 时间计数模块(time_counter .v)4. 显示驱动模块(seven_seg_display.v)5.顶…...
动态规划入门:从记忆化搜索到递推
本篇笔记基于b站灵茶山艾府。 198. 打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统…...
Linux 入门:基础开发工具(上)vim,gcc/g++,make/makefile
目录 一.软件包管理器 一).软件包 二).安装软件 三).删除软件 二.编辑器vim 一).vim的基本介绍 1.正常/普通/命令模式(Normal mode) 2.插入模式(Insert mode) 3.底行模式(last line mode) 二).vim的基本操作 …...
golang 的channel
理解 Go 语言的 Channel Channel 是 Go 语言中用于 goroutine 之间通信和同步的重要机制。通过 channel,goroutine 可以安全地交换数据,避免了共享内存带来的竞态条件和内存一致性问题。 1. Channel 的基本概念 Channel 是一个先进先出(FI…...
HarmonyOS Next~鸿蒙元服务开发指南:核心功能与实践
HarmonyOS Next~鸿蒙元服务开发指南:核心功能与实践 一、元服务核心概念 原子化服务定义 元服务(原子服务)是鸿蒙系统的核心架构单元,具备独立业务能力的轻量化服务模块,支持免安装、跨设备调用和智能分发…...
stm32面试
数据结构相关问题 stm32面试 数据结构相关问题 目录基础数据结构树与图排序与查找算法 Linux相关问题Linux系统基础Linux命令与脚本Linux网络与服务 操作系统相关问题操作系统基础概念操作系统调度算法操作系统同步与通信 STM32相关问题STM32硬件基础STM32编程与开发STM32应用与…...
构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)
本系列文章目录 简介数据准备句子转换器(本文)向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模型服务高级检索增强生成 RAG 在之前的博客中,我们学习了为RAG(检索增强生成,Retrieval Augmented Generati…...
新能源汽车空调系统(R134A)性能评估(一)
国内外主流空调系统厂家:贝尔、德尔福、空调国际、法雷奥、电装、松芝、杰信、新电、豫新等 泛亚汽车的空调电子部是比较优秀的整车空调研发团队。 空调系统综合试验台架是一套由试验室、风量测定装置、空气调和器、空气温度测定装置、湿度测定装置、加热器试验辅助…...
STRUCTBERT:将语言结构融入预训练以提升深度语言理解
【摘要】最近,预训练语言模型BERT(及其经过稳健优化的版本RoBERTa)在自然语言理解(NLU)领域引起了广泛关注,并在情感分类、自然语言推理、语义文本相似度和问答等各种NLU任务中达到了最先进的准确率。受到E…...
MCP协议的Streamable HTTP:革新数据传输的未来
引言 在数字化时代,数据传输的效率和稳定性是推动技术进步的关键。MCP(Model Context Protocol)作为AI生态系统中的重要一环,通过引入Streamable HTTP传输机制,为数据交互带来了革命性的变化。本文将深入解读MCP协议的…...
基于 RK3588 的 YOLO 多线程推理多级硬件加速引擎框架设计(代码框架和实现细节)
一、前言 接续上一篇文章,这个部分主要分析代码框架的实现细节和设计理念。 基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计(项目总览和加速效果)-CSDN博客https://blog.csdn.net/plmm__/article/details/146542002?spm1001.2014.300…...
stm32 can 遥控帧的问题
STM32单片机使用CAN协议进行通信 引用这个博客的一段话 CAN的遥控帧(Remote Frame)的主要作用是请求其他节点发送具 有特定ID的数据帧。具体来说,当一个节点需要从另一个节点获取数 据时,它可以发送一个遥控帧,而不是…...
机器人基础知识-1
1.六轴机器人中的六轴是什么? 第一轴(J1):底座旋转 控制机器人整体绕垂直轴旋转(左右摆动),决定工作范围的水平方向。 第二轴(J2):下臂前后摆动 驱动机器人的…...
JAVA- 锁机制介绍 进程锁
进程锁 基于文件的锁基于Socket的锁数据库锁分布式锁基于Redis的分布式锁基于ZooKeeper的分布式锁 实际工作中都是集群部署,通过负载均衡多台服务器工作,所以存在多个进程并发执行情况,而在每台服务器中又存在多个线程并发的情况,…...
如何在WordPress中强制用户使用强密码?
在如今网络安全备受关注的环境下,弱密码问题不容忽视。很多用户习惯在多个网站使用相同且简单的密码,这样一来,若不强制他们在 WordPress 网站上使用强密码,网站的安全性就会受到威胁。尤其对于在线商店、会员网站、多作者博客等站…...
鸿蒙NEXT开发Base64工具类(ArkTs)
import util from ohos.util;/*** Base64 工具类* author: 鸿蒙布道师* since: 2025/03/31*/ export class Base64Util {/*** 创建 Base64Helper 实例* returns Base64Helper 实例*/private static createBase64Helper(): util.Base64Helper {return new util.Base64Helper();}…...
基于HUTOOL实现RSA工具类
一、前言:用 Hutool 简化 RSA 加密开发,提升代码安全与效率 在当今数据安全至关重要的时代,RSA 非对称加密作为保护敏感信息的核心技术,广泛应用于通信加密、数字签名、密钥交换等场景。然而,手动实现 RSA 算法涉及复…...
flink 分组窗口聚合 与 窗口表值函数聚合 的区别
警告:分组窗口聚合已经过时。推荐使用更加强大和有效的窗口表值函数聚合。 参考官方文档 在 Apache Flink 中,分组窗口聚合(Group Window Aggregation) 和 窗口表值函数聚合(Windowing TVF Aggregation)…...
prompt_status:5: command not found: wc解决办法
问题出现背景 想配置uniapp的命令行,在.zprofile配置路径的时候PATH 前面少打了一个$,执行了 source,导致各种命令都失效。 解决办法 用fider 打开用户文件夹,Command Shift .显示隐藏文件,用文本编辑器修改一下&…...
《STL 六大组件之容器篇:简单了解 list》
目录 一、list 简介二、list 的常用接口1. 构造函数(constructor )2. 迭代器(iterator)3. 容量、修改和访问(capacity 、modify and access) 一、list 简介 简单来说,list 就是数据结构初阶中学…...
向量数据库学习笔记(2) —— pgvector 用法 与 最佳实践
关于向量的基础概念,可以参考:向量数据库学习笔记(1) —— 基础概念-CSDN博客 一、 pgvector简介 pgvector 是一款开源的、基于pg的、向量相似性搜索 插件,将您的向量数据与其他数据统一存储在pg中。支持功能包括&…...
TCP的连接建立
面向连接 定义:在发送数据之前,需要建立一条点到点的连接 (参数协商的过程。因为tcp要保证可靠,所以tcp通信是发生在双方之间、两端之间的,两端在正式发送数据之前需要约定一些初始参数,这个过程就是面向连…...
如何让AI帮你做用户运营:用户消费偏好分层和洞察
随着deepseek的爆火,我一直在想能不能用AI来帮我做用户运营,目前deepseek只能提供框架层面的运营建议,还无法实现将订单数据给到它,能够自动化分析并将用户分层,并给出可视化的运营洞察报表。但是,我要告诉…...
二分答案-P8647 [蓝桥杯 2017 省 AB] 分巧克力
题解:P8647 [蓝桥杯 2017 省 AB] 分巧克力 题目传送门 题目链接 一、题目描述 小明有N块不同尺寸的巧克力,需要切出K块相同大小的正方形巧克力分给小朋友们。要求找到能满足条件的最大的正方形边长。 二、题目分析 我们需要从N块巧克力中切出K个相…...
搜广推校招面经六十一
美团推荐算法 一、ANN算法了解么?说几种你了解的ANN算法 ANN 近似最近邻搜索(Approximate Nearest Neighbor Search)算法 1.1. KD-Tree(K-Dimensional Tree,K 维树) 类型: 空间划分数据结构适用场景: 低…...
某地老旧房屋自动化监测项目
1. 项目简介 自从上个世纪90年代以来,我国经济发展迅猛,在此期间大量建筑平地而起,并且多为砖混结构的住房,使用寿命通常约为30-50年,钢筋混凝土结构,钢结构等高层建筑,这些建筑在一般情况下的…...
【第一节】Python爬虫基础-HTTP基本原理
目录 前言 一、URI和URL是什么 二、什么是超文本 三、HTTP和HTTPS的区别 四、HTTP请求过程 五、请求 六、响应 前言 在着手开发爬虫程序之前,我们需要先掌握一些基础概念。本节将详细讲解HTTP的基本工作原理,重点分析从浏览器输入网址到获取网页内…...