mysql 事物 锁行 测试_MySQL Transaction--RR事务隔离级别下加锁测试

==============================================================================

按照非索引列更新

在可重复读的事务隔离级别下,在非索引列上进行更新和删除会对所有数据行进行加锁,阻止其他会话对边进行任何数据的增删改操作。

如果更新或删除条件为c3=4且c3列上没有索引则:1、不允许其他会话插入任意记录,因为所有记录的主键索引上存在X排他锁,无法申请插入意向X锁(lock_mode X insertintention waiting Record lock)2、不允许其他会话删除任意记录,因为所有记录的主键索引上存在X排他锁3、不允许其他会话更新任意记录。因为所有记录的主键索引上存在X排他锁

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

##=========================================##

测试数据:CREATE TABLE`tb4001` (

`id`bigint(20) NOT NULLAUTO_INCREMENT,

`c1`int(11) DEFAULT NULL,

`c2`varchar(200) DEFAULT NULL,

`c3`int(11) DEFAULT NULL,PRIMARY KEY(`id`),KEY`idx_c1` (`c1`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;insert into tb4001(c1,c2,c3) values(2,2,2);insert into tb4001(c1,c2,c3) values(4,4,4);insert into tb4001(c1,c2,c3) values(7,7,7);insert into tb4001(c1,c2,c3) values(8,8,8);

##=========================================##

##测试1:在没有索引的列上更新

##事务隔离级别:RR

会话1:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=777 where c3=7;

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(9,9,9);

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息------- TRX HAS BEEN WAITING 13 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 75 page no 3 n bits 80 index PRIMARY of table `test1`.`tb4001` trx id 10573 lock_mode X insert intention waiting Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0

0: len 8; hex 73757072656d756d; ascsupremum;;---------------------TRANSACTION 10571, ACTIVE 404 sec

2 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1MySQL thread id52, OS thread handle 140674621650688, query id 1201 127.0.0.1admin

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=888 where c3=8;

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息------- TRX HAS BEEN WAITING 5 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 75 page no 3 n bits 80 index PRIMARY of table `test1`.`tb4001` trx id 10573lock_mode X waiting

Record lock, heap no2 PHYSICAL RECORD: n_fields 6; compact format; info bits 0

0: len 8; hex 8000000000000001; asc;;1: len 6; hex 00000000293c; asc )

2 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1MySQL thread id52, OS thread handle 140674621650688, query id 1201 127.0.0.1admin

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;delete from tb4001 where c3=8;

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息------- TRX HAS BEEN WAITING 4 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 75 page no 3 n bits 80 index PRIMARY of table `test1`.`tb4001` trx id 10573lock_mode X waiting

Record lock, heap no2 PHYSICAL RECORD: n_fields 6; compact format; info bits 0

0: len 8; hex 8000000000000001; asc;;1: len 6; hex 00000000293c; asc )

2 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1MySQL thread id52, OS thread handle 140674621650688, query id 1201 127.0.0.1 admin

View Code

==============================================================================

按照非唯一索引更新

在可重复读的事务隔离级别下,按照非主键非唯一索引进行更新和删除,会对满足条件的行加行锁+满足条件的区域加gap锁

如果更新或删除条件为c1=4且c1列上有非唯一索引则:1、允许其他会话插入c1<>4的记录,但不允许插入c1=4的记录2、允许其他会话更新c1<>4的记录,但不允许将记录更新为c1=4的记录3、允许其他会话删除c1<>4的记录。4、允许插入\删除\修改在c1列索引上与c1=4相邻的记录,虽然操作会影响gap锁的边界值。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

##=========================================##

