海口Java后端小厂面经(AI项目方向)

某海口小厂 · Java后端开发工程师 · 一面 · 海南 · 2026-06

《面试题目》

  1. 介绍一下自己。
  2. 讲一下你的第一个项目(AI 类)。
  3. 项目中的会话记忆是怎么实现的,最多存几轮对话?
  4. 会话记忆怎么存储,存到哪里?是数据库吗?
  5. 你的 RAG 部分功能怎么实现的,怎么切分知识片段?
  6. 怎么让 RAG 部分将知识片段切分得更细?
  7. 如果写了提示词和做了 RAG,AI 还是会出现幻觉该怎么解决?
  8. 第二个点评类项目介绍一下。
  9. 项目中写到了一系列压测数据,这是真实的吗,怎么测出来的?
  10. 讲一下做 AI 项目遇到的最大的难题是什么,怎么解决的?
  11. 算法:左右括号匹配问题(LeetCode hot100 原题)。
  12. MySQL 增删改查怎么做,聚合函数?
  13. Linux 基础命令有哪些?
  14. 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)。