mysql隔离级别RR下的行锁、临键锁、间隙锁详解及运用

news2024/11/26 20:43:56

一:mysql 锁的基本概念

锁:悲观锁、乐观锁

悲观锁:写锁 for update、读锁for share 

写锁:只允许当前事务读写,其它事务全部等待,包括读取数据,锁的数据范围需要具体分析

读锁:允许所有事务进行读取,但不允许写,首先获得数据读锁的事务可以在事务中进行写操作,一旦进行了写操作,其它事务就会全部进行等待,包括读也不允许了,所以一般需要读又要写的使用“写锁”

二:加锁数据范围规则

        原则1:访问到的数据都要加"临键锁"
        原则2:查询时会在索引上访问到第一个不满足需要查询数据的值为止,不满足条件的第一个值上也会加"临键锁"
        原则3:索引查询(除唯一索引等值{查到了值}查询和非唯一索引范围查询以外)都加 "临键锁退化为间隙锁"
        原则4:唯一索引等值查询{查到了值}退化为"行锁"

        bug: 唯一索引范围查询时依旧会往下一个值查询,且不会退化为间隙锁,依旧是左开右闭;不过有的mysql版本是左开又开(间隙锁);范围查询有等于的时候不会向下一个滑寻找不等于自己的值;如果存在Bug的版本就和非唯一索引的结果一样,都是临建锁+下滑;如果修复了bug那就是间隙锁    {仅只针对唯一索引范围查询存在的Bug}

结论:

        理论上: 

        当前测试的mysql版本:

           结果:

        1.唯一索引和非唯一索引(除了唯一索引等值查询)都会向右遍历且最后一个值不满足等值条件的时候才停止。

        2.唯一索引和非唯一索引“范围查询”都不会退化为间隙锁,非唯一索引本身就不会退化,唯一索引是因为mysql版本的bug原因不退化 ==》     范围查询存在BUG就会下滑且都加临建锁

        3.非唯一索引和唯一索引等值查询(未差查到值) 都是会下滑且都会优化为间隙锁

可以通过  select * from performance_schema.data_locks; 检验

测试数据

一:索引

        1、非唯一索引

        2、唯一索引

二:非唯一索引

select * from  cs where age=20  for update
-- 非唯一索引等值查询{查到了值}
-- 首先给20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找首个不等于20的值为止,也就是30,给30上临键锁,范围(20,30],又根据原则3退化为间隙锁范围(20,30)
-- 最终范围(10,30)

select * from  cs where age=21  for update
-- 非唯一索引等值查询{没查到值}
-- 首先21的值没查到,没查到的值不用上临键锁
-- 根据原则2会去寻找首个不等于21的值为止,也就是30,给30上临键锁,范围(20,30],又根据原则3退化为间隙锁范围(20,30)
-- 最终范围(20,30)

select * from  cs where age=2000  for update
-- 非唯一索引等值查询{没查到值}
-- 首先2000的值没查到,并且是超出了表的已有数据范围之外的数据,可以自己默认上个临键锁(100,2000]
-- 根据原则2会去寻找首个不等于2000的值为止,但此时没有符合条件的,此时就会一直找+∞,所以会锁定(2000,+∞]的数据
-- 最终范围(100,+∞]

select * from  cs where age>20 for update
-- 非唯一索引范围查询
-- 首先>20是属于20-30之间的一个不确定值(不含20),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找首个不等于这个大于20的值为止,也就是30,给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 又因为是>20没有后部分的区间,所以会加锁(30,+∞]
-- 最终范围(20,+∞]


select * from  cs where age>=20 for update
-- 非唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找首个不等于这个等于20的值为止,也就是30,给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 又因为是>=20没有后部分的区间,所以会加锁(30,+∞]
-- 最终范围(10,+∞]

select * from  cs where age>20 and age<22 for update
-- 非唯一索引范围查询
-- 首先>20是第一范围区间是在20-30之间的一个不确定值(不含20),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个大于20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 再处理 <22,也是第一范围区间是在20-30之间的一个不确定值(不含230)
-- 根据原则2会去寻找下一个首个不等于这个小于22的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 最终范围(20,30]


select * from  cs where age>20 and age<30 for update
-- 非唯一索引范围查询
-- 首先>20是第一范围区间是在20-30之间的一个不确定值(不含20),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个大于20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 再处理 <30,也是第一范围区间是在20-30之间的一个不确定值(不含30)
-- 根据原则2会去寻找下一个首个不等于这个小于30的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 最终范围(20,30]


