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

Mysql索引、事务与存储引擎 (事务、MySQL 存储引擎)

事务
一、事务的概念:
①事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
②事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。
③事务适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等。
④事务通过事务的整体性以保证数据的一致性。
⑤事务能够提高在向表中更新和插入信息期间的可靠性。

事务的ACID特点
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这是可靠数据库所应具备的几个特性。

原子性
①指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。
②事务是一个完整的操作,事务的各元素是不可分的。
③事务中的所有元素必须作为一个整体提交或回滚。
④如果事务中的任何元素失败,则整个事务将失败。
总结:事务原子性是指事务中的所有操作要么全部成功,要么全部失败回滚,不允许出现部分操作成功或失败的情况。如果事务中的任何一个操作失败,整个事务都应该回滚到之前的状态,保证数据的一致性。
一致性
①指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
②当事务完成时,数据必须处于一致状态。
③在事务开始前,数据库中存储的数据处于一致状态。
④在正在进行的事务中,数据可能处于不一致的状态。
⑤当事务成功完成时,数据必须再次回到已知的一致状态。
举例说明一下:
就好比机票预订:当一个用户预订机票时,需要将座位信息从可用状态改为已预订状态。如果在此过程中出现错误,事务应该回滚,保证座位信息的一致性。

隔离性

①指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
②对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
③修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。
④也就是说并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。
举例:还是用机票预定来举例:
当一个用户预订机票时,需要保证座位信息从可用状态改为已预订状态的操作是隔离的,即在座位信息改变时,其他用户不能同时进行预订操作,否则可能会导致数据不一致。

持久性:

在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
指不管系统是否发生故障,事务处理的结果都是永久的。
一旦事务被提交,事务的效果会被永久地保留在数据库中。

一个事务的执行不能被其他事务干扰
事务之间的相互影响分为以下几种:

  1. 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据,如果另一个事务回滚,则读取的数据是无效的。
  2. 不可重复读(Non-Repeatable Read):一个事务读取了另一个事务已提交的数据,但在事务结束前,另一个事务修改或删除了这些数据,导致读取的数据与之前不同。
  3. 幻读(Phantom Read):一个事务在读取一组数据时,另一个事务插入了新的数据,导致第一个事务再次读取时,发现多了一些数据。
  4. 丢失更新(Lost Update):两个事务同时更新同一条数据,其中一个事务的更新被另一个事务覆盖,导致数据丢失。

这些相互影响的问题可以通过使用事务隔离级别来解决。常见的事务隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。不同的隔离级别提供了不同的解决方案,可以根据具体情况选择合适的隔离级别来保证数据的一致性和完整性。

事务之间相互影响的案例:


1. 脏读(Dirty Read):一个用户正在修改银行账户余额,但还没有提交事务,此时另一个用户读取了该账户的余额,但由于修改尚未提交,读取的余额是不正确的。2. 不可重复读(Non-Repeatable Read):一个用户正在读取订单信息,但在读取过程中,另一个用户修改了订单信息,导致第一个用户再次读取时,发现订单信息已经发生了变化。3. 幻读(Phantom Read):一个用户正在读取某个商品的库存信息,但在读取过程中,另一个用户插入了新的库存信息,导致第一个用户再次读取时,发现多了一些库存信息。4. 丢失更新(Lost Update):两个用户同时修改同一条数据,其中一个用户的修改被另一个用户的修改覆盖,导致数据丢失。这些相互影响的问题可以通过使用事务隔离级别来解决。例如,使用可重复读隔离级别可以避免脏读和不可重复读问题,但仍可能出现幻读问题。使用串行化隔离级别可以避免脏读、不可重复读和幻读等问题,但会降低并发性能。因此,在实际应用中,需要根据具体情况选择合适的隔离级别来保证数据的一致性和完整性。

