面灵AI→

字节跳动火山引擎 Agent 开发秋招二面

轮次
二面
时间
2026-10
来源
牛客网

《面试题目》

  1. 算法题:最长回文子串(LeetCode Hot 100)。最开始给的是一道字符串处理题,候选人主动提出不熟悉后换成了这道。
  2. 场景题:有两台机器,一个客户端和一个服务端,各自配有默认网关。从执行 curl 开始,请求如何从客户端到达服务端、再从服务端返回?请描述完整流程。
  3. 项目拷打(占大头):两个实习项目分别讲,从业务背景、痛点、解决思路说起;讲技术实现时一层层说清输入输出,以及链路中每个部分自己做了什么;还要在白板上画出设计架构。问了实习期间做部署上线的操作细节。
  4. 输入 URL 访问网页的网络过程是怎样的?
  5. ARP 协议及其作用是什么?

《参考解析》

最长回文子串主流有三种解法,面试里按「先说思路和复杂度」的顺序答。中心扩展法最稳:字符串长度 n,共有 2n-1 个中心(n 个单字符中心 + n-1 个双字符中心),以每个中心向两侧扩展,遇到不相等就停,取最长的一段,时间复杂度 O(n²)、空间 O(1),代码短、不容易写错,是白板上的首选。动态规划用 dp[i][j] 表示子串 s[i..j] 是否回文,转移是 s[i] == s[j] && dp[i+1][j-1],注意按子串长度从小到大枚举,空间 O(n²)。Manacher 算法把复杂度降到 O(n),靠插入分隔符统一奇偶长度、再维护已探明的最右回文右边界来复用信息,面试里能讲清思路即可,不必现场默写。答完补一句「如果只要长度不要子串,可以直接用中心扩展记录最大值」,显示对需求边界的敏感度。

curl 请求的完整往返流程要分层讲,别一上来就说 TCP。客户端执行 curl https://host/path 之后:① 解析 URL,确定协议、主机名、端口(HTTPS 默认 443);② 域名解析,先查本地 hosts 和 DNS 缓存,没有就向配置的 DNS 服务器递归查询拿到 IP;③ 判断目标 IP 是否与本机同网段——这一步靠本机路由表加子网掩码,ip & mask 与目标对比即可得出;④ 不同网段就要走默认网关,此时需要知道网关的 MAC 地址,查 ARP 缓存,没有就广播 ARP 请求;⑤ 拿到网关 MAC 后封装以太网帧发出,源 IP 仍是客户端、目的 IP 是服务端,源 MAC 是客户端、目的 MAC 是网关;⑥ 网关按目的 IP 查路由表逐跳转发(TTL 每跳减一),沿途路由器各自改写 MAC、IP 不变;⑦ 到达服务端所在网段后,最后一跳路由器同样靠 ARP 找到服务端 MAC 完成投递;⑧ 服务端处理并回包,回程同样按路由表走,可能是不对称路径。传输层上,curl 在 HTTP 请求前先做 TCP 三次握手,HTTPS 再加 TLS 握手(证书校验、密钥协商),应用层把请求报文交给内核 socket。应答侧还有内核的接收流程:网卡收包触发中断、DMA 写入环形缓冲区、软中断走网络协议栈逐层解封装,最终把数据交给 curl 的读缓冲区,curl 输出到终端。答的时候把「同网段不走网关」「IP 端到端不变、MAC 逐跳改变」这两句点出来,面试官就知道你真懂而不是背流程。

ARP 的作用是在局域网内「已知 IP 求 MAC」。它工作在链路层与网络层之间,请求方广播一个 ARP 请求帧(目标 MAC 填全 F,内容写「谁拥有这个 IP,请告诉我你的 MAC」),持有该 IP 的主机单播回应自己的 MAC,双方各自写入 ARP 缓存(通常有老化时间,Linux 默认十几分钟量级)以免每次都广播。它只在本广播域内有效,跨网段时解析的是网关的 MAC 而不是最终目标的 MAC——这正是上一题里「IP 不变、MAC 变」的由来。常见的追问有 ARP 欺骗(攻击者伪造 ARP 响应做中间人,防护靠静态绑定或 DAI 动态 ARP 检测)和 gratuitous ARP(主机主动广播自己的映射,用于 IP 冲突检测、主备切换后刷新邻居缓存)。

输入 URL 到页面渲染是这条链路的完整版,按「网络 + 渲染」两段答。网络段:URL 解析 → 查 DNS(浏览器缓存 → 系统缓存 → hosts → 本地 DNS 服务器 → 根/顶级/权威递归)→ 建立 TCP 连接(三次握手)→ HTTPS 再走 TLS → 发送 HTTP 请求 → 服务端处理并返回响应 → 浏览器按状态码、Content-Type、Cache-Control 等决定复用还是重传。渲染段:HTML 字节流经词法/语法分析构建 DOM 树,CSS 构建 CSSOM,两者合成渲染树,随后布局(Layout/Reflow)计算几何位置、绘制(Paint)生成图层、合成(Composite)交给 GPU 上屏;其间遇到 <script> 默认阻塞解析,defer/async 改变执行时机,<link rel=stylesheet> 会阻塞渲染。收尾可以补一句性能视角:DNS 预解析、连接复用、CDN、关键渲染路径优化分别作用在哪一段。

项目拷打部分的答题结构值得单独准备。面试官要的不是技术栈清单,而是「业务背景 → 痛点 → 方案选型 → 分层实现(输入输出)→ 我在其中做的部分 → 结果与验证」。白板画架构时按数据流画:入口、编排层、模型/工具调用、存储、观测,标出每一段的输入输出和失败分支。Agent 项目的高频追问集中在方案选型(为什么用这个框架 / 为什么不用 MQ)、Skills 与工具的设计边界、鉴权与权限收敛、长链路的状态与幂等、评测怎么做;部署上线细节要能说出发布方式、灰度策略、回滚手段和线上观测指标,答不上来会显得项目只是本地跑通的 demo。