望舒的模拟面试(2026-01-08)

小麦小麦

AI Agent 编程助手(CLI)

一、代码实践

Q1: ToolResult 的类型约束

当前 ToolResult 类型定义如下:

export type ToolResult<T = unknown> = {
  success: boolean;
  data?: T;
  error?: string;
};

> 如何实现这样的约束,使得:当 success: true 时,TypeScript 强制要求 data 必须存在;当 success: false 时,强制要求 error 必须存在?

Q2: 单例模式的测试问题

> sessionManger.ts 使用模块级单例:

let sessionManager: SessionManager | null = null;

> 这种单例实现在单元测试中会有什么问题?你会怎么改进以支持测试隔离?

Q3: 长时间运行命令的处理

> runCommandPro.tsnpm run dev 这类长时间运行的命令使用非阻塞模式。为什么这样设计?如果用户想要停止这个后台进程,代码中有提供机制吗?你会怎么实现?


二、系统设计与架构

Q4: 容错降级设计

> 我看到 checkpointer.ts 中,当 SQLite 初始化失败时会降级为内存模式(MemorySaver),这种容错设计有什么优缺点?在什么场景下你会选择直接报错而不是降级?

Q5: LangGraph 中断机制原理

> 代码中使用了 interrupt() 来暂停 Agent 执行等待用户确认敏感操作。你能用最简单的语言解释 interrupt 机制的底层工作原理吗?它是如何实现"暂停执行→等待外部输入→恢复执行"这个流程的?

Q6: 状态图 vs 链式调用

> 当前 Agent 使用 StateGraph 编排 summarizerNode → llmCall → toolNode,为什么不直接用简单的链式调用(Sequential Chain)?状态图在这个场景下解决了什么问题?

Q: 可观测性设计

> 你了解软件工程的可观测性吗?比如你怎么知道用户的程序运行出问题了,你会通过什么方式监控程序报错,持续提升软件的可靠性。

Q: AI Agent 框架

> 当前这个项目使用了 LangGraph 作为 Agent 基础框架,你觉得它的优缺点是什么?你了解过其他 Agent 框架吗?


三、安全机制

Q7: 安全措施的全面性

> 对于这个 Coding Agent,代码中做了哪些具体的安全措施?(提示:可以从命令执行、文件操作、路径检查等角度回答)这些措施有什么局限性?你能想到更好的方案吗?

Q8: 白名单策略的漏洞

> runCommandPro.ts 中使用命令白名单 ['node', 'npm', 'pnpm', ...],但白名单中的 node 可以执行任意代码,比如 node -e "xxx"。当前的安全机制能防住吗?你会怎么改进?

Q9: 路径遍历攻击

> security.ts 使用 relative(root, resolvedPath) 检查路径是否越界。如果攻击者构造路径 /project/../../../etc/passwd,这个检查能防住吗?符号链接(symlink)攻击呢?


四、上下文工程

Q10: 上下文压缩策略改进

> 当前的 CompressionStrategy 是基于消息轮次(rounds)数量触发压缩的。这种方式有什么问题?有没有更好的压缩触发策略?你会怎么实现?

Q11: Token 估算的准确性

> 代码中用 text.length / 4 来估算 token 数量。这个估算对于中文内容准确吗?如果要支持多语言,你会怎么改进这个估算逻辑?

Q12: UI 消息与模型消息分离

> CompressionStrategy 同时维护了 processedMessages(给 UI 显示)和 modelMessages(给模型使用)。为什么要分离这两套消息?这种设计解决了什么问题?

Q13: System Prompt 的约束有效性

> systemPromptTemplate.ts 中有大量行为约束(如"禁止顺便写测试"、"禁止主动执行命令")。这些约束在实际使用中可靠吗?如果模型"不听话",你有什么技术手段可以强制执行这些约束?

Q14: 任务边界的判断

> Prompt 中要求"任务范围只等于当前这条用户消息",但如果用户说"帮我把这个项目重构一下",这个任务边界应该怎么界定?你会怎么设计让 Agent 主动澄清任务范围的机制?


五、错误处理与重试

Q15: 重试策略的边界

> node.ts 中工具执行失败时会进行指数退避重试,但只对非 ErrorTypes.TOOL 类型的错误重试。为什么 TOOL 类型的错误不应该重试?你能举例说明什么情况下重试是有害的?

Q16: 错误分类的设计意图

> errors.ts 定义了多种错误类型(AUTH、RATE_LIMIT、NETWORK、SAFETY、TOOL、RUNTIME 等)。这种细粒度的错误分类对 Agent 的行为有什么影响?模型应该如何根据不同错误类型采取不同策略?


六、产品设计与用户体验

Q17: 撤销功能设计

> 假设 Agent 执行了 write_filereplace_in_file 修改了用户的代码,但用户不满意想撤销。你会如何设计这个撤销功能?需要考虑哪些边界情况?(提示:参考 Cursor、Copilot 等工具的做法)

