| 失效链接处理 |
|
百度后端开发(Java)面试题精选:10道高频考题+答案解析 PDF 下载
转载自:
链接: https://pan.baidu.com/s/1E1JkO3mPMouQWGimNh20RQ?pwd=rv8d
提取码: rv8d
相关截图:
![]() 主要内容:
题⽬1:请解释⼀下AOP的运⾏原理和动态代理实现⽅式
题⽬描述:⾯试官问:"Spring的AOP是怎么实现的?能说说JDK动态代理和CGLIB的区别吗?"
答案要点:
AOP(⾯向切⾯编程)通过横向抽取共性功能(如⽇志、事务)解决代码重复问题。核⼼原理是动态
代理,在⽬标⽅法前后织⼊增强逻辑。
JDK动态代理基于接⼝实现,通过反射机制在运⾏时⽣成代理类,要求⽬标类必须实现接⼝。CGLIB通
过继承⽬标类⽣成⼦类代理,⽆需接⼝⽀持,但⽆法代理final类/⽅法。
实际应⽤中,Spring默认使⽤JDK动态代理,当⽬标类⽆接⼝时⾃动切换到CGLIB。性能上CGLib通常
更⾼,但JDK⽆需第三⽅依赖。
扩展提⽰:⾯试时最好能结合源码说明ProxyFactory的代理选择逻辑,以及如何通过
@EnableAspectJAutoProxy配置代理模式。
题⽬2:分布式锁在Redis中如何实现?服务宕机后锁怎么处理?
题⽬描述:"你们项⽬中⽤Redis实现分布式锁了吗?如果持有锁的服务突然宕机,锁怎么释放?"
答案要点:
Redis分布式锁常⽤SETNX命令或Redission客⼾端实现。关键要解决三个问题:互斥性、避免死锁、
容错性。
基本实现:SET lock_key unique_value NX EX 30,NX保证互斥,EX设置过期时间避免死锁。服务宕机处理:1)设置合理的过期时间,即使服务宕机锁也会⾃动释放;2)使⽤Redission的看⻔狗
机制,后台线程定期续期,避免业务未完成锁已过期;3)结合业务实现锁的优雅释放,在finally块中
确保释放。
|


苏公网安备 32061202001004号
