吉比特前端一面:AI coding 工作流、MCP 与接口幂等
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍。
- 分享一下你用 AI coding 做工作提效的整套开发流程(从接到需求到自测上线),也就是你说的 harness 工程。
- 需求拆解时为什么先自己做而不是先丢给 AI?那些边界问题是不是应该沉淀成知识库,让 AI 先拆自己再看?
- AI 常见的不是写出闭包、性能这类代码问题,而是不理解需求里的隐性约束,你除了提示词还有什么预防手段?
- 你做过 MCP 服务,讲一下 MCP 是什么,实现一个 MCP 服务大致是什么流程?
- MCP 由几部分组成?
- 讲讲最近一段实习和负责的 AI 项目,你负责哪一块、有哪些有价值的优化?
- 底层用的是什么?只是大模型问答吗?Agent 能力是怎么实现的?
- 这个旅游平台除了问答还有什么能力?有没有记忆管理、会话管理、工具调用?
- 记忆系统的设计在服务端还是前端也有介入?
- 你们的东西和市面上大厂的产品(如豆包)比有什么优势或区别?
- 后端接口怎么保证幂等性?
- token 保证幂等性是什么意思?怎么保证?举个具体场景。
- 这个 token 的有效期是多久?如果他开了第一张票之后又下另一个订单开另一张票,用的还是同一个 token,怎么区分新增订单,会不会冲突?
- 算法:LeetCode 56 合并区间。
- 反问。
《参考解析》
AI 开发工作流(harness):可复用的骨架是:需求落到可验证的验收标准(先写清楚「做完什么样算对」,最好先有测试或检查脚本)→ 给上下文(相关文件、现有约定、接口 schema,而不是只给一句话需求)→ 小步让 AI 改(一次一个函数或一个文件,便于 review 和回滚)→ 自动验证(lint、类型检查、测试必须跑通)→ 人工 review 关键逻辑(安全、边界、数据一致性)→ 提交时写清为什么改。这套流程的价值不在「AI 写得多」,而在「错的时候能被拦住」。
需求该谁先拆:先自己拆的理由是边界与取舍只有人知道——哪些是这次不做的、哪些约束来自业务方、哪些改动会影响别的团队。AI 拆出来的方案往往「技术上合理但业务上不对」。更好的做法是分两步:人给目标和约束(含不做什么),AI 出拆解方案,人 review 后再进入实现。至于沉淀知识库:通用规范(代码风格、技术栈约定)适合沉淀,具体需求的业务边界不适合——它们变化快,沉淀下来反而变成过期上下文。
隐性约束怎么防:AI 出错主要不在语法,而在「它不知道的假设」。可用手段:把隐性约束显式化(写成验收清单、类型定义、注释里的不变量);用测试把行为固定住;让 AI 先复述它的理解再由人确认;对关键路径优先让它改而不是重写(重写会丢掉老代码里未写明的兼容逻辑);review 时专门盯「它有没有悄悄改了不该改的地方」。
MCP 是什么:Model Context Protocol 是一套让模型应用与外部能力对接的标准协议,把「工具/资源/提示模板」用统一的方式暴露出来,客户端(宿主应用)负责发现、调用和权限控制。价值在于解耦:工具提供方写一次 server,所有支持 MCP 的客户端都能用,不用为每个宿主写适配。
MCP 服务的组成:一个 server 通常包含:能力声明(提供哪些 tools、resources、prompts,带 JSON Schema 描述参数)、传输层(stdio 本地进程,或 HTTP/SSE 远程)、调用处理(收到 tools/call 后执行、返回结构化结果或错误)、鉴权与权限(谁能调、能调什么、危险操作要不要确认)。实现流程:定义工具清单与 schema → 实现各工具的处理函数 → 选传输方式并起服务 → 在客户端注册 → 用真实调用验证错误分支。
接口幂等与 token:幂等的本质是「同一个请求重复到达,结果只生效一次」。HTTP 语义上 GET/PUT/DELETE 天然幂等,POST 不幂等,所以下单这类 POST 要显式加幂等键。实现方式:客户端为一次「业务意图」生成唯一 key(uuid 或 业务号),服务端用它做唯一索引或 Redis setnx,重复请求直接返回首次结果。关键点是幂等键的粒度与生命周期——它标识「这一次提交」,不是「这个用户」。所以面试官追问的「token 有效期一天、下午两点开一张票、三点又开一张票」正是这个坑:如果幂等键按用户或按天生成,第二次提交会被当成重复而丢掉。正确做法是每次「点提交」生成一个新 key,key 的有效期只需覆盖这一次请求的重试窗口(分钟级),而不是一天。
和大厂产品的差别:不要硬吹。可讲的差异点:垂直场景的深度(特定业务的流程、数据、话术)、可定制性(企业自己的知识库与权限)、成本与部署方式(私有化、数据不出域)。反过来也要承认大厂在通用能力、多模态、生态上的优势。
合并区间:按左端点排序,然后线性扫描——如果当前区间左端点 <= 上一个区间的右端点就合并(右端点取 max),否则另起一段。注意用 max 而不是直接覆盖,因为可能出现完全包含的情况。时间 O(n log n)(排序主导),空间 O(n) 存结果。