深势科技 Java 开发面试经验

深势科技 · Java开发 · 一二面 · 2026-04

面试题目

一面

  1. volatile原理
  2. ThreadLocal原理
  3. Mysql中的事务隔离级别
  4. 可重复读和读已提交区别
  5. 可重复读可以解决幻觉问题吗
  6. 手撕:三数之和

二面

一、 Agent 项目与大模型相关

  1. 做的智能运维 Agent 平台主要是采用了 Spring AI 是吧?
  2. 有没有了解过 Spring AI Alibaba 这个框架?
  3. 用 Spring AI 的话,你是怎么着编排这个 Agent 的?
  4. 还构建了一个 RAG 知识库是吧?这个知识库里面它主要存的这些是文本数据吗?
  5. 那你是做这个文本的话,是怎么对它做切分的?
  6. 做向量化使用的是哪个模型?
  7. 有没有做 Rerank 重排序?
  8. 检索的时候对这个文本直接是做了向量化去检索的,是吧?
  9. 那你这个长期的记忆你是怎么来去处理的?什么样子的数据,你会把它当做长期的记忆?
  10. 在做这个智能运维 Agent 平台的时候,为什么没考虑用一下 LangChain4j?
  11. 有没有关注一下这个 Agent Skill?有没有自己去写一下,然后让模型调用一下这个 Skill?
  12. 在学习或者是实习当中,有没有用一些 AI 编程工具?

二、 实习经历

  1. 实习当中用到了 Kafka,那他们为什么用 Kafka 而不是用其他的队列,这个有了解吗?

三、 中间件与数据库

  1. 有了解过 ES (Elasticsearch) 这个数据库吗?
  2. 有没有了解过分库分表的一些机制?
  3. Redis 中有个 ZSet 类型,这个了解吗?
  4. 假设我要用 ZSet 类型做一个排行榜,但是如果两个人的分数相同,我就要用时间做先后顺序的排序。那我怎么来设计这个存储呢?
  5. 具体它怎么存呢?因为 score 是存了一个数字,你怎么样把它设计一下完成排序?
  6. 你知道 Redis 原生机制实现分布式锁会有哪些问题吗?
  7. 假设用普通方式实现分布式锁,我的一个任务在执行当中还没有执行完,他就把锁释放了。那我怎么样能保证这个任务执行完了才释放锁?
  8. 除了了解 Kafka,有没有看过 RocketMQ
  9. MySQL 这块,假设我要去执行一个 update 语句更新数据,比如用 name 去更新,但是这个 name 我没建索引,它会锁表吗?

四、 Java 基础与算法

  1. Java 这一块一般用的是 JDK 哪个版本?对 JDK 21/25 有没有过了解?
  2. 虚拟线程对 Java 开发有哪些帮助?IO 密集型和 CPU 密集型任务都能提高并发吗?
  3. 算法题:最小栈

参考解析

  1. Redis ZSet实现分数相同排序:可以将 score 设计为 分数 + (MAX_TIME - 当前时间戳) / MAX_TIME 的组合。利用浮点数精度,整数位代表分数,小数位代表时间倒序,从而实现多维度排序。
  2. MySQL无索引Update锁表:InnoDB存储引擎在执行 update 时,如果查询条件没有索引,会触发全表扫描,进而导致锁住整张表(隐式加行锁变成表锁)。建议线上生产环境必须加索引。
  3. 分布式锁过期提前释放:采用“锁续期”机制(如Redisson的看门狗watchdog),在任务执行过程中定期延长锁的有效期。也可以通过执行任务前预估时长,设置合理的过期时间。
  4. 虚拟线程适用场景:虚拟线程在 IO 密集型任务中表现优秀,因其能有效减少线程切换开销并处理大量阻塞 IO。在计算密集型任务中,虚拟线程无法提升性能,甚至可能因过度切换导致上下文切换开销增加。