常见的事务隔离级别包括:

  1. 读未提交(Read Uncommitted):一个事务可以读取另一个事务未提交的数据,可能会导致脏读、不可重复读和幻读等问题。
    安全性最差 但是性能最好 (不使用)
  2. 读已提交(Read Committed):一个事务只能读取另一个事务已提交的数据,可以避免脏读问题,但仍可能出现不可重复读和幻读问题。
    安全性较差 性能较好
  3. 可重复读(Repeatable Read):一个事务在执行期间多次读取同一数据时,保证读取到的数据是一致的,可以避免脏读和不可重复读问题,但仍可能出现幻读问题。
    安全性较高 性能较差
  4. 串行化(Serializable):所有事务依次执行,每个事务都必须等待前一个事务执行完毕才能执行,可以避免脏读、不可重复读和幻读等问题,但会降低并发性能。
    安全性最高,性能最差(不使用)
以下是常见的事务隔离级别的案例:1. 读未提交(Read Uncommitted):一个用户正在修改银行账户余额,但还没有提交事务,此时另一个用户可以读取该账户的余额,即使修改尚未提交,也可以读取到未提交的数据。2. 读已提交(Read Committed):一个用户正在修改银行账户余额,但还没有提交事务,此时另一个用户不能读取该账户的余额,只有在修改提交后才能读取到修改后的数据。3. 可重复读(Repeatable Read):(mysql默认的隔离级别):一个用户正在读取订单信息,但在读取过程中,另一个用户修改了订单信息,但由于使用了可重复读隔离级别,第一个用户再次读取时,发现订单信息仍然是之前读取到的数据,不会发生变化。4. 串行化(Serializable)(相当于锁表):所有事务依次执行,每个事务都必须等待前一个事务执行完毕才能执行,可以避免脏读、不可重复读和幻读等问题,但会降低并发性能。这些隔离级别的选择需要根据具体业务需求和性能要求来确定。例如,在高并发的电商平台中,为了保证数据的一致性和完整性,可以选择使用可重复读或串行化隔离级别,但会降低并发性能。而在低并发的企业内部系统中,可以选择使用读已提交隔离级别,以提高并发性能。

mysql默认的事务处理级别是 repeatable read(可重复读取) ,而Oracle和SQL Server是 read committed(提交读:读取已经提交的数据 )

事务隔离级别的作用范围分为两种:

① 全局级:对所有的会话有效
② 会话级:只对当前的会话有效

1.查询全局事务隔离级别:

show global variables like '%isolation%';
SELECT @@global.tx_isolation;

2.查询会话事务隔离级别:

show session variables like '%isolation%';
SELECT @@session.tx_isolation; 
SELECT @@tx_isolation;

3.设置全局事务隔离级别:

set global transaction isolation level read committed;
set @@global.tx_isolation='read-committed';   #重启服务后失效

4.设置会话事务隔离级别:

set session transaction isolation level repeatable read;
set @@session.tx_isolation='repeatable-read';

事务控制语句:

BEGIN 或 START TRANSACTION:显式地开启一个事务。
COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。
ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。
SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。
ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。

准备工作:
首先创建MY的库

create database MY;
use MY;
create table perinfo(  
id int(10) primary key not null,  
name varchar(40),  
money double  
);
#插入数据
insert into perinfo values(1,'xiaoma',1000);  
insert into perinfo values(2,'xiaoyuan',1000); 
select * from perinfo;

1、测试提交事务

begin; -- 开始一个事务
update perinfo set money = money - 100 where name = 'xiaoyuan'; -- 更新名字为xiaoyuan的记录的money字段
select * from perinfo; -- 查询更新后的结果
commit; -- 提交事务
quit -- 退出MySQL命令行mysql -u root -p 重新登录数据库
use MY; 使用MY数据库
select * from perinfo; 再次查询perinfo表的数据 

2、测试回滚事务

begin; -- 开始一个事务
update perinfo set money = money + 100 where name = 'xiaoma'; -- 更新名字为xiaoma的记录的money字段
select * from perinfo; -- 查询更新后的结果
rollback; -- 回滚事务
quit -- 退出MySQL命令行mysql -u root -p -- 进入MySQL命令行
use MY; -- 选择MY数据库
select * from perinfo; -- 查询perinfo表中的所有记录并输出

3、测试多点回滚

