字节 今日头条-C++ 三面
1. HTTPS 与 HTTP 的区别是什么?在生产环境如何权衡?
核心区别:
- HTTP 明文传输,无机密性/完整性保证;
- HTTPS = HTTP + TLS,提供加密、完整性校验、身份认证。
工程上要点:
- TLS 握手有额外开销(CPU、RTT);
- 通过 TLS1.3、会话复用、OCSP Stapling、硬件加速可显著优化;
- 现代互联网服务默认全站 HTTPS,安全收益远大于成本。
2.TLS 1.2 vs TLS 1.3 的关键差异?0-RTT 有什么风险?
TLS1.3 做了大量“减法与强化”:
- 删除不安全算法与协商;
- 1-RTT 完成握手(比 1.2 更快);
- 前向安全默认更强。
0-RTT 可降低首包延迟,但有重放攻击风险(请求可能被重复提交)。 应对:
- 0-RTT 仅用于幂等请求(GET/查询类);
- 服务端做 anti-replay 窗口和幂等 token 校验;
- 非幂等写请求禁用 0-RTT。
3. 无锁编程方案你会怎么设计?落地时最大难点是什么?
无锁方案通常基于 CAS + 原子变量(如无锁栈/队列)。 难点不在“写出 CAS”,而在:
- ABA 问题;
- 内存回收安全(节点何时能释放);
- 可维护性和可验证性。
工程上常见组合:
- MPMC 队列 + 批处理;
- Hazard Pointer 或 Epoch 回收;
- 关键路径无锁,外围用细粒度锁兜底。
4. ABA 问题怎么彻底解决?Hazard Pointer 和 Epoch 你怎么选?
- ABA 解决:tagged pointer(指针+版本号)或双宽 CAS;
- 回收方案: Hazard Pointer:精确回收,读路径有标记开销; Epoch:吞吐高、实现相对简单,但回收延迟可能更大。
选择标准:
- 极致低延迟读路径:更偏 Epoch;
- 内存敏感且需要精确释放:更偏 Hazard Pointer。
你说得对,这题重复了。给你替换成一题更像三面的高频“深水题”:
5. TCP 为什么需要 TIME_WAIT?线上出现大量 TIME_WAIT 连接该如何处理?
TIME_WAIT 的核心作用有两个:
- 保证被动关闭方能收到最后的 ACK 重传(防止对端没收到最后确认);
- 让旧连接中的延迟报文自然消失,避免污染后续同四元组新连接。
所以它不是“坏状态”,而是 TCP 为可靠性付出的必要代价。
线上 TIME_WAIT 很多时,正确思路不是“粗暴关掉”,而是:
- 优先看是否短连接过多,改为连接复用/长连接;
- 扩大本地临时端口范围;
- 调整连接关闭策略与超时;
- 客户端侧合理使用连接池,避免频繁建连拆连。
不建议依赖激进内核参数“硬压”TIME_WAIT,容易引入隐性网络问题。
代码:
# 查看 TIME_WAIT 数量
ss -ant | awk '{print
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++ 常考面试题总结 文章被收录于专栏
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.
查看22道真题和解析