深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解

目录

  • 深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解
    • 事务的基本概念
      • 1、什么是事务?
      • 2、事务的四大特性
        • 2-1:原子性(Atomic)
        • 2-2:一致性(Consistency)
        • 2-3:隔离性(Isolation)
        • 2-4:持久性(Durability)
      • 3、事务的五大类型
        • 3-1:扁平事务
        • 3-2:带有保存点的扁平事务
        • 3-3:链式事务
        • 3-4:嵌套事务
        • 3-5:分布式事务
      • 4、本地事务
        • 4-1:什么是本地事务?
        • 4-2:本地事务的典型特征
        • 4-3:本地事务的执行流程
        • 4-4:本地事务的优缺点
          • 优点
          • 缺点
      • 5、MySQL 事务基础
        • 5-1:并发事务带来的问题
          • 5-1-1:更新丢失(脏写)
          • 5-1-2:脏读
          • 5-1-3:不可重复读
          • 5-1-4:幻读
        • 5-2:不可重复读和幻读的区别
        • 5-3:MySQL 的 4 种事务隔离级别
          • 5-3-1:设置事务隔离级别
            • 配置文件设置
            • 命令设置
            • 注意点
            • session 会话级别的设置演示
            • global 全局级别的设置演示
            • 具体设置命令
          • 5-3-2:查询当前数据库的事务隔离级别
            • 查询 MySQL 的事务隔离级别的命令
          • 5-3-3:MySQL 中 4 种事务隔离级别的区别

深入理解分布式事务① ---->分布式事务基础(四大特性、五大类型、本地事务、MySQL并发事务问题、MySQL事务隔离级别命令设置)详解


事务的基本概念

1、什么是事务?

事务一般指的是逻辑上的一组操作,或者作为单个逻辑单元执行的一系列操作。

同属于一个事务的操作会作为一个整体提交给系统,这些操作要么全部执行成功,要么全部执行失败。


数据库的事务在实现时,会将一次事务中包含的所有操作全部封装成一个不可分割的执行单元,这个单元中的所有操作要么全部执行成功,要么全部执行失败。
只要其中任意一个操作执行失败,整个事务就会执行回滚操作。


2、事务的四大特性


在这里插入图片描述

原子性、一致性、隔离性、持久性


2-1:原子性(Atomic)

事务的原子性指的是构成事务的所有操作要么全部执行成功,要么全部执行失败,不可能出现部分执行成功,部分执行失败的情况。

例如:在转账业务中,小明 向 小白转账100元,那么小明账户会减少100元,小白账户会多出100元。在开启事务的情况下,这两个操作要么全部执行成功,要么全部执行失败。不能说小明账户减少100元,但是小白账户没有多出100元的操作。


2-2:一致性(Consistency)

事务的一致性指的是在事务执行之前和执行之后,数据始终处于一致的状态。

例如:在转账业务中,小明有500元,小白有200元,小明向小白转账100元,无论是转账前还是转账后,两人的总额一定得是700元,这个就是数据处于一致的状态。


2-3:隔离性(Isolation)

事务的隔离性指的是并发执行的两个事务之间互不干扰。也就是说,一个事务在执行过程中不能看到其他事务运行过程中的中间状态。

例如,在转账业务中,小明向小白转账的业务场景中,存在两个并发执行的 事务A 和 事务B ,事务A 执行扣减小明账户余额的操作和增加小白账户余额的操作;事务B 执行查询小明账户余额的操作。
在事务A完成之前,事务B读取的小明的账户余额仍然为扣减之前的账户余额500元,不会读取到扣减后的账户余额400元。
就是只有事务A执行完,事务B才能读取到小明最新的账户余额情况,否则只能读取到事务A执行之前的账户余额情况。


2-4:持久性(Durability)

事务的持久性指的是事务提交完成后,此事务对数据的更改操作会被持久化到数据库中,并且不会被回滚。

例如,在转账业务中,小明向小白转100元,在整个转账事务提交完成后,这种对数据的修改操作(两人的最新余额数据)就会被持久化到数据库中,且不会被回滚。


3、事务的五大类型

事务主要分为五大类,分别为:扁平事务、带有保存点的扁平事务、链式事务、嵌套事务、分布式事务。


3-1:扁平事务

扁平事务是事务操作中最常见的,也是最简单的事务。
在数据库中,扁平事务通常由 begin 或者 start transaction 字段开始,由 commit 或者 rollback 字段结束。
在这之间的所有操作要么全部执行成功,要么全部执行失败(回滚)。
当今主流的数据库都支持扁平事务。


