Skip to content

Commit 33a7c3a

Browse files
committed
Update interview-guide.md
1 parent dfda90c commit 33a7c3a

1 file changed

Lines changed: 105 additions & 25 deletions

File tree

docs/zhuanlan/interview-guide.md

Lines changed: 105 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ star: 5
8787
- MapStruct 实体映射最佳实践
8888
- ⭐基于 Redis Stream 的异步任务处理实现
8989
- 封装 Redis + Lua 多维度分布式限流组件
90+
- ⭐Skill 架构设计
9091
- Spring Boot 4.0 升级指南
9192
- Docker Compose 一键部署
9293

@@ -176,34 +177,49 @@ star: 5
176177
构建 Prompt → LLM 生成回答 → SSE 流式返回
177178
```
178179

179-
## 技术栈概览
180+
## 技术栈
180181

181182
### 后端技术
182183

183-
| 技术 | 版本 | 说明 |
184-
| --------------------- | ----- | ------------------------- |
185-
| Spring Boot | 4.0 | 应用框架 |
186-
| Java | 21 | 开发语言 |
187-
| Spring AI | 2.0 | AI 集成框架 |
188-
| PostgreSQL + pgvector | 14+ | 关系数据库 + 向量存储 |
189-
| Redis | 6+ | 缓存 + 消息队列(Stream) |
190-
| Apache Tika | 2.9.2 | 文档解析 |
191-
| iText 8 | 8.0.5 | PDF 导出 |
192-
| MapStruct | 1.6.3 | 对象映射 |
193-
| Gradle | 8.14 | 构建工具 |
184+
| 技术 | 版本 | 说明 |
185+
| --------------------- | ---------- | ------------------------------ |
186+
| Spring Boot | 4.0.1 | 应用框架 |
187+
| Java | 21 | 开发语言(虚拟线程) |
188+
| Spring AI | 2.0.0-M4 | AI 集成框架 |
189+
| PostgreSQL + pgvector | 14+ | 关系数据库 + 向量存储 |
190+
| Redis + Redisson | 6+ / 4.0.0 | 缓存 + 消息队列(Stream) |
191+
| Apache Tika | 2.9.2 | 文档解析 |
192+
| iText 8 | 8.0.5 | PDF 导出 |
193+
| MapStruct | 1.6.3 | 对象映射 |
194+
| SpringDoc OpenAPI | 3.0.2 | API 接口文档 |
195+
| DashScope SDK | 2.22.7 | 语音识别/合成(Qwen3 ASR/TTS) |
196+
| spring-ai-agent-utils | 0.7.0 | Spring AI Agent Skills 工具库 |
197+
| WebSocket | - | 语音面试实时双向通信 |
198+
| Gradle | 8.14 | 构建工具 |
199+
200+
技术选型常见问题解答:
201+
202+
1. 数据存储为什么选择 PostgreSQL + pgvector?PG 的向量数据存储功能够用了,精简架构,不想引入太多组件。
203+
2. 为什么引入 Redis?
204+
- Redis 替代 `ConcurrentHashMap` 实现面试会话的缓存。
205+
- 基于 Redis Stream 实现简历分析、知识库向量化等场景的异步(还能解耦,分析和向量化可以使用其他编程语言来做)。不使用 [Kafka](https://javaguide.cn/high-performance/message-queue/kafka-questions-01.html) 这类成熟的消息队列,也是不想引入太多组件。
206+
3. 构建工具为什么选择 Gradle?个人更喜欢用 Gradle,也写过相关的文章:[Gradle核心概念总结](https://javaguide.cn/tools/gradle/gradle-core-concepts.html)
194207

195208
### 前端技术
196209

197-
| 技术 | 版本 | 说明 |
198-
| ------------- | ----- | -------- |
199-
| React | 18.3 | UI 框架 |
200-
| TypeScript | 5.6 | 开发语言 |
201-
| Vite | 5.4 | 构建工具 |
202-
| Tailwind CSS | 4.1 | 样式框架 |
203-
| React Router | 7.11 | 路由管理 |
204-
| Framer Motion | 12.23 | 动画库 |
205-
| Recharts | 3.6 | 图表库 |
206-
| Lucide React | 0.468 | 图标库 |
210+
| 技术 | 版本 | 说明 |
211+
| ------------------ | ----- | ------------- |
212+
| React | 18.3 | UI 框架 |
213+
| TypeScript | 5.6 | 开发语言 |
214+
| Vite | 5.4 | 构建工具 |
215+
| Tailwind CSS | 4.1 | 样式框架 |
216+
| React Router | 7.11 | 路由管理 |
217+
| Framer Motion | 12.23 | 动画库 |
218+
| Recharts | 3.6 | 图表库 |
219+
| Lucide React | 0.468 | 图标库 |
220+
| React Big Calendar | 1.19 | 面试日历组件 |
221+
| React Markdown | 9.0 | Markdown 渲染 |
222+
| React Virtuoso | 4.18 | 虚拟滚动列表 |
207223

208224
## 技术选型常见问题解答
209225

@@ -353,10 +369,66 @@ String content = tika.parseToString(inputStream); // 自动识别格式并提
353369
| Vite | 开发服务器启动快(秒级),HMR 热更新体验好 |
354370
| Tailwind CSS | 原子化 CSS,快速开发,无需写 CSS 文件 |
355371

372+
## 功能特性
373+
374+
### 简历管理模块
375+
376+
- **多格式解析**:支持 PDF、DOCX、DOC、TXT 等多种简历格式。
377+
- **异步处理流**:基于 Redis Stream 实现异步简历分析,支持实时查看处理进度(待分析/分析中/已完成/失败)。
378+
- **稳定性保障**:内置分析失败自动重试机制(最多 3 次)与基于内容哈希的重复检测。
379+
- **分析报告导出**:支持将 AI 分析结果一键导出为结构化的 PDF 简历分析报告。
380+
381+
### 模拟面试模块
382+
383+
- **Skill 驱动出题**:内置 10+ 面试方向(Java 后端、阿里/字节/腾讯专项、前端、Python、算法、系统设计、测开、AI Agent 等),每个方向由 `SKILL.md` 定义考察范围、难度分布和参考知识库。基于 `spring-ai-agent-utils` 的 Progressive Disclosure 机制实现按需加载。
384+
- **并行双路出题**:有简历时,60% 简历项目深挖题(独立 Prompt)+ 40% 方向基础题(Skill 驱动),使用 Java 21 虚拟线程并行生成后合并,物理隔离避免 Prompt 冲突。
385+
- **自定义 JD 解析**:粘贴职位描述(JD),LLM 动态提取面试分类并匹配共享题库,无需预设方向即可开始面试。
386+
- **简历推荐方向**:上传简历后,LLM 通过 Semantic Matching 自动推荐最匹配的面试方向,降低用户选择成本。
387+
- **历史题目去重**:出题时自动排除已有会话中问过的题目,避免重复考察。
388+
- **面试阶段时长联动**:总时长滑块拖动后,各阶段(自我介绍、技术考察、项目深挖、反问环节)按时比自动分配。
389+
- **智能追问流**:支持配置多轮智能追问(默认 1 条),模拟多轮问答场景。
390+
- **统一评估架构**:文字面试和语音面试共用同一套评估引擎(分批评估 + 结构化输出 + 二次汇总 + 降级兜底),评估结果可对比。
391+
- **报告一键导出**:支持异步生成并导出详细的 PDF 模拟面试评估报告。
392+
- **面试中心入口**:面试中心页整合文字面试和语音面试入口,支持继续面试和重新面试。
393+
394+
### 面试安排模块
395+
396+
- **邀请解析**:规则 + AI 双引擎,支持飞书/腾讯会议/Zoom 格式,自动提取公司、岗位、时间、会议链接
397+
- **日历管理**:日/周/月视图 + 拖拽调整 + 列表视图
398+
- **状态流转**:定时任务自动过期,手动标记待面试/已完成/已取消
399+
- **面试提醒**:可配置提醒,避免错过面试
400+
401+
### 语音面试模块
402+
403+
实时语音对话面试,WebSocket + 千问3 语音模型(ASR/TTS/LLM 统一 API Key):
404+
405+
- **实时流式对话**:句子级并发 TTS,边生成边合成边播放,首包延迟 200ms
406+
- **服务端 VAD**:自动断句,实时字幕(含中间结果)
407+
- **回声防护 + 手动提交**:避免 AI 语音被误录入
408+
- **多轮上下文记忆 + 暂停/恢复**:超时自动暂停
409+
- **Micrometer 埋点**:TTS/ASR 延迟、会话时长等指标
410+
411+
> **已知问题**:端到端延迟偏高(服务端音频中转)、无耳机时回声泄漏、TTS 音色单一、弱网音频断续。后续计划探索 WebRTC、客户端 VAD 降噪、端到端语音模型等方案。
412+
413+
### 知识库管理模块
414+
415+
- **文档智能处理**:支持 PDF、DOCX、Markdown 等多种格式文档的自动上传、分块与异步向量化。
416+
- **RAG 检索增强**:集成向量数据库,通过检索增强生成(RAG)提升 AI 问答的准确性与专业度。
417+
- **流式响应交互**:基于 SSE(Server-Sent Events)技术实现打字机式流式响应。
418+
- **智能问答对话**:支持基于知识库内容的智能问答,并提供直观的知识库统计信息。
419+
356420
## 效果展示
357421

358422
### 简历与面试
359423

424+
面试中心:
425+
426+
![](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-interview-hub.png)
427+
428+
Skill 出题 + JD 解析:
429+
430+
![](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-skill-jd-parse.png)
431+
360432
简历库:
361433

362434
![](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-resume-history.png)
@@ -381,6 +453,10 @@ String content = tika.parseToString(inputStream); // 自动识别格式并提
381453

382454
![](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-mock-interview.png)
383455

456+
面试安排
457+
458+
![](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-interview-schedule-list.png)
459+
384460
### 知识库
385461

386462
知识库管理:
@@ -389,7 +465,7 @@ String content = tika.parseToString(inputStream); // 自动识别格式并提
389465

390466
问答助手:
391467

392-
![](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-qa-assistant.png)
468+
![page-qa-assistant](https://oss.javaguide.cn/xingqiu/pratical-project/interview-guide/page-qa-assistant.png)
393469

394470
## 学习本项目你将获得什么?
395471

@@ -437,9 +513,13 @@ String content = tika.parseToString(inputStream); // 自动识别格式并提
437513

438514
### 高级 AI 功能设计模式
439515

440-
- **多轮追问生成机制**:学习如何在面试问题生成场景中,通过多层 Prompt 设计实现“主问题 + 追问”的树形结构。掌握可配置追问数量、问题类型权重分配、历史去重等实战技巧。
516+
- **Skill 架构与 Agent Skills**:学习如何将面试方向配置从代码中解耦,基于 `SKILL.md` + `skill.meta.yml` 的双层配置设计。掌握 `spring-ai-agent-utils` 的 Discovery → Semantic Matching → Execution 三层 Progressive Disclosure 机制,以及文字面试(单次调用预加载)与语音面试(多轮 ReAct 按需加载)的差异化资源加载策略。
517+
518+
- **并行双路出题架构**:深入理解”单次调用无法兼顾简历和方向”的 Prompt 冲突问题,学习如何通过物理隔离(两套独立 Prompt 模板 + 两路并行 AI 调用)实现 60% 简历题 + 40% 方向题的混合出题,以及索引合并和降级策略的设计。
519+
520+
- **多轮追问生成机制**:学习如何在面试问题生成场景中,通过多层 Prompt 设计实现”主问题 + 追问”的树形结构。掌握可配置追问数量、问题类型权重分配、历史去重等实战技巧。
441521

442-
- **流式输出智能处理**:掌握 SSE 流式场景下的探测窗口”技术——在保持首字响应速度的同时,快速识别无信息”输出并统一为固定模板,避免用户看到长篇拒答文字。
522+
- **流式输出智能处理**:掌握 SSE 流式场景下的探测窗口”技术——在保持首字响应速度的同时,快速识别无信息”输出并统一为固定模板,避免用户看到长篇拒答文字。
443523

444524
- **统一无结果策略**:学习如何在 RAG 系统中设计一致的用户无结果体验,包括命中判定、输出归一化、流式截断等全链路优化。
445525

0 commit comments

Comments
 (0)