华盛通Java社招一面面经
面试题目
- java的锁有哪些?
- synchronized和ReentrantLock有什么区别?
- synchronized底层怎么实现的,ReentrantLock的源码有看过吗?
- redis实现分布式锁有哪些方式?
- A线程拿到分布式锁,但是运行时间超过了锁过期时间,B线程能拿到分布式锁吗?
- 怎么预防这种状况?
- mysql a b c简历索引 ,a b,b c,a c哪个索引会失效?为什么失效?为什么索引失效的机制要这么设置?
- ai coding用过没?现在给你一个需求,怎么通过ai coding完成这个需求?
- 了解sdd开发规范吗?
- 接口幂等和业务幂等怎么实现?
- mysql 乐观锁和悲观锁怎么实现?
- 线上出了严重问题怎么办?
参考解析
- Java锁机制:synchronized是JVM层面锁,自动释放,基于Monitor;ReentrantLock是JDK层面锁,需手动释放,支持公平性、中断响应及条件变量(Condition)。
- 分布式锁超时:过期后B线程可以拿到锁,导致并发安全问题。预防方案:使用Redisson的“看门狗”机制自动续期,或在业务代码中评估耗时合理设置过期时间。
- MySQL索引失效:遵循最左前缀原则。a,b索引有效;b,c索引因跳过a失效;a,c索引因跳过b失效。失效是为了保证B+树的有序性,若跳过中间列,无法利用二分查找快速定位。
- 接口幂等:技术幂等通常使用唯一请求号+Redis/数据库唯一约束;业务幂等通过状态机控制(如:订单状态更新时判断前置状态是否为待支付)。
- 线上问题排查:遵循“止损优先”原则。先快速回滚或熔断限流,再保留现场(dump日志、堆栈),定位问题后在测试环境复现修复,最后发布并进行复盘。