一、以下sql在mysql5.7中运行,且设置事务不自动提交 假设有表user,数据为
id | name | sex | age |
---|---|---|---|
1 | zhangsan | male | 12 |
2 | lisi | male | 16 |
3 | wangwu | female | 22 |
其中id为自增主键,age上创建有非聚簇索引。现有2个session按一下时间线分别执行sql。
时间线 | session1 | session2 | 输出 |
---|---|---|---|
1 | begin;select count(0) from user where age = 16 for update; | A.0 B.1 C.2 D.都不是 | |
2 | begin;insert into user(name,sex,age) values (‘zhaoliu’,‘female’,15);commit; | A.执行成功 B.抛出异常 C.阻塞 D.不知道 | |
3 | select count(0) from user | A.2 B.3 C.4 D.5 | |
4 | commit; | A.执行成功 B.抛出异常 C.阻塞 D.不知道 | |
5 | select count(0) from user | A.2 B.3 C.4 D.5 |
我们首先创建一个表
CREATE TABLE user(
id int(10) auto_increment not null,
name varchar(10),
sex varchar(10),
age int(10) not null,
PRIMARY KEY (`id`)
);
insert into user(name,sex,age) values
('zhangsan','male',12),
('lisi','male',16),
('wangwu','female',22);
版本:
此时两个会话
现在是mysql默认是自动提交的。
我们设置为手动
会话1:
会话2:
在会话1 commit 后,会话2出现了1行生效。
会话1和会话2 同时设置为ReadCommited。 drop 后重试
直接成功。
所以就是和之前最初默认的一样。
二、以下sql在mysql 5.7中执行,且设置事务不自动提交
假设有表user,数据为
id | name | sex |
---|---|---|
1 | zhangsan | male |
2 | lisi | male |
3 | wangwu | female |
现在有3个session按以下时间线分别执行sql:
时间线 | session1 | session2 | session3 | 输出 |
---|---|---|---|---|
1 | begin;select count(*) from user where id =4; | A.0 B.1 C.2 D.都不是 | ||
2 | begin;insert into user(id,name sex) values ( 4,‘zhaoliu’,‘female’); | A.执行成功 B.抛出异常 C.阻塞 D.都可能 | ||
3 | select count(*) from user where id =4 | A.0 B.1 C.2 D.都可能 | ||
4 | commit; | A.执行成功 B.抛出异常 C.阻塞 D.不知道 | ||
5 | select count(*) from user where id =4 | A.0 B.1 C.2 D.都不是 | ||
6 | select count(*) from user where id =4 | A.0 B.1 C.2 D.都不是 | ||
7 | commit; | A.执行成功 B.抛出异常 C.阻塞 D.不知道 |
CREATE TABLE user(
id int(10) auto_increment not null,
name varchar(10),
sex varchar(10),
PRIMARY KEY (`id`)
);
insert into user(name,sex) values
('zhangsan','male'),
('lisi','male'),
('wangwu','female');
重新设置为默认的
三、下面那种是正确的Restful规范的API
A. /getArticles , 请求类型GET B. /articles ,请求类型GET C. /articles/get , 请求类型GET D. /get/articles, 请求类型GET
答案:B
四、如果有一个Event(事件)类型,有3个属性,时间,描述,责任人,主键,现在以时间、描述、责任人作为参数来定义一个创建event的接口,以下哪种定义符合restful规范: A. /events/create, 请求类型POST B. /events/creat, 请求类型PUT C. /events, 请求类型PUT D. /events/,请求类型POST
答案:D
五、以下代码多线程执行时有何问题,应该如何修改?
public class CarFactory{
public staic CarFactory carFactory;
private CarFactory(){};
public static CarFactory getOne(){
if(carFactory==null){
carFactory = new CarFactory();
}
return carFactory;
}
}
这个是考察DCL ,单例模式。
/**
* @description: 单例(懒汉式 )
**/
public class Singleton {
//加入volatile防止指令重排序,内存可见
private volatile static Singleton singleton;
private Singleton() {
}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
六、编程题::打印1到100000之间的数字,规则如下: 1) 每个数字占一行 2) 如果该数字能被3整除,则不打印数字本身,打印“中”字: 3) 如果该数字能被5整除,则不打印数字本身,打印“国”字; 4) 如果该数字能被7整除,则不打印数字本身,打印“人”字; 5) 如果该数字能被 3,5,7中多个数字整除,则打印相应的多个汉字,这多个汉字也在同一行(如能同时被 3,5 整除,打印“中国”,同时被 3,7整除,打印“中人”,同时被5,7整除,打印“国人”,同时被3,5,7整除,打印“中国人”) 6) 如果该数字不能被 3,5,7中任何一个数字整除,才打印数字本身 程序输出如下:
1
2
中
4
国
中
人
8
中
国