C++-Qt-音视频-基础问题01
目录
一、C++ 核心必考题
1. 语言基础 & 内存模型
2. C++11/14/17 特性 & 现代写法
3. STL & 容器/算法
4. 多线程 & 并发
5. OOP & 设计
二、Qt 核心面试题
1. QObject / 信号槽 / 事件系统
2. Qt UI & 绘制
3. Qt 线程与多线程模型(音视频方向极易考)
4. Qt 与音视频相关模块
5. QML / Qt Quick(如果岗位提到 QML 必问)
三、音视频方向核心必考题(偏 FFmpeg / 播放器)
1. 音视频基础概念
2. 播放器/解码流程
3. FFmpeg 常规考点
4. 实战问题 & Bug 场景
四、工程化 & 性能 & 调试类问题
怎么用这份清单?
一、C++ 核心必考题
1. 语言基础 & 内存模型
-
值语义 vs 引用语义 有什么区别?分别适合什么场景?
-
const关键字能修饰哪些东西?const int*/int* const/const int* const含义分别是什么? -
new/delete和malloc/free的区别?底层做了什么?能否混用? -
C++ 的 内存布局(栈、堆、全局/静态区、常量区)分别放什么?
-
说一下 C++ 的 对象生命周期:构造、拷贝、移动、析构在什么情况下会被调用?
-
什么是 未定义行为(UB)?举几个实际开发中常见的 UB 场景。
-
什么是 浅拷贝 / 深拷贝?如何正确实现深拷贝?
2. C++11/14/17 特性 & 现代写法
-
右值引用 和 移动语义 的设计目的是什么?举一个自己写的类用
std::move优化的例子。 -
std::move和std::forward的区别?什么是完美转发? -
auto的类型推导规则?哪些地方不要乱用auto? -
std::unique_ptr、std::shared_ptr、std::weak_ptr的使用场景与实现原理大概是什么? -
std::function和模板函数有什么区别?为什么std::function会有性能开销? -
=default/=delete的作用是什么?实际项目中你在哪些类上用过? -
什么是 constexpr?和
const区别?哪些场景必须用constexpr才行?
3. STL & 容器/算法
-
std::vector/std::list/std::deque/std::map/std::unordered_map特性、底层结构、典型使用场景。 -
std::map和std::unordered_map的底层实现、复杂度、优缺点? -
说一下
std::string的实现要点(小字符串优化 SSO、拷贝开销等)? -
STL 迭代器失效的情况有哪些?
vector/list/map分别举例。 -
如何自定义类型作为
unordered_map的 key?需要重载什么?
4. 多线程 & 并发
-
C++11 线程库中的:
std::thread、std::mutex、std::lock_guard、std::unique_lock、std::condition_variable用法和区别? -
什么是 数据竞争 (data race) 和 死锁?你实际遇到过吗,怎么排查?
-
想实现一个 线程安全 的队列,该用什么同步原语?如何避免虚假唤醒?
-
对
volatile的理解?它能保证多线程安全吗?为什么不行? -
原子操作
std::atomic有哪些常见用途?
5. OOP & 设计
-
虚函数表(vtable)的原理?一个有虚函数的类对象内存布局大概长啥样?
-
何时需要 虚析构函数?不加会有什么问题?
-
多态是如何在运行时实现的?
-
说几个你在项目里实际用过的设计模式(单例、工厂、观察者…),结合作品说明。
二、Qt 核心面试题
1. QObject / 信号槽 / 事件系统
-
Qt 的 信号/槽机制 是如何实现的?和普通回调相比有啥优点/缺点?
-
说一下
moc(元对象编译器)的作用,为什么需要它? -
connect的几种写法(老宏版、新函数指针版、lambda 版),各有什么优点? -
信号/槽的 连接类型(Qt::AutoConnection、Direct、Queued…)有什么区别?跨线程时默认是哪种?
-
Qt 的 事件循环 (event loop) 是如何运作的?
QCoreApplication::exec()之后做了什么? -
QEvent与eventFilter/installEventFilter的用法与典型场景?
2. Qt UI & 绘制
-
Qt Widgets 与 Qt Quick (QML) 的核心区别?各自适合什么类型的项目?
-
如何在 Qt 中实现自绘控件?一般重载哪些函数?常见的性能问题是什么?
-
Qt 中如何做 双缓冲绘图 防止闪烁?
-
QSS(Qt Style Sheet)和自绘(paintEvent)各自优缺点?
3. Qt 线程与多线程模型(音视频方向极易考)
-
Qt 中的三种多线程使用方式:
-
继承
QThread -
worker 对象 +
moveToThread -
使用 QtConcurrent / 线程池
说说区别和你实际推荐的方案?
-
为什么说 不推荐 在
QThread的子类中直接写业务逻辑?正确姿势是什么? -
GUI 线程限制是什么?哪些对象必须在主线程创建/使用?
-
Qt 中定时器的精度问题:
QTimer精度如何?在不同平台上有什么差异?
4. Qt 与音视频相关模块
-
你用过 Qt 的哪一代多媒体模块?
QtMultimedia/Phonon/ 自己封装 FFmpeg? -
怎样用
QAudioInput/QAudioOutput播放、采集 PCM?注意哪些格式匹配问题? -
用过
QVideoWidget或QAbstractVideoSurface/QVideoSink吗?如何在自定义控件中显示视频帧?
5. QML / Qt Quick(如果岗位提到 QML 必问)
-
QML 的对象生命周期和 C++ 对象有什么不同?
-
如何将 C++ 对象/类型暴露给 QML?(
qmlRegisterType/setContextProperty等) -
QML 中的大量动画和绑定会带来什么性能问题?如何排查和优化?
三、音视频方向核心必考题(偏 FFmpeg / 播放器)
1. 音视频基础概念
-
什么是 采样率、位深、码率、帧率、GOP?它们分别影响什么?
-
YUV 和 RGB 的区别?YUV420P 是什么格式?
-
容器格式(MP4 / FLV / MKV)和编码格式(H.264 / H.265 / AAC)有什么区别?
-
PTS 和 DTS 的区别?为什么会有 B 帧导致的 DTS≠PTS?
-
什么是 Timebase?FFmpeg 中时间戳是如何换算到秒的?
2. 播放器/解码流程
-
从「打开一个网络流/本地文件,到在屏幕上播放出来」,完整流程怎么走?(从
avformat_open_input一路说) -
音视频 同步(AV Sync) 是怎么做的?你会选哪个做主时钟?如何处理音画不同步?
-
解码线程、音频播放线程、视频渲染线程之间如何协同?队列如何设计?
-
如果网络不好/CPU 跑不动,导致延迟累积,你会怎么处理?(丢帧、变速、降低质量…)
-
如果音频播放设备只支持 44100Hz,而源文件是 48000Hz,该怎么办?
3. FFmpeg 常规考点
-
FFmpeg 解封装和解码的典型 API 调用顺序?
-
avformat_open_input → avformat_find_stream_info → avcodec_find_decoder → avcodec_open2 → av_read_frame → avcodec_send_packet/receive_frame
-
SWR(libswresample)和SWS(libswscale)分别做什么? -
如何用 FFmpeg 做 转码器?输入、解码、重采样/缩放、编码、封装整套流程能否顺一遍?
-
多路流(音频+视频+字幕)如何处理?如何正确选择音频/视频流?
-
FFmpeg 的线程安全性如何?哪些对象可以跨线程使用,哪些必须在单线程中?
4. 实战问题 & Bug 场景
-
你在做播放器/实时音视频时遇到过哪些 实际问题:
-
音画不同步
-
内存/句柄泄漏
-
退出时崩溃(线程没退出、解码器未释放)
你是怎么分析和解决的?
-
如何处理 首帧打开时间过长 的问题?(缓冲策略、预读、减少解码压力等)
-
高分辨率视频(比如 4K)播放卡顿,你会从哪些方面定位问题?(CPU、GPU、IO、解码线程、渲染效率)
四、工程化 & 性能 & 调试类问题
-
如何排查内存泄漏?你习惯用哪些工具(Valgrind、ASan 等)?
-
Release 和 Debug 下行为不一致,你通常如何快速定位问题?
-
你如何设计日志系统来方便音视频问题排查?日志里一般会记录哪些关键字段?
-
在 Qt + FFmpeg 项目中,如何划分模块、避免 UI 线程阻塞?简单描述一个你认为合理的架构。
怎么用这份清单?
-
先筛选方向
-
如果是「C++通用后台/客户端」岗位:重点看 1 + 2 + 4 类。
-
如果是「C++ + Qt 客户端」:重点 1 + 2 + Qt 全部。
-
如果是「音视频开发」:1 基础 + 3 音视频 + Qt 线程/多媒体。
-
-
每道题准备:
-
能说出定义/概念
-
能给真实项目例子
-
能提一两个坑/注意点(体现经验)
-