扁平事务虽然是最常见、最简单的事务,但是无法提交或者回滚整个事务中的部分事务,只能把整个事务全部提交或者回滚。
为了解决这个问题,带有保存点的扁平事务出现了。


3-2:带有保存点的扁平事务

简单来说,内部设置了保存点的扁平事务,就是带有保存点的扁平事务。

带有保存点的扁平事务通过在事务内部的某个位置设置保存点(savepoint),达到将当前事务回滚到此位置的目的。

示例:

在这里插入图片描述

从本质上将,普通的扁平事务也是有保存点的,只是普通的扁平事务只有一个隐式的保存点,并且这个隐式的保存点会在事务启动的时候,自动设置在当前事务的开始位置。

也就是说,普通的扁平事务具有保存点,而且默认是存在事务的开始位置。


3-3:链式事务

链式事务是在带有保存点的扁平事务的基础上,自动将当前事务的上下文隐式的传递给下一个事务。
也就是说,一个事务的提交操作和下一个事务的开始操作具备原子性,上一个事务的处理结果对下一个事务是可见的,事务与事务之间就像链条一样传递下去。


注意:
链式事务在提交的时候,会释放要提交的事务中的所有锁和保存点,也就是说,链式事务的回滚操作只能回滚到当前所在事务的保存点,而不能回滚到已提交事务的保存点。


3-4:嵌套事务

嵌套事务就是有多个事务处于嵌套状态,共同完成一项任务的处理,整个任务具备原子性。

嵌套事务最外层有一个顶层事务,这个顶层事务控制着所有的内部子事务,内部子事务提交完成后,整体事务并不会提交,只有最外层的顶层事务提交完成后,整体事务才算提交完成。

注意:
1、回滚嵌套事务内部的子事务时,会将事务回滚到外部顶层事务的开始位置。
2、嵌套事务的提交是从内部的子事务向外依次进行的,直到最外层的顶层事务提交完成。
3、回滚嵌套事务最外层的顶层事务时,会回滚嵌套事务包含的所有事务,包括已提交的内部子事务。

在主流的关系型数据库中,MySQL 不支持原生的嵌套事务,而 SQL Server 支持。
一般不建议用嵌套事务。


3-5:分布式事务

分布式事务指的是事务的参与者、事务所在的服务器、涉及的资源服务器以及事务管理器等分别位于不同分布式系统的不同服务或数据库节点上。

简单来说,分布式事务就是一个在不同环境(比如不同的数据库、不同的服务器)下运行的整体事务。

这个整体事务包含一个或者多个分支事务,并且整体事务中的所有分支事务要么全部提交成功,要么全部提交失败。

例如:
在电商系统的下单减库存业务中,订单业务所在的数据库为事务A的节点,库存业务所在的数据库为事务B的节点。
事务A和事务B组成了一个具备ACID特性的分布式事务,要么全部提交成功,要么全部提交失败。


4、本地事务

4-1:什么是本地事务?

在常见的计算机系统和应用系统中,很多事务是通过关系型数据库进行控制的。

这种控制事务的方式利用数据库本身的事务特性来实现,而在这种实现方式中,数据库和应用通常会被放在同一台服务器中,因此,这种基于关系型数据库的事务也可以称作本地事务或者传统事务


4-2:本地事务的典型特征

1、一次事务过程中只能连接一个支持事务的数据库,这里的数据库一般指的是关系型数据库。

2、事务的执行结果必须满足 ACID 特性。

3、事务的执行过程会用到数据库本身的锁机制。


4-3:本地事务的执行流程

在这里插入图片描述

资源管理器: 是指负责管理数据库或系统中各种资源(内存、磁盘、锁、日志)的组件或模块。

如图:
1、客户端开始事务操作之前,需要开启一个连接会话;
2、开始会话后,客户端发起开启事务的指令;
3、事务开启后,客户端发送各种 SQL 语句处理数据;
4、正常情况下,客户端会发起提交事务的指令,如果发生异常情况,客户端会发起回滚事务的指令;
5、上述流程执行完成后,关闭会话。

本地事务是由资源管理器在本地(指单个节点)进行管理的

比如:分布式系统由多个节点组成,每个节点都有自己的数据库实例和资源管理器,那么在每个节点上执行的事务就是本地事务。


4-4:本地事务的优缺点
优点

