面灵AI→

影石嵌入式软件开发实习一面凉经 音视频方向

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

《面试题目》

  1. WebSocket 遇到网络问题会重发吗?它和 TCP 的可靠性是什么关系?
  2. TLS 的加密过程是怎样的?
  3. NV12 是什么类型的数据?和 YUV420 以及其他 YUV 格式有什么区别?
  4. 项目里 OPUS 的压缩率、单个包的时长是多少?和 AAC 相比如何?
  5. TCP 和 UDP 有什么区别?
  6. 死锁处理中用 trylock 加释放已有锁的方案时,trylock 的延迟相关问题了解吗?
  7. H.264 编码中 MPP 除了配置 GOP 还有什么?帧间预测和帧内预测是什么?I 帧有帧间预测吗?
  8. 线程是怎么创建和运行的?用的什么函数?
  9. 怎么处理线程的并发?互斥锁、自旋锁和读写锁之间有什么区别?
  10. Linux 调用 write() 往硬盘写 10 个字节并返回 10,这 10 个字节真的写到硬盘里了吗?
  11. 除了 FU-A 分片处理 RTP 大包,还有其他方法吗?
  12. Linux 的虚拟内存是什么样的?运存 16GB、硬盘 512GB,可以申请 1TB 吗?
  13. SPS 和 PPS 的具体内容有什么?
  14. static 修饰全局变量或函数,为什么外部文件不可见?

《参考解析》

WebSocket、TCP 与 TLS:WebSocket 是跑在 TCP 之上的应用层协议,自身不做确认和重传,可靠性完全由 TCP 保证——丢包时 TCP 会自动重传,所以「WebSocket 不会重发」和「TCP 可靠」并不矛盾,重传发生在传输层而不是协议层;应用层要做的是心跳(ping/pong)探测连接是否还活着,以及断线后的重连与消息补偿。至于 TLS 握手:客户端 ClientHello(随机数、支持的密码套件)→ 服务端 ServerHello + 证书 → 客户端校验证书链与域名、用 ECDHE 完成密钥交换(具备前向安全)→ 双方由 HKDF 导出会话密钥 → Finished 校验握手完整性,之后全部走对称加密(AES-GCM 或 ChaCha20-Poly1305),这就是为什么非对称只用在握手阶段。

YUV 格式与 H.264 编码:YUV420 表示每 4 个 Y 共用一组 UV,色度被降采样一半。NV12 的排布是 Y 平面加交错 UV 平面(UVUVUV…),I420 是三个独立平面(YYYY…UU…VV…),NV21 则是 VU 交错。NV12 常见于相机输出和硬件编解码器,因为两平面结构对 DMA 友好。H.264 里 I 帧只用帧内预测(参考同一帧内相邻块的纹理),P/B 帧才做帧间预测(运动估计加运动补偿);所以 I 帧没有帧间预测,它是随机的接入点、也是解码的参考基准。MPP 上除了 GOP 还有码率控制模式(CBR/VBR)、QP 范围、profile/level、参考帧数量、slice 模式等,配 GOP 只是最基础的一步。

write 返回 10 与页缓存落盘:返回 10 只说明十个字节被写进了内核页缓存(page cache),并不代表已经落到磁盘,此时掉电数据就没了。要真正落盘得调用 fsync()(刷数据加元数据)或 fdatasync()(只刷数据),或者打开文件时带 O_SYNC;sync() 是全局回写所有脏页,粒度太大。这也是数据库自己做 WAL 和 fsync 策略的原因。

虚拟内存与超量申请:进程看到的是虚拟地址空间,由 MMU 按页表映射到物理页;64 位进程的虚拟地址空间远大于 1TB,所以申请 1TB 完全可能成功——但申请成功不等于能用。Linux 默认允许 overcommit,malloc/mmap 只是登记虚拟区间,真正触碰页面时才分配物理帧,物理内存加 swap 不够时触发 OOM killer。所以「16GB 内存 + 512GB 硬盘能不能申请 1TB」的准确回答是:能申请到地址空间,但要真读写这 1TB 数据,就必须有对应的物理内存和 swap 撑着,否则进程被 OOM 杀掉。

锁的选择与 static 的链接属性:trylock 加释放已有锁是打破死锁的常用手段,但要留意它的延迟特性——拿不到锁立刻返回失败,如果外层用「失败就重试」的忙等,会白白烧 CPU,通常要配随机退避或固定重试间隔。锁的选型:互斥锁会睡眠、适合较长临界区;自旋锁忙等、适合极短临界区且可在中断上下文用;读写锁允许多个读者并发、适合读多写少。至于 static 修饰全局变量或函数,关键不在存储位置而在链接属性——它把符号变成内部链接(internal linkage),只在本编译单元可见,不进动态符号表,所以其他 .c 文件既声明不到、也不会和同名符号冲突;只答「存在静态存储区、生命周期长」是把生存期和链接属性混为一谈了。