有赞Java后端一面面经

有赞 · Java后端 · 一面 · 2026-03

面试题目

  1. 简单介绍一下你自己。
  2. 解决长耗时阻塞是怎么样的一个场景?解决思路是什么?
  3. 引入Redisson分布式锁的目的是为了解决重复上传的问题吗? 讲讲
  4. 分片上传和断点续传是怎么实现的?
  5. 项目中用过RocketMQ的哪些特性?
  6. 线程池在项目里大概是怎么用的?有哪些核心参数?
  7. 任务提交到线程池时,它的一个执行流程是怎么样的?
  8. 线程池默认的阻塞队列有多长?
  9. MySQL常用的引擎有哪些?
  10. MySQL大概有哪些索引类型?
  11. 什么是联合索引?你是怎么用的?
  12. 在规避回表的情况下,真实写SQL时应该怎么写?
  13. 简单聊一下什么是乐观锁?项目中如何解决支付回调并发问题?
  14. 理解CAS中的ABA问题吗?如何规避这种情况?
  15. 说一下SQL优化的大概流程。
  16. 简单讲一下Spring的IOC和AOP。
  17. 在Spring使用过程中会用到哪些Bean生命周期的接口?
  18. 设计模式有没有了解过?
  19. 目前在哪里?能接受来实习吗?实习时长大概有多长?
  20. 你有什么爱好?为什么喜欢听摇滚?

参考解析

  • 分布式锁(Redisson):主要用于控制多实例并发操作,防止资源重复处理。通过设置过期时间避免死锁,使用看门狗机制自动延长锁时间。
  • 线程池执行流程:核心线程 -> 阻塞队列 -> 最大线程 -> 拒绝策略。默认队列(LinkedBlockingQueue)容量为Integer.MAX_VALUE,容易导致OOM,生产环境建议自定义。
  • MySQL索引优化:联合索引遵循“最左前缀原则”。规避回表通常通过“覆盖索引”实现,即SELECT字段仅包含索引字段,直接从索引树获取数据无需回表。
  • CAS与ABA问题:ABA问题指内存值从A变B又变回A,导致线程误以为没变化。规避方法是引入版本号(AtomicStampedReference)或时间戳。
  • Bean生命周期接口:常用包括 BeanPostProcessor(初始化前后)、InitializingBean(afterPropertiesSet方法)、DisposableBean(销毁时)。