浩鲸科技Java后端面经
《面试题目》
- Synchronized锁升级
- Synchronized与ReentrantLock的区别
- 线程池的工作流程
- 线程池的拒绝策略
- MySQL的ACID
- 原子性是什么、如何实现
- 乐观锁的优缺点、CAS
- MySQL的事务分级
- 可重复读解决了哪些问题
- JVM中对象何时被回收?
- 不可达后会被立刻回收吗?
- 类加载过程有哪几个阶段?
- 双亲委派模型原理是什么?
- MyBatis中绑定SQL入参有哪几种方式?
- 如何避免MyBatis结果字段与实体属性不一致?
《参考解析》
- Synchronized锁升级:从无锁到偏向锁、轻量级锁,最后到重量级锁。升级是为了减少锁带来的性能消耗,依据竞争激烈程度自动优化。
- MySQL事务隔离:可重复读(RR)主要解决了脏读和不可重复读问题,通过MVCC(多版本并发控制)配合间隙锁,很大程度上解决了幻读。
- JVM对象回收:主要采用可达性分析算法判断对象是否存活。不可达对象不会立刻回收,需要经历两次标记过程,并在Finalizer队列中确认是否重写了finalize方法。
- MyBatis字段映射:可通过SQL语句中使用AS别名、在Mapper XML中配置
<resultMap>手动映射字段,或者在application.yml开启驼峰命名自动转换。