1、支持严格的 ACID 特性,这也是本地事务得以实现的基础。
2、事务可靠,一般不会出现异常情况。
3、本地事务的执行效率比较高。
4、事务的状态可以只在数据库中进行维护,上层的应用不必理会事务的具体状态。
5、应用的编程模型比较简单,不会涉及复杂的网络通信。

缺点

1、不具备分布式事务的处理能力。
2、一次事务过程中只能连接一个支持事务的数据库,即不能用于多个事务性数据库。


5、MySQL 事务基础

在互联网领域,MySQL 数据库是使用最多的关系型数据库之一,也是一种典型的支持事务的关系型数据库。


5-1:并发事务带来的问题

在这里插入图片描述

数据库一般会并发执行多个事务,而多个事务可能会并发的对相同的数据进行增、删、改、查的操作,进而导致并发事务问题。

并发事务带来的问题包括:更新丢失(脏写)、脏读、不可重复读、幻读


5-1-1:更新丢失(脏写)

简单来说,就是并发情况下,后提交的事务可能会覆盖前一个事务提交的数据。

详细解释:

当两个或两个以上的事务选择数据库中的同一行数据,并基于最初选定的值更新该行数据时,因为每个事务之间都无法感知彼此的存在,所以会出现最后的更新操作覆盖之前由其他事务完成的更新操作的情况。

也就是说,对于同一行数据,一个事务对该行数据的更新操作覆盖了其他事务对该行数据的更新操作。

例如:
小白有500元,此时有 事务A 和 事务B 两个事务,事务A 要给小白转账300元,事务B 要给小白转账200元。一开始,两个事务读取到小白的余额都是500元,然后分别执行转账操作,假如 事务A 比 事务B 先提交事务,但是 事务A 和 事务B 都提交后的结果,是小白的账户余额只有 700 元。

也就是说,后提交的事务B 覆盖了 事务A 的更新操作

更新丢失(脏写)本质上是写操作的冲突,解决方法是让每个事务按照串行的方式执行,按照一定的顺序依次进行写操作


5-1-2:脏读

简单来说,就是一个事务读取了另一个事务未提交的数据。

详细解释:
一个 事务A 正在对数据库中的一条记录进行修改操作,在这个 事务A 完成并提交之前,当有另一个 事务B 来读取正在修改的这条数据记录时,如果没有对这两个事务进行控制,则 事务B 就会读取到没有被提交的脏数据,并根据这些脏数据做进一步的处理,此时就会产生未提交的数据依赖关系。

这种现象称为脏读,也就是一个事务读取了另一个事务未提交的数据。

例如:
当前有 事务A 和 事务B 两个事务,小白账户有 500 元,然后 事务A 向小白转账100元,事务B 是查询小白的账户余额。
事务A 执行转账操作,在事务A 未提交时,事务B 查询到了小白账户多了100元,也就是600元,后来事务A因为某些原因,例如 服务超时、系统异常等因素进行了回滚操作,但事务B查询到的数据并没有改变,依然是 600 元。
此时事务B查询到的600元数据就是脏数据

脏读本质上是读写操作的冲突,解决办法是先写后读,也就是写完之后再读。


5-1-3:不可重复读

简单来说,就是只有在同一个事务内,使用相同的查询语句,在不同时刻读取到的结果是不一致的。

一个事务读取了某些数据,在一段时间后,这个事务再次读取之前读过的数据,此时发现读取的数据发生了变化,或者其中的某些记录已经被删除,这种现象就叫做不可重复读。
即同一个事务,使用相同的查询语句,在不同时刻读取到的结果是不一致的。

例如:
当前有事务A 和事务B两个事务,事务A 向小白转账100元,事务B查询小白的账户余额。
事务B第一次查询时,事务A还没有转账,第二次查询时,事务A已经转账成功,此时,就会导致事务B两次查询结果不一致。

不可重复读本质上也是读写操作的冲突,解决方法是先读后写,也就是读完之后再写。


5-1-4:幻读

简单来说,一个事务两次读取一个范围的数据记录,两次读取到的结果不同

一个事务按照相同的查询条件重新读取之前读过的数据,此时发现其他事务插入了满足当前事务查询条件的新数据,这种现象叫做幻读。
即一个事务两次读取一个范围的数据记录,两次读取到的结果不同。

例如:
当前有事务A 和事务B两个事务,事务A 向小白转账100元,事务B查询小白的账户余额。
事务B第一次查询时,事务A还没有转账,第二次查询时,事务A已经转账成功,此时,就会导致事务B两次查询结果不一致。(和不可重复读的例子一样)

幻读本质上也是读写操作的冲突,解决方法是先读后写,也就是读完之后再写。


