JAVA高级工程师-面试经历(含面试问题及解答)

经过了几个公司的面试,谈谈我这次找工作的面试经历。

工作快五年了,所以给自己定位是找一份Java高级工程师的工作。

由于疫情原因基本都是先电话面试(PS:更多的原因是me在上海,想要找重庆或成都的工作)。

再废话一句,今年真的能不换工作就不换工作吧,因为基本都会被面试官压制。

Java高级工程师的岗位对应聘者的任何一门技术都必须要求知晓其原理,并能够针对性的提出相应的改进方案。经过几轮面试主要总结了以下常见的问题:

一、锁

乐观锁、悲观锁(共享锁(其它名词有读锁、S锁)、排他锁(其它名词有写锁、X锁))的理解和应用,产生死锁的原因有哪些,如何避免死锁。需要了解synchronized与reetrentlock实现原理及区别。

(1)synchronized

实现原理可详见这篇博文《深入理解Java并发之synchronized实现原理》

(2)reetrentlock

本质上采用的是自循锁实现的,在高并发场景下消耗CPU资源较大,性能不如synchronized。

二、事务

(1)Mysql事务隔离级别(read uncommit、read commit、repeatable read、serializable),MySQL默认事务隔离级别repeatable read,见下说明:

①READ_UNCOMMIT(读未提交)

A事务已执行,但未提交;B事务查询到A事务的更新后数据;A事务回滚,出现脏数据,存在脏读、不可重复度、幻读问题;

②READ_COMMIT(读已提交)

在同一个事务中,相同的数据前后获取的信息不一致,存在不可重复读、幻读问题;

③REPEATABLE_READ(可重复读)

它确保同一事务的多个实例在并发读取数据时,会看到同样的数据行,理论上也存在幻读问题,MySQL InnoDB默认用了REPEATABLE READ,但可以使用next-key locks解决幻读问题,例如:

select * from user where age>10 lock in share mode;

④SERIALIZABLE(串行化读)

最高的隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。简言之,它是在每个读的数据行上加上共享锁。在这个级别,可能导致大量的超时现象和锁竞争。

(2)Spring事务传播机制(support、not support、require、require new、mandatory、never、nested)见下说明:

①ROPAGATION_REQUIRED

支持当前事务,假设当前没有事务。就新建一个事务。

②PROPAGATION_SUPPORTS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值