面灵AI→

去哪儿 AI 面试(Java 方向)

时间
2026-10
来源
牛客网

《面试题目》

  1. JVM 运行时数据区的核心构成,以及各区域的核心作用是什么?
    • 追问:栈帧具体包含哪些核心结构?
  2. HashMap 是线程安全的吗?ConcurrentHashMap 在 JDK 8 中是如何实现线程安全的?
    • 追问:ConcurrentHashMap 在 put 元素时,如果定位到的数组槽位是空的,它是用什么方式保证线程安全写入的?
    • 追问:当数组槽位已经存在元素、发生 hash 冲突时,synchronized 锁的对象是什么?
  3. Redis 的键过期删除机制是什么样的?如果只使用定期删除策略会有什么问题?
    • 追问:Redis 默认采用哪几种过期删除策略来处理过期键?
    • 追问:Redis 执行定期删除时,具体是怎么扫描过期键、避免过期键长时间阻塞主线程的?
  4. TCP 和 UDP 的核心区别和适用场景是什么?
    • 追问:在直播场景下使用 UDP,可能出现连续丢包造成长时间花屏,这种情况为什么不直接选择 TCP?
  5. 高并发场景下对接口进行限流,涉及哪些方案?
    • 追问:网关层做限流,限流维度是怎么设计的?
  6. 请分享一个你做过的最具技术挑战、最值得深入探讨的后端开发项目,它要解决什么问题?核心难点在哪?你又是如何攻克的?
  7. 请分享一段你最近半年内主动学习 AI 工具或大模型相关技术,并尝试落地到实际开发场景的真实经历,包括你做了什么、最终落地效果如何。

《参考解析》

JVM 运行时数据区与栈帧

线程私有的是程序计数器、虚拟机栈、本地方法栈,线程共享的是堆和方法区(JDK 8 之后由元空间实现,用本地内存)。虚拟机栈里放的是一个个栈帧,每次方法调用压一个:局部变量表(含 this 与参数槽位)、操作数栈、动态链接(指向常量池中该方法的引用)、方法返回地址,外加异常表等附加信息。追问常落在「局部变量表以槽为单位、long 和 double 占两个槽」以及「栈深度超限抛 StackOverflowError,而栈可以动态扩展时扩展失败抛 OutOfMemoryError」这两点。

ConcurrentHashMap 在 JDK 8 怎么保证线程安全

JDK 8 放弃了分段锁,改成「数组加链表或红黑树」,锁的粒度降到单个桶。put 时用 CAS 加自旋保证只有一个线程能初始化数组或写入空槽,这也是第一个追问的答案:槽位为空时不需要加锁,靠 CAS 抢插,失败就重试。槽位已有元素时才用 synchronized 锁住该桶的头节点,因此第二个追问的答案是锁头节点对象,后续在该桶的链表或红黑树上做插入。size 用 baseCount 加 CounterCell 分散计数,扩容支持多线程协同迁移,读操作大部分情况不加锁,靠 volatile 保证可见性。

Redis 过期删除:惰性加定期

Redis 同时用惰性删除和定期删除:访问某个键时才检查是否过期、过期就删并返回空。只靠定期删除的问题是它按抽样而不是全量扫描,冷键长期不被访问也扫不到,内存会一直被占着;只靠惰性删除则内存回收不及时。定期删除的做法是每秒固定次数、每次从设置了过期时间的字典里随机抽一批键检查,删除其中已过期的,如果这批里过期比例超过阈值就继续抽下一批,同时给单次执行设时间上限,避免长时间阻塞主线程;这也是第二个追问要答的点——靠随机抽样加时间盒控制来兼顾回收效率与响应时间。

直播为什么用 UDP 而不是 TCP

直播的核心诉求是时效,不是完整。TCP 的重传与按序交付会在丢包时把后续已到达的数据一起卡在接收缓冲区等重传,表现为延迟持续累积,观众看到的是越来越滞后甚至卡死;UDP 允许丢帧继续播,短暂花屏但时间线不落后。要缓解花屏,通常在应用层加选择性重传、前向纠错、抖动缓冲,并配合自适应码率与关键帧请求,实现在延迟和画质之间动态权衡,而不是把传输层换回 TCP。

限流方案与网关限流维度

常见算法:固定窗口简单但有临界突刺,滑动窗口按时间片细分缓解突刺,漏桶把请求以恒定速率放行,令牌桶允许一定突发、最常用于对外接口。落地位置分三层——网关层挡总入口、应用层用信号量或线程池隔离保护自身资源、分布式场景用 Redis 加 Lua 做全局限流。网关限流的维度通常按「接口或路由 + 调用方身份(AppKey、用户 ID、IP)+ 业务维度(租户、门店)」组合,不同维度配不同阈值和拒绝策略,并说明超额时是快速失败返回 429 还是排队等待,这决定了上游的重试行为。

项目题与学习经历怎么讲

项目题用 STAR 讲,重点放在「难点为什么难」和「你的方案与替代方案的取舍」上,准备好三层追问:为什么这么设计、代价是什么、如果重做会改什么,最好带一两个可量化的数字(耗时、QPS、错误率的变化)。学习大模型那段要讲真实落地而不是学习清单:从哪个具体痛点出发、试了什么方案、怎么控制成本与幻觉、上线后有没有被真实使用、效果用什么指标衡量;如果最后没落地,就诚实说明卡在哪一环、学到了什么判断,比编一个成功案例更稳。