数据库考点之事务
如题:2019年4月
分析:三题都答错,可见对这块的无知....。
1、什么是事务?
用户定义的完整的工作单元,要么全部执行,要么全部不执行,以此保证数据的一致性,实现多用户,并发操作。
2、特征:
- 原子性(Atomicity)
一个事务的多个数据库操作是一个不可分隔的原子单元,只有所有的操作执行成功,整个事务才提交,事务中任何一个数据库操作失败,已经执行的任何操作都必须撤销,让数据库返回到初始状态。
- 一致性(Consistency)
事务执行完毕后,由一个一致性状态转到另一个一致性状态,是以一致性为基础的逻辑操作,以此保证数据不会被破坏。
- 隔离性(Isolation)
在并发数据操作时,不同的事务拥有各自数据空间,彼此独立。一个事务的执行不受其他事务的干扰。
数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但并发性越弱。
- 持久性(Durabiliy)
事务提交后,对数据库改变是永久性的,即故障,也能恢复。
以上就是事务的ACID特征,书上没有说明ACID是啥,挺突兀的。
3、事务并发带来的问题,典型三种
可类比操作系统对线程的并发控制。
- 丢失更新
同时读同一数据并修改,当一个事务提交或撤销,覆盖另一事务已经提交的结果。
- 不可重复读(Unrepeatable Read)
指A事务读取了B事务已经提交的更改数据,当事务A再次读时,无法得到与前一次读数据一致的数据。
- 脏读(Dirty Read)
事务(A)读取另外事务(B)尚未提交的更改数据,并在读取的数据的基础上操作。如果恰巧 B事务回滚,那么 A事务读到的数据根本是不被承认的。
4、如何解决并发操作带来的问题,方法之一 锁
- 锁的本质:
允许或阻止一个事务对一个数据的存取特权,22填空题的答案
- 锁的类型:
A、共享锁(读锁)Shared Lock
针对同一块数据,多个读操作可以同时进行而不会互相影响。
B、排他锁(写锁)Exculusive Lock
当前写操作没有完成前,阻断其他写锁和读锁。
- 锁的粒度,详见后面扩展:mysql锁机制
按锁的粒度划分,锁可分为表级锁、行级锁、页级锁。
A、行级锁
开销大,加锁慢,会出现死锁,锁定力度最小,发生锁冲突的概率最低,并发度高。
B、表级锁
开销小,加锁快,不会出现死锁,锁定力度大,发生冲突所的概率高,并发度低。
C、页面锁
开销和加锁时间介于表锁和行锁之间,会出现死锁,锁定力度介于表和行行级锁之间,并发度一般。
D、对整个数据库加锁
开销低,控制简单,不会出现死锁,并发性最低
- 锁的级别:详见扩展:锁级别设置
SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。
0级封锁:不重写其他非0级封锁事务的未提交的更新数据。
Read Uncommitted(读取未提交内容)
本隔离级别,事务可以读取其他未提交事务的执行结果。读取未提交的数据,也被称之为脏读(Dirty Read)。
1级封锁:不允许重写未提交的更新数据,防止更新丢失。
Read Committed(读取提交内容)
大多数数据库系统的默认隔离级别(但不是MySQL默认的)。事务只能读取其他事务已经提交的执行结果。本隔离级别支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理其间可能会有新的commit,所以同一select可能返回不同结果。
2级封锁,被封锁的事务即不重写也不读未提交的更新数据,防止了读脏数据。
Repeatable Read(可重读)
MySQL默认的事务隔离级别,会给查询的记录做快照,直到事务结束。确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,会导致幻读(Phantom Read)。幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了幻读问题。
3级封锁,不读未提交的更新数据,也不写(包括读操作)未提交的数据。防止了不可重读问题。保证了多事务的可串行化
Serializable(可串行化)
最高的隔离级别,对同一条记录读和修改的多个事务只能结束一个,才能开始下一个。
通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。在每个读的数据行上加上共享锁,可能导致大量的超时现象和锁竞争。
5、事务实例:
事务提交还是回滚,可以在事务结束处判断是否出现错误,如果出现,回滚。如果没有错误,提交事务。
使用自定义条件来决定事务是提交还是回滚。
- 由错误决定事务提交或回滚
在存储过程中使用事务,在事务的末尾判断是否有错误,插入失败,则回滚事务。
创建两张表,存储ID、姓名、年龄,创建存储过程将A表的指定ID的记录转移到B表。
CREATE TABLE ta
(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(10),
age INT
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into ta values(1, '孙悟空', 500);
insert into ta values(2, '唐僧', 30);CREATE TABLE tb
(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(10),
age INT
)ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into tb values(1, '孙悟空', 500);
insert into tb values(3, '猪八戒', 100);
CREATE PROCEDURE move(num INT)
BEGIN
DECLARE errorinfo INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET errorinfo=1;
START TRANSACTION;
INSERT INTO tb SELECT * FROM ta WHERE id=num;
DELETE FROM ta WHERE id=num;
IF errorinfo=1 THEN ROLLBACK;
ELSECOMMIT;
END IF;
END
将ID为2的记录从A表转移到B表call move(2);
- 由自定义条件决定事务提交或回滚
创建两个表,每个表含账户、姓名、余额信息,创建一个存储过程,从A表中的一个账户转账一定金额到B表的一个账户,如果转出账户的余额不足,则回滚,否则提交。
create table accountA
(
account INT PRIMARY KEY NOT NULL,
name VARCHAR(10),
balance DOUBLE
)ENGINE=innoDB default CHARSET=utf8;insert into accountA VALUES(1, '孙悟空', 10000);
insert into accountA VALUES(2, '唐僧', 20000);
create table accountB
(
account INT PRIMARY KEY NOT NULL,
name VARCHAR(10),
balance DOUBLE
)ENGINE=innoDB default CHARSET=utf8;insert into accountB VALUES(1, '孙悟空', 10000);
insert into accountB VALUES(2, '唐僧', 20000);
CREATE PROCEDURE transfer(fromaccout INT,toaccount INT, num DOUBLE)
BEGIN
DECLARE m DOUBLE;
START TRANSACTION;
UPDATE accountB SET balance=balance + num WHERE account=toaccount;
UPDATE accountA SET balance=balance - num WHERE account=fromaccout;
SELECT balance INTO m from accountA WHERE account=fromaccout;
IF m < 0THEN ROLLBACK;
ELSE COMMIT;
END IF;
END
从A表的账户2转出25000元到B表的账户2。call transfer(2,2,25000);
此时A表的余额不足,回滚
扩展:
- 事务类型:
A、自动提交事务
系统默认每个TRANSACT-SQL命令都是一个事务处理,由系统自动开始并提交。
B、隐式事务
不需要显示开始事务,需要显示提交,隐式事务是任何单独的INSERT、UPDATE 或者DELETE语句构成。当有大量的DDL和DML命令执行时会自动开始,并一直保持到用户明确提交为止。
SHOW VARIABLES 查看变量。
SET AUTOCOMMIT=0,关闭自动提交功能。
需要显示提交或者回滚。
update tablename set sname='孙悟空' where studentid='000000000000003';
commit;
或rollback;
C、显示事务
显示事务是用户自定义事务,以START TRANSACTION(事务开始)开头,以 COMMIT(事务提交)或者 ROLLBACK(回滚事务)语句结束。
start transaction
update tablename set sname='孙悟空' where studentid='000000000000003';
commit
或rollback
D、分布式事务
跨越多个服务器的事务称为分布式事务。从MySQL5.03开始支持分布式事务。
- 事务控制
A、开始事务
标记一个显式事务的开始点,即事务开始。其语法如下:START { TRAN | TRANSACTION }
B、提交事务
标记一个成功的隐性事务或显式事务的结束,即事务提交。其语法如下:COMMIT
C、回滚事务
将显式事务或隐性事务回滚到事务的起点或事务内的某个保存点。其语法如下:ROLLBACK
D、事务设置
SET AUTOCOMMIT 可以修改当前连接事务提交方式。
SET AUTOCOMMIT=0,则需要明确的命令进行提交或者回滚。
锁级别设置
- 事务隔离级别设置
用户可以用SET TRANSACTION语句改变单个会话或者所有新进连接的隔离级别。语法如下:SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
默认的行为(不带session和global)是为下一个(未开始)事务设置隔离级别。如果使用GLOBAL关键字,语句在全局对新开始创建的所有新连接设置默认事务级别,需要SUPER权限。使用SESSION关键字为将来在当前连接上执行的事务设置默认事务级别。 任何客户端都能自由改变会话隔离级别,或者为下一个事务设置隔离级别。
查询全局和会话事务隔离级别:
SELECT @@global.tx_isolation;
SELECT @@session.tx_isolation;
SELECT @@tx_isolation;
通过mySQL配置文件修改全局事务隔离级别,设置全局会话默认事务隔离级别。
[mysqld]
xxxxxxx
transaction-isolation=read-committed
重启mySQL服务,生效。
设置当前会隔离级别
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
- 事务隔离级别验证
不同会话的隔离级别
不同会话的事务隔离级别不同
在会话1终端查看当前会话的事务隔离级别select @@tx_isolation
查询结果为:可重复读REPEATABLE-READ
设置当前会话事务隔离级别为READ UNCOMMITTEDSET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
打开另一个SQL Manager终端作为会话2,查看当前会话的事务隔离级别select @@tx_isolation
查询结果为:可重复读REPEATABLE-READ
创建一张表,含ID、姓名、年龄字段,用于验证不同的事务隔离级别。
CREATE TABLE ta
(
id INT NOT NULL PRIMARY KEY,
name VARCHAR(10),
age INT
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into ta values(1, '孙悟空', 500);
insert into ta values(2, '唐僧', 30);
SQL Manager Lite客户端的事务回滚机制失效,以下实验使用Navicat for MySQL客户端。
验证READ UNCOMMITTED隔离级别
打开一个会话1,设置事务隔离级别为READ UNCOMMITTEDSET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
打开会话2,开始一个事务,更新ID为1的记录的age为1000。
start TRANSACTION;
update ta set age=1000 where id =1;
在会话1查看ta表中ID为1的信息,age已经为1000。select * from ta;
会话1的事务隔离级别允许读取未提交的数据。
在会话2回滚事务ROLLBACK;
会话1和会话2查询ta表中ID为1的记录,age为500
验证READ COMMITTED隔离级别
打开一个会话1,设置事务隔离级别为READ COMMITTEDSET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED
打开会话2,开始一个事务,更新ID为1的记录的age为5000。
start TRANSACTION;
update ta set age=5000 where id =1;
在会话1查看ta表中ID为1的信息,age为500。select * from ta;
会话1的事务隔离级别不允许读取未提交的数据。
在会话2提交事务COMMIT;
会话1查询ta表中ID为1的记录,age为5000
验证REPEATABLE READ隔离级别
打开一个会话1,设置事务隔离级别为REPEATABLE READSET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
在会话1,开始一个事务,查询ID为1的记录的age为5000。
start TRANSACTION;
SELECT * FROM ta where id =1;
在会话2更新ta表中ID为1的信息,age为1000。UPDATE ta SET age=1000 WHERE id=1;
在会话2查看ta表中ID为1的信息,age已经为1000。select * from ta WHERE id=1;
在会话1再次查看ta表中ID为1的信息,age仍旧为5000。select * from ta WHERE id=1;
在会话1提交事务COMMIT;
会话1查询ta表中ID为1的记录,age已经为1000。
验证SERIALIZABLE隔离级别
打开一个会话1,设置事务隔离级别为SERIALIZABLESET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE
打开会话2,开始一个事务,更新ID为1的记录的age为5000。
start TRANSACTION;
update ta set age=5000 where id =1;
在会话1开始一个事务,查看ta表中ID为1的信息,会话1处于等待状态。
start TRANSACTION;
select * from ta;
在会话2提交事务后,COMMIT;
会话1查询SQL执行完毕,结果为5000。
mysql锁机制
MySQL的锁机制比较简单,最显著的特点是不同的存储引擎支持不同的锁机制。
MyISAM和MEMORY存储引擎采用表级锁。
InnoDB支持行级锁、表级锁,默认情况采用行级锁。
表级锁
- 表级锁简介
MyISAM存储引擎和InnoDB存储引擎都支持表级锁。
MyISAM存储引擎支持表级锁,为了保证数据的一致性,更改数据时,防止其他人更改数据,可以人工添加表级锁。可以使用命令对数据库的表枷锁,使用命令对数据库的表解锁。
给表加锁的命令Lock Tables,给表解锁的命令Unlock Tables
MyISAM引擎在用户读数据自动加READ锁,更改数据自动加WRITE锁。使用lock Tables和Unlock Tables显式加锁和解锁。
- 添加表级读锁
打开会话1,创建表
CREATE TABLE tc
(
id INT,
name VARCHAR(10),
age INT
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
插入两条记录:
insert into tc values(1, '孙悟空', 500);
insert into tc values(3, '猪八戒', 100);
对表加READ锁lock tables tc read;
加锁后只可以查询已经加锁的表,select * from tc;
查询没有加锁的表将失败select * from ta;
打开会话2,对已经加锁的表进行查询,成功。select * from tc;
对加锁的表tc进行更新操作,将失败update tc set age=100 where id=1;
会话1中使用LOCK TABLE命令给表加了读锁,会话1可以查询锁定表中的记录,但更新或访问其他表都会提示错误;会话2可以查询表中的记录,但更新就会出现锁等待。
在会话1对表进行解锁,会话2的更新操作成功。unlock tables;
在会话1,再次锁定表tc,后面带local参数。lock tables tc read local;
Local参数允许在表尾并发插入,只锁定表中当前记录,其他会话可以插入新的记录
在会话2插入一条记录insert into tc values(2, '唐僧', 20);
在会话1查看tc表的记录,无插入记录select * from tc;
- 设置表级锁并发性
READ锁是共享锁,不影响其他会话的读取,但不能更新已经加READ锁的数据。MyISAM表的读写是串行的,但是总体而言的,在一定条件下,MyISAM表也支持查询和插入操作的并发进行。
MyISAM存储引擎有一个系统变量concurrent_insert,用以控制其并发插入的行为,其值分别可以为0、1或2。
0:不允许并发操作
1:如果MyISAM表中没有空洞(即表的中间没有被删除的行),MyISAM允许在一个进程读表的同时,另一个进程从表尾插入记录,是MySQL的默认设置。
2:无论MyISAM表中有没有空洞,都允许在表尾并发插入记录。
在MySQL配置文件添加,concurrent_insert=2,重启mySQL服务设置生效。
- 验证表级锁的并发性
设置concurrent_insert为0
在会话1对表tc加锁lock tables tc read local;
在会话2插入一条记录,此时tc表被锁定,进入等待insert into tc values(4, '沙悟净', 30);
在会话1解锁表tc,此时会话2插入成功unlock tables;
设置concurrent_insert为1
在会话1删除ID为3的记录delete from tc where id=3;
在会话1对表tc加锁lock tables tc read local;
在会话2插入一条记录,此时tc表被锁定,并且表中有空洞,进入等待insert into tc values(5, '白骨精', 1000);
在会话1解锁表tc,此时会话2插入成功,此时表中已经没有空洞unlock tables;
在会话1对表tc加锁lock tables tc read local;
在会话2插入一条记录,插入成功,支持有条件并发插入insert into tc values(6, '白骨精', 1000);
在会话1解锁表tcunlock tables;
设置concurrent_insert为2
在会话1删除ID为5的记录,创造一个空洞delete from tc where id=5;
在会话1对表tc加锁lock tables tc read local;
在会话2插入一条记录,插入成功,支持无条件并发插入insert into tc values(7, '蜘蛛精', 1000);
在会话1解锁表tcunlock tables;
- 添加表级写锁
添加表级写锁语法如下:LOCK TABLES tablename WRITE;
不允许其他会话查询、修改、插入记录。
行级锁
- 行级锁简介
InnoDB存储引擎实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control)。MVCC的优点是读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能。
在MVCC并发控制中,读操作可以分成两类:快照读 (snapshot read)与当前读 (current read)。
快照读,读取的是记录的可见版本 (有可能是历史版本),不用加锁。
当前读,读取的是记录的最新版本,并且当前读返回的记录都会加上锁,保证其他事务不会再并发修改。事务加锁,是针对所操作的行,对其他行不进行加锁处理。
快照读:简单的SELECT操作,属于快照读,不加锁。select * from table where ?;
当前读:特殊的读操作,INSERT/UPDATE/DELETE,属于当前读,需要加锁。
select * from table where ? lock in share mode;
select * from table where ? for update;
insert into table values (…);
update table set ? where ?;
delete from table where ?;
以上SQL语句属于当前读,读取记录的最新版本。并且,读取之后,还需要保证其他并发事务不能修改当前记录,对读取记录加锁。其中,除了第一条语句,对读取记录加S锁 (共享锁)外,其他的操作,都加的是X锁 (排它锁)。
- 验证快照读
打开会话1,创建一个表,含ID、姓名、年龄
CREATE TABLE td
(
id INT ,
name VARCHAR(10),
age INT
)ENGINE=innoDB DEFAULT CHARSET=utf8;
在插入两条记录
insert into td values(1, '孙悟空', 500);
insert into td values(2, '猪八戒', 100);
在会话1开始事务start transaction;
在会话1查询ID位1的记录信息select * from td where id =1;
打开会话2,更新ID为1的age为1000update td set age=1000 where id=1;
在会话2查看ID为1的age已经更新为1000。select * from td where id =1;
在会话1查看ID为1的age,仍然为500。select * from td where id =1;
在会话1提交事务COMMIT;
在会话1查看ID为1的age,已经为1000。
- 验证当前读
在会话1开始事务start transaction;
在会话1给select语句添加共享锁。select * from td where id=1 lock in share mode;
在会话2,更新ID为1的age的值为100,进入锁等待update td set age=100 where id=1;
在会话1提交事务COMMIT;
会话2的更新操作成功。
- 验证事务给记录加锁
在会话1开始事务start transaction;
在会话1更新ID为1的age的值为500。update td set age=500 where id=1;
在会话2开始事务start transaction;
在会话2更新ID为2的age的值为1000,此时进入锁等待update td set age=1000 where id=2;
td表没有指定主键,事务不支持行级锁。会话1的事务给整张表加了锁。
在会话1提交事务,此时会话2的修改成功COMMIT;
在会话2提交事务,解除对表的锁定COMMIT;
在会话1,给表的ID增加主键alter table td add primary key(id);
在会话1开始事务start transaction;
在会话1更新ID为1的age的值为5000update td set age=5000 where id=1;
在会话2上开始事务start transaction;
在会话2上修改ID为2的get的值为10000,更新成功,说明会话1只锁定了ID为1的行。update td set age=10000 where id=2;
在会话2上更新ID是1的age值为100,出现等待。因为会话1给ID为1的行添加了独占锁。update td set age=5000 where id=1;
在会话1提交事务COMMIT;
在会话2提交事务COMMIT;
在会话1查询,会话1和会话2对age列的修改都生效select * from td;
- 死锁的产生
A事务添加共享锁后,B事务也可以添加共享锁。A事务UPDATE锁定记录,处于等待中,于此同时B事务也UPDATE更新锁定的记录,就产生死锁。
在会话1开始事务start transaction;
在会话1查询ID是1的记录,并添加共享锁。select * from td where id=1 lock in share mode;
在会话2开始事务start transaction;
在会话2查询ID是1的记录,并添加共享锁。select * from td where id=1 lock in share mode;
在会话1更新ID为1的age值为,等待会话2释放共享锁update td set age=200 where id=1;
在会话2更新ID为1的age为,会话2发现死锁,回滚事务。update td set age=200 where id=1;
在会话1提交事务COMMIT;
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Spart编程:词频统计练习 RDD操作 2020.10.11
文章目录词频统计练习词频统计练习 val lines sc.textFile("file:///usr/local/spark/mycode/wordcount/word.txt")val wordCount lines.flatMap(line > line.split(" ")).map(word > (word,1)).reduceByKey((a,b) > ab) wordCount.collect() …...
2024/5/2 19:28:21 - 万圣节活动BANNER设计有方案了吗?拿走精品PSD分层模板!
马上就要到万圣节了,各位大佬的海报都做好了嘛? Trick-or-treat! 一大波高质量PSD分层banner海报即将来袭! 给有节日促销的商家准备好了活动海报,不在苦恼怎么进行宣传! 分层就是这么牛X! 蝙蝠城堡 万圣…...
2024/5/2 13:33:55 - Rxjava2 操作符 compose
compose字面意思为组成。Rxjava的链式调用虽然很方便,但在很多时候也显得冗余。 1、比如线程的切换。绝大多时候都是固定的 .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())2、比如特定格式的数据处理。例如网络请求的返回的数据&…...
2024/5/2 17:22:34 - 星星之火-13: 从宇宙基本正余弦电磁波看中国历史发展周期
无线电磁波整个宇宙的基本波,是整个无线通信的基础 无线电磁波体现出波的特性,无论是可见光,还是无线电波,都是电磁波。 中国的历史的发展居然也呈现"波”的特性 股市的波浪理论: 我们可看到宇宙基本波的神奇之处…...
2024/5/1 19:28:43 - 一体式污水流量计在污水处理站的应用
随着全球人口的快速增长、工业的快速发展、全球水资源的快速恶化和日益严重的“水危机”。针对这种情况,中国政府将在“十一五”期间投资3000亿元建设和重建数千家污水处理厂,以促进城市污水的处理和利用,减少污染。在这样的背景下࿰…...
2024/5/8 6:11:18 - [出海创投] 新加坡无人零售路径逐渐清晰
声明:转发自https://www.yan.sg/wurenlingshou/, 请支持和尊重版权,如有侵权请告知删除。 今年,突如其来的新冠肺炎疫情给不少行业造成了巨大冲击。不过,对于无人零售来说,同时也带来了需求和机遇。为了阻…...
2024/4/23 2:19:04 - 学习笔记(10):R语言入门基础-创建列表
立即学习:https://edu.csdn.net/course/play/24913/285706?utm_sourceblogtoedu 4.1 创建列表 a<-list(姓名张三,工资1800,性别男) a<-list(姓名c(张三,李四),工资(1800,1200),性别(男,女))...
2024/5/2 15:59:34 - adagrad原理 李宏毅 机器学习
这一系列的博客,主要是记录在学校的Machine Learning实践课中,一些学习的过程,以及自己补充的基础知识(以引用来表示)。原理在西瓜书上都有,因此本系列博客主要是用python来实现,会包含一些公式…...
2024/5/2 18:19:02 - 关于网络代理
为什么中国大陆不能进Google、YouTube、Facebook、Twitter等国外知名网站的官网 因为这些网站没有通过工信部的审核,工信部认为这些会被恐怖份子利用,对中国产生危害,所以暂时没有开通直接使用的权限,如果要使用需要用到VPN。...
2024/4/21 23:06:18 - Linux学习笔记(四)find,正则,压缩文件
find 是linux里面的一个实时查找工具,通过制定路径完成文件查找 find [options] … [查找路径] [查找条件] [处理动作] 查找路径:查找的位置,默认是当前文件夹 查找条件:制定查找的标准,文件名、大小、类型、日期等等 处理动…...
2024/5/2 13:54:27 - 【Java】Java继承详解,看这一篇就够了
Java继承详解,看这一篇就够了 文章目录Java继承详解,看这一篇就够了继承概念:继承作用:继承使用extends关键字:继承的特点:继承关系中成员变量的特点:继承中成员变量的特点:子类父类…...
2024/5/2 14:56:34 - 【1错笔记】强迫症的序列——思维转换 细节问题
题目: 链接:https://ac.nowcoder.com/acm/contest/90/J 来源:牛客网 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 32768K,其他语言65536K 64bit IO Format: %lld 题目描述 牛客网是IT求职神…...
2024/4/25 20:58:07 - scala花括号和圆括号的区别
当调用的函数有两个及其以上的参数的时候,这时候你只能用小括号。当调用的函数只有一个函数的时候,花括号和小括号都可以使用。但是还有区别的。 如果使用小括号,意味着你告诉编译器:它只接受单一的一行,因此…...
2024/4/27 23:32:30 - 十大经典排序算法3(Python版本)
文章目录四、希尔排序五、归并排序四、希尔排序 1、希尔介绍 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎…...
2024/4/21 5:23:36 - 2020-10-11《多重背包 单调队列优化》
《多重背包 单调队列优化》 【题目】 有n种物品和一个容量为m的背包。 第i种物品最多有si件,每件体积是vi,价值是wi。 求解选择哪些物品放入背包,使物品体积总和不超过背包容量,且价值总和最大。只输出最大价值。 【输入】 第一行…...
2024/4/27 12:34:31 - C#高级编程——继承抽象类和抽象方法使用委托和事件实现模拟闹铃多态对象存储数据项
C#高级编程——继承&抽象类和抽象方法&使用委托和事件实现模拟闹铃&多态&对象存储数据项 1、目标2、继承2.1 问题2.2 说明2.3 分析2.4 推荐步骤:2.5 代码2.6 输出结果3、使用抽象类和抽象方法计算不同形状的面积3.1 问题3.2 说明3.3 解题思路3.4 解…...
2024/4/21 13:51:03 - 1576:【例 2】选课(树形DP)
问题描述 原题来自:CTSC 1997 大学实行学分制。每门课程都有一定的学分,学生只要选修了这门课并通过考核就能获得相应学分。学生最后的学分是他选修各门课的学分总和。 每个学生都要选择规定数量的课程。有些课程可以直接选修,有些课程需要一…...
2024/5/1 17:16:08 - LeetCode 416 分割等和子集 HEROIDNG的LeetCode之路
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2: 输…...
2024/5/7 17:25:37 - 设计模式(6)单例模式
设计模式(5)单例模式 定义 确保一个类只有一个实例,并提供全局的访问点。 demo 单例模式有很多变种,这是其中一种。 public class Singleton {private volatile static Singleton uniqueInstance;//确保多线程能正确处理实例…...
2024/4/21 23:06:15 - [BUUCTF]第八天训练日志
文章目录[RoarCTF 2019]Easy Java[RoarCTF 2019]Easy Java JavaWeb结构 这里有一个help一开始当成php有点尴尬,应该是jsp WEB-INF下的文件是不能直接通过地址栏访问的,这也保证了其资源的安全性。所以想到的是post的方式 这里找到关键点 得到一串明…...
2024/4/22 5:25:35
最新文章
- flutter报错
组件相关 type ‘List’ is not a subtype of type ‘List’ children: CardList.map((item) > Container( 加上 *** < Widget>*** 正常 type ‘(dynamic, dynamic) > Container’ is not a subtype of type ‘(CardType) > Widget’ of ‘f’ children: CardL…...
2024/5/8 7:40:41 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 最新在线工具箱网站系统源码
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上…...
2024/5/7 2:36:10 - 基于ArrayList实现简单洗牌
前言 在之前的那篇文章中,我们已经认识了顺序表—>http://t.csdnimg.cn/2I3fE 基于此,便好理解ArrayList和后面的洗牌游戏了。 什么是ArrayList? ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表&…...
2024/5/8 3:12:43 - 416. 分割等和子集问题(动态规划)
题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义:dp[i][j]表示当背包容量为j,用前i个物品是否正好可以将背包填满ÿ…...
2024/5/7 19:05:20 - 【Java】ExcelWriter自适应宽度工具类(支持中文)
工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...
2024/5/7 22:31:36 - Spring cloud负载均衡@LoadBalanced LoadBalancerClient
LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon,直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件,我们讨论Spring负载均衡以Spring Cloud2020之后版本为主,学习Spring Cloud LoadBalance,暂不讨论Ribbon…...
2024/5/8 1:37:40 - TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案
一、背景需求分析 在工业产业园、化工园或生产制造园区中,周界防范意义重大,对园区的安全起到重要的作用。常规的安防方式是采用人员巡查,人力投入成本大而且效率低。周界一旦被破坏或入侵,会影响园区人员和资产安全,…...
2024/5/7 14:19:30 - VB.net WebBrowser网页元素抓取分析方法
在用WebBrowser编程实现网页操作自动化时,常要分析网页Html,例如网页在加载数据时,常会显示“系统处理中,请稍候..”,我们需要在数据加载完成后才能继续下一步操作,如何抓取这个信息的网页html元素变化&…...
2024/5/8 1:37:39 - 【Objective-C】Objective-C汇总
方法定义 参考:https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...
2024/5/7 16:57:02 - 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】
👨💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】🌏题目描述🌏输入格…...
2024/5/7 14:58:59 - 【ES6.0】- 扩展运算符(...)
【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数࿰…...
2024/5/7 1:54:46 - 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?
文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕,各大品牌纷纷晒出优异的成绩单,摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称,在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁,多个平台数据都表现出极度异常…...
2024/5/7 21:15:55 - Go语言常用命令详解(二)
文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令,这些命令可以帮助您在Go开发中进行编译、测试、运行和…...
2024/5/8 1:37:35 - 用欧拉路径判断图同构推出reverse合法性:1116T4
http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b,我们在 a i a_i ai 和 a i 1 a_{i1} ai1 之间连边, b b b 同理,则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然࿰…...
2024/5/7 16:05:05 - 【NGINX--1】基础知识
1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息,并安装一些有助于配置官方 NGINX 软件包仓库的软件包: apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...
2024/5/7 16:04:58 - Hive默认分割符、存储格式与数据压缩
目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限(ROW FORMAT)配置标准HQL为: ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...
2024/5/8 1:37:32 - 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法
文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中,传感器和控制器产生大量周…...
2024/5/7 16:05:05 - --max-old-space-size=8192报错
vue项目运行时,如果经常运行慢,崩溃停止服务,报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中,通过JavaScript使用内存时只能使用部分内存(64位系统&…...
2024/5/8 1:37:31 - 基于深度学习的恶意软件检测
恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。 恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网…...
2024/5/8 1:37:31 - JS原型对象prototype
让我简单的为大家介绍一下原型对象prototype吧! 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象,所以我们也称为原型对象…...
2024/5/7 11:08:22 - C++中只能有一个实例的单例类
C中只能有一个实例的单例类 前面讨论的 President 类很不错,但存在一个缺陷:无法禁止通过实例化多个对象来创建多名总统: President One, Two, Three; 由于复制构造函数是私有的,其中每个对象都是不可复制的,但您的目…...
2024/5/7 7:26:29 - python django 小程序图书借阅源码
开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图࿰…...
2024/5/8 1:37:29 - 电子学会C/C++编程等级考试2022年03月(一级)真题解析
C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...
2024/5/7 17:09:45 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57