select * from  cs where age>20 and age<=30 for update
-- 非唯一索引范围查询
-- 首先>20是第一范围区间是在20-30之间的一个不确定值(不含20),也就是范围内不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个大于20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 再处理 <=30,30上临键锁,锁范围(20,30]
-- 根据原则2会去寻找下一个首个不等于这个30的值为止,也就是35,给35上临键锁,范围(30,35],由于是范围查询不会退化
-- 最终范围(20,35]


select * from  cs where age>=20 and age<30 for update
-- 非唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找下一个首个不等于这个20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 再处理 <30,也是第一范围区间是在20-30之间的一个不确定值(不含30),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个小于30的值为止,也就是30,给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 最终范围(10,30]

select * from  cs where age>=20 and age<=30 for update
-- 非唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找下一个首个不等于这个20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 再处理 <=30,30上临键锁,锁范围(20,30]
-- 根据原则2会去寻找下一个首个不等于这个30的值为止,也就是35,给35上临键锁,范围(30,35],由于是范围查询不会退化
-- 最终范围(10,35]


select * from  cs where age>=20 and age<=100 for update
-- 非唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找下一个首个不等于这个20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化
-- 再处理 <=100,100上临键锁,锁范围(42,100]
-- 根据原则2会去寻找下一个首个不等于这个100的值为止,但100后面没有值了,此时就锁(100,+∞]
-- 最终范围(10,+∞]


select * from  cs where age>=1 and age<=1000 for update
-- 非唯一索引范围查询
-- 首先>=1,1上临键锁,锁范围(-∞,1]
-- 根据原则2会去寻找下一个首个不等于这个1的值为止,也就是10,优先暂时给10上临键锁,范围(1,10],由于是范围查询不会退化
-- 再处理 <=1000,1000上临键锁,锁范围(42,100]
-- 根据原则2会去寻找下一个首个不等于这个1000的值为止,但此时没有符合条件的,此时就会一直找+∞,所以会锁定(1000,+∞]的数据
-- 由于是范围查询,根据原则1被查询的到的数据都会加锁,所以1-100的数据都会加临键锁
-- 最终范围[-∞,+∞]


select * from  cs where age>=1 and age<100 for update
-- 非唯一索引范围查询
-- 首先>=1,1上临键锁,锁范围(-∞,1]
-- 根据原则2会去寻找下一个首个不等于这个1的值为止,也就是10,优先暂时给10上临键锁,范围(1,10],由于是范围查询不会退化
-- 再处理 <100,也是第一范围区间是在42-100之间的一个不确定值(不含100),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个小于100的值为止,也就是100,给100上临键锁,范围(42,100],由于是范围查询不会退化
-- 由于是范围查询,根据原则1被查询的到的数据都会加锁,所以1-100的数据都会加临键锁
-- 最终范围[-∞,100]

二:唯一索引  【范围中带等于的是因为某些版本的bug会下滑,不是所有版本都会下滑,有些版本会退化为行锁,临键锁也会退化为间隙锁】

select * from  cs where wy=20  for update
-- 唯一索引等值查询{查到了值}
-- 首先给20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找首个不等于20的值为止,也就是30,给30上临键锁,范围(20,30],又根据原则3退化为间隙锁范围(20,30)

-- 根据原则4所有的锁都将退化为行锁
-- 最终范围 20

select * from  cs where wy=21  for update
-- 唯一索引等值查询{没查到值}
-- 首先21的值没查到,没查到的值不用上临键锁
-- 根据原则2会去寻找首个不等于21的值为止,也就是30,给30上临键锁,范围(20,30],又根据原则3退化为间隙锁范围(20,30)
-- 最终范围(20,30)

select * from  cs where wy=2000  for update
-- 唯一索引等值查询{没查到值}
-- 首先2000的值没查到,并且是超出了表的已有数据范围之外的数据,可以自己默认上个临键锁(100,2000]
-- 根据原则2会去寻找首个不等于2000的值为止,但此时没有符合条件的,此时就会一直找+∞,所以会锁定(2000,+∞]的数据

--但因为是唯一索引,如果超出数据范围外就不会再上锁
-- 最终范围    无锁

