【C++面经】全过程面试困难详解

目录

技术类问题

1. 进程与线程区别

2. 多态和继承(结合 muduo 的 Channel)

3. MySQL 锁与隔离级别

4. MySQL 中的实体

5. 主键和外键

6. SQL:查询学生表中李姓同学的人数

7. SQL 语句慢的排查思路

8. WHERE 后多个索引的查询过程

9. B + 树

10. 常用 gdb/Linux 命令

11. 做项目的下手思路与周期

12. 常用设计模式及项目应用

13. Json-Rpc 相关

14. 线程池

15. muduo 性能测试与优化

16. 麦克风 / 视频画面测试用例

17. URL 输入后错误的原因与测试用例

18. 体现能力的计划问题与解决思路

19. 进程间通信(IPC)方式

20. 性能测试指标

21. Socket

22. IP 分片增加丢包概率的原因

23. Protobuf 与 JSON 区别、跳表、事务、排序稳定性

24. 对 muduo 的扩展(HTTP 协议)

HR 类问题

1. 压力与释放方式

2. 考研打算

3. 学习成绩与优秀同学的优缺点

4. 团队成员积极性不足 / 任务推诿的处理

5. 飞快融入陌生团队


技术类问题

1. 进程与线程区别
  • 核心:进程是资源分配单位(独立地址空间、PID),线程是调度执行单位(共享进程资源,轻量);
  • 区别:进程切换开销大、通信复杂,线程切换快、共享内存通信高效;一个进程可具备多个线程。
2. 多态和继承(结合 muduo 的 Channel)
  • 继承:子类复用父类接口 / 实现(如 muduo Channel 继承自 noncopyable,禁用拷贝);
  • 多态:除虚函数重写,还可通过 “接口继承 + 策略模式” 达成(如 Channel 的 EventLoop* 成员,不同 EventLoop 实现不同调度逻辑,Channel 通过接口调用,无需关心具体实现)。
3. MySQL 锁与隔离级别
  • 锁:按粒度分表锁、行锁(InnoDB 支持);按类型分共享锁(S)、排他锁(X);
  • 隔离级别(从低到高):读未提交、读已提交、可重复读(MySQL 默认)、串行化;隔离级别越高,并发越低、一致性越强。
4. MySQL 中的实体
  • 对应现实世界的具体对象(如 “学生”“课程”),在数据库中映射为数据表,实体的属性对应表的字段。
5. 主键和外键
  • 主键:唯一标识表中记录,非空且唯一(如学生 ID);
  • 外键:关联另一表的主键,非唯一,作用是维护数据一致性(如学生表的班级 ID 关联班级表主键,避免无效班级 ID)。
6. SQL:查询学生表中李姓同学的人数

SELECT COUNT(*) FROM 学生表 WHERE 姓名 LIKE '李%';
7. SQL 语句慢的排查思路
    1. 否走索引、有无全表扫描、索引失效(如函数操作字段);就是看执行计划(EXPLAIN):
    1. 检查索引:是否缺少合适索引、索引过多导致优化器误判;
    1. 数据量:是否表过大未分区、统计信息过时;
    1. 锁等待:是否存在长事务占用锁,导致阻塞。
8. WHERE 后多个索引的查询过程
  • MySQL 优化器会计算每个索引的 “成本”(扫描行数、IO 开销),选择成本最低的索引;
  • 若多个索引联合更优,可能触发索引合并(如 OR 条件下的索引合并);若优化器判断全表扫描更快,会放弃索引。
9. B + 树
  • 多路平衡查找树,MySQL 索引底层建立;
  • 特点:叶子节点有序且相连(帮助范围查询),非叶子节点存索引键 + 子节点指针,叶子节点存完整数据(或主键);
  • 优势:高度低(IO 次数少)、范围查询高效、适合磁盘存储。
10. 常用 gdb/Linux 命令
  • gdb:break(打断点)、run(运行)、next(单步不进函数)、step(单步进函数)、print(打印变量)、backtrace(查看调用栈);
  • Linux:ls(列目录)、cd(切换目录)、grep(查找文本)、ps(查进程)、top(看资源占用)、netstat(查网络连接)、tail(看日志)。
11. 做项目的下手思路与周期
  • 思路:1. 明确需求(拆解核心作用 + 非功能要求);2. 手艺选型(语言、框架、存储);3. 架构设计(模块划分、接口定义);4. 迭代开发(核心功能优先,边构建边测试);5. 联调优化(bug 修复 + 性能调优);
  • 周期:按项目规模,小型计划 2-4 周,中型项目 1-3 个月(根据实际项目调整)。
12. 常用设计模式及项目应用
  • 单例模式:工具类(如日志器、配置管理器),确保全局唯一实例;
  • 工厂模式:对象创建(如消息队列的生产者工厂,根据类型创建不同生产者);
  • 观察者模式:事件通知(如 muduo 的 Channel,事件触发后通知 EventLoop);
  • 策略模式:多构建切换(如 HTTP 服务器的路由策略,不同路径对应不同处理逻辑)。
13. Json-Rpc 相关
  • 是否只构建服务端:根据方案需求,我实现了服务端 + 客户端(或仅服务端,如实说明),支持请求发送与响应处理;
  • 注册中心建立:用哈希表(unordered_map)存储 “技巧名 - 处理函数” 映射,服务启动时注册,收到请求后匹配调用。
14. 线程池
  • 定义:预先创建固定数量线程,循环处理任务队列中的任务;
  • 特点:减少线程创建 / 销毁开销、控制并发数(避免资源耗尽)、提高任务处理响应速度;核心组件:线程队列、任务队列、同步机制(互斥锁 + 条件变量)。
