初识mysql数据库之事务的隔离性
目录
一、理解隔离性
二、隔离级别
1. 不同的隔离级别的简单概述
2. 查看隔离级别
2.1 查看全局隔离级别
2.2 查看会话隔离级别
3. 设置隔离界别
4. 读未提交(Read Uncommitted)
4.1 读未提交测试
5. 读提交(Read Committed)
5.1 读为提交测试
5.2 不可重复读带来的问题
6. 可重复读(Repeatable Read)
6.1 可重复读测试
6.2 可重复读在insert中的问题(已解决)
7. 串行化(Serializable)
7.1 串行化测试
8. 总结
三、事务的一致性
一、理解隔离性
在理解隔离性之前,大家要先知道,mysql服务作为一个网络服务,是可能会同时被多个客户端进程访问的,访问的方式就是以事务进行的。
同时我们知道,一个事务是由一个或多个sql语句构成。这也就意味着,任何一个事务都会有执行前,执行中和执行后三个阶段。但同时,事务是具有原子性的,这个原子性就保证了用户只会看到一个事务执行前或执行后的内容。当执行中出现了问题,就直接回滚。
在上文中说了,一个事务可能会由多个sql语句构成,且mysql可能同时被多个客户端访问,这也就导致在多客户端访问的情况下,可能会出现事务之间互相干扰的情况。例如两个不同的事务要对同一张表做不同的修改。这也就是说,不同的事务在执行的过程中是可能会被其他事务干扰的。
这就好比你和你的同学在一个教室上课,如果有一天你上数学课时忘记带书了,你就会想要和你的同桌看同一本数学书。但如果你们看同一本数学书,就可能出现互相干扰。例如你想看第10页的内容,但他刚好想在第10页做笔记。此时你们之间就产生了干扰。到底是让你先看呢,还是让同桌先做笔记呢?这是一个问题。
数据库中也是一样的。为了保证不同事务在执行的过程中尽量不受干扰,就有了隔离性这一重要特征。
但同时,不同事务可能允许的受干扰程度不同,例如你的同桌可能对自己的字很有信心,允许你在他写笔记的时候看这些笔记的内容。但也可能你的同桌比较害羞,不喜欢别人看着自己做笔记,于是说让你在他做笔记的时候不要看,等他做完了再给你看。基于这种情况,就有了隔离性的一种重要特征:隔离级别。
二、隔离级别
1. 不同的隔离级别的简单概述
首先大家要知道,在事务的场景中,隔离是必要的,每一个运行中的事务,都需要进行互相隔离。根据隔离造成的影响程度的不同,就分为了多个隔离级别。
在mysql中,一共有四种隔离界别,分别为“读未提交(Read Uncommitted)”,简称“RU”;“读提交(Read Committed)”,简称"RC";“可重复读(Repeatable Read)”,简称"RR";“串行化(Serializable)”。
在这里,为了让大家对这几个隔离级别有一个基础概念,先简单介绍一下。
读未提交,就是多个事务在同时运行时,一个事务对表进行修改后,其他事务可以立即看到修改后的内容,无论进行修改的事务是否退出。
读提交,就是多个事务在同时运行时,一个事务对表进行修改后,其他事务无法立即看到修改后的内容。只有当执行修改操作的事务退出后,其他事务才能看到。
可重复读,就是多个事务在同时运行时,一个事务对表进行修改后,无论这个事务是否退出,其他事务都无法看到修改后的内容。只有当执行修改操作的事务和同时运行的其他事务退出后,再新起一个事务,才能看到。
串行化,就是让多个事务串行执行,当一个事务执行完后,才能让下一个事务执行。
其中,可重复读是mysql默认的隔离级别。
隔离级别的实现,基本都是通过锁完成的。不同的隔离级别,锁的使用时不同的。常见的有表锁、行锁、读锁、间隙锁(GAP)、Next-Key锁等。不过,这些内容我们暂时不做过多了解。
2. 查看隔离级别
要查看隔离级别,其实有两种大的查看方向,分别是查看全局隔离级别和查看会话(当前)隔离级别。
当登陆mysql后,mysql会读取全局隔离级别,然后用它来初始化本次登陆的会话所用的会话隔离级别。因此,全局隔离级别就可以看成是一种配置,登录mysql时就会自动加载全局隔离级别。
其中,全局隔离级别影响的是后续所有登录到该mysql中的会话的隔离级别。而会话隔离级别则只会影响当前会话的隔离级别。
2.1 查看全局隔离级别
要查看全局隔离级别,可以用“select @@global.tx_isolation;”命令查看:
2.2 查看会话隔离级别
要查看会话隔离级别,有两种方法。
第一种是“select @@session.tx_isolation;”命令:
第二种是“select @@tx_isolation;”命令:
3. 设置隔离界别
要设置隔离级别,可以分别设置全局隔离级别和会话隔离级别。语法如下:
其中,session表示会话隔离级别,global表示全局隔离级别。level后面的内容表示要设置的隔离级别。
注意,重新设置了会话隔离级别后,重新设置的隔离级别只会影响当前会话,不会影响其他会话。
当重新设置了全局隔离级别后,这个隔离级别不会影响当前会话的隔离级别。必须要重新登录mysql,才能使用新设置的全局隔离级别。
例如,在这里重新设置全局隔离级别并查看全局隔离界别:
可以看到,全局隔离级别已经修改为了可重复读。但如果再查看会话隔离级别:
可以看到,此时依然是读未提交。没有被修改。
退出并重新登录mysql后再查看会话隔离级别:
此时会话隔离级别就修改了。
在实际中,事务的隔离级别默认为可重复读。如果要修改隔离级别,最好保证不同事务的隔离级别是一致的。这就意味着,如果要修改隔离级别,最好修改全局隔离级别,不要修改会话隔离级别。同时,虽然在后续的关于隔离级别的实验中会经常修改隔离级别,但在实际中非常不建议随意修改隔离级别。
4. 读未提交(Read Uncommitted)
在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别)。该隔离级别相当于没有任何隔离性,同时存在很多并发问题。如脏读、幻读、不可重复读等。
4.1 读未提交测试
在做测试之前,先将全局隔离级别设置为读未提交,并重新登录mysql。至于如何设置,在上文中已经讲过,不再赘述:
查看准备好的user表中的数据:
这张表在以前的文章中就有过使用,不再过多介绍。准备好这张表后,先在一个窗口中启动事务a,然后插入如下数据:
然后在另一个窗口中启动事务b,查看user表的数据:
可以看到,虽然此时事务a还没有结束,但是在事务b中却可以看到事务a对user表做的修改。这就叫做“读未提交”,即所有事务都可以在某个事务没有退出时看到它对表做的修改。
这种一个事务进行中,可以读到另一个执行中的事务的更新(或其他操作)的数据的现象,叫做“脏读”。是一种并发问题。因为事务需要保持原子性,用户只能看到事务执行前和事务执行后的数据,但是脏读却可以让用户看到事务执行中的数据,是一种非常不合理的现象。
因此虽然这个隔离级别中几乎没有加锁,效率很高,但是会出现很多问题,非常不建议采用。
5. 读提交(Read Committed)
该隔离级别是大多数数据库的默认的隔离级别(不是mysql的默认隔离级别)。它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做出的改变。这种隔离级别会引起不可重复读,即一个事务执行时,如果多次select,可能得到不同的结果。
5.1 读为提交测试
首先,将mysql的全局隔离级别设置为读提交,然后重新登录:
准备如下一张user表:
开启事务a,并向里面插入如下数据:
然后再在另一个窗口中开启事务b,并查看user表的内容:
可以看到,在事务a未退出之前,我们在事务b中是看不到事务a对user表的修改的。
然后我们提交事务a,并再次在事务b中查看user表的数据:
此时在事务b中就可以看到事务a的修改了。这就是“读提交”隔离级别下的效果。即正在执行中的事务只能看到已经执行完毕的事务对数据的修改内容。
大家可以想一想,这种同时处于运行状态的事务,当其中某个事务结束后,其他事务可以看到该事务对数据的修改的现象,一定合理吗?很明显,并不一定合理,当然这不是说一定不合理,这种情况在某些场景下还是需要的。
但它同时也存在不合理的场景。对于上述这种,一个正在运行的事务在查看某份数据时,可能查看到不同结果的现象,就被称为“不可重复读”。是一种并发问题。
5.2 不可重复读带来的问题
上文中讲了,当一个正在运行的事务在查看同一份数据时,却查到不同结果的现象,就叫做“不可重复读”。那不可重复读会带来什么问题呢?举一个例子说明。
假设你现在在一个学校里面,你们学校刚好组织了一场考试。你们的班主任是一个很好的人,他在你们考完试后就承诺说,这次考试,他会按照考试的分数给大家发奖品。[90, 100]的人每人发200块钱;[80, 90]的人每人发150块钱;[70, 80]的人每人发100块钱。[60, 70]的人每人发50块钱;60以下的人每人发30块钱。
当你们的成绩出来后,班主任就将统计分数的任务交给了小王。刚好小王从小就喜欢计算机,学习了编程,于是在他接到这个任务后,它就在数据库中进行统计。在统计的过程中他就想,要统计这些分数,那直接用select语句不就好了么。于是他就将这5个select语句看做一个事务,在数据库中进行统计。
但此时你们班有一个小李的同学,他在成绩出来后发现和自己的预期有点大,他自己算应该是84分,但是实际分数却是78分。于是他仔细检查了一遍试卷,发现是改卷老师改错了,于是他就拿着卷子去找班主任,班主任一看,确实是卷子改错了。于是班主任就告诉小李说,不用担心,我这就把这个问题反馈给学校。
当学校收到这个消息后,学校就去找负责管理学生成绩的人,告诉他某某班的某某同学的成绩改错了,你把他的成绩在数据库里面改一下。管理人员听了后,就马上开始动手了。
但与此同时,小王也在数据库中统计同学的成绩。于是此时就有了两个客户端接入了数据库。小王在统计时,是按照成绩从小到大统计的。当小王统计到[70, 80]的区间时,里面就出现了小李的名字。但就在这个时候,管理人员修改了小李的成绩,将其从78改为了84,然后提交了事务。但是小王他并不知道这个修改,任由事务继续跑。于是当小王统计完[80, 90]的人时,里面也出现了小李的名字。
此时统计结果中就出现了两次小李。当班主任看到这份统计结果后,就对小王很不满意,觉得小王这么点小事都办不好。那小王也感觉很委屈,明明自己执行的sql语句没有任何问题,但为什么会出现两次小李呢?这就是“读提交”隔离级别带来的问题。
由此,这种同时运行的事务,一方可以读取到另一方的提交结果所带来的“不可重复读”问题,也是需要解决的。基于这个问题,便有了下一个“可重复读”隔离级别。
6. 可重复读(Repeatable Read)
可重复读是mysql默认的隔离级别,它确保一个正在运行的事务在执行中多次读取数据时,能够看到同样的数据行。但是可能产生“幻读”问题(已解决)。
6.1 可重复读测试
首先,将mysql的隔离级别设置为可重复读,然后重新登录mysql:
准备如下一个user表:
开始事务a,然后插入如下数据:
插入完成后,在另一个窗口启动事务b,并查看user表内的数据:
可以看到,此时在事务b中无法看到事务a执行的操作。然后将提交事务a,再次在事务b中查看user表内的数据:
可以看到,此时虽然事务a已经提交了,但是事务b依然无法看到事务a对user表的修改。这就是“可重复读”。在正在执行的事务中查看某个数据,无论其他事务对该数据执行了什么操作,当前事务所看到的数据从始至终都是一样的。
此时我们再将事务b结束,然后再查看user表内的数据:
此时就可以看到事务a对user表修改后的结果了。这也就说明在“可重复读”中,处于执行状态的事务是无法看到其他事务对数据的修改的,要看到修改结果,只能结束并新建事务。
6.2 可重复读在insert中的问题(已解决)
虽然从上面的测试中来看,在mysql数据库中的可重复读隔离级别下,事务在执行insert语句时,不会对其他事务所看到的数据造成影响, 符合可重复读的特点。
但是,在一般的数据库的可重复读级别下,是无法屏蔽其他事务insert的数据的。即正在运行的事务b是可以看到事务a用insert语句对数据的修改的。
因为隔离性的实验是对数据加锁完成的,但是当使用insert语句去插入数据时,要加锁的数据因为还没有被插入进表内,所以在数据库看来,这个数据时不存在的,因此,一般加锁无法屏蔽这个问题。这就会导致在可重复读的隔离级别下,会出现虽然大部分内容是可重复读的,但是insert的数据在可重复读下依然会被其他事务读到,导致在多次查找中,会对同一份数据查找到不同的记录,就如果产生了幻觉一般。这种现象,就被称为“幻读”。
很明显,从上面的实验来看,mysql中并不存在幻读问题,这也就是说,mysql的RR级别下是解决了幻读问题的。
7. 串行化(Serializable)
串行化是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。简单来讲,就是让每个事务都串行执行。实现方式就是在每个读的数据航上面加上共享锁,但这种方式可能会导致超时和锁竞争。(这种隔离级别太极端,实际生产基本不使用)
7.1 串行化测试
首先,将mysql的限制级别设置为串行化,并重新登录mysql:
准备如下一张user表:
准备好后,启动事务b,在里面执行一次查询操作:
查询没有问题。然后在另一个窗口启动事务a,在里面执行一次查询操作:
可以看到,也没有问题。但是,我们再在事务a中执行一次删除操作:
可以发现,此时事务a就被阻塞住了。然后我们继续在事务b中查询:
可以看到,事务b依然可以正常运行。但是事务a不行。因为在当前的mysql中,mysql判断有在事务a执行修改数据的操作之前,有事务正在执行查询操作,于是在串行化的隔离级别下,就禁止其他事务对数据进行修改。
此时我们再结束事务b:
当事务b结束后,就可以看到事务a中的delete操作执行成功了:
再在另一个窗口查看一下当前的user表:
可以发现,此时依然无法看到事务a对数据delete后的结果。原因就是事务a还没有结束,要在事务a结束后,才能真正的将这个操作持久化。
通过上面的例子就可以发现,在mysql的串行化下,阻塞并不是sql语句上的阻塞,而是事务上的阻塞。
8. 总结
(1)事务的隔离级别越高,安全性就越高,但同时数据库的并发性能也就越低。因此为了应对不同的场景,往往需要在两者之间找一个平衡点,用户自行选择需要的隔离级别。
(2)不可重复读的重点是修改和删除:同样的条件下,事务读取过的数据和再次读取出现来的值不同。幻读的重点则是在insert情况下,会导致可重复读失效,让事务读取同一份数据时得到不同的结果。
(3)在mysql中,默认的隔离级别是可重复读,一般情况下不要随意修改。
(4)事务是有长短事务之分的。在实际的开发中,sql语句一般都是提前写好等待上层调用的。长短事务就是指不同事务中的sql语句的数量和需要执行的时间的不同导致完成一个事务的时间上有长短之分。而事务间相互影响,指的就是事务在并发执行时,即都没有commit的时候,可能对其他事务造成影响。
三、事务的一致性
通过上面的例子,其实就已经验证完了事务的原子性、隔离性和持久性。那事务的一致性体现在哪里呢?其实,mysql并没有为了维护事务的一致性做任何工作,事务的一致性就是靠事务的原子性、隔离性和持久性来维持的。
事务执行的结果,必须使数据库从一个一致性状态变为另一个一致性状态。当数据库只包含事务成功提交时的结果时,数据库处于一致性状态。但如果系统运行的过程中出现异常,例如系统运行发生中断,导致某个事务尚未完成而被迫中断,此时这个未完成的事务中已完成的sql语句就已经将对数据库做的修改写入了数据库,此时数据库就处于一种不正确(不一致)的状态,因此,需要通过回滚来让数据回到未执行该事务之前,保持数据库的一致性。因此,一致性是通过原子性来保证的。
但是大家要知道,mysql终归只是一个工具,而使用这个工具的是人。这也就导致数据是否符合用于预期是和用户的操作有关的。即一致性和用户的业务逻辑强相关,一般mysql仅提供技术支持,一致性的保证还是要用户业务逻辑做支持。也就是说,一致性,本质上是由用户决定的。
举个例子,假设你要给你的朋友转账,但是转账的逻辑在写的时候出现了问题,程序员在写转账逻辑时,只写了扣除了转账放的钱,但并没有写增加接收方的钱。此时数据库的一致性就遭到了破坏。而此次破坏并不是数据库的问题,而是写上层应用的程序员,即用户的问题。
相关文章:

