面灵AI→

浙江中控 C++ 面经:常量指针、位域、UDP 传图与 Qt 视频流

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

《面试题目》

  1. 讲一下常量指针与指针常量。
  2. 说一下项目里用到的数据结构。
  3. 知道结构体的位域吗?
  4. 讲一下结构体里字符长度怎么计算,int 溢出后会怎么样?
  5. 项目里服务器端用到的 TCP + 多线程讲一下。
  6. C++11 里知道哪些新特性,具体讲一下。
  7. 对 C++ 的继承、多态、封装了解吗?简单说一下。
  8. 项目里用到的信号与槽机制说一下。
  9. 项目里的旋转功能是怎么实现的?有用到三维坐标系吗?
  10. Qt 端实现视频流数据用到了 Qt 的哪些组件,如何实现?简单说一下。
  11. 如何保证 UDP 传输图片的前后关系?
  12. 项目里有涉及到线程安全吗?简单说一下。
  13. 线程怎么退出?图片间隔传输调用哪个函数?
  14. 手搓冒泡排序。
  15. 一个大型项目里有很多文件,一旦出现重复定义错误,你会怎么解决?
  16. 介绍下用到的这块开发板。
  17. 你用过 Git 或者 SVN 这两个代码管理工具吗?

《参考解析》

常量指针与指针常量:const int *p 是指向常量的指针,指针本身可变、指向的内容不可改;int *const p 是指针常量,指针本身不可变、内容可改;const int *const p 两者都不可改。判断方法是看 const 在 * 的左边还是右边。

位域与结构体长度:位域让多个字段共用一个存储单元(如 unsigned a:3),长度计算要按编译器的对齐规则和底层类型宽度算,跨平台差异大,工程里通常不拿位域做跨模块协议结构。字符长度计算看的是「有效字符数还是字节数」——UTF-8 下中文占 3 字节,strlen 数到 \0 为止,sizeof 在编译期就定好;int 溢出是有符号未定义行为,无符号则按模回绕。

用 UDP 传图怎么保证顺序:UDP 本身不保证顺序和到达,要在应用层加序号与分片信息,接收端按序号重组、丢弃过期帧、缺片就用上一帧或请求重传;实时视频更常见的做法是「宁可丢帧也不等」,用时间戳判断新旧,只有关键帧才要求完整。

Qt 视频流的常用组件:QMediaPlayer + QVideoWidget 适合通用播放,QAbstractVideoSurface 或 QVideoSink 可以拿到底层帧做自定义渲染,配合 QImage/QPainter 或 OpenGL 纹理上传;解码与渲染放在不同线程,用信号槽跨线程投递(注意连接类型选队列连接)。

线程退出与间隔传图:用原子标志位或 QThread::requestInterruption 配合 isInterruptionRequested,避免 terminate();间隔传输一般用 QTimer 定时触发,或在采集线程里 sleep 到下一帧时间戳。

重复定义/链接错误的排查:先看完整报错定位到符号,再判断是头文件里定义了变量或函数体(应改成声明 + extern)、inline 未加、模板实例化重复,还是一个 .cpp 被重复加入构建;用 nm 看目标文件里的符号类型(T/D/B 表示已定义)能快速缩小范围。

冒泡排序:外层循环 n-1 趟,内层比较相邻元素交换,每趟把最大值冒到末尾,可以加 swapped 标记提前结束;时间 O(n²)、最好 O(n)、空间 O(1)、稳定。