华为 Agent 实习两轮记录:TCP、C 存储期与拓扑序

4 道题 · 更新于 2026-10-28

本场面试题

  1. TCP 三次握手怎样进行,为什么不能只交换两次?
  2. C 语言中“临时变量”的存储区域怎样判断?
  3. 已知任务是求拓扑序,可以怎样说明通用解法?
  4. RAG、Skill 和 MCP 各解决什么问题?

面经与参考答法

华为 Agent 实习两轮记录:TCP、C 存储期与拓扑序

以下短答与教学示例由编辑补充,不代表原作者的现场回答、实际架构或实测结果。

公司为华为,具体 BG 未注明,岗位为 Agent 方向。作者自述 6 月中旬技术面约 50 分钟、7 月初主管面,月份未给年份;两轮按同一个实习流程整理。项目职责和面试结果仅为自述,不作外部认证。

选四组已见技术问题。原文还提到课程、竞赛、C 编译和项目架构追问,但没有展开部分项目细节;这些全部保留在私有库存。拓扑题没有完整输入、约束和样例,本页只讲通用方法,不复原原题。

(1)TCP 三次握手怎样进行,为什么不能只交换两次?

客户端发 SYN,服务端回 SYN 与 ACK,客户端再确认服务端的 SYN,用来同步双方的初始序列号并建立连接状态。第三步让服务端知道自己的 SYN 已被收到,并有助于处理滞留的旧连接请求;它不证明上层业务已健康。

教学例子:一个旧 SYN 延迟到达服务端,若收到请求并回包就立即视为完整连接,可能建立对方并不承认的连接。要求有效的后续确认,能把此类旧请求与当前建连过程区分。

技术核对:RFC 9293 §3.5:建立连接。

(2)C 语言中“临时变量”的存储区域怎样判断?

先澄清“临时变量”具体指哪种对象。若指函数内没有 static、extern 或 _Thread_local 说明符的普通局部对象,C 规定的是自动存储期;实现中常用栈或寄存器,也可能在保持可观察行为的前提下消除。未同时声明 _Thread_local 的 static 局部对象具有静态存储期,不能因写在函数里就一律称为栈变量。

教学例子:函数里的 int x = 1 与 static int count = 0 生命周期不同;前者通常随该次块执行存在,后者跨函数调用保留。原题没给声明或代码,因此这里不能替面试官选定某一变量的实际地址。

技术核对:C11 委员会草案 N1570 §6.2.4、GCC:优化可能改变变量的实际承载方式。

(3)已知任务是求拓扑序,可以怎样说明通用解法?

拓扑序要求每条依赖边的前置节点都排在后置节点前,只对有向无环图存在。通用 Kahn 方法统计入度,反复输出零入度节点并删除其出边;输出数量不足节点总数说明有环。用邻接表和普通队列时,构图与扫描为 O(V+E)。

教学例子:A→C、B→C 可以得到 A、B、C,也可以得到 B、A、C;只要每条边的顺序都满足即可。若再加 C→A 就有环,不能返回一段局部顺序并称完成。是否要求字典序、如何输入边,原帖均未给出。

技术核对:Boost.Graph:DAG 与拓扑排序复杂度。

(4)RAG、Skill 和 MCP 各解决什么问题?

RAG 为生成提供按需检索的外部证据;Skill 封装一类任务的方法、说明与资源;MCP 规范应用和外部工具、资源之间的能力交互。三者可以组合,权限、状态和结果校验仍由运行系统落实,不能由术语名称自动保证。

教学例子:一个排障 Skill 指导先查内部手册,RAG 返回带版本的相关段落,再通过已授权的 MCP 工具读取日志。手册中的文字不能自行授予写操作权限,工具接入成功也不等于事故已经解决。

技术核对:Agent Skills 规范、MCP 架构(2026-07-28)。

面经是候选人自述,解析为 Agent Journey 整理。更多大厂 AI / Agent 岗面经 · 按目标公司模拟面试