begin; -- 开始一个事务
update perinfo set money = money + 100 where name = 'xiaoma'; -- 更新名字为xiaoma的记录的money字段
select * from perinfo; -- 查询更新后的结果
SAVEPOINT S1; -- 创建保存点S1
update perinfo set money = money + 100 where name = 'xiaoyuan'; -- 更新名字为xiaoyuan的记录的money字段
select * from perinfo; -- 查询更新后的结果
SAVEPOINT S2; -- 创建保存点S2
insert into perinfo values (3, 'my', 1000); -- 插入一条新记录select * from perinfo; -- 查询perinfo表中的所有记录并输出
ROLLBACK TO S1; -- 回滚到保存点S1
select * from perinfo; -- 查询回滚后的结果并输出

4、使用 set 设置控制事务

SET AUTOCOMMIT=0;						#禁止自动提交
SET AUTOCOMMIT=1;						#开启自动提交,Mysql默认为1
SHOW VARIABLES LIKE 'AUTOCOMMIT';		#查看Mysql中的AUTOCOMMIT值

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束。当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。
如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。
当然无论开启与否,begin; commit|rollback; 都是独立的事务。

use MY; -- 选择MY数据库
select * from perinfo; -- 查询info表中的所有记录并输出
SET AUTOCOMMIT=0; -- 设置AUTOCOMMIT参数为0,关闭自动提交
SHOW VARIABLES LIKE 'AUTOCOMMIT'; -- 查询AUTOCOMMIT参数的值
update perinfo set money = money + 100 where name = 'xiaoma'; -- 更新名字为xiaoma的记录的money字段
select * from perinfo; -- 查询perinfo表中的所有记录并输出
quit -- 退出MySQL命令行mysql -u root -p -- 进入MySQL命令行
use MY; -- 选择MY数据库
select * from perinfo; -- 查询perinfo表中的所有记录并输出

MySQL存储引擎
一、存储引擎概念介绍
MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎
存储引擎是MySQL将数据存储在文件系统中的存储方式或者存储格式

1、MySQL常用的存储引擎:
1、MyISAM
2、InnoDB

MySQL数据库中的组件,负责执行实际的数据I/O操作
MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储

MyISAM
MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的

访问速度快,对事务完整性没有要求
MyISAM 适合查询、插入为主的应用场景

MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:
.frm 文件存储表结构的定义
数据文件的扩展名为 .MYD (MYData)
索引文件的扩展名是 .MYI (MYIndex)
在这里插入图片描述

表级锁定形式,数据在更新时锁定整个表
数据库在读写过程中相互阻塞: ————》串行操作,按照顺序操作,每次在读或写的时候会把全表锁起来
会在数据写入的过程阻塞用户数据的读取
也会在数据读取的过程中阻塞用户的数据写入
特性:数据单独写入或读取,速度过程较快且占用资源相对少

MyIsam 是表级锁定,读或写无法同时进行
好处是:分开执行时,速度快、资源占用相对较少(相对)
2、MyISAM 表支持 3 种不同的存储格式⭐:
(1)静态(固定长度)表
静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。
固定长度10
存储非常迅速,容器缓存,故障之后容易恢复
id(5) char(10)
000000001

(2)动态表
动态表包含可变字段(varchar),记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。

(3)压缩表
压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。

3、MyISAM适用的生产场景
公司业务不需要事务的支持
单方面读取或写入数据比较多的业务
MyISAM存储引擎数据读写都比较频繁场景不适合
使用读写并发访问相对较低的业务
数据修改相对较少的业务
对数据业务一致性要求不是非常高的业务
服务器硬件资源相对比较差

MyIsam:适合于单方向的任务场景、同时并发量不高、对于事务要求不高的场景

InnoDB
1、InnoDB特点
支持事务,支持4个事务隔离级别(数据不一致问题)⭐⭐
MySQL从5.5.5版本开始,默认的存储引擎为 InnoDB
5.5 之前是myisam (isam) 默认

读写阻塞与事务隔离级别相关
能非常高效的缓存索引和数据
表与主键以簇的方式存储
支持分区、表空间,类似oracle数据库(5.5 ——》5.6 和5.7 第三代数据库8.0后版本)
支持外键约束,5.5前不支持全文索引,5.5后支持全文索引