15. muduo 性能测试与优化
  • 性能测试:用压测软件(如 ab、wrk)测试 QPS、延迟、吞吐量;结合 perf 分析 CPU 热点;
  • 优化方向:1. 调整线程池大小匹配 CPU 核心数;2. 减少锁竞争(如无锁队列);3. 内存池复用对象,避免频繁分配;4. 优化 IO 模型(如调整 epoll 等待参数)。
16. 麦克风 / 视频画面测试用例
  • 麦克风:1. 静音 / 取消静音机制;2. 音量调节有效性;3. 背景噪音抑制;4. 多设备切换兼容性;5. 无声音 / 杂音异常场景;
  • 视频画面:1. 开启 / 关闭画面;2. 分辨率切换(720P/1080P);3. 帧率稳定性;4. 弱网下卡顿 / 花屏测试;5. 多窗口切换不黑屏;6. 摄像头设备兼容性。
17. URL 输入后错误的原因与测试用例
  • 错误原因:
    • 端点:服务器宕机、端口未监听、服务未部署;
    • 网络:DNS 解析失败、路由故障、防火墙拦截、弱网 / 断网;
    • 应用层:URL 路径错误、参数非法、权限不足、服务器内部错误(500);
  • 测试用例:1. 输入不存在的域名;2. 输入错误端口;3. 路径拼写错误;4. 无网络环境访问;5. 携带非法参数请求;6. 未登录访问需权限接口。
18. 体现能力的项目问题与克服思路
  • 问题:muduo 扩展 HTTP 协议时,高并发下出现请求响应错乱;
  • 解决思路:1. 定位问题:通过日志 + gdb 排查,发现是共享变量未加锁(多线程处理同一连接的请求);2. 解决方案:给每个连接绑定独立的请求上下文,用互斥锁保护共享资源;3. 优化:用线程局部存储(TLS)减少锁开销,最终解决错乱问题,QPS 提升 30%。
19. 进程间通信(IPC)方式
  • 管道(匿名 / 命名)、消息队列、共享内存、信号量、信号、套接字(Socket,跨主机 / 本地都拥护)。
20. 性能测试指标
  • 响应时间(延迟)、吞吐量(单位时间处理请求数)、QPS(每秒查询率)、并发数、资源利用率(CPU / 内存 / IO)、错误率。
21. Socket
  • 定义:网络编程的抽象接口(IP + 端口 + 协议),用于进程间(跨主机 / 本地)通信;
  • 本质:封装了 TCP/UDP 等协议的底层细节,提供 “打开 - 读写 - 关闭” 的文件式操作接口。
22. IP 分片增加丢包概率的原因
  • IP 分片后,需所有分片到达目标主机才能重组;
  • 任一分片丢失,整个数据包失效(需重传);分片越多,单个分片丢失概率越高,整体丢包风险上升。
23. Protobuf 与 JSON 区别、跳表、事务、排序稳定性
  • 文本格式(可读性强、调试方便),适合前后端交互;就是Protobuf vs JSON:Protobuf 是二进制格式(体积小、解析快、跨语言),适合 RPC / 存储;JSON
  • 跳表:有序链表的优化,通过多层索引快速定位,查询 / 插入 / 删除复杂度 O (logn),Redis 有序集合底层用;
  • 事务:数据库执行的原子性执行单元,满足 ACID(原子性、一致性、隔离性、持久性);
  • 排序稳定性:排序后,值相等的元素保持原先后顺序(如冒泡排序稳定,高效排序不稳定)。
24. 对 muduo 的扩展(HTTP 协议)
  • 基于 muduo 的 Reactor 模型,新增 HTTP 请求解析器(解析 Method、Path、Header、Body)和响应构造器;
  • 完成路由映射(URL 路径→处理函数),协助 GET/POST 方法;
  • 优化:请求上下文隔离,支持长连接(Keep-Alive),提升高并发场景下的稳定性。

HR 类问题

1. 压力与释放方式
  • 压力来源:项目 deadline、复杂问题排查;
  • 释放方式:1. 拆分任务,按优先级推进,避免焦虑;2. 运动(跑步、打球)放松;3. 向同事 / 导师请教,减少内耗。
2. 考研打算
  • 目前无考研计划,希望专注职场发展,借助实际项目积累工程经验,提升工艺落地能力。
3. 学习成绩与优秀同学的优缺点
  • 成绩:承认成绩并非顶尖,但注重实操能力,凭借项目将理论落地;
  • 优点:1. 学习效率高,善于总结方法;2. 严谨细致,代码 bug 率低;3. 主动探索新技术,知识面广;
  • 缺点:部分同学过度关注细节,可能影响项目推进效率;少数同学理论强,但实操落地能力有待提升。
4. 团队成员积极性不足 / 任务推诿的处理
  • 沟通为先:了解对方情况(如任务难度大、时间冲突),明确任务目标和分工,避免误解;
  • 主动承受:若对方有困难,分享经验或协助拆解任务;
  • 明确规则:若推诿严重,向负责人反馈,按团队制度明确责任,确保任务推进不脱节。
5. 敏捷融入陌生团队
    1. 主动沟通:了解团队成员职责、科技栈和工作方式;
    1. 高效学习:熟悉计划文档、代码规范,尽快上手分配的任务;
    1. 积极协作:主动承担力所能及的工作,遇到问题及时请教,参与团队讨论;
    1. 尊重氛围:遵守团队规则,适配现有工作节奏,建立信任。
posted @ 2025-12-12 10:48  yangykaifa  阅读(9)  评论(0)    收藏  举报