Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions INTERVIEW_BRIEF.md
Original file line number Diff line number Diff line change
@@ -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+ 语言,测试完备。