初识mysql数据库之事务的隔离性
目录 一、理解隔离性 二、隔离级别 1. 不同的隔离级别的简单概述 2. 查看隔离级别 2.1 查看全局隔离级别 2.2 查看会话隔离级别 3. 设置隔离界别 4. 读未提交(Read Uncommitted) 4.1 读未提交测试 5. 读提交(Read Committed&#x…...

今天学学消息队列RocketMQ:消息类型
RocketMQ支持的消息类型有三种:普通消息、顺序消息、延时消息、事务消息。以下内容的代码部分都是基于rocketmq-spring-boot-starter做的。 普通消息 普通消息是一种无序消息,消息分布在各个MessageQueue当中,以保证效率为第一使命。这种消息…...

小程序附件下载并预览功能
一、实现的功能: 1、word、excel、图片等实现下载并预览 2、打开文件后显示文件名称 二、代码: // 判断文件类型whatFileType(url) {let sr url.lastIndexOf("."); // 最后一次出现的位置let fileType url.substr(sr 1); // 截取url的…...

数据库缓存服务——NoSQL之Redis配置与优化
目录 一、缓存概念 1.1 系统缓存 1.2 缓存保存位置及分层结构 1.2.1 DNS缓存 1.2.2 应用层缓存 1.2.3 数据层缓存 1.2.4 硬件缓存 二、关系型数据库与非关系型数据库 2.1 关系型数据库 2.2 非关系型数据库 2.3 关系型数据库和非关系型数据库区别: 2.4 非…...

【雕爷学编程】MicroPython动手做(13)——掌控板之RGB三色灯
知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…...

.Net Core上传组件_.Net Core图片上传组件_Uploader7.0
一、.Net Core上传组件Uploader7.0简介 1.当前版本v7.0,前端框架丰富升级 2.前端jquery框架封装,cover.js, 腾讯云cos-js-sdk-v5.min.js 3.后端,支持Asp.Net 和 Asp.Net Core 矿建 4.数据传输模式支持:WebScoket 、Ajax、Form 模式上传到…...

Exadata磁盘损坏导致磁盘组无法mount恢复(oracle一体机磁盘组异常恢复)---惜分飞
Oracle Exadata客户,在换盘过程中,cell节点又一块磁盘损坏,导致datac1磁盘组(该磁盘组是normal方式冗余)无法mount Thu Jul 20 22:01:21 2023 SQL> alter diskgroup datac1 mount force NOTE: cache registered group DATAC1 number1 incarn0x0728ad12 NOTE: ca…...

左值引用与右值引用的区别?右值引用的意义?
左值引用与右值引用的区别?右值引用的意义? 1 区别1.1 功能差异1.2 左值引用1.3 右值引用1.3.1 实现移动语义1.3.2 实现完美转发 2 引用的作用3 区分左值和右值3.1 左值3.2 右值 1 区别 左值引用是对左值的引用;右值引用是对右值的引用。 &…...

2023年深圳杯数学建模D题基于机理的致伤工具推断
2023年深圳杯数学建模 D题 基于机理的致伤工具推断 原题再现: 致伤工具的推断一直是法医工作中的热点和难点。由于作用位置、作用方式的不同,相同的致伤工具在人体组织上会形成不同的损伤形态,不同的致伤工具也可能形成相同的损伤形态。致伤…...

Vue的router学习
,前端路由的核心是什么呢?改变URL,但是页面不进行整体的刷新。 vue-router是基于路由和组件的 路由用于设定访问路径, 将路径和组件映射起来; 在vue-router的单页面应用中, 页面的路径的改变就是组件的切换; 使用router需要…...

Inpaint Anything: 自动化抹除视频元素
自动化抹除视频元素 不用逐帧抠图,直接SAM Tracking Video Inpainting就能实现自动化抹除奔跑吧idol。 https://github.com/geekyutao/Inpaint-Anything 目录 网站演示参考文献 网站 https://huggingface.co/spaces/InpaintAI/Inpaint-Anything 演示 原理就是&a…...

Flutter 开发者工具 Android Studio 开发Flutter应用
Flutter 开发者工具 在 Android Studio 开发Flutter应用 🔥 Android Studio 版本更新 🔥 Android Studio Check for Update Connection failed 解决方案 如果是运行的是32位的android studio需要在andriod studio的启动目录下找到studio.exe.vmoptio…...

后端byte[]传给前端接收默认变成string字符串
创建时间:2023.7.28 建议:最好直接用字符串,我是没办法要求保密,存取都是字符串,程序里面是byte数组 既然他到前端会转换成字符串那么就是被转码了 那我们反向转码就好了 这是在后端处理,反正前端也是乱…...

UE5 动画蓝图模板(Animation Blueprint Template)
文章目录 前言准备内容创建动画蓝图使用动画蓝图模板示例1示例2总结前言 本文基于虚幻5.2版本介绍制作动画蓝图模板,本教程要求使用虚幻5.0及以上版本。 准备内容 使用第三人称游戏内容包,已添加可忽略。 选择第三人称游戏,添加到项目。 创建动画蓝图 在 Characters 文件…...

Log4j源码解析
Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…...

Docker 容器访问宿主机服务
docker 网络简介 docker 在安装时会默认创建三个网络:bridge(默认网络模式)、 none 、host。 host 直接和宿主机共用网络。bridge 网络隔离,通过虚拟网桥(一般是 docker0)与宿主机通信。none 禁用网络功能…...

Go 发送邮件
要在Go中发送电子邮件,您可以使用第三方库,如 gomail 。以下是一个使用 gomail 发送电子邮件的示例代码: package main import ("fmt""gopkg.in/gomail.v2" ) func main() {// 创建邮件消息m : gomail.NewMessage()m.Se…...

Spring AOP 的概念及其作用
一、什么是 Spring AOP? 在介绍 Spring AOP 之前,首先要了解一下什么是 AOP ? AOP ( Aspect Oriented Programming ):面向切面编程,它是一种思想, 它是对某一类事情的集中处 理 。…...

python基础1——环境安装
文章目录 一、Windows安装二、Linux安装三、pycharm安装3.1 软件安装3.2 个性化设置3.3 基本使用3.3.1 定义变量3.3.2 查看数据类型3.3.3 运算符3.3.4 操作符3.3.5 转义符 一、Windows安装 1、下载软件安装包,官网 2、开始安装。 2.查看是否安装成功。 3.安装…...

uniapp 中 的progress加载进度条 的使用,在 页面显示数据加载的进度条,使用户的使用体验效果更好
学习目标: 学习目标如下: 例如: uniapp 中 的progress加载进度条 的使用,在 页面显示数据加载的进度条,使用户的使用体验效果更好 学习内容: 学习内容如下所示: 相关属性的说明 进度条的显…...

【尚硅谷】第01章:随堂复习与企业真题(Java语言概述)
来源:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备) 基本都是宋老师发的资料里面的内容,只不过补充几个资料里没直接给出答案的问题的答案。 不想安装markdown笔记的app所以干脆在这里发一遍。 第01章:随堂复习…...

MyBatis的SqlSession理解
SqlSession是Mybatis最重要的构建之一,可以认为Mybatis一系列的配置目的是生成类似JDBC生成的Connection对象的statement对象,这样才能与数据库开启“沟通”,通过SqlSession可以实现增删改查(当然现在更加推荐是使用Mapper接口形式…...

axios 某个接口使用自己独有的完整地址
可以在axios请求中使用完整的URL,而不使用baseURL, 只需将url字段设置为完整的URL即可 import axios from axios;export function getInfo() {return axios({url: http://192.168.3.15:8086/test/messages,method: post}); }直接在url字段中提供了完整的…...

WEB:Web_python_template_injection
背景知识 python模板注入 ssit 题目 打开题目,发现页面提示,翻译为python模板注入 先测试是否存在注入 可以发现被执行了 先查看所有的子类 payload {{[].__class__.__base__.__subclasses__()}} 利用site.Printer的os模块执行命令 payload {{.__…...

【Android安全】Embedded Trace Microcell模块
ETM: Embedded Trace Macrocell, hardware unit responsible to generate hardware instruction trace. ETM模块用于在硬件层面实现instruction trace,可用于辅助逆向分析。 使用教程: https://mcuoneclipse.com/2016/11/05/tutorial-getting-etm-inst…...

修改内核驱动之后-如何给内核打补丁
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言思路步骤1.进入下面路径2.修改文件calibrate.c3.使用git工具生产补丁文件4.移动补丁文件到自己的Linux的recipem目录下总结前言 本文来学习如何使用YOCTO修改Linux内核驱动之后,如何通过打补…...

【javaSE】 类和对象详解
目录 面向对象的初步认知 什么是面向对象 面向对象与面向过程 类定义和使用 简单认识类 类的定义格式 注意事项 练习定义类 定义一个狗类 定义一个学生类 注意事项 类的实例化 什么是实例化 注意事项 类和对象的说明 this引用 为什么要有this引用 什么是this引…...

大数据课程D5——hadoop的Sink
文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Sink的HDFS Sink; ⚪ 掌握Sink的Logger Sink; ⚪ 掌握Sink的File Roll Sink; ⚪ 掌握Sink的Null Sink; ⚪ 掌握Si…...

【数据结构】27.移除元素
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...

机器学习分布式框架ray运行xgboost实例
Ray是一个开源的分布式计算框架,专门用于构建高性能的机器学习和深度学习应用程序。它的目标是简化分布式计算的复杂性,使得用户能够轻松地将任务并行化并在多台机器上运行,以加速训练和推理的速度。Ray的主要特点包括支持分布式任务执行、Ac…...