测试数据:CREATE TABLE`tb4001` (

`id`bigint(20) NOT NULLAUTO_INCREMENT,

`c1`int(11) DEFAULT NULL,

`c2`varchar(200) DEFAULT NULL,

`c3`int(11) DEFAULT NULL,PRIMARY KEY(`id`),KEY`idx_c1` (`c1`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;insert into tb4001(c1,c2,c3) values(2,2,2);insert into tb4001(c1,c2,c3) values(4,4,4);insert into tb4001(c1,c2,c3) values(7,7,7);insert into tb4001(c1,c2,c3) values(8,8,8);

##=========================================##

##测试1:在没有索引的列上更新

##事务隔离级别:RR

会话1:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=777 where c1=7;

##=========================================##

会话2:begin;SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(9,9,9);

会话2未被阻塞成功执行

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(7,7,7);

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息---TRANSACTION 10600, ACTIVE 7 sec inserting

mysql tables in use 1, locked 1LOCK WAIT2 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 1MySQL thread id53, OS thread handle 140674620851968, query id 1317 127.0.0.1 admin update

insert into tb4001(c1,c2,c3) values(7,7,7)------- TRX HAS BEEN WAITING 7 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 75 page no 4 n bits 72 index idx_c1 of table `test1`.`tb4001` trx id 10600 lock_mode X locks gap before rec insertintention waiting

Record lock, heap no5 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

0: len 4; hex 80000008; asc;;1: len 8; hex 8000000000000004; asc;;---------------------TRANSACTION 10598, ACTIVE 270 sec

4 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 1MySQL thread id52, OS thread handle 140674621650688, query id 1306 127.0.0.1admin

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;delete from tb4001 where c1=8;

会话2未被阻塞成功执行

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=888 where c1=8;

会话2未被阻塞成功执行

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;delete from tb4001 where c1=4;

会话2未被阻塞成功执行

##=========================================##

View Code

==============================================================================

按照非唯一索引+条件更新

在可重复读事务隔离级别下,按照对非唯一索引列进行更新,会对扫描到的所有索引记录进行更新,无论该记录是否满足WHERE中的其他条件。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

##=========================================##

测试数据:CREATE TABLE`tb4001` (

`id`bigint(20) NOT NULLAUTO_INCREMENT,

`c1`int(11) DEFAULT NULL,

`c2`varchar(200) DEFAULT NULL,

`c3`int(11) DEFAULT NULL,PRIMARY KEY(`id`),KEY`idx_c1` (`c1`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;insert into tb4001(c1,c2,c3) values(2,2,2);insert into tb4001(c1,c2,c3) values(4,4,4);insert into tb4001(c1,c2,c3) values(4,4,44);insert into tb4001(c1,c2,c3) values(7,7,7);insert into tb4001(c1,c2,c3) values(8,8,8);

##=========================================##

##会话1:

##事务隔离级别:RR

会话1:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=444 where c1=4 and c3=4;

##=========================================##

##会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=444 where c1=4 and c3=44;

会话2未被阻塞成功执行

##执行结果:会话2被阻塞

mysql tablesin use 1, locked 1LOCK WAIT2 lock struct(s), heap size 1136, 1row lock(s)

MySQL thread id76, OS thread handle 140674621384448, query id 1636 127.0.0.1admin updatingupdate tb4001 set c2=444 where c1=4 and c3=44

------- TRX HAS BEEN WAITING 13 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 79 page no 4 n bits 72 index idx_c1 of table `test1`.`tb4001` trx id 10781lock_mode X waiting

Record lock, heap no3 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

0: len 4; hex 80000004; asc;;1: len 8; hex 8000000000000002; asc;;---------------------TRANSACTION 10780, ACTIVE 52 sec

4 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1MySQL thread id75, OS thread handle 140674621916928, query id 1618 127.0.0.1admin

##=========================================##

View Code

==============================================================================

按照非唯一组合索引更新

假设表TB1上有列C1和C2,有索引IDC_C1_C2(C1,C2)

在可重复提交事务隔离级别下,会话1按照C1=3 AND C2=4进行更新,则:1、会话2按照C1=3 AND C2=4进行更新,更新操作被阻塞2、会话2按照C1=3 AND C2=M(M<>4)进行更新,更新操作不会被阻塞3、会话2可以在C1=3 AND C2=4之后间隙插入记录,但不能在C1=3 AND C2=4之前的间隙插入记录

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

##=========================================##

##测试数据CREATE TABLE`tb4001` (

`id`bigint(20) NOT NULLAUTO_INCREMENT,

`c1`int(11) DEFAULT NULL,

`c2`varchar(200) DEFAULT NULL,

`c3`int(11) DEFAULT NULL,PRIMARY KEY(`id`),KEY`idx_c1_c3` (`c1`,`c3`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;insert into tb4001(c1,c2,c3) values(2,2,2);insert into tb4001(c1,c2,c3) values(4,4,4);insert into tb4001(c1,c2,c3) values(4,4,44);insert into tb4001(c1,c2,c3) values(7,7,7);insert into tb4001(c1,c2,c3) values(8,8,8);

##=========================================##

##会话1:

##事务隔离级别:RR

会话1:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=444 where c1=4 and c3=4;

##=========================================##

##会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=444 where c1=4 and c3=44;

会话2未被阻塞成功执行

##=========================================##

##会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=444 where c1=2 and c3=2;

会话2未被阻塞成功执行

##=========================================##

##会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(4,4,3);

会话2被阻塞

##=========================================##

View Code

==============================================================================

按照唯一索引进行更新

在可重复读的事务隔离级别下,在唯一索引列上进行更新和删除在唯一索引的索引行上加排他锁。

如果更新或删除条件为c1=7且c1列上存在唯一索引则:1、阻止其他会话删除和修改c1=7的记录2、阻止其他会话插入c1=7的记录3、允许其他会话插入\删除\修改c1<>7的记录,但不允许将记录修改为c1=7的记录

以上限制通过在唯一索引的索引记录上加排他锁X来实现,不会生产GAP锁

在根据唯一索引进行更新时,读提交事务隔离级别(RC)和可重复读事务隔离级别(RR)都只需要依赖唯一索引便可以保证事务ACID特性,无须使用GAP锁。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

##=========================================##

测试数据:CREATE TABLE`tb4001` (

`id`bigint(20) NOT NULLAUTO_INCREMENT,

`c1`int(11) DEFAULT NULL,

`c2`varchar(200) DEFAULT NULL,

`c3`int(11) DEFAULT NULL,PRIMARY KEY(`id`),UNIQUE KEY`idx_c1` (`c1`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;insert into tb4001(c1,c2,c3) values(2,2,2);insert into tb4001(c1,c2,c3) values(4,4,4);insert into tb4001(c1,c2,c3) values(7,7,7);insert into tb4001(c1,c2,c3) values(8,8,8);

##=========================================##

##测试1:在没有索引的列上更新

##事务隔离级别:RR

会话1:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=777 where c1=7;

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(6,6,6);

会话2未被阻塞成功执行

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;insert into tb4001(c1,c2,c3) values(7,7,7);

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息---TRANSACTION 10727, ACTIVE 9 sec inserting

mysql tables in use 1, locked 1LOCK WAIT2 lock struct(s), heap size 1136, 1 row lock(s), undo log entries 1MySQL thread id53, OS thread handle 140674620851968, query id 1553 127.0.0.1 admin update

insert into tb4001(c1,c2,c3) values(7,7,7)------- TRX HAS BEEN WAITING 9 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 77 page no 4 n bits 72 index idx_c1 of table `test1`.`tb4001` trx id 10727lock mode S waiting

Record lock, heap no4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

0: len 4; hex 80000007; asc;;1: len 8; hex 8000000000000003; asc;;---------------------TRANSACTION 10721, ACTIVE 32 sec

3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1MySQL thread id52, OS thread handle 140674621650688, query id 1544 127.0.0.1admin

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c2=888 where c1=8;

会话2未被阻塞成功执行

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;update tb4001 set c1=7 where c1=8;

会话2未被阻塞成功执行

##执行结果:会话2被阻塞

使用SHOW ENGINE INNODB STATUS \G查看阻塞发生时的锁信息---TRANSACTION 10730, ACTIVE 4 sec updating or deleting

mysql tables in use 1, locked 1LOCK WAIT4 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 1MySQL thread id53, OS thread handle 140674620851968, query id 1567 127.0.0.1admin updatingupdate tb4001 set c1=7 where c1=8

------- TRX HAS BEEN WAITING 4 SEC FOR THIS LOCK TO BE GRANTED:

RECORD LOCKS space id 77 page no 4 n bits 72 index idx_c1 of table `test1`.`tb4001` trx id 10730lock mode S waiting

Record lock, heap no4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0

0: len 4; hex 80000007; asc;;1: len 8; hex 8000000000000003; asc;;---------------------TRANSACTION 10721, ACTIVE 100 sec

3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1MySQL thread id52, OS thread handle 140674621650688, query id 1544 127.0.0.1admin

##=========================================##

会话2:SET SESSION tx_isolation='REPEATABLE-READ';

STARTTRANSACTION;SELECT @@GLOBAL.tx_isolation, @@SESSION.tx_isolation;delete from tb4001 where c1=8;

会话2未被阻塞成功执行

View Code

==============================================================================

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

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

相关文章

修复mysql的view_MYSQL数据损坏修复方法

1、myisamchk使用 myisamchk 必须暂时停止 MySQL 服务器。例如&#xff0c;我们要检修 discuz 数据库。执行以下操作&#xff1a;# service mysql stop (停止 MySQL )&#xff1b;# myisamchk -r /数据库文件的绝对路径/*MYI# service mysql startmyisamchk 会自动检查并修复数…

centos7mysql语句创建表格_CentOS7中安装MySQL(简便)及 网站的搭建

一、首先&#xff0c;我们需要配置CentOS7中网络环境的搭建&#xff0c;物理机IP为192.168.100.39&#xff0c;虚拟机IP为192.168.100.139&#xff0c;网络模式设置为桥接模式&#xff0c;再进入系统挂载光盘、输入命令 cd /yum.repos.d 修改yum源配置文件&#xff0c;接下…

mysql myisam 支持事务吗_第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)...

mysql表类型MyISAM和InnoDB区别MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它…

mysql heartbeat lvs_CentOS 6.3 Mysql+heartbeat+drbd+LVS 的安装和配置(2)

yum install resource-agents pacemaker12. 修改heartbeat配置文件(以下步骤需要在2台node上执行)复制配置文件,资源文件,认证密钥文件cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/cp /usr/share/doc/heartbe…

改变mysql的菜单栏的颜色_导航条——动态改变导航菜单的背景颜色

1.概述在浏览一些网站时&#xff0c;当鼠标经过导航菜单某一项时&#xff0c;其背景颜色将切换为其他颜色&#xff0c;实现这种简单的效果会更吸引浏览者的注意。2.技术要点本实例主要是应用JavaScript方法来动态改变标签的背景颜色实现的。当鼠标经过表示的导航菜单时&#xf…

mysql系列_Mysql系列(三)—— Mysql字符集和比较规则

一、前言字符集表示的是存储的二进制与字符如何映射的关系&#xff0c;比较规则指的是字符如何排序的规则&#xff0c;比如字符如果使用order by到底按什么规则进行排序。二、查看命令查看支持的字符集命令是&#xff1a;SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式],CHARA…

复数卷积 tensorflow_PyTorch 中的傅里叶卷积

欢迎关注 “小白玩转Python”&#xff0c;发现更多 “有趣”注意: 在这个 Github repo 中提供了1D、2D 和3D Fourier 卷积的完整方法。我还提供了 PyTorch 模块&#xff0c;可以方便地将傅里叶卷积添加到可训练模型中。链接如下&#xff1a;https://github.com/fkodom/fft-conv…

python3 枚举_Python3枚举类如何处理重复名称?

筛选重复的名称&#xff0c;相信对于各位小伙伴不是什么难事。那么&#xff0c;大家发现有重复的名称会如何进行解决呢&#xff1f;作为一位python的粉丝&#xff0c;小编优先选择的事这类的方法。在处理重复名称方面&#xff0c;小编选择的是用python3里的枚举法进行操作。没听…

python迷宫算法及实现_Python迷宫递归算法

所以我盯着这个有一段时间了&#xff0c;我不知道怎么才能回到这个迷宫的正确路径。在2代表墙MAZE [[2,2,2,2,1,2],[2,2,1,2,1,2],[2,2,1,2,1,2],[2,1,1,1,1,2],[2,1,2,2,2,2],[2,1,2,2,2,2]]START_ROW 5START_COL 1END_ROW 0END_COL 4was_here [[False]*6 for i in rang…

lucene索引MySQL原因_我如何在数据库中存储Lucene索引?

这是我的示例代码&#xff1a;MysqlDataSource dataSource new MysqlDataSource();dataSource.setUser("root");dataSource.setPassword("ncl");dataSource.setDatabaseName("userdb");dataSource.setEmulateLocators(true); //This is importa…

python time智能等待_Python Selenium智能等待

前言在使用python selenium进行自动化测试实践的过程中&#xff0c;经常会遇到元素定位不到&#xff0c;弹出框定位不到等等各种定位不到的情况&#xff0c;在大多数的情况下&#xff0c;无非是以下两种情况&#xff1a;1、有frame存在&#xff0c;定位前&#xff0c;未switch到…

python存储对象的数组_Python:在2d数组中存储对象并调用其方法

我正在尝试制作一个象棋应用程序。代码如下&#xff1a;#file containing pieces classesclass Piece(object):name "piece"value 0grid_name "____"class Pawn(Piece):# Rules for pawns.#If first move, then can move forward two spacesname "…

python正则表达式匹配括号并删除_如何使用正则表达式删除括号内的文本?

在括号匹配子串的图案不具有其他(和)字符之间(如(xyz 123)在Text (abc(xyz 123))是\([^()]*\)详细资料&#xff1a;\(-圆括号(请注意&#xff0c;在POSIX BRE中(应使用&#xff0c;请参见sed下面的示例)[^()]*-除否定的字符类别 / POSIX括号表达式中定义的字符以外的零个或多个…

现代软件工程 (备份)

自我介绍一下, 我叫邹欣, 是微软亚洲研究院 创新工程中心 首席研发主管 (Principal Development Manager). 我和同事们一起把研究成果转化为商业软件产品和服务。近期主要专注于垂直搜索&#xff0c;企业搜索&#xff0c;软件开发工具和数字娱乐等领域。 在工作之余, 我也写…

java钱_在Java中如何表示钱Money?

为什么不使用float / double&#xff1f;使用java时会遇到money类型的选择问题&#xff0c;首先想到的是float / double。如果只是简单的货币计算&#xff0c;很难发现用float会有问题。出现问题的原因是使用float / double(已经相应的包装类Float / Double)会出现舍入误差(rou…

期望

把原来一些关于软件工程&#xff0c;教学&#xff0c;和程序设计相关的博客搬过来。 [http://yishan.cc/blogs/xin/archive/2009/04/12/1058.aspx] 学校的期望 我在BBS 看到有人感慨说- 有家长让小孩在大学里专心学习&#xff0c;不要想别的。等到一毕业&#xff0c;就希望小孩…

java 数值变量_Java 中数值变量赋值问题

写了一段判断数值相等判断方法的程序&#xff1a;//在-128~127 之外的数Integer i1 200;Integer i2 200;System.out.println("i1i2: "(i1i2));//false// 在-128~127 之内的数Integer i3 100;Integer i4 100;System.out.println("i3i4: "(i3i4));//true…

软件教育随想

[由于工作的关系&#xff0c;我在过去的几年中访问了十二三所软件学院/计算机学院&#xff0c;和不少老师&#xff0c;学生座谈过。我在研究院里也碰到了不少各个学校来的学生&#xff0c;谈得多了&#xff0c;就有下面的随想。] 想来的人来不了 学校里都是按照高考/考研的成绩…

java获取当前电脑的ip_使用Java获取当前计算机的IP地址

问题我正在尝试开发一个系统&#xff0c;其中有不同的节点在不同的系统上或在同一系统上的不同端口上运行。现在所有节点都创建一个Socket&#xff0c;其目标IP作为称为自举节点的特殊节点的IP。然后节点创建自己的ServerSocket并开始侦听连接。引导节点维护一个节点列表&#…

两千块钱带来的 希望

几年以前&#xff0c;我参加过一个全国 “软件学院” 的评审&#xff0c;得到两千块现金和一些希望。我后来把钱和希望都还给同学们了&#xff0c;现在说明一下。 &#xff3b;这是个人回忆&#xff0c;不代表任何组织&#xff0c;也不确保所有信息的完全准确&#xff3d; 我先…