select * from  cs where wy>20 for update
-- 唯一索引范围查询
-- 首先>20是属于20-30之间的一个不确定值(不含20),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找首个不等于这个大于20的值为止,也就是30,给30上临键锁,范围(20,30],

-- 根据原则3会退化为间隙锁(20,30)  这里会不会退化有带考证,可能会因为Bug不退化
-- 又因为是>20没有后部分的区间,所以会加锁(30,+∞]
-- 最终范围(20,+∞]


select * from  cs where wy>=20 for update
-- 唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20],根据原则3会退化为间隙锁(10,20) 这里会不会退化有带考证,可能会因为Bug不退化,根据原则4还会上行锁 20    所以最终(10,20]
-- 根据原则2会去寻找首个不等于这个等于20的值为止,也就是30,给30上临键锁,范围(20,30] 

-- 根据原则3会退化为间隙锁(20,30)  这里会不会退化有带考证,可能会因为Bug不退化
-- 又因为是>=20没有后部分的区间,所以会加锁(30,+∞]
-- 最终范围(10,+∞]     当然还有对应的主键id锁

select * from  cs where wy>20 and wy<22 for update        
-- 唯一索引范围查询
-- 首先>20是第一范围区间是在20-30之间的一个不确定值(不含20),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个大于20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)   但因为bug,还是(20,30]
-- 再处理 <22,也是第一范围区间是在20-30之间的一个不确定值(不含30)
-- 根据原则2会去寻找下一个首个不等于这个小于22的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)   但因为bug,还是(20,30]
-- 最终范围(20,30]        因为bug根据原则2会锁住下一个值的临建锁且不会退化


select * from  cs where wy>20 and wy<30 for update 
-- 唯一索引范围查询
-- 首先>20是第一范围区间是在20-30之间的一个不确定值(不含20),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个大于20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)   但因为bug,还是(20,30]
-- 再处理 <30,也是第一范围区间是在20-30之间的一个不确定值(不含30)
-- 根据原则2会去寻找下一个首个不等于这个小于30的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)  但因为bug,还是(20,30]
-- 最终范围(20,30]


select * from  cs where wy>20 and wy<=30 for update   
-- 唯一索引范围查询
-- 首先>20是第一范围区间是在20-30之间的一个不确定值(不含20),也就是范围内不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个大于20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)   但因为bug,还是(20,30]
-- 再处理 <=30,30上临键锁,锁范围(20,30]
-- 根据原则2会去寻找下一个首个不等于这个30的值为止,也就是35,给35上临键锁,范围(30,35],根据原则3会退化为间隙锁(30,35)   但因为bug,还是(20,35]
-- 最终范围(20,35]


select * from  cs where wy>=20 and wy<30 for update     
-- 唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20]  
-- 根据原则2会去寻找下一个首个不等于这个20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)

--根据原则4退化为行锁 最终锁定行锁   20     但因为bug,还是(20,30]
-- 再处理 <30,也是第一范围区间是在20-30之间的一个不确定值(不含30),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个小于30的值为止,也就是30,给30上临键锁,范围(20,30],根据原则3会退化为间隙锁(20,30)   但因为bug,还是(20,30]
-- 最终范围(10,30]

select * from  cs where wy>=20 and wy<=30 for update     
-- 唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20] 
-- 根据原则2会去寻找下一个首个不等于这个20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],由于是范围查询不会退化   但因为bug,还是(20,30]
-- 再处理 <=30,30上临键锁,锁范围(20,30]
-- 根据原则2会去寻找下一个首个不等于这个30的值为止,也就是35,给35上临键锁,范围(30,35],根据原则3会退化为间隙锁(30,35)    但因为bug,还是(30,35]
-- 最终范围(10,35]


select * from  cs where wy>=20 and wy<=100 for update  
-- 唯一索引范围查询
-- 首先>=20,20上临键锁,锁范围(10,20]
-- 根据原则2会去寻找下一个首个不等于这个20的值为止,也就是30,优先暂时给30上临键锁,范围(20,30],  但因为bug,还是(20,30]
-- 再处理 <=100,100上临键锁,锁范围(42,100]
-- 根据原则2会去寻找下一个首个不等于这个100的值为止,但100后面没有值了,此时就锁(100,+∞]
-- 最终范围(10,+∞]


