当前位置: 首页 > news >正文

MySQL 事务

  概念介绍 

        事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组 DML 语句要么全部成功,要么全部失败,是一个整体。MySQL 提供一种机制,保证我们达到这样的效果。
        事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。假设一种场景:你毕业了,学校的教务系统后台 MySQL 中,不在需要你的数据,要 删除你的基本信息( 姓名,电话,籍贯等 ) 的同时,也删除和你有关的其他信息,比如:你的各科成绩,你在校表现,甚至你在论坛发过的文章等。这就需要多条 MySQL 语句构成,那么所有这些操作合起来,就构成了一个事务。
        正如我们上面所说,一个 MySQL 数据库,可不止你一个事务在运行,同一时刻,甚至有大量的请求被包装成事务,在向 MySQL 服务器发起事务处理请求。而每条事务至少一条 SQL 这样如果大家都访问同样的表数据,在不加保护的情况,就绝对会出现问题。甚至,因为事务由多条 SQL 构成,那么,也会存在执行到一半出错或者不想再执行的情况,那么已经执行的怎么办呢?
所以一个完整的事务,绝对不是简单的 sql 集合,还需要满足如下四个属性:
  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化Serializable
  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

上面四个属性,可以简称为 ACID

  • 原子性(Atomicity,或称不可分割性)
  • 一致性(Consistency
  • 隔离性(Isolation,又称独立性)
  • 持久性(Durability)

事务操作

查看数据库引擎

show engines;

我们可以看到在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务, MyISAM 不支持。

事务提交方式

事务的提交方式常见的有两种:自动提交,手动提交。
查看事务提交方式
show variables like 'autocommit';

SET 来改变 MySQL 的自动提交模式
禁止自动提交
set autocommit=0;
set autocommit=false;
set autocommit=off;

开启自动提交
set autocommit=1;
set autocommit=true;
set autocommit=on;

开始事务

--两种皆可
begin;
start transaction;

提交事务

commit;

一个完整的事务需要开始和提交。我们以下表为例,创建一个事务。

create table if not exists student(
id int primary key,
name varchar(10) not null default '',
tel varchar(20)
);

只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。

事务回滚

在事务执行过程中,可以设置保存点,保存点用于回滚。

savepoint 保存点名;

回滚用于在一个事务内部进行撤销操作,即取消之前的某些操作。

rollback to 保存点名;

我们回滚到p1后,可以发现少了两条数据。也可以直接使用rollback,直接回滚到事务的最开始。

事务可以手动回滚,同时,当操作异常 MySQL 会自动回滚,对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交。( select 有特殊情况,因为 MySQL 有 MVCC

事务隔离级别

MySQL 服务可能会同时被多个客户端进程 ( 线程 ) 访问,访问的方式以事务方式进行,一个事务可能由多条SQL 构成,也就意味着,任何一个事务,都有执行前,执行中,执行后的阶段。而所谓的原子性,其实就是让用户层,要么看到执行前,要么看到执行后。执行中出现问题,可以随时回滚。所以单个事务,对用户表现出来的特性,就是原子性。
但,毕竟所有事务都要有个执行过程,那么在多个事务各自执行多个 SQL 的时候,就还是有可能会
出现互相影响的情况。比如:多个事务同时访问同一张表,甚至同一行数据。就如同你妈妈给你说:你要么别学,要学就学到最好。至于你怎么学,中间有什么困难,你妈妈不关心。那么你的学习,对你妈妈来讲,就是原子的。那么你学习过程中,很容易受别人干扰,此时,就需要将你的学习隔离开,保证你的学习环境是健康的。
  • 数据库中,为了保证事务执行过程中尽量不受干扰,就有了一个重要特征:隔离性
  • 数据库中,允许事务受不同程度的干扰,就有了一种重要特征:隔离级别

在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同。

  • 读未提交【Read Uncommitted: 在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多并发问题,如脏读,幻读,不可重复读等,我们上面为了做实验方便,用的就是这个隔离性。
  • 读提交【Read Committed:该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 认的)。它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读,即一个事务执行时,如果多次 select, 可能得到不同的结果。
  • 可重复读【Repeatable Read: 这是 MySQL 默认的隔离级别,它确保同一个事务,在执行中,多次读取操作数据时,会看到同样的数据行,但是会有幻读问题。
  • 串行化【Serializable: 这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。它在每个读的数据行上面加上共享锁,但是可能会导致超时和锁竞争(这种隔离级别太极端,实际生产基本不使用)。

查看隔离级别

select @@session.transaction_isolation;//查看当前对话的隔离级别
select @@transaction_isolation;//同上
select @@global.transaction_isolation;//查看全局默认的隔离级别

在MySQL中,事务的默认隔离级别是可重复读。

设置隔离级别

set [session | global] transaction isolation level {read uncommitted | read
committed | repeatable read | serializable};

例如,我们把当前对话的隔离级别设置为设置为读未提交read uncommitted。

读未提交【Read Uncommitted

在读未提交隔离级别下,所有事务都可以看到其他事务未提交的执行结果,也就是相当于没有任何隔离性。

当前两个对话的隔离级别都为读未提交read uncommitted,我们在左边的终端中在表中插入,更新数据,但并未提交,右边查看表时也会发现其中数据的变化,一个事务在执行中,读到另一个执行中事务的更新(或其他操作)但是未commit的数据,这种现象叫做脏读。

读提交【Read Committed

读提交是大多数数据库的默认隔离级别,一个事务只能看到其它事务已经提交的数据

当前两个对话的隔离级别都为读提交read committed,我们在左边的终端中在表中更新数据,但并未提交,右边查看表时也不会发现其中数据的变化,但提交之后就可以看到,但是,右边的终端此时还在当前事务中,并未commit,那么就造成了,同一个事务内,同样的读取,在不同的时间段 ,读取到了不同的值,这种现象叫做不可重复读(non reapeatable read)!!

可重复读【Repeatable Read

可重复读是MySQL的默认隔离级别,它确保一个事务中,多次读取时不会出现不一样的数据

当前两个对话的隔离级别都为可重复读repeatable read,我们在左边的终端中在表中更新数据,提交后,右边查看表时也不会发现其中数据的变化,但是,右边的终端也commit后就可以看到了。但是,一般的数据库在可重复读情况的时候,无法屏蔽其他事务insert的数据(为什么?因为隔离性实现是对数据加锁完成的,而insert待插入的数据因为并不存在,那么一般加锁无法屏蔽这类问题),会造成虽然大部分内容是可重复读的,但是insert的数据在可重复读情况被读取出来,导致多次查找时,会多查找出来新的记录,就如同产生了幻觉。这种现象,叫做幻读(phantom read)。

串行化【serializable

串行化是最高的隔离级别,会对事务进行排序,同时只允许一个事务执行

当前两个对话的隔离级别都为串行化serializable,我们可以在左边和右边的终端同时查看表,但是,左边的终端想插入数据就会被阻塞,直到右边的终端也commit后才可以插入。

MVCC

数据库并发的场景有三种:
  • -:不存在任何问题,也不需要并发控制
  • -:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读
  • -:有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失
多版本并发控制( MVCC )是一种用来解决 - 写冲突 无锁并发控制。为事务分配单向增长的事务ID ,为每个修改保存一个版本,版本与事务 ID 关联,读操作只读该事务开始前的数据库的快照。 所以 MVCC 可以为数据库解决以下问题:在并发读写数据库时,可以做到在读操作时不用阻塞写操作,写操作也不用阻塞读操作,提高了数据库并发读写的性能,还可以解决脏读,幻读,不可重复读等事务隔离问题,但不能解决更新丢失问题。

事务ID

事务ID(Transaction ID,简称TID)是数据库系统为每个事务分配的唯一标识符。它通常是一个递增的整数,由数据库系统自动生成和管理。每当一个新的事务开始时,数据库系统就会为其分配一个全局唯一的事务ID。这个ID在事务的整个生命周期中保持不变,直到事务结束。

隐藏列

在MySQL中,创建表的时候,并不是指定了哪些列,就存在哪些列,而是有几个所有表都存在的隐藏列,用于管理数据。

  • DB_TRX_ID:记录最近修改(insert、delete、update)该行的事务ID
  • DB_ROLL_PTR:回滚指针,指向历史版本undo log
  • DB_ROW_ID:隐藏主键,如果表中没有主键,则会有一个隐藏主键
  • ROW_DELETE:标识一个行有没有被删除,如果为0表示该行已经被删除,如果为1表示没有被删除

以以下表为例:

create table Stu(
name varchar(20),
age int
);

插入('张三', 18),假设该事务的事务ID为123,至少会包含以下列:

对于这条新数据,是通过事务123完成的插入,DB_TRX_ID = 123,由于没有历史版本,回滚指针 = NULLDB_ROW_ID则是隐藏主键,自行完成自增。ROW_DELETE = 0表示这一行是存在的。

undo log​​​​​​​

MySQL作为一款数据库,自然是要把数据进行持久化保存,但是插入,删除,查询这样的操作,是要把数据加载到内存中计算的。对于一个事务,只有整个事务结束,才会把数据写入硬盘保存,在写入硬盘之前,会在内存中开辟一段缓冲区,用于保存历史版本以便回滚,这个缓冲区就叫做undo log。

假设我们在一个事务中,将张三的名字改为李四,事务ID为199

此时旧的数据会进入undo log保存起来,随后将name改为李四,这是用户表面上看到的操作。实际上还会更新事务ID为199,表示这条数据最后一次是事务199操作的,并且将回滚指针指向在undo log中上一个版本的数据。

接着同一个事务199又把这一行删掉:

用户看来,这一行数据已经被删掉了,实际上这行数据还在,只是ROW_DELETE = 1,而原先ROW_DELETE = 0的版本,被保存在了undo log中。目前事务199还没有commit,此时还可以进行操作,比如说回滚。如果想要回滚到删除数据前,由于undo log中有ROW_DELETE = 0的版本,此时可以直接通过回滚指针找到上一个版本,然后复原。

如果想要回滚到最开始,那么就从回滚指针一直往回找,直到找到NULL空指针为止。只要事务199不提交,那么这个undo log就会一直在内存中,方便进行版本控制。当事务提交后,这个事务对应的undo log就会被MySQL自动释放,这也就是为什么事务结束后不能再回滚。

read view

回到这张图,可以发现一个事务在操作数据时,会生成多个版本。而MySQL中事务往往是并发的,其它事务来读取数据的时候,会读取到哪一个版本的数据呢?

mvcc通过快照读机制,读取某个固定的版本。快照读基于读视图read view实现,在MySQL源码中,readview包含以下内容:

class ReadView {private:trx_id_t m_low_limit_id;   // 高水位trx_id_t m_up_limit_id;    // 低水位trx_id_t m_creator_trx_id; // 当前事务IDids_t m_ids;               // 活跃事务ID
};
  • m_ids:一个数组,存储当前所有活跃的事务ID
  • m_creator_trx_id:记录当前事务的事务ID,即哪一个事务创建了该读视图
  • m_low_limit_id:高水位,存储m_ids的最小值,低于该值的事务都已经提交
  • m_up_limit_id:低水位,存储m_ids的最大值 + 1,大于等于该值的事务都是快照后产生的事务

当一个事务99进行读取时,会对当前整个MySQL生成一个读视图,读视图分为三部分

当事务创建完读视图后,读取数据时依照这个读视图判断读取哪一个版本。

  • 已提交事务:

查询数据时,首先看DB_TRX_ID列,看上一次是哪一个事务对其进行了修改:

该数据的DB_TRX_ID = 92,小于m_low_limit_id = 98,说明是已经提交的事务,那么该数据是可见的,最后就可以读取到李四这条数据。

  • 活跃事务:

该数据的DB_TRX_ID = 100,大于m_low_limit_id = 98,小于m_up_limit_id = 106,在m_ids中,说明是活跃的事务,那么该数据不可见。随后通过回滚指针找到上一个版本,发现上一个版本李四是已经提交的事务,所以最后看到李四这条数据。

  • 后产生的事务:

该数据的DB_TRX_ID = 110,大于m_up_limit_id = 106,说明是后产生的事务,那么该数据不可见。随后通过回滚指针找到上一个版本,发现上一个版本李四是已经提交的事务,所以最后看到李四这条数据。

  • 当前事务:

该数据DB_TRX_ID = 99,m_creator_trx_id = 99,说明就是事务自己上一次修改的数据。可见,读取到孙七。

每个事务创建快照的时机不同,那么看到的版本也就不同,如果在当前事务之后,有其他事务修改了数据,那么一定是活跃事务或者是后来的事务,此时当前事务会屏蔽掉这些内容,通过回滚指针找到自己可见的版本!

那么这个机制是如何划分出四个不同的隔离级别的呢?

读未提交:事务可以读取到其他未提交事务的修改。这个级别不使用MVCC,因此没有快照读,事务总是读取到最新的数据。

读提交:事务只能读取到其他事务已经提交的修改。在读已提交级别下,每次读取操作都会创建一个新的快照,确保读取到的数据是其他事务提交后的数据。

可重复读:整个事务只在第一次读取的时候创建一个快照,后续整个事务都使用同一张快照,保证前后读取到的内容一致,可重复读。

串行化:事务通过锁来避免并发问题,MVCC的作用非常有限,因为数据访问通常是被锁定的,直到事务完成。MVCC机制在可重复读和读已提交隔离级别中起作用,但在读未提交和串行化隔离级别中,其作用有限或不适用。

相关文章:

MySQL 事务

概念介绍 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组 DML 语句要么全部成功,要么全部失败,是一个整体。MySQL 提供一种机制,保证我们达到这样的效果。 事务就是要做的或所做的事情,主要用…...

消息中间件面试题-参考回答

消息中间件面试题-参考回答 面试官:RabbitMQ-如何保证消息不丢失 候选人: 嗯!我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的,这里面就要求了消息的高可用性,我们要保证消息的不丢失。主要从三个层面…...

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…...

【ETCD】【源码阅读】深入解析 etcd 的 `EtcdServer.Start` 函数

深入解析 etcd 的 EtcdServer.Start 函数 在 etcd 的代码中&#xff0c;EtcdServer.Start 是一个关键方法&#xff0c;用于初始化并启动服务器以便处理请求。本文将从源码的角度逐步分析此函数的每一步操作。 函数签名及注释 // Start performs any initialization of the Se…...

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发&#xff0c;但是由于ALSA驱动框架过于复杂&#xff0c;实现音频编解码芯片的驱动不是一个人能完成的&#xf…...

【数据结构——查找】二分查找(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;实现二分查找的算法。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.根据键盘输入的一组有序数据建立顺序表&#xff0c;2.顺序表的输…...

探索云原生数据库 PolarDB

引言 在云计算时代,数据库的重要性不言而喻。随着企业数字化转型的加速,对数据库的性能、可靠性和灵活性的要求也越来越高。阿里云推出的云原生数据库 PolarDB,正是为了满足这些需求而设计的一款高性能、兼容性强、弹性灵活的关系型数据库产品。本文将详细介绍 PolarDB 的特…...

OGG FOR MYSQL同步DDL

以下实验测试OGG FOR mysql 同步DDL&#xff0c; OGG 21.3 MYSQL 8.0.27 --创建测试数据 create table oggddl_20241201 (oid int primary key ,oname varchar(10)); create table oggddl_20241202 (oid int primary key ,oname varchar(10)); create table oggddl_20241203…...

【CAN】asc报文格式文件合并(python版)

目录 一、简介二、合并asc格式报文1、准备多个asc文件2、根据时间合并asc文件3、结果 三、总结四、参考 一、简介 CAN通信&#xff1a;CAN&#xff08;Controller Area Network&#xff09;是一种多主方式的串行通讯总线。基本设计规范要求有高位速率、高抗电磁干扰性&#xf…...

C++之STL的map容器

map map的实现方式 set是一个有序的关联容器&#xff0c;是基于平衡二叉搜索树(红黑树)实现的&#xff0c;元素是有序的 map的用法 #include <iostream> #include <map> using namespace std;const int ADDSIZE 20; int main() {map<int, int> m;cout &…...

基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源

前言 对于本教程&#xff0c;说白了&#xff0c;就是期望能通过一个程序判断一张图片是否为某个物体&#xff0c;或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题&#xff0c;因此主要处理 是 与 不是 的问题&#xff0c;比如我的模型是判断一张图片是否为苹果…...

react-dnd 拖拽事件与输入框的文本选中冲突

问题描述 当我们使用拖拽库的时候&#xff0c;往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点&#xff0c;当拖拽的事件绑定在该元素身上时候&#xff0c;发现子孙的输入框不能进行文本选中了&#xff0c;会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…...

‘Close Project‘ is not available while IDEA is updating indexes的解决

XXX is not available while IDEA is updating indexes IDEA 1.Remove from Recent Projects 2.重新 Open工程即可...

如何解决samba服务器共享文件夹不能粘贴文件

sudo vim /etc/samba/smb.conf在samba的配置文件中增加一个选项 writable yes重启Samba服务以使更改生效&#xff1a; sudo service smbd restart...

Three.js入门-材质详解,构建视觉真实感的核心

Three.js 材质详解&#xff1a;构建视觉真实感的核心 Three.js 是一个强大的 3D JavaScript 库&#xff0c;它为开发者提供了丰富的工具来创建和渲染逼真的三维场景。在这些工具中&#xff0c;材质是一个非常重要的组成部分。材质定义了物体表面的外观特性&#xff0c;例如颜色…...

GitHub、Google等镜像加速地址收集

GitHub、Google等镜像加速地址收集 摘要 本文用于收集GitHub、Google等镜像/加速地址。 GitHub GitHub加速地址一览 fastgithub Https://www.fastgithub.com/&#xff08;推荐&#xff09; 站源地址缓存github.comwww.fastgithub.com无raw.githubusercontent.com无github.gi…...

五、网络层:控制平面,《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》

目录 一、导论 二、路由选择算法 2.1 路由&#xff08;route&#xff09;的概念 2.2 网络的图抽象 2.2.1 边和路由的代价 2.2.2 最优化原则 2.3 路由的原则 2.4 路由选择算法的分类 2.5 link state 算法 2.5.1 LS路由工作过程 2.5.2 链路状态路由选择&#xff08;lin…...

Fix the “The repository no longer has a Release file” error on Ubuntu 23.04

背景信息 在Ubuntu 23.04操作系统上执行apt-get update命令更新操作系统时&#xff0c;得到以下错误 登录后复制 # apt-get update Ign:1 http://mirrors.aliyun.com/ubuntu lunar InRelease Ign:2 http://mirrors.aliyun.com/ubuntu lunar-updates InRelease Ign:3 http://mir…...

开源 AI 智能名片 S2B2C 商城小程序对私域流量运营的全方位助力

在当今竞争激烈的商业环境中&#xff0c;私域流量运营已成为企业实现可持续发展和提升竞争力的关键策略之一。开源 AI 智能名片 S2B2C 商城小程序凭借其独特的功能与特性&#xff0c;从多个维度为私域流量运营提供了强有力的支持与推动&#xff0c;以下将详细阐述其在各个方面的…...

Java Exception解决方法

Java中的Exception是所有异常的基类&#xff0c;它指的是程序在执行过程中发生的非严重错误&#xff0c;比如空指针异常、数组越界异常等。 为了解决Java中的Exception&#xff0c;从以下步骤进行排查解决&#xff1a; 阅读错误信息&#xff1a;查看异常的完整堆栈跟踪信息&a…...

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层&#xff0c;它用于标识一台网络设备&#xff0c;其中IP地址分为两个部分&#xff0c;网络地址和主机地址&#xff0c;通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言&#xff0c;它细分为五类&#xff0c;A,B,C,D,E,…...

JeecgBoot passwordChange 任意用户密码重置漏洞复现

0x01 产品简介 Jeecg Boot是一个企业级低代码开发平台,基于前后端分离的架构,融合了SpringBoot、SpringCloud、Ant Design、Vue、Mybatis-plus、Shiro、JWT等多种主流技术,旨在帮助企业快速构建各种应用系统,提高开发效率,降低开发成本。采用最新主流的前后分离框架,使得…...

7-8 整型关键字的散列映射

给定一系列整型关键字和素数 p&#xff0c;用除留余数法定义的散列函数 H(key)key%p 将关键字映射到长度为 p 的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数 n&#xff08;≤1000&#xff09;和 p&#xff08;≥n 的最小素数&#xff09;&…...

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…...

MySQL SQL语句性能优化

MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...

【潜意识Java】期末考试可能考的选择题(附带答案解析)

目录 选择题一&#xff1a;Java 数据类型 选择题二&#xff1a;Java 控制结构 选择题三&#xff1a;面向对象编程 选择题四&#xff1a;Java 集合框架 选择题五&#xff1a;Java 异常处理 选择题六&#xff1a;Java 方法 选择题七&#xff1a;Java 流程控制 选择题八&a…...

修炼之道 --- 其一

序言 大家对面试中的面经八股文是怎样的看法呢&#xff0c;从他的名字 八股文 就可以看出来大家可能并不喜欢他&#xff0c;八股文一般是 死板、浮于表面、不重实际 的特点。但是&#xff0c;我们需要通过辩证的角度来看待一个事情&#xff0c;不能单方面来定性&#xff01;  …...

【前端】HTML

目录 一、HTML结构 1.1 HTML标签1.2 HTML文件基本结构1.3 快速生成框架 二、HTML常见标签 2.1 注释标签 !-- –2.2 标题标签 h1到h62.3 段落标签 p2.4 换行标签 br2.5 格式化标签2.6 图片标签 img2.7 超链接标签 a 三、表格标签 3.1 常用标签3.2 合并单元格 四、列表标签五、表…...

LabVIEW实现GPS通信

目录 1、GPS通信原理 2、硬件环境部署 3、程序架构 4、前面板设计 5、程序框图设计 6、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利用LabVIEW和常用模块实现物联网系…...

【Python 小课堂】第 2 课 Python 基础知识:语句、常量、变量和注释

第 2 课 基础知识&#xff1a;语句、常量/变量和注释 By Yichen Li 2024/12/14 一、内容简介 在本次课中&#xff0c;介绍Python语句、常量/变量以及代码注释的基本概念&#xff0c;一些详细的概念、扩展及用法等细节&#xff0c;留至后续介绍。 二、Python语句 一般来说&…...

基于STM32设计的工地扬尘与噪音实时监测系统(网页)

一、前言 当前项目使用的相关软件工具、传感器源代码工程已经上传到网盘&#xff08;实时更新项目内容&#xff09;&#xff1a;https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?fromfrom_copylink 1.1 项目开发背景 近年来&#xff0c;随着城市化进程的…...

LLM之RAG实战(五十)| FastAPI:构建基于LLM的WEB接口界面

FastAPI是WEB UI接口&#xff0c;随着LLM的蓬勃发展&#xff0c;FastAPI的生态也迎来了新的机遇。本文将围绕FastAPI、OpenAI的API以及FastCRUD&#xff0c;来创建一个个性化的电子邮件写作助手&#xff0c;以展示如何结合这些技术来构建强大的应用程序。 下面我们开始分步骤操…...

JavaScript 中的 Map方法

JavaScript 中的 Map方法 在 JavaScript 中&#xff0c;Map 是一种用于存储键值对的数据结构&#xff0c;相较于传统的对象&#xff08;Object&#xff09;&#xff0c;Map 提供了更高效的键值对操作方式适合处理需要频繁操作键值对的场景。 1. 创建 Map const map new Map…...

img引入svg如何修改颜色

方法1&#xff1a;通过css中filter:drop-shadow 首先需要一个容纳图标的父盒子(下方实例中的.svg-img)&#xff0c;通过css造一个图标的‘影子’&#xff08;.svg-color中的drop-shadow&#xff09;&#xff0c;然后设置‘影子’的颜色&#xff0c;再把图标本体移出父盒子&…...

自然语言处理基础及应用场景

自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注&#xff1a;区分每个词名词、动词、形容词等词性命名实体的识别&#xff1a;名词的具体指代是哪一类事物共指消解&#xff1a;代词指代的是前面…...

构建centos docker基础镜像

1、介绍 比较老的版本docker镜像&#xff0c;不太好找&#xff0c;可以尝试自己构建 各版本构建基础镜像方法不太一样&#xff0c;方式也不同&#xff0c;自己尝试&#xff0c;本文只介绍了我自己的尝试 2、构建centos5.11 docker镜像 准备iso文件 &#xff08;1&#xff09;安…...

etcd命令大全

默认安装自带etcdctl 命令行客户端&#xff0c;分两个版本ETCDCTL_API2和ETCDCTL_API3&#xff0c;两个版本不一样&#xff0c;操作的数据也不相容。 本文以v3 为例。 使用之前需要先设置&#xff1a;export ETCDCTL_API3。 1 etcd查询集群节点列表及状态 标准输出&#xff1…...

Go有限状态机实现和实战

Go有限状态机实现和实战 有限状态机 什么是状态机 有限状态机&#xff08;Finite State Machine, FSM&#xff09;是一种用于建模系统行为的计算模型&#xff0c;它包含有限数量的状态&#xff0c;并通过事件或条件实现状态之间的转换。FSM的状态数量是有限的&#xff0c;因此称…...

使用torch模拟 BMM int8量化计算。

使用torch模型BMM int8计算。 模拟&#xff1a;BMM->softmax->BMM 计算流程 import torch import numpy as np torch.manual_seed(777) def int8_quantize_per_token(x: torch.Tensor, axis: int -1, attnsFalse):if x.dtype ! torch.float32:x x.type(torch.float32)…...

vue3的watch一次性监听多个值用法

vue3的watch一次性监听多个值 1、监听单个值 watch(() > route.params.keyword, (newValue, oldValue) > {console.log(监听值变化, newVal, oldVal)state.a newValue});2、监听多个值 watch(() > [route.params.id, route.params.keyword], (newValue, oldValue) &g…...

【one-api和ollama结合使用】

将Ollama接入one-api one-api是一个开源AI中间件服务&#xff0c;可以聚合各家大模型API&#xff0c;比如OpenAI、ChatGLM、文心一言等&#xff0c;聚合后提供统一的OpenAI调用方法。举个例子&#xff1a;ChatGLM和文心一言的API调用方法并不相同&#xff0c;one-api可以对其进…...

Oracle PDB的开启和关闭

[生产环境关闭与开启Oracle PDB] 【运维场景】 在运维Oracle PDB的时候经常要开启和关闭PDB&#xff0c;对关闭和开启PDB的操作要非常熟悉。 【操作方法】 1. PDB的打开与关闭 关闭和开启DB的时候要看DB的警告日志&#xff0c;日志位置&#xff08;在Oracle用户下查看&…...

十一、动态构建UI元素

装饰器Builder 装饰器BuilderParam <font style"color:rgba(0, 0, 0, 0.9);">BuilderParam</font> 该装饰器用于声明任意UI描述的一个元素&#xff0c;类似slot占位符。 链接 简而言之&#xff1a;就是自定义组件允许外部传递 UI // SonCom 的实现略…...

智能时代的基石:神经网络

智能时代的基石&#xff1a;神经网络 第一节&#xff1a;神经网络简介 课程目标 本节课程旨在全面介绍神经网络的基本概念、结构以及其在历史发展中的重要里程碑。通过深入理解神经网络的工作原理和演变过程&#xff0c;学员将能够掌握神经网络在现实世界中的多种应用&#…...

VScode配置GIT

在Visual Studio Code&#xff08;VSCode&#xff09;中检测不到已安装的Git可以通过以下步骤来解决‌&#xff1a; ‌确认Git是否正确安装‌&#xff1a;首先&#xff0c;确保在计算机上正确安装了Git。可以通过打开命令行窗口并输入git --version来检查是否能够显示Git的版本…...

【CSS】css 如何实现固定宽高比

今天和同事讨论这个问题&#xff0c;一时间还想不到了&#xff0c;于是学习了下&#xff0c;就顺便当个记录吧 要在CSS中实现固定宽高比&#xff0c;有两种主要的方法可以选择。一种是使用新的aspect-ratio属性&#xff0c;另一种是利用padding技巧。随着现代浏览器对aspect-ra…...

使用webrtc-streamer查看实时监控

摄像头配置&#xff08;海康摄像头为例&#xff09; 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行&#xff0c;端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…...

ansible部署nginx:1个简单的playbook脚本

文章目录 hosts--ventoryroles执行命令 使用ansible向3台centos7服务器上安装nginx hosts–ventory [rootstand playhook1]# cat /root/HOSTS # /root/HOSTS [webservers] 192.168.196.111 ansible_ssh_passpassword 192.168.196.112 ansible_ssh_passpassword 192.168.196.1…...

Ubuntu安装Gitlab详细图文教程

1、环境准备 1.1、Ubuntu环境 Ubuntu24.04Sever版安装教程 1.2、更新系统 sudo apt update -y sudo apt-get update sudo apt-get upgrade 2、安装Nginx 2.1 安装nginx # 安装 apt install nginx -y 2.2 修改nginx配置⽂件 # 修改nginx配置 vim /etc/nginx/si…...

前端面试准备问题2

1.防抖和节流分别是什么&#xff0c;应用场景 防抖&#xff1a;在事件被触发后&#xff0c;只有在指定的延迟时间内没有再次触发&#xff0c;才执行事件处理函数。 在我的理解中&#xff0c;简单的说就是在一个指定的时间内&#xff0c;仅触发一次&#xff0c;如果有多次重复触…...