5-2:不可重复读和幻读的区别

1、 不可重复读的重点是更新和删除操作,而幻读的重点在于插入操作。

不可重复读,两次读取到不同的数据,是因为该数据被其他事务进行了更新或者删除操作
比如在同一个事务内,我第一次查询年龄等于20的人叫小黄,相同查询条件下,过一会再查询,发现这次查年龄等于20的人叫小小黄。两次查询中间,有其他事务修改了这个年龄等于20的人的名字。

幻读,两次读取到不同的数据,是因为该数据被其他事务进行了插入操作
比如在同一个事务内,我第一次查询到10条数据,相同查询条件下,过一会再查询,发现这次查出了11条数据。两次查询中间,有其他事务插入了一条符合查询条件的新数据。

2、 使用锁机制实现事务隔离级别时,在可重复读隔离级别中,SQL 语句第一次读取到数据后,会将相应的数据加锁,使得其他事务无法修改和删除这些数据,此时可以实现可重复读;

注意:这种方法无法对新插入的数据加锁,因此这种加锁的方法无法阻止幻读。

如果事务A 读取了数据,或者修改和删除了数据,此时,事务B 还是依然可以进行插入操作,这就会导致事务A莫名其妙多出一条之前没有的数据,这个就是幻读。

3、 幻读无法通过行级锁来避免,需要使用串行化的事务隔离级别,但是这种事务隔离级别会极大的降低数据库的并发能力。

4、 从本质上讲,不可重复读和幻读的最大区别在于如何通过锁机制解决问题


另外,除了可以使用悲观锁来避免不可重复读和幻读的问题之外,我们也可以使用乐观锁来处理。

例如:MySQL、Oracle 和 PostgreSQL 等数据库为了提高整体性能,就使用了基于乐观锁的 MVCC(多版本并发控制)机制来避免不可重复读和幻读。


5-3:MySQL 的 4 种事务隔离级别

在这里插入图片描述

MySQL 中的 InnoDB 存储引擎提供 SQL 标准所描述的 4 种事务隔离级别:

级别从低到高为:
读未提交(Read Uncommitted)-> 读已提交(Read Committed)-> 可重复读(Repeatable Read)-> 串行化(Serializable)

InnoDB 默认的事务隔离级别是:可重复读


5-3-1:设置事务隔离级别

配置文件设置

可以在命令行用 --transaction-isolation 选项或者在 MySQL 的配置文件 my.cnf、my.ini 里,为所有连接设置默认的事务隔离级别。

例如,可以在 my.cnf 或者 my.ini 文件中的 mysqld 节点下面配置如下选项:

transaction-isolation = {Read Uncommitted}     #设置为读未提交的事务隔离级别transaction-isolation = {Read Committed}       #设置为读已提交的事务隔离级别transaction-isolation = {Repeatable Read}      #设置为可重复读的事务隔离级别 -- 默认的事务隔离级别transaction-isolation = {Serializable}         #设置为串行化的事务隔离级别

命令设置

也可以使用 set transaction 命令改变单个或者所有新连接的事务隔离级别,基本语法如下:

在这里插入图片描述


注意点

如果使用 set transaction 命令来设置事务隔离级别,需要注意如下几个点:

1、不带 session 或 global 关键字设置事务隔离级别,指的是为下一个(还未开始的)事务设置隔离级别。

2、使用 global 关键字指的是对全局设置事务隔离级别,也就是设置后的事务隔离级别对所有新产生的数据库连接生效。

3、使用 session 关键字指的是对当前的数据库连接设置事务隔离级别,此时的事务隔离级别只对当前连接的后续事务生效。

4、任何客户端都能自由改变当前会话的事务隔离级别,可以在事务中间改变,也可以改变下一个事务的隔离级别。


session 会话级别的设置演示

在这里插入图片描述


global 全局级别的设置演示

在这里插入图片描述


具体设置命令

-- session 表示对当前的数据库连接设置事务隔离级别-- 显式地将事务隔离级别设置为读未提交
set session transaction isolation level read uncommitted;-- 显式地将事务隔离级别设置为读已提交
set session transaction isolation level read committed;-- 显式地将事务隔离级别设置为可重复读
set session transaction isolation level Repeatable Read;-- 显式地将事务隔离级别设置为串行化
set session transaction isolation level Serializable;-- global 表示对全局设置事务隔离级别-- 显式地将事务隔离级别设置为读未提交
set global transaction isolation level read uncommitted;-- 显式地将事务隔离级别设置为读已提交
set global transaction isolation level read committed;-- 显式地将事务隔离级别设置为可重复读
set global transaction isolation level Repeatable Read;-- 显式地将事务隔离级别设置为串行化
set global transaction isolation level Serializable;

