diff --git a/INTERVIEW_BRIEF.md b/INTERVIEW_BRIEF.md new file mode 100644 index 0000000..68625e7 --- /dev/null +++ b/INTERVIEW_BRIEF.md @@ -0,0 +1,60 @@ +# CommentMarkdownRender 面试速记 + +面向面试快速回忆项目的原理、技术栈和亮点,同时校对现有简历描述并提供改写建议。 + +## 项目简介 + +- VS Code 悬浮窗插件:在多语言代码中 Hover 注释时,自动去除注释符号并以 Markdown 形式渲染。 +- 场景:长文档注释阅读体验差,希望无需打开文件即可在 Hover 中获得结构化说明。 + +## 技术栈 + +- **语言与工具**:TypeScript、VS Code Extension API(`HoverProvider`、`MarkdownString`)、esbuild 打包、ESLint、TypeScript 严格模式。 +- **依赖管理与构建**:pnpm、`esbuild.js` 生产/开发双模式、`tsc --noEmit` 类型校验。 +- **测试**:`@vscode/test-electron` 端到端运行、`commentParser`/`hoverProvider` 单测与集成测试。 + +## 核心原理(按模块) + +1. **语言模式映射**:在 `LANGUAGE_COMMENT_PATTERNS` 中为 15+ 语言配置多行注释起止符,便于扩展。 +2. **注释范围检测**:`HoverProvider` 向上/向下扫描,查找注释起止符;启发式跳过字符串等误报,并显式排除多行 `//`。 +3. **内容提取**:`CommentParser` 去除首尾标记,逐行清理行首 `*` 等装饰符,保持 Markdown 语义(不破坏 `**` 粗体)。 +4. **渲染**:将提取结果放入 `MarkdownString` 并返回 `Hover`,使用 VS Code 原生渲染,避免 Webview 额外开销。 + +## 解析流程(时序) + +1. 扩展激活时注册支持的语言列表并绑定 `CommentMarkdownHoverProvider`。 +2. 用户 Hover → Provider 获取光标所在注释范围(向上找开始,向下找结束,处理对称标记,如 Python 的 `"""` 或 HTML 的 ``)。 +3. 若范围合法且非多行 `//`,调用 `CommentParser` 提取纯文本 Markdown。 +4. 返回 `Hover(MarkdownString)`,VS Code 完成渲染。 + +## 校对简历描述与改写建议 + +原描述要点与实际实现差异: + +- **AST 解析**:当前实现未使用 AST,而是基于注释模式表 + 启发式扫描;建议改为“基于多语言注释模式的轻量解析”。 +- **渲染机制**:使用 `HoverProvider + MarkdownString`,非 Decoration API;突出“利用 VS Code 原生 Hover 渲染,避免 Webview/Decoration 额外开销”。 +- **性能手段**:未使用 LRU 缓存,性能依赖常数级字符串处理和范围扫描;可强调“无状态、轻量算法,适用于万行文件”。 +- **多语言数量**:已支持 15+ 语言(不仅是 5+),通过模式表可插拔扩展。 + +可直接使用的简历表述(示例): + +> 基于 VS Code `HoverProvider` 开发跨 15+ 语言的注释 Markdown 渲染插件,在 Hover 时用 `MarkdownString` 原生渲染,无需 Webview。 +> 通过 `语言→注释模式` 映射与上下文扫描精确锁定注释块,过滤多行 `//`,逐行剥离装饰符保持 Markdown 语义。 +> 全程无状态、依赖常数级字符串操作,配合 TypeScript 严格模式与端到端测试,在大文件 Hover 下亦无明显延迟。 + +## 可能的面试题 + +1. 为什么不使用 AST 解析?启发式方案的权衡与误报/漏报场景是什么? +2. 如何避免将字符串里的 `/* */` 误识别为注释?当前启发式还能怎样改进? +3. 多语言支持如何扩展?新增语言需要改哪些地方? +4. 解析时如何处理 Python 对称起止符与 HTML 注释?是否支持嵌套? +5. 为什么选择 Hover + MarkdownString 而非 Webview/Decoration?各自的性能/安全权衡? +6. 如何在万行文件保持性能可控?若要引入缓存或增量解析该怎么设计? +7. 如何过滤多行 `//` 注释?边界情况(空行、缩进)如何处理? +8. 测试策略如何覆盖解析与 Hover 行为?端到端测试怎么驱动 VS Code 扩展? + +## 快速回忆要点 + +- 轻量解析:模式表 + 向上/向下扫描 + 多行 `//` 排除。 +- 渲染链路:注释范围 → 逐行清理 → `MarkdownString` Hover。 +- 优势:无状态、依赖 VS Code 原生渲染,易扩展 15+ 语言,测试完备。