对硬件资源要求还是比较高的场合
行级锁定,但是全表扫描仍然会是表级锁定(select ),如

update table set a=1 where user like ‘%lic%;
InnoDB 中不保存表的行数,如 select count(*) from table; 时,InnoDB 需要扫描一遍整个表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。需要注意的是,当 count(*)语句包含 where 条件时 MyISAM 也需要扫描整个表
对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字段一起建立组合索引

清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表(truncate)

死锁⭐⭐⭐⭐
MyISAM :表级锁定
innodb :行级锁定

当两个请求分别访问/读取2行记录,同时又需要读取对方的记录数据,因为(行锁的限制)而造成了阻塞的现象

怎么解决死锁
show

1. 预防死锁:通过设计算法或协议,避免进程发生死锁。例如,避免进程同时请求多个资源,或者规定进程只能按照一定的顺序请求资源。2. 避免死锁:通过资源分配策略,避免进程发生死锁。例如,银行家算法就是一种避免死锁的算法,它通过预测进程的资源需求,避免分配资源导致死锁。3. 检测死锁:通过检测系统中的死锁情况,及时采取措施解除死锁。例如,可以通过资源分配图或者进程等待图来检测死锁。4. 解除死锁:通过释放资源或者撤销进程,解除死锁。例如,可以通过抢占资源、撤销进程或者进行资源回收等方式来解除死锁。

企业选择存储引擎依据
业务场景如果并发量大,什么并发量大,读写的并发量大,那我们建议使用innoDB 如果单独的写入或是插入单独的查询,那我们建议使用没有INNODB

表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;

MyISAM不支持事务,也不支持外键约束,只支持全文索引,数据文件和索引文件是分开保存的
需要考虑每个存储引擎提供了哪些不同的核心功能及应用场景

• 支持的字段和数据类型
▷所有引擎都支持通用的数据类型
▷但不是所有的引擎都支持其它的字段类型,如二进制对象

• 锁定类型:不同的存储引擎支持不同级别的锁定
▷表锁定: MyISAM 支持
▷行锁定: InnoDB 支持

索引的支持
•建立索引在搜索和恢复数据库中的数据时能显著提高性能
•不同的存储弓|擎提供不同的制作索引的技术
•有些存储弓|擎根本不支持索引

事务处理的支持
•提高在向表中更新和插入信息期间的可靠性
•可根据企业业务是否要支持事务选择存储引擎

二、查看系统支持的存储引擎
show engines;

三、查看表使用的存储引擎
方法一

show table status from 库名 where name='表名'\G;例:show table status from SCHOOL where name='info'\G;

方法二

use 库名;
show create table 表名;例:use SCHOOL;
show create table info;

四、修改存储引擎

方法一:通过 alter table 修改
use 库名;
alter table 表名 engine=MyISAM;例:use SCHOOL;
alter table info engine=myisam;
show create table info;

方法二:通过修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务

quit
vim /etc/my.cnf
[mysqld]
default-storage-engine=INNODBsystemctl restart mysqld.service
修改完记得重启mysql服务
#注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。

方法三:通过 create table 创建表时指定存储引擎

use 库名;
create table 表名(字段1 数据类型,...) engine=MyISAM;例:mysql -u root -p
use SCHOOL;
create table hellolic (name varchar(10),age char(4)) engine=myisam;

扩展
面试题:
1、索引——》mysql 优化
在合适的字段上创建索引

在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行没有有索引的情况下扫描全表来定位某行的数据
)一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址

使用索引后,是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,因此能加快数据库的查询速度。

2、事务特性(ACID)
事务ACID
原子性 (一个整体,要么都执行要么都不执行)
一致性 要求事务前后数据的完整和一致
隔离性 要求多个事务之间不相互影响依赖(4个影响,4个隔离级别)
持久性 当事务提交后将永久保存,不可再回滚

3、数据不一致的情况(四种)
(1)read uncommitted(未提交读) : 读取尚未提交的数据 :不解决脏读
允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数居。

(2)read committed(提交读):读取已经提交的数据 :可以解决脏读
只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别〈不重复读)。

