C++面试常见问题

「C++ 40 周年」主题征文大赛(有机会与C++之父现场交流!) 10w+人浏览 571人参与

好的,下面是一个 较为详细版本 的《面试基础题关键词 + 一句话解释》,适合你这种做系统/架构型开发者提前准备。每个关键词我尽量都加入一个简短场景或备注,方便你在项目中“活用”而不只是死背。你可以打印下来,或者做成手机备忘,面试前快速复习。

#关键词一句话解释 + 场景备注
1进程三要素程序段 + 数据段 + 进程控制块(PCB)——运行中进程的三大组成。场景:多进程上位机中,理解 PCB 能帮助你处理进程状态切换。
2线程 vs 进程进程是资源分配单位,线程是 CPU 调度单位;线程共享进程资源但有独立栈。场景:使用 QThread 时要知道资源隔离边界。
3死锁四条件互斥、占有且等待、不剥夺、循环等待——四个同时成立,系统才能发生死锁。场景:在设备驱动或多线程通讯里避免死锁设计。
4观察者模式当一个对象状态改变时,自动通知所有依赖它的观察者。典型角色:Subject + Observer + Attach/Detach + Notify。场景:Qt 信号-槽就是典型实现。
5单例模式保证一个类只有一个实例,并提供全局访问点。场景:配置管理器、日志管理模块常用。
6策略模式定义一系列算法,封装后可互换,使其可独立于使用者变化。场景:设备协议解析中,不同协议可切换策略。
7装饰器模式动态给对象附加职责,而不修改原有类。场景:功能扩展模块或插件机制中可用。
8SOLID 原则单一职责、开放封闭、里氏替换、接口隔离、依赖反转——面向对象设计五大原则。场景:你的架构设计中体现模块清晰、接口稳定。
9接口隔离原则(ISP)客户端不应强迫依赖它不使用的接口。场景:设备模块接口设计时,不让业务层暴露不必要操作。
10依赖注入(DI)/控制反转(IoC)将依赖从内部创建转为外部注入,降低耦合。场景:驱动模块通过接口注入通讯层,而不是自己 new。
11装饰者 vs 代理 区别装饰者增强对象功能;代理控制对对象的访问。场景:日志代理 vs 功能增强模块。
12内存分区代码区、数据区(全局/静态)、堆、栈——程序运行时常见内存布局。场景:调优堆栈溢出或内存碎片时用得上。
13共享内存 vs 消息队列共享内存效率高但同步复杂;消息队列易管理但开销较大。场景:多进程通讯设计选型。
14多线程竞态条件多线程访问共享资源无同步机制,可能导致不可预测行为。场景:线程间分发数据、修改状态时需要锁或原子操作。
15QThread 与 Worker-Object 模型(Qt)在 Qt 中推荐模型:一个 QThread 只做线程容器,Worker 对象在该线程执行任务,避免直接继承 QThread。场景:上位机 UI 与后台通讯分离。
16装饰者模式 vs 适配器模式装饰者在不改原对象基础上增加行为;适配器把一个接口转换成另一个。场景:封装旧协议接口为新业务接口。
17观察者模式 vs 发布-订阅模式虽相似,但观察者更多是对象关系,发布-订阅通常跨模块/线程更松耦合。场景:模块间异步事件机制。
18单例是否线程安全单例模式若在多线程中懒加载需双检锁或 C++11 静态局部变量方式。场景:日志模块在多线程设备系统中。
19设计模式分类(Creational/Structural/Behavioral)创建型(对象生成)、结构型(对象关系)、行为型(对象交互)三类。场景:你在面试中提“我把模式分为这三类”给人专业感。 ([GeeksforGeeks][1])
20裸线程 vs 线程池裸线程每任务一个线程,资源开销高;线程池复用线程,适合大量短任务。场景:设备通讯请求量大时用线程池更好。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值