5-3-2:查询当前数据库的事务隔离级别
查询 MySQL 的事务隔离级别的命令

可以看出,InnoDB 默认的事务隔离级别是:可重复读

在这里插入图片描述



-- 查询数据库中有哪些变量
show variables-- 查询全局级别变量
show global variables-- 查询会话级别变量
show session variables-- 查询全局级别的事务隔离级别 ---->查询结果: REPEATABLE-READ 可重复读 
select @@global.transaction_isolation-- 查询会话级别的事务隔离级别 ---->查询结果:  REPEATABLE-READ 可重复读 
select @@session.transaction_isolation-- 查看当前数据库连接会话的事务隔离级别 ---->查询结果:  REPEATABLE-READ 可重复读 
select @@transaction_isolation

5-3-3:MySQL 中 4 种事务隔离级别的区别

4 种事务隔离级别对于并发事务带来的问题的解决程度不一样。

在这里插入图片描述

1、读未提交允许脏读,即在读未提交的事务隔离级别下,可能读取到其他会话未提交的事务修改的数据。这种事务隔离级别下存在【脏读】、【不可重复读】和【幻读】的问题。

2、读已提交只能读取到已经提交的数据。Oracle 等数据库使用的默认事务隔离级别就是【读已提交】。这种事务隔离级别存在【不可重复读】和【幻读】的问题。

3、可重复读就是在同一个事务内,无论何时查询到的数据都与一开始查询到的数据一致,这就是 MySQL 中 InnoDB 存储引擎默认的事务隔离级别。
这种事务隔离级别下存在【幻读】的问题。

4、串行化是指完全串行的读,每次读取数据库中的数据时,都需要获得表级别的共享锁,读和写都会阻塞。
这种事务隔离级别解决了并发事务带来的问题,但是完全的串行化操作使得数据库失去了并发特性,所以这种事务隔离级别往往在互联网行业中不太常用。



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

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

相关文章

黑烟车智能电子抓拍系统大幅度节约人力物力

黑烟车智能电子抓拍系统大幅度节约人力物力,之前黑烟车监测通过执勤交警人工现场监测会耗费大量人力物力,效率较低,现在通过黑烟车智能电子抓拍系统可以大辅导提升监测效率,遗漏少,效率高,值得大力推广。 黑…

【Python数据库】MongoDB

文章目录 [toc]数据插入数据查询数据更新数据删除 个人主页:丷从心 系列专栏:Python数据库 学习指南:Python学习指南 数据插入 from pymongo import MongoClientdef insert_data():mongo_client MongoClient(hostlocalhost, port27017)co…

红米A2/A2+/POCO C51手机秒解BL+快速获取root权限+解谷歌锁刷机救砖教程

红米A2/A2/POCO C51手机是目前小米公司针对于国外用户的1个独立的品牌,或者和国内的红米手机都非常相似,几款手机由于硬件非常接近,我们这里将其放在一起和大家介绍而从他们的代号中我们可以得知,目前A2/POCO的代号为water&#x…

ctfshow web78 获取flag

第一种:利用input伪协议 ,获取到flag 第二种:利用flter协议,获取到flag https://21d9e58a-c0fd-47ea-a9c4-d875100f2fdb.challenge.ctf.show/?filephp://filter/readconvert.base64-encode/resourceflag.php 得到的结果PD9waHANCg0KLyoNCiMgLSotIGNvZG…

代码随想录算法训练营第12天:滑动窗口和前缀和

代码随想录算法训练营第12天:滑动窗口和前缀和 这里我参考了西法的博客, 467. 环绕字符串中唯一的子字符串(中等)795. 区间子数组个数(中等)904. 水果成篮(中等)992. K 个不同整数的子数组(困难)1109. 航班预订统计(中等) 前四…

机器学习周报第36周 AT-LSTM

文章目录 week36 AT-LSTM摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 注意力机制概述3.3 AT-LSTM3.4 数据预处理 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 训练参数4.3.2 数据集4.3.3 实验设置4.3.4 实验结果 5. 基于pytorch的transfor…

使用Cesium ion将 Sketchfab 3D 模型添加到您的GIS应用中

