面灵AI

靖安科技 Java 全栈秋招一面:并发、Redis 与项目排障

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 能否介绍一下自己,目前是否已离职,上一家公司离职的原因是什么?
  2. HashMap 的底层结构是什么,为什么 JDK 8 引入红黑树?
  3. HashMap 是否线程安全,多线程同时 put 会有什么问题?
  4. ConcurrentHashMap 怎样保证并发访问安全?
  5. CAS 是什么?
  6. synchronized 和 ReentrantLock 有什么区别?
  7. ReentrantLock 的公平锁与非公平锁有什么区别?
  8. 线程池有哪些主要参数?
  9. 核心线程数为 10、最大线程数为 100、队列容量为 1000 时,任务持续提交会怎样改变线程数量?
  10. 线程和队列都满后有哪些拒绝策略,无界队列会带来什么问题?
  11. ThreadLocal 用来做什么,底层如何实现?
  12. Java 多线程中有哪些加锁方式?
  13. 如何用 Redis 实现分布式锁?
  14. Redisson 的锁怎样实现,如何续期?
  15. Redis 有哪些基础数据类型,各适合什么场景?
  16. 缓存穿透、击穿、雪崩有什么区别,分别如何处理?
  17. Redis 有哪些部署模式,哨兵负责什么?
  18. MySQL 的底层数据结构是什么?
  19. MySQL 有哪些事务隔离级别,InnoDB 默认是哪种?
  20. 如何理解可重复读?
  21. MySQL 主从复制如何工作,binlog 有哪些格式?
  22. MyBatis 怎样防止 SQL 注入,#{}${} 有什么区别?
  23. MyBatis 的缓存机制是什么?
  24. Spring AOP 有什么作用,底层如何实现?
  25. 类加载的双亲委派机制是什么?
  26. JVM 有哪些垃圾回收算法和收集器,能否介绍最熟悉的一种?
  27. 使用过哪些前端框架,能否独立完成前端开发?
  28. 是否了解 Vue 的生命周期等基础知识?
  29. 团队使用 React,你预计需要多久掌握相关基础?
  30. 项目是否使用 Docker 部署?
  31. 最近一段实习负责了什么,遇到哪些难点,如何解决?
  32. 项目中怎样用 Redisson 和延迟队列实现物联网古树养护流程?
  33. 已部署项目的 CPU 使用率突然升高,如何排查?
  34. 如果从需求分析到上线都由你负责,并允许使用辅助编程工具,你会怎样推进?
  35. 面试共有几轮,入职后承担哪些工作,面试官如何评价本次表现?

《参考解析》

线程池不是直接扩到 100 个线程

假设任务都未完成、线程池正常运行且队列初始为空:前 10 个任务创建核心线程;随后优先把任务放入容量为 1000 的队列;队列满后,再创建额外线程,最多达到 100 个。此时仍无法接收的任务才进入拒绝处理。真实运行中任务会完成,不能只按累计提交次数判断线程数。

无界队列下,任务通常会一直排队,maximumPoolSize 很难起到扩容作用,压力转而落到等待时长与内存占用上。线程池的入队和扩线程规则见 ThreadPoolExecutor 文档

分布式锁先讲清谁有权解锁

单 Redis 实例的基本做法是 SET lockKey uniqueValue NX PX ttl,把“仅不存在时写入”和设置过期时间放进一条命令。释放时用原子操作检查 value 是否仍属于自己,再删除锁;直接 DEL 可能删掉锁过期后被别的请求获得的新锁。这一点见 Redis 分布式锁文档

续期可以降低正常长任务因租约到期而失去锁的概率,但不能消除进程停顿、网络分区等问题。业务正确性仍应由数据库约束、版本条件等机制兜住。回答 Redisson 时,再结合实际使用版本说明是否启用看门狗、是否显式指定租约,以及失去锁后业务如何处理。

CPU 升高要先分清哪类消耗

先确认是哪个进程、哪些线程占用 CPU,再结合线程栈判断是业务循环、序列化、垃圾回收还是其他热点。JVM 线程转储中的线程标识与系统线程标识需要对应起来;连续采几次,比凭一份瞬时栈下结论可靠。再把异常时间与发布、请求量、错误日志联系起来。不要刚看到 CPU 高就先改线程池参数。

项目题讲自己的具体决策

延迟队列题可以沿着“何时创建任务、到期后谁消费、重复消费如何处理、失败怎样重试”回答,再说明养护状态如何更新。全流程交付题则拿一个真实需求展开:怎么确认验收条件、拆接口和页面、验证主要路径、安排上线检查。框架名称和工具名称可以带上,但不能代替这些具体动作。

原帖反问得到的信息是面试共四轮,岗位还涉及 C++;原帖未提供录用结果。