面试经历【蚂蚁金服】

一面(电话面试):

Vector和ArrayList的区别:

1、vector是由synchronized保证线程安全的,ArrayList不是,所以vector的性能较低

2、vector扩容是翻倍,ArrayList是增加50%,所以ArrayList更加节约空间

 

static int a = 1执行顺序

先初始化,在赋值

 

父类构造器和子类构造器先调用谁?

从该类所在的继承树最顶端开始执行,然后依次往下执行,最后执行到本类的构造器,如果其父类通过this调用同类中的构造器,则会依次执行多个父类中的构造器【1、子类构造器总会调用父类构造器;2、如果子类没有super显示调用父类构造器,则会默认调用父类的无参构造器;3、创建子类实例时,总会调用最顶层的父类构造器;4、构造方法无法继承】

 

数据库三大范式:

1、表设计中每一列都是不可拆分的原子列(四川省成都市,应该设计成province,city)

2、每一列都需要跟主键有关联关系

3、每一列跟主键都需要有直接关联关系

 

数据库隔离级别:

未提交读:事务修改中,即使事务没有提交,其他事务也能看到(发生脏读)

读已提交:事务修改中,其他事务只能看到历史数据,事务完成后,其他事务看到结果数据(读到就数据)【oracle默认】

可重复读:解决了脏读和旧数据的问题,但是没法保证幻读【mysql默认】

串行化:SERIALIZABLE是最高的隔离级别,它通过强制事务串行执行(注意是串行),避免了前面的幻读情况

 

分布式线程安全怎么实现:

1、时间戳方式:A系统大并发请求B系统进行操作的时候,带上时间戳,B系统在执行命令的时候比较存在时间戳和A系统请求时间戳,只有当A系统请求的时间戳大于存在的时间戳才做更新【需要保证A系统时序的有效性】

2、串行化:接受方使用消息队列将请求缓存起来,然后串行化处理这些调用

3、通过数据库保证【1、利用唯一索引,2、更新计算操作尽可能通过数据库完成(数据库锁机制会保证一致性)】

4、行锁:在表里面添加锁字段,采用select   for  update方法保证数据一致性;

5、尽量统一触发途经

 

MQ和dubbo的一些基本知识:

 

你可能感兴趣的:(面试经历)