面灵AI→

睿联嵌入式软件开发一二面:服务端承压、MTU/MSS 与 TCP 包长限制

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

《面试题目》

一面(9.7,24min):

  1. 为什么不在客户端合成?为何会阻塞?服务端如何承压?
  2. 是否投错岗位?了解多少嵌入式?
  3. 单声道 AAC 导出参数中的「40.1K」是什么意思?
  4. 为什么还要问服务端,再用「上传、合成、问是否完成」重述业务?
  5. 为什么不在客户端处理?

二面(9.21,32min): 6. 是否真想做嵌入式?网络项目做到哪一层? 7. TCP/UDP 的长度、MTU/MSS 分别是多少? 8. Android 经历与 AI 使用情况? 9. TCP、UDP 有没有包长限制?MSS 如何得出?对端是否需要知道? 10. 「可写是不是就算连上」?

《参考解析》

「为什么不在客户端合成」要从设备能力与一致性两个角度答。 客户端合成(在手机上做混音、转码、拼接)的优点是省带宽、无需上传;但对低端机来说,编解码是 CPU 密集且耗电的操作,会阻塞 UI 线程造成卡顿,不同机型的编解码器实现差异大导致结果不稳定,且合成结果难以复现与统一(用户换机后结果不同)。放在服务端则可以用稳定一致的算法与算力、便于统一升级与审计,代价是要上传原始素材(带宽与存储成本)并设计异步任务链路。所以真正合理的答案是分层:能本地的做预处理(裁剪、压缩、降采样)以减少上传量,重计算与需要一致性的部分放服务端。服务端承压的手段是异步任务队列 + 水平扩容 + 限流排队:任务入队后按优先级与租户配额出队处理,客户端轮询或推送拿结果,并对任务设置超时、重试与失败原因。

「40.1K」这类参数要看上下文。 在 AAC 导出参数里,40.1K 一般指采样率(约 40.1 kHz 这种非标准值的来源通常是重采样或从某些视频容器继承的时间基),但 AAC 的常见采样率是 44.1kHz / 48kHz,所以「40.1K」更可能是码率相关显示或导出工具把 bitrate 显示成了 40.1 kbps。回答这类问题的正确姿势是先确认单位与语义(是采样率、码率还是声道数?),再解释影响:码率决定音质与文件大小(单声道语音场景 32–64kbps 足够),采样率决定可还原的最高频率(奈奎斯特定理,40.1kHz 采样率对应约 20kHz 上限)。面试时不要硬猜,说明「我会看导出工具的参数说明与文件头(用 ffprobe 读)确认」,比编一个数值更可信。

TCP/UDP 的长度限制与 MTU/MSS 要能算清。 层次是:MTU 是链路层的最大传输单元,以太网默认 1500 字节;MSS = MTU − IP 头(20,含选项可到 60) − TCP 头(20,含选项可更大),所以以太网下 TCP 的 MSS 通常是 1460 字节(IPv6 下 1440)。TCP 是面向字节流的协议,本身没有「包长」限制——它会按 MSS 分段(segment),应用层可以写任意长度(大文件靠分段 + 滑动窗口/拥塞控制持续发送),所谓的「包长限制」是 IP 层:IP 数据报总长度字段是 16 位,最大 65535 字节,超过 MTU 时靠 IP 分片(IPv4)或必须由源端分片(IPv6 不允许中间路由器分片,靠 PMTUD 发现路径 MTU)。UDP 有明确长度限制:UDP 头里的长度字段是 16 位,所以数据报最大 65535 字节(含 8 字节头,载荷最多 65527),且 UDP 不做分片重组保证——实际使用时受路径 MTU 与丢包影响,超过 1500 左右会在 IP 层分片,任意一片丢失整包丢弃,所以应用层通常自己切成 1200 字节左右(为隧道/VPN 留余量)。MSS 如何得出、对端是否需要知道:MSS 在 TCP 握手时由双方在选项里各自通告(MSS option),表示「我的接收缓冲区愿意接受的单个 TCP 段最大数据量」,一般取本机出口 MTU 减去头部开销;双方各自独立通告,发送方取对端通告值与自身路径 MTU 中较小者,接收方不需要「知道」对端的 MSS 值,因为对方已经在用它了。路径 MTU 变化要靠 PMTUD(靠 ICMP 差错报文或探测)发现,ICMP 被屏蔽时会出现「黑洞」。

「可写是不是就算连上」的答案是「不等于」。 socket 可写只表示本端的发送缓冲区还有空间,对于非阻塞 connect,可写通常意味着握手完成(成功或失败),但要用 getsockopt(SO_ERROR) 读一下错误码才能区分成功与失败;对于已建立连接的 socket,可写不代表对端还活着、更不代表对端应用层收到了数据(TCP 只有发送缓冲区确认,没有应用层确认)。要确认连接有效,需要应用层心跳(PING/PONG)或依赖 TCP 保活(SO_KEEPALIVE,默认 2 小时太久,需调参数);要确认对端业务处理了,必须有应用层 ACK 或幂等回查。这类题也在考「至少一次 vs 恰好一次」的意识:TCP 只保证送到(或明确失败),业务语义要自己定。嵌入式/网络岗还要能补:SO_REUSEADDR(快速重启绑定 TIME_WAIT 端口)、TCP_NODELAY(关 Nagle 降延迟)、半关闭(shutdown(SHUT_WR) 发 FIN 但仍可读)、以及 TIME_WAIT 大量堆积的成因与处置。