海口Java后端小厂面经(AI项目方向)
《面试题目》
- 介绍一下自己。
- 讲一下你的第一个项目(AI 类)。
- 项目中的会话记忆是怎么实现的,最多存几轮对话?
- 会话记忆怎么存储,存到哪里?是数据库吗?
- 你的 RAG 部分功能怎么实现的,怎么切分知识片段?
- 怎么让 RAG 部分将知识片段切分得更细?
- 如果写了提示词和做了 RAG,AI 还是会出现幻觉该怎么解决?
- 第二个点评类项目介绍一下。
- 项目中写到了一系列压测数据,这是真实的吗,怎么测出来的?
- 讲一下做 AI 项目遇到的最大的难题是什么,怎么解决的?
- 算法:左右括号匹配问题(LeetCode hot100 原题)。
- MySQL 增删改查怎么做,聚合函数?
- Linux 基础命令有哪些?
- Docker 知不知道,常用 Docker 来干嘛?
《参考解析》
1. AI 项目会话记忆的实现与存储
会话记忆通常分短期与长期两层:短期记忆直接维护在内存(如 Redis 或进程内缓存)中,以 sessionId 为 key 存储最近 N 轮对话(受限于模型上下文窗口,超出部分做摘要压缩或滑动窗口丢弃);长期记忆才需要落库(MySQL/向量数据库),用于跨会话的用户画像或历史检索。存到内存而非数据库的原因是对话上下文读写频繁、对延迟敏感,数据库 IO 开销不适合每轮对话都读写。
2. RAG 知识片段切分
常见切分策略:按固定 token 数滑动窗口切分(简单但可能切断语义)、按语义边界(标题/段落)递归切分、结合重叠窗口(overlap)保留上下文连续性。要切得更细,可以减小 chunk size、增加 overlap 比例,或引入二级切分(先按章节粗切,再按句子细切),但切得过细会丢失语义完整性,需要在召回精度和上下文完整性之间权衡,通常配合检索时的 chunk 合并/相邻片段拼接来补偿。
3. RAG + 提示词后仍出现幻觉的解决思路
可从几个层面优化:① 提高检索质量(更好的 embedding 模型、混合检索 BM25+向量、重排序 rerank);② Prompt 层面明确要求「仅根据提供的资料回答,资料中没有则回答不知道」;③ 引入答案校验环节,将生成答案与检索片段做一致性比对(如 NLI 模型或二次 LLM 校验);④ 控制生成温度(降低 temperature)减少模型自由发挥;⑤ 必要时加引用溯源,让用户可验证答案出处。
4. 算法:括号匹配问题
经典思路是用栈:遍历字符串,遇到左括号入栈,遇到右括号则检查栈顶是否为对应的左括号,匹配则出栈,不匹配或栈为空则直接返回 false;遍历结束后栈为空才算完全匹配。时间复杂度 O(n),空间复杂度 O(n)。