select * from  cs where wy>=1 and wy<=1000 for update  
-- 唯一索引范围查询
-- 首先>=1,1上临键锁,锁范围(-∞,1]
-- 根据原则2会去寻找下一个首个不等于这个1的值为止,也就是10,优先暂时给10上临键锁,范围(1,10],  但因为bug,还是(1,10]
-- 再处理 <=1000,1000上临键锁,锁范围(42,100]
-- 根据原则2会去寻找下一个首个不等于这个1000的值为止,但此时没有符合条件的,此时就会一直找+∞,所以会锁定(1000,+∞]的数据
-- 由于是范围查询,根据原则1被查询的到的数据都会加锁,所以1-100的数据都会加临键锁
-- 最终范围[-∞,+∞]


select * from  cs where wy>=1 and wy<100 for update   
-- 唯一索引范围查询
-- 首先>=1,1上临键锁,锁范围(-∞,1]
-- 根据原则2会去寻找下一个首个不等于这个1的值为止,也就是10,优先暂时给10上临键锁,范围(1,10],  但因为bug,还是(1,10]
-- 再处理 <100,也是第一范围区间是在42-100之间的一个不确定值(不含100),也就是不存在的值,没查到的值不用上临键锁
-- 根据原则2会去寻找下一个首个不等于这个小于100的值为止,也就是100,给100上临键锁,范围(42,100],  但因为bug,还是(1,10]
-- 由于是范围查询,根据原则1被查询的到的数据都会加锁,所以1-100的数据都会加临键锁
-- 最终范围[-∞,100]

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/4177.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【前端】Vue+Element UI案例:通用后台管理系统-Echarts图表:折线图、柱状图、饼状图

文章目录目标代码数据改写为动态Echarts引入与html结构折线图&#xff1a;orderData柱状图&#xff1a;userData饼状图&#xff1a;videoData总效果总代码:Home.vue上一篇&#xff1a;【前端】VueElement UI案例&#xff1a;通用后台管理系统-Echarts图表准备&#xff1a;axios…

公司缺人自己搞了vue又搞koa,熬夜把架子搭起来

如果有一天&#xff0c;人手紧缺&#xff0c;自己搞了前端还要搞服务端&#xff0c;今天我们把这个项目架子搭起来&#xff0c;让前端同学也可以轻松全栈开火。 技多不压身&#xff0c;活儿多了可压身啊 目录 一、上午写VUE 1、 新建一个我们的伟大项目文件夹 2、用vscode打…

程序中断方式

中断的基本概念 程序中断是指在计算机执行现行程序的过程中&#xff0c;出现某些急需处理的异常情况或特殊请求&#xff0c;CPU暂时中止现行程序&#xff0c;而转去对这些异常情况或特殊请求进行处理&#xff0c;在处理完毕后CPU又自动返回到现行程序的断点处&#xff0c;继续…

c语言之“数组”初级篇

前言 牛牛又和大家见面了&#xff0c;本篇牛牛要讲的内容是c语言中有关数组的内容。 欢迎大家一起学习&#xff0c;共同进步。 目录前言数组一、一维数组1.1 一维数组的创建1.2 一维数组的初始化1.3 一维数组的应用1.4 一维数组的存储二、二维数组2.1 二维数组创建2.2 二维数…

MySQL的select语句

SQL概述 SQL背景知识 1946 年&#xff0c;世界上第一台电脑诞生&#xff0c;如今&#xff0c;借由这台电脑发展起来的互联网已经自成江湖。在这几十年里&#xff0c;无数的技术、产业在这片江湖里沉浮&#xff0c;有的方兴未艾&#xff0c;有的已经几幕兴衰。但在这片浩荡的波…

基于android的车辆违章停放执法移动APP(ssm+uinapp+Mysql)-计算机毕业设计

车辆违章停放执法移动APP的功能已基本实现&#xff0c;主要实现首页&#xff0c;个人中心&#xff0c;市民管理&#xff0c;警察管理&#xff0c;罚单信息管理&#xff0c;缴费通知管理&#xff0c;系统管理等功能的操作系统。 论文主要从系统的分析与设计、数据库设计和系统的…

【机器学习】回归的原理学习与葡萄酒数据集的最小二乘法线性回归实例

文章目录一&#xff0c;回归1.1回归分析的基本概念1.2线性回归1.3最小二乘法1.4一元(简单)线性回归模型1.4.1随机误差项(线性回归模型)的假定条件1.4.2参数的普通最小二乘估计(0LS)1.5葡萄酒数据集的最小二乘法线性回归实例一&#xff0c;回归 1.1回归分析的基本概念 回归分析…