Q18: 敏感操作确认的用户体验

> 代码中对 write_file、run_command、delete_file 等操作都设置了 requireConfirm: true。但如果用户觉得每次确认很烦,想要"全部允许"或"记住我的选择",你会怎么设计这个功能?有什么安全风险需要考虑?

七、团队建设

> 你作为项目组长,我理解是一号位角色,你通过持续沟通与正向激励提升团队协作氛围,可以说说具体做法吗,比如哪些形式的正向激励。如果团队成员不配合产生消极情绪,你会如何行动?临时补位或是有其他办法?


文档中心

一、状态管理与架构设计

Q1: Pinia 状态设计

> 文档中心涉及多种安全等级的文档分类管理。你是如何用 Pinia 组织这些状态的?如果有一个文档同时被"金库审批"和"审计模块"两个页面使用,状态应该放在哪里?如何避免状态冗余和同步问题?

Q2: 计算与展示解耦

> 你提到"重构展示链路,实现计算与展示解耦"。能具体说说之前是什么样的耦合问题?你是如何设计这个解耦方案的?这种解耦对单元测试有什么帮助?

Q3: 模块化边界

> 审批模块、审计模块、金库模块之间有哪些数据或逻辑是共享的?你是如何划分模块边界的?如果产品要求"审批通过后自动触发审计记录",这个逻辑应该放在哪个模块?


二、表格与导出

Q4: vxe-table 选型理由

> 为什么选择 vxe-table 而不是 Element-Plus 自带的 el-table?在什么场景下 vxe-table 的优势会体现出来?

Q5: 大数据量导出

> 如果用户要导出 10 万条审计记录,前端直接用 xlsx 库处理会有什么问题?你是如何设计"导出过程状态反馈与交互兜底"的?如果导出到一半浏览器崩溃了,用户体验应该如何保障?

Q6: 导出失败率优化

> 你提到"导出失败率显著下降",能说说之前失败的主要原因是什么?你做了哪些具体的优化措施?如何监控和量化"导出失败率"这个指标?


三、用户体验与交互

Q7: 审批弹窗规范化

> "审批详情弹窗规范化"具体规范了哪些内容?如果不同审批类型的弹窗内容差异很大,你是用一个通用弹窗组件还是多个专用组件?如何平衡复用性和灵活性?

Q8: 空态设计

> "空态规范化"是指什么?列表为空、搜索无结果、权限不足这三种空态应该如何区分展示?你是如何让团队统一遵守这个规范的?

Q9: 减少误触

> 你提到"减少无效操作与误触",能举个具体的例子吗?对于"删除文档"这种高风险操作,你会设计怎样的防误触机制?除了二次确认弹窗还有其他方案吗?

Q: 用户体验其他维度

> 对于用户体验,除了空态展示、状态反馈、交互兜底外,你还遇到过哪些维度?


四、数据安全与边界处理

Q10: 文档安全等级

> 这个项目"以数据安全为核心",那么前端在文档安全管控中承担什么职责?前后端安全校验的边界在哪?应该如何配合?

Q11: 边界数据处理

> 你提到"补齐边界数据处理与验证",能举几个具体的边界 case 吗?比如文档名称为空、文件大小为 0、创建时间是未来时间,这些情况前端应该如何处理?是直接过滤还是展示异常标记?

Q12: 列表展示异常

> "列表展示异常"的根因是什么?是前端渲染问题还是后端数据问题?你是如何定位这个 bug 的?修复后如何保证不再复现?


五、工程化与协作

Q13: TypeScript 实践

> 在这个项目中,TypeScript 主要解决了什么问题?你是如何定义文档、审批单、审计记录这些业务类型的?有没有遇到类型定义和后端接口不一致的情况?如何处理?

Q14: 组件设计原则

> 如果让你设计一个"文档卡片"组件,既要在列表页用、也要在详情弹窗用、还要在审批流程中用,你会如何设计这个组件的 props 和 slots?如何避免这个组件变成一个"万能组件"?

Q15: 迭代成本控制

> 你提到"降低后续需求迭代成本",能具体说说你做了什么来实现这个目标?


六、性能与稳定性

Q16: 长列表性能

> 假设文档列表如果有几千条数据,你会如何优化渲染性能?虚拟滚动在这个场景下适用吗?如果用户要"全选导出",虚拟滚动会带来什么问题?

Q17: 发布稳定性

> 你提到"保障发布稳定性",发布稳定性怎么衡量?在发布前你会做哪些检查?如果线上出现了严重 bug,你会采用什么措施?你是否了解回滚方案、灰度发布机制?

Q18: 错误监控

> 这个项目已上线运行,有 2000+ 用户,你们有前端错误监控吗?如果用户反馈"页面白屏",但你在本地复现不了,你会如何排查?

 
Copyright © 2026 前研学院. All rights reserved.