面灵AI→

新华三H3C Java岗三面凉经(线下一日速通)

结果
三面挂
时间
2026-09
来源
牛客网

《面试题目》

一面:业务面(约 40 分钟)

  1. 自我介绍。
  2. 介绍一下你的项目(问得不细,主要靠自己讲清楚)。
  3. 你最得意的奖项是什么?
  4. 反问环节。

二面:素质面(约 30 分钟)

  1. 自我介绍。
  2. 作为项目负责人,你的角色与具体工作是什么?这个项目有没有上线?
  3. 你这个专业是做什么的?为什么要来做开发?
  4. 为什么本科毕业就出来就业,而不是去读研?
  5. 意向 base 地是哪里?
  6. 反问环节。

三面:综合面(约 30 分钟)

  1. 自我介绍。
  2. 讲一下你项目的架构。
  3. 大学学过哪些课程?
  4. 计组和操作系统相关的基础问题。
  5. 调优和生产排查相关的问题(跟内存相关的比较多)。
  6. Redis 相关问题。

《参考解析》

  1. 面试官不问细节时,项目该怎么讲:这种「主要靠你讲」的场次最怕没重点。一条能用的骨架是:一句话背景 → 我负责哪一块 → 最难的一个技术点是什么、当时卡在哪 → 最后拿到什么结果。第三步是面试官唯一会追问的地方,所以提前准备两个「我改了什么、前后指标差多少」的实例,比如接口 P99 从多少降到多少、慢 SQL 扫过的行数从多少降到多少。凡是说得出确切数字的地方就别用「快了很多」这种说法,说不出来就老实说是估算。
  2. 生产环境内存问题怎么定位:先分清是堆内还是堆外。堆内看 jstat -gcutil <pid> 1000,重点不是某一时刻的占用,而是 Full GC 之后老年代能不能降下去——降不下去基本就是泄漏。要看对象分布用 jmap -histo:live <pid>,要定位引用链就 jmap -dump:live,format=b,file=heap.hprof <pid> 拿快照丢进 MAT,看支配树和 Leak Suspects。堆外要想到直接内存(NIO、Netty 的 DirectByteBuffer)、元空间和线程栈,这几块 jmap 里看不到,得靠 NMT(-XX:NativeMemoryTracking=detail)或者系统层看 RSS。
  3. 线上内存问题常见的三种形态:一是内存泄漏,特征是老年代缓慢上涨、Full GC 频率越来越高但每次回收效果都在变差,通常是静态集合、ThreadLocal、监听器没注销、缓存没有淘汰策略;二是大对象或一次性全量加载,特征是接口级毛刺,一次查询把几十万行全捞进内存,这种改分页或流式处理就行;三是元空间泄漏,特征是 Metaspace 持续增长,多半是 CGLIB 动态代理、脚本引擎或者热部署反复生成类而 ClassLoader 没被回收。第三种最容易被忽略,因为堆看着很干净。
  4. JVM 内存区域里哪些会 OOM:堆会(Java heap space),元空间会(Metaspace),直接内存会(Direct buffer memory)。虚拟机栈和本地方法栈正常不会报 OOM,递归太深是 StackOverflowError;但如果线程数太多创建不出新线程,会报 unable to create new native thread,那是另一回事。程序计数器是唯一不会 OOM 的区域。这几个边界面试官很爱追着问,答的时候把「哪个区域报哪种错」一起说清楚会显得扎实。
  5. GC 相关的高频追问:分代假设(大部分对象朝生夕死)、对象什么时候进老年代(年龄阈值、大对象直接进、动态年龄判定、Survivor 放不下)、以及收集器的选型(JDK 8 默认 Parallel,现在新项目基本 G1)。被问到「怎么调」时,正确姿势是先看目标是什么——低延迟就压 STW,高吞吐就少回收次数——再决定堆大小、新生代比例和 MaxGCPauseMillis,不要一上来就背参数。
  6. Redis 这块容易被追到哪:单机与集群的差异是高频收尾题,包括数据分片方式、mget 这类多 key 命令在集群下为什么会失败、事务和 Lua 在集群下为什么要求所有 key 在同一个 slot。再往下就是持久化(RDB 快照与 AOF 重写的取舍)、过期删除策略和内存淘汰策略的区别(一个删过期 key,一个在内存满时淘汰还没过期的 key)、以及大 key 导致单次操作阻塞。答的时候把「为什么会这样」讲出来,比罗列八股得分高。