前端一面经典vue面试题总结

一般在哪个生命周期请求异步数据 我们可以在钩子函数 created、beforeMount、mounted 中进行调用&#xff0c;因为在这三个钩子函数中&#xff0c;data 已经创建&#xff0c;可以将服务端端返回的数据进行赋值。 ​ 推荐在 created 钩子函数中调用异步请求&#xff0c;因为在…

受激拉曼散射计量【Stimulated-Raman-Scattering Metrology】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

单元测试的时候读不到resources.test中配置

背景 接手了几个老工程&#xff0c;跑单元测试的时候&#xff0c;发现数据库的配置总是走了dev环境&#xff0c; 原因是工程中分环境进行了db的配置 历史经验 指定本地环境 ActiveProfiles(“test”) 没有生效 解决 在pom文件中 新加如下配置 <build><!--单元测…

Java—类加载机制

类加载机制 我们多次提到了类加载器ClassLoader&#xff0c;本章就来详细讨论Java中的类加载机制与ClassLoader。 类加载器ClassLoader就是加载其他类的类&#xff0c;它负责将字节码文件加载到内存&#xff0c;创建Class对象。与之前介绍的反射、注解和动态代理一样&#xf…

奶制品数据可视化,去年全国奶制品产量高达3778万吨,同比增长7.1%

奶制品是生活中很常见的一种补充人体所需维生素和矿物质元素的重要食品&#xff0c;在生活中奶制品也是很常见的&#xff0c;食用最多的是牛奶。牛奶中含有非常丰富的钙质&#xff0c;睡前适当给孩子食用&#xff0c;可以补充孩子所需的钙质从而达到长高的效果。 很多小伙伴经常…

C++ 类和对象以及内存管理 练习错题总结

作者&#xff1a;小萌新 专栏&#xff1a;C初阶作业 简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客介绍&#xff1a;对于我们上一周学的知识做一个总结 查缺补漏 C 类和对象以及内存管理练习类和对象 (上)拷贝构造函数类和对象&#xff08;中&#xff09;重载函数运…

MySQL 主从复制与读写分离

一 概念 什么是读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 为什么要读写分离 因为数据库的“写…

刷题笔记之九(查找输入整数二进制中1的个数+完全数计算+杨辉三角的变形+计算某字符出现次数)

目录 1. 聚合查询是进行行与行的运算合并&#xff0c;是不能和别的列放在一块查询 2. PHP数据库查询语句 3. 有group by时先执行where&#xff0c;后执行having 4. join常用两张表内连接和外连接&#xff0c;用一张表可以自连接 5. 删除数据用delete&#xff0c;删除表时…

python基于PHP+MySQL汽车展览会系统

随着我国交通事业的发展,汽车已经逐渐的成为了人们主要的代步工具之一,但是如何从众多品牌和型号的车海中选择最适合自己的那款车是很多购车人士一直以来关系的问题。为了方便车主更好的选择自己的车辆很多汽车经销商会不定期的举办一些车展来展销自己的车辆,同时也给购车用户提…

2022 “行业寒冬”,给在座的测试人一些涨薪建议

10 月 24 日&#xff0c;Python 官方发布了最新的 3.11 版本&#xff0c;新的版本速度提升2倍&#xff0c;以弥补与其他编程语言在速度上的缺陷。可以预见Python语言在未来的应用范围会越来越广。 会Python语言能细分出许多从业方向&#xff0c;其中随着互联网的发展&#xff…

Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值?

Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值? Python_Numpy库的ndarray对象的常用属性有如下这些&#xff1a; ndim—矩阵的维度&#xff1b; shape—矩阵的形状&#xff1b; size—矩阵的元素个数&#xff1b; dtype—矩阵元素的数据类型&#xff1b; T-矩阵…

【Transformers】第 1 章 :Hello Transformers

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

Stream流总结

前言 在Java中&#xff0c;涉及到对数组、Collecction等集合类中的元素进行操作的时候&#xff0c;通常会通过循环的方式进行逐个处理&#xff0c;或者使用Stream流的方式进行处理 例子 从给定句子中返回单词长度大于5的单词列表&#xff0c;按长度倒序输出&#xff0c;最多返…