平安科技后端全栈一面:RAG 项目与 JVM 内存
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 能否做一个自我介绍,并评价自己的性格与做事方式?
- Spring Boot 的基本原理是什么,它与 Spring MVC 有什么区别?
- 对 JDK 8 的垃圾回收原理有哪些了解?
- 项目中是否遇到过堆内存溢出,怎样解决?
- 出现内存溢出时,按什么顺序排查?
- Agent 是什么,平时用过哪些相关工具?
- 个人 RAG 项目解决了什么问题?
- 项目使用了哪个 Rerank 模型?
- 后端是否使用 Java,前端采用什么技术栈?
- RAG 从检索到问答有哪些主要步骤?
- 文档解析时会配置哪些参数?
- RAG 与 Agent 有什么关系和区别,什么场景会用到 RAG?
- Agent 的记忆可以怎样分类?
- HashMap 的底层结构是什么,JDK 7 到 JDK 8 有哪些变化?
- HashMap 的默认负载因子是多少?
- JVM 的内存区域怎样划分,哪些区域可能发生内存溢出?
- JDK 8 前后方法区的实现有什么变化,元空间使用哪部分内存?
- 对 CMS 和 G1 有哪些了解?
- 你有什么问题想问团队?
《参考解析》
RAG 要能顺着一份文档讲到底
文档先经过解析、切分与索引;收到问题后检索候选片段,必要时重排,再把相关证据交给模型生成答案。项目介绍还应交代引用怎样展示、权限怎样过滤、文档更新后索引何时生效。chunk 大小、重叠长度、表格与标题的保留方式,都需要结合实际文档测试。
RAG 负责给回答补充外部资料;Agent 通常还涉及选择下一步行动、调用工具和维护执行状态。一个 Agent 可以调用检索工具,但不是每个检索问答系统都需要复杂的 Agent 循环。
OOM 先读清错误类型
堆不足、元空间耗尽、直接内存不足和无法创建本地线程,排查方向不同。先结合报错、进程内存、线程数量与 GC 状态定位,再分析相关转储或性能数据。堆里对象多,还需要判断是容量不足、突发请求堆积,还是对象被长期引用。扩大堆只对其中一部分原因有帮助。
内存区域不是一张物理分区图
JVM 规范描述堆、方法区、线程栈等运行时区域;HotSpot 的具体实现随版本演进。JDK 8 以使用本地内存的元空间替代永久代,不能说所有类相关对象都因此离开了 Java 堆。程序计数器在 JVM 规范中没有规定 OutOfMemoryError 情形,也不能据此推导整个线程运行绝不会内存不足。
HashMap 只背阈值不够
JDK 8 常见实现用数组配合链表或红黑树,默认负载因子为 0.75。扩容阈值与容量、负载因子有关,树化还受桶内冲突和数组容量影响。它本身不提供并发修改保证,涉及共享更新时需要另行选择同步方式或并发容器。