zl程序教程

您现在的位置是:首页 >  后端

当前栏目

圆通快递社招Java笔试经历(一)

JAVA 经历 笔试 快递 社招
2023-06-13 09:17:28 时间

一、以下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. 假设事务隔离级别是ReadCommited,那么输出列的答案分别是?

会话1和会话2 同时设置为ReadCommited。 drop 后重试

直接成功。

  1. 假设事务隔离界别是RepeatableRead,那么输出列的答案分别是? mysql默认就是

所以就是和之前最初默认的一样。

二、以下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');

重新设置为默认的

  1. 假设事务隔离级别是ReadCommited,那么输出列的答案分别是? AAAABBA
  2. 假设事务隔离级别是ReadUnCommitted,那么输出列的答案分别是? AABABBA

三、下面那种是正确的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
中
国