您现在可以将 Sketchfab 中的 3D 模型导入 Cesium ion 中以创建 3D 块,从而更轻松地为地理空间体验创建上下文和内容。 Sketchfab 是 Epic Games 的一部分,也是使用最广泛的 3D 资产市场之一。自 2012 年推出以来,已有超过 1000 万用户使用 …

【数据结构】最小生成树(Prim算法、Kruskal算法)解析+完整代码

5.1 最小生成树 定义 对一个带权连通无向图 G ( V , E ) G(V,E) G(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。 设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称…

3. uniapp开发工具的一些事

前言 新的一天,又要开始卷起来了,开发程序开发当前离不开开发工具,一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间:约5~7分钟; 本文重点&am…

Visual Studio Code基础:打开一个编辑器(文件)时,覆盖了原编辑器

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 在使用vscode时,偶尔会出现这样的问题:打开了某个编辑器(文件,下面统称文件)后,再打开其他文件…

清理Mac电脑中的垃圾文件,让Mac电脑像新的一样好

CleanMyMac是一款流行的Mac系统优化工具,它可以帮助用户清理Mac电脑中的垃圾文件、优化系统性能、管理应用程序、保护隐私和提升电脑运行速度。下面是CleanMyMac的一些主要功能: 系统清理:清除系统缓存、日志文件、语言文件等,释放…

Hotcoin Academy 市场洞察-2024年4月15日-21日

加密货币市场表现 BTC ETF在本周出现净流出,大盘有较大跌幅,BTC一度跌破60000美金,ETH一度跌破2800美金,整体以横盘为主,行情在周末有略微回升趋势。BTC市占率创21年4月来新高,目前市值1.28万亿&#xff0c…

图片浏览工具-Honeyview

一、软件特点 轻量而快速 可以显示包括 GPS 信息在内的 JPEG 格式的 EXIF 信息 对图像格式进行批量转换和调整大小 支持显示 GIF 和 WebP 动图 无需解压即可直接查看压缩包中的图像 二、支持的格式 图像格式: BMP, JPG, GIF, PNG, PSD, DDS, JXR, WebP, J2K, JP2, TGA, TIFF, …

沉浸式翻译 chrome 插件 Immersive Translate - Translate Website PDF

免费翻译网站,翻译PDF和Epub电子书,双语翻译视频字幕 📣 网络上口碑爆炸的网站翻译扩展工具【沉浸式翻译】⭐⭐⭐⭐⭐ 💻 功能特点如下: 📰 网站翻译 🚀 提供双语网站翻译,智能识…

web自动化系列-selenium的基本方法介绍

web自动化 ,一个老生常谈的话题 ,很多人的自动化之路就是从它开始 。它学起来简单 ,但做起来又比较难以驾驭 ;它的执行效率慢 、但又是最接近于用户的操作场景 ; 1.web自动化中的三大亮点技术 我们先聊聊 &#xff0…

登录rabbitMQ管理界面时浏览器显示要求进行身份验证,与此站点连接不安全解决办法

问题描述 最近在黑马学习rabbitMQ的过程中,在使用docker部署好rabbitMQ后,使用账号为:itcast,密码为:123321 登录的时候浏览器显示了这个问题,如图所示: 当时以为自己需要输入自己的浏览…

Spring Web MVC入门(3)——响应

目录 一、返回静态页面 RestController 和 Controller之间的关联和区别 二、返回数据ResponseBody ResponseBody作用在类和方法的情况 三、返回HTML代码片段 响应中的Content-Type常见的取值: 四、返回JSON 五、设置状态码 六、设置Header 1、设置Content…

【C++】---STL容器适配器之底层deque浅析

【C】---STL容器适配器之底层deque浅析 一、deque的使用二、deque的原理1、deque的结构2、deque的底层结构(1)deque的底层空间(2)deque如何支持随机访问、deque迭代器 3、deque的优缺点(1)deque的优势&…

java基础之java容器-Collection,Map

java容器 java容器分类一. Collection1. List①. ArrayList② . LinkedList③ . Vector 2. Queue队列①. LinkedList②. PriorityQueue 3. Set集合①. HashSet②. TreeSet 二. Map1. HashMap2.TreeMap3. Hashtable java容器分类 java容器分为两大类,分别是Collecti…

探索区块链世界:赋能创新,揭示区块链媒体发稿的影响力-世媒讯

区块链,这个由“区块”和“链”组成的概念,可能在您眼中充满神秘和复杂,但其实甚至无所不在,它正静悄悄地改变着我们日常生活的方方面面,从金融到媒体,从医疗到教育。 我们来揭开区块链的神秘面纱。区块链…