广州嘉为科技Java后端一面面经

广州嘉为科技有限公司 · Java后端开发 · 一面 · 广州 · 2026-04

面试题目

  1. 自我介绍
  2. JDK21对比JDK8、JDK17新特性
  3. 线程安全理解
  4. synchronized底层加锁升级机制
  5. 对象头内存结构
  6. Monitor依赖操作系统底层实现
  7. AQS队列结构原理
  8. Java原子类实现原理
  9. Redis布隆过滤器解决缓存穿透、误判率控制
  10. Redisson可重入锁实现
  11. Redisson看门狗续期机制
  12. 锁无限续期幂等/死锁风险处理方案
  13. 为什么使用自定义线程池
  14. 线程池核心参数配置、拒绝策略
  15. MQ消息投递成功、更新消息状态失败,消费端幂等性保证
  16. MQ重试阈值、死信队列处理方案
  17. 定时任务性能优化如何定位问题、游标分页实现
  18. 游标分页插入数据会不会漏数据/重复数据
  19. 数据库库存超卖解决方案
  20. TCC分布式事务空回滚产生原因与解决
  21. 自研复合分库分表分片算法逻辑、自研原因
  22. 订单状态机设计、状态存储、状态机线程安全
  23. 项目用到的设计模式及落地场景
  24. CodeGeeX、Copilot两类AI工具能力区别
  25. Docker、K8s容器化使用情况
  26. MySQL迁移达梦数据库国产化适配评估思路
  27. 反问岗位业务、技术栈、后续面试轮次、出结果时间

参考解析

  • synchronized加锁升级:从无锁到偏向锁、轻量级锁(自旋)、重量级锁(OS互斥锁)。升级过程不可逆,目的是减少线程切换开销。
  • AQS原理:核心是volatile修饰的state变量和CLH队列(双向链表)。通过CAS操作获取资源,获取失败则进入等待队列并阻塞,依赖LockSupport进行挂起与唤醒。
  • Redis布隆过滤器:由位图和多个哈希函数组成。存数据时将元素多次哈希对应到位图位置,查数据时检查对应位置是否全为1。误判率可通过位图大小和哈希函数个数调整。
  • TCC空回滚:指未执行Try操作,却收到Cancel请求。原因通常是Try请求超时或网络延迟导致未到达。解决方法:增加一张记录分布式事务状态的表,若Cancel时发现无对应Try记录,则直接返回成功。
  • 库存超卖:推荐使用Redis Lua脚本或数据库乐观锁(version/库存字段)。Lua脚本能保证获取锁与扣减库存的原子性,避免并发问题。