面灵AI→

快手测试开发一面:网络模型、TCP 握手与搜索二维矩阵

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

《面试题目》

  1. 实习经历询问。
  2. 简历项目的询问。
  3. 计算机 7 层网络模型。
  4. TCP 三次握手。
  5. 算法:搜索二维矩阵 II。
  6. AI Coding。

《参考解析》

七层网络模型与四层模型的对应

OSI 七层从下到上是:物理层(比特流传输、电气与物理规范)、数据链路层(帧、MAC 地址、差错检测、交换机)、网络层(IP 寻址与路由、ICMP、路由器)、传输层(端到端连接、TCP/UDP、端口)、会话层(会话建立与管理、同步点)、表示层(数据格式转换、加密压缩、编码)、应用层(HTTP、FTP、SMTP、DNS 等)。TCP/IP 四层是「网络接口层、网际层、传输层、应用层」,对应关系是:网络接口层合并了 OSI 的物理层与数据链路层,网际层等于网络层,传输层不变,应用层合并了会话层、表示层与应用层。记住这个映射关系,被问「四层与七层的区别」时就能答成「四层是把七层里职责相近的层合并,实际工程与抓包分析(Wireshark 的层级)更多按分层来定位」。可以顺手举一个数据发送的例子串起来:应用层生成 HTTP 报文 → 传输层加 TCP 头(端口与序号)→ 网络层加 IP 头(源目 IP)→ 链路层加帧头尾(MAC)→ 物理层转成信号发出,接收端逐层解封装。

TCP 三次握手与为什么要三次

流程:客户端发 SYN(带上自己的初始序列号 seq=x)进入 SYN_SENT;服务端回 SYN+ACK(seq=y, ack=x+1)进入 SYN_RCVD;客户端再回 ACK(ack=y+1),双方进入 ESTABLISHED。为什么是三次:核心是「双方都要确认对方的收发能力,并且同步初始序列号」。两次的话,服务端无法确认客户端是否收到了自己的 SYN(也就无法确认客户端具备接收能力),而且历史连接(旧的、延迟到达的 SYN)会让服务端白白建立连接并分配资源;三次之后双方都确认了「我能发、你能收、你能发、我能收」,序列号也同步完成。要能顺带回答常见追问:为什么不是四次——服务端的 SYN 与 ACK 可以合并成一个报文;初始序列号为什么随机——防止历史连接的报文被误认为是当前连接的(同时提高安全性、避免被猜测与注入);以及 SYN Flood 攻击与防护(半连接队列被打满,用 SYN Cookie、缩短超时、增大队列)。

搜索二维矩阵 II 的解法与面试注意点

题目特征是矩阵每行从左到右递增、每列从上到下递增。最优解是「从右上角(或左下角)出发」:以右上角为例,若当前值大于目标就往左走(排除该列),小于目标就往下走(排除该行),相等即找到,最多走 m+n 步,时间 O(m+n)、空间 O(1)。为什么这个方向可行:右上角的元素是「本行最大、本列最小」,比较一次就能确定一整行或一整列的取舍。对角线二分是另一个常见解法(对每条对角线二分,O(m log n) 或按较短边做),但工程上不如右上角出发的写法简洁。要主动说明的边界:空矩阵、只有一行或一列、目标比最小值小或比最大值大。关于「不会输入输出」这个短板,练习时要把常见平台的模板过一遍——ACM 模式(自己读 n、m、矩阵与目标,输出下标或布尔值)与核心代码模式(只写函数)要都能应付,读入用 map(int, input().split()) 或 Java 的 Scanner/BufferedReader,写之前先确认输出格式(返回下标还是 true/false、多个答案返回哪个)。

AI Coding 环节与面试复盘

AI Coding 现在越来越多出现在测开与后端的面试里,形式通常是给一段需求或一个已有函数,让你用 AI 工具协作完成,考察点有三:你能不能把需求描述清楚(提示词里包含输入输出、边界、约束)、你能不能审查 AI 的输出(找出它写错的边界与不合理的实现)、以及你能否运行并验证结果。原帖因为时间原因没提交也没运行,这是最可惜的——即使代码不完美,「跑起来 + 给出验证证据」也比交一个没验证的片段强。复盘这次的三个具体问题:计网基础不牢(把七层背成四层、握手细节答不清)、算法只写核心逻辑不做输入输出、AI Coding 没做完。对应的改进动作是具体且可执行的:把网络分层、TCP 连接生命周期、HTTP 与 HTTPS 的知识点整理成「结论 + 为什么 + 常见追问」三行卡;每天限时手写一道算法题的完整输入输出版;在本地把 AI Coding 的常见形式(给函数补实现、给需求写脚本、加测试用例)各练两遍,练到能在十分钟内跑通。