(3)repeatable read(可重复度):重读读取:可以解决脏读 和 不可重复读 —mysql默认的
可重复读。无论其他事务是否修改并提交了数据,在这个事务中看到的数据值始终不受其他事务影响

(4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表
完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞。

mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed 。

4、MyISAM 和 INNODB区别(差异)

  • InnoDB支持事物,而MylSAM不支持事物。
  • lnnoDB支持行级锁,而MylSAM支持表级锁.
  • InnoDB支持MVCC,而MlSAM不支持。
  • lnnoDB支持外键。而MyISAM不支持。
  • lnnoDB全文索引,而MylSAM支持。

INNODB
支持事务读写并发外键5.5版本以后支持全文索引行级锁定(在用like模糊匹配全表扫描时会表级锁定)对硬件资源要求较高,特别是内存高可以提高缓存能力
三个文件存储.frm(表结构) .ibd (表数据文件同时也是索引文件) db.opt (表属性文件)适合场景有事务要求的一致性要求高的读写并发量高的
MyISAM
不支持事务外键表级锁定
读写会相互阻塞支持全文索引资源消耗较低
三个文件存储 .frm(表结构).MYI(索引文件).MYD(数据文件)三种存储格式静态表动态表压缩表
适合场景单独的读取或插入

面试题:

Mysql的存储引擎有这么多种,实际我们在平时用的最多的莫过于InnoDB和MyISAM了。

面试题:mysql有哪些存储引擎?
InnoDB和MyISAM

他们都有什么特点和区别呢?
MyISAM和InnoDB的特点:

MyISAM :默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。

InnoDB :支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发和QPS较高的情况。注: 在MySQL 5.5之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。

MyISAM和InnoDB的区别:

InnoDB支持事务,MyISAM不支持。对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务;
InnoDB支持外键,而MyISAM不支持。
InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。而MyISAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快。
Innodb不支持全文索引,而MyISAM支持全文索引,查询效率上MyISAM要高;5.7以后的InnoDB支持全文索引了。
InnoDB支持表、行级锁(默认),而MyISAM支持表级锁。
InnoDB表必须有主键(用户没有指定的话会自己找或生产一个主键),而Myisam可以没有。
Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI。
Innodb:frm是表定义文件,ibd是数据文件。

Myisam:frm是表定义文件,myd是数据文件,myi是索引文件。

相关文章:

Mysql索引、事务与存储引擎 (事务、MySQL 存储引擎)

事务 一、事务的概念: ①事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。 ②事务是一个不可分割的工…...

Doris(六)--通过 Canal 同步数据到 Doris 中

pre 开启 mysql Binlog 网上有众多方法,自行百度。 查询是否成功,在 mysql 客户端输入 show BINARY LOGS; 出现如下提示,即表示 big log 正常开启。 1,下载 canal 服务端 传送门 注意:下载 canal.deployer-xxx …...

快手Java一面,全是基础

现在已经到了面试招聘比较火热的时候,准备面试的过程中,一定要多看面经,多自测! 今天分享的是一位贵州大学的同学分享的快手一面面经。 快手一面主要会问一些基础问题,也就是比较简单且容易准备的常规八股&#xff0…...

未来芯片设计领域的药明康德——青芯如何在N个项目间游走平衡

总部位于上海张江的青芯半导体(CyanSemi),ASIC定制设计是其核心业务之一。 青芯在单纯的设计服务维度之上,打造了从设计到生产的一套完整ASIC定制业务,不仅做芯片设计,还提供封装、测试服务,也…...

【跟小嘉学 Rust 编程】十九、高级特性

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

pandas由入门到精通-数据清洗-缺失值处理

pandas-02-数据清洗&预处理 A.缺失值处理1. Pandas缺失值判断2. 缺失值过滤2.1 Series.dropna()2.2 DataFrame.dropna()3. 缺失值填充3.1 值填充3.2 向前/向后填充文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清…...

Redis 教程 - 主从复制

Redis 教程 - 主从复制 Redis 支持主从复制(Master-Slave Replication),通过主从复制可以将一个 Redis 服务器(主节点)的数据复制到其他 Redis 服务器(从节点),以实现数据的冗余备份…...

[递归] 子集 全排列和组合问题

1.1 子集I 思路可以简单概括为 二叉树&#xff0c;每一次分叉要么选择一个元素&#xff0c;要么选择空&#xff0c;总共有n次&#xff0c;因此到n1进行保存结果&#xff0c;返回。像这样&#xff1a; #include <cstdio> #include <vector> #include <algorithm&…...

ELK安装、部署、调试(四)KAFKA消息队列的安装和部署

1.简介 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c;搜索和其他用户的行动&#xff09;是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通…...

半导体晶片机器视觉测量及MARK点视觉定位

半导体晶片机器视觉测量及MARK点视觉定位 客户的需求: 检测内容&#xff1a; SMT行业晶片位置角度与PCB板Mark点位置的测试测量 检测要求&#xff1a; 精度0.04mm&#xff0c;移动速度100mm/s 视觉可行性分析: 对样品进行了光学实验&#xff0c;并进行图像处理&#xff0c…...

ranger无法同步用户问题解决

1.首先就是定位日志,日志目录 cd /var/log/ranger/usersync 定位到问题报错如下: LdapDeltaUserGroupBuilder.getUsers() failed with exception:java.naming.AuthticationExceptiom :[LDAP:error code 49 - Invalid Credentials]:remaing name ‘ouPeople,dc*.dccom’ 解决办法…...

使用通信顺序进程(CSP)模型的 Go 语言通道

在并发编程中&#xff0c;许多编程语言采用共享内存/状态模型。然而&#xff0c;Go 通过实现 通信顺序进程&#xff08;CSP&#xff09;模型来区别于众多。在CSP中&#xff0c;程序由不共享状态的并行进程组成&#xff1b;相反&#xff0c;它们通过通道进行通信和同步操作。因此…...

VPN网关

阿里云VPN网关(VPN Gateway&#xff0c;简称VPN)是一款基于Internet&#xff0c;通过加密通道将企业数据中心、办公网或终端与专有网络(VPC) 安全可靠连接起来的服务。 VPN网关提供IPsec-VPN和SSL-VPN两种。 网络连接方式应用场景IPsec-VPN支持在企业本地数据中心、企业办公网…...

产品展示视频制作的要点

制作产品展示视频时通过精心策划的视频剧本和拍摄手法&#xff0c;可以准确地呈现活动的目的、主题和特点&#xff0c;让观众更好地理解和认同活动的意义。深圳产品活动视频制作公司老友记小编还为您整理了以下一些重要的制作要点&#xff1a; 1.明确目标受众&#xff1a;了解你…...

appium+python自动化测试

获取APP的包名 1、aapt即Android Asset Packaging Tool&#xff0c;在SDK的build-tools目录下。该工具可以查看apk包名和launcherActivity 2、在android-sdk里面双击SDK-manager,下载buidl-tools 3、勾选build-tools&#xff0c;随便选一个版本&#xff0c;我这里选的是24的版…...

【AI辅助办公】PDF转PPT,移除水印

PDF转PPT 将PDF上传链接即可转换成PPT。​​​​​​ ​​​​​​​ https://www.camscanner.com/pdftoppthttps://www.camscanner.com/pdftoppt​​​​​​​​​​​​​​移除水印 第一步&#xff1a;打开视图-宏 第二步&#xff1a;输入宏名&#xff08;可以是人以文字…...

ssm农业视频实时发布管理系统源码

ssm农业视频实时发布管理系统源码108 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm package com.controller;import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; impo…...

【100天精通python】Day48:python Web开发_WSGI接口与使用

目录 1 WSGI接口 1.1 CGI 简介 1.2 WSGI 简介 1.3 定义 WSGI 接口 1.3.1 应用程序&#xff08;Application&#xff09; 1.3.2 服务器&#xff08;Server&#xff09; 1.4 WSGI 接口的使用示例 1.5 WSGI接口的优势 1 WSGI接口 上一节实现了静态服务器&#xff0c;但是当…...

Understanding Lockup Cells

工具会分析扫描链和EDT逻辑之间的控制时序元素的时钟的时序关系,当必须要同步时钟并保持数据完整性时插入边沿触发寄存器(lockup cells)。 可以使用report_edt_lockup_cells命令来展示工具已经插入的lockup cells的详细报告。 Lockup Cell Insertion 工具会分析控制时序元…...

javaCV实现java图片ocr提取文字效果

引入依赖&#xff1a; <dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.5</version></dependency> 引入中文语言训练数据集&#xff1a;chi_sim GitHub - tesseract-ocr…...

七牛云OSS存储

前言: 七牛云的存储项目的附件,需要开发一套七牛云的工具类,可以使用该工具类进行七牛云服务器进行文件的上传与下载操作; 七牛云的文档学习: 相关的依赖项的配置: <dependency><groupId>com.amazonaws</groupId><artifactId>aws-java-sdk-s3…...

11.物联网lwip,网卡原理

一。LWIP协议栈内存管理 1.LWIP内存管理方案 &#xff08;1&#xff09;堆heap 1.灰色为已使用内存 2.黑色为未使用内存 3.紫色为使用后内存 按照某种算法&#xff0c;把数据放在内存块中 &#xff08;2&#xff09;池pool 设置内存池&#xff0c;设置成大小相同的内存块。 2…...

视频监控/视频汇聚/视频云存储EasyCVR平台接入华为ivs3800平台提示400报错,该如何解决?

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频云存储/安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频…...

WordPress主题Zing V2.2.1/模块化WordPress响应式通用企业商城主题

WordPress主题Zing V2.2.1&#xff0c;模块化WordPress响应式通用企业商城主题。 功能介绍 百度熊掌号文章实时推送、原创保护 多设备支持自适应布局&#xff0c;支持电脑、Pad、手机以及各种浏览器 SEO优化首页、文章、页面、分类均支持自定义标题、关键字和描述 速度优化…...

【无需公网IP】在树莓派上搭建Web站点

目录 1.概述 2.使用 Raspberry Pi Imager 安装 Raspberry Pi OS 3.设置 Apache Web 服务器 3.1测试 web 站点 3.2安装静态样例站点 3.3将web站点发布到公网 3.4安装 Cpolar 3.5cpolar进行token认证 3.6生成cpolar随机域名网址 3.7生成cpolar二级子域名 3.8将参数保存…...

出差在外,远程访问企业局域网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…...

Vue2-replace属性、编程式路由导航、缓存路由组件、两个新的生命周期钩子、路由守卫、路由器工作模式

&#x1f954;&#xff1a;如果事与愿违&#xff0c;那一定是上天另有安排 更多Vue知识请点击——Vue.js VUE2-Day13 router-link的replace属性编程式路由导航1、什么是编程式路由导航2、如何编码3、使用案例示例说明 缓存路由组件两个新的生命周期钩子路由守卫1、路由元信息2、…...

C语言:指针的运算

一、指针 或 - 整数 指针 或 - 整数表示指针跳过几个字节&#xff08;具体跳过几个字节由指针类型决定&#xff09; 本文不做具体讲解&#xff0c;详解跳转链接&#xff1a; 《C语言&#xff1a;指针类型的意义》 二、指针 - 指针 前提条件&#xff1a;指针类型相同并且指向同…...

设计模式的使用——模板方法模式+动态代理模式

一、需求介绍 现有自己写的的一套审批流程逻辑&#xff0c;由于代码重构&#xff0c;需要把以前的很多业务加上审批的功能&#xff0c;再执行完审批与原有业务之后&#xff0c;生成一个任务&#xff0c;然后再统一处理一个任务&#xff08;本来是通过数据库作业去处理的&#x…...

C++学习记录——삼십 智能指针

文章目录 1、为什么需要智能指针&#xff1f;2、内存泄漏3、智能指针的使用及原理1、RAII思想2、拷贝问题1、unique_ptr2、shared_ptr1、多线程2、循环引用3、定制删除器 1、为什么需要智能指针&#xff1f; 看一个场景 int div() {int a, b;cin >> a >> b;if (b…...