字节 今日头条-C++ 三面

1. HTTPS 与 HTTP 的区别是什么?在生产环境如何权衡?

核心区别:

  • HTTP 明文传输,无机密性/完整性保证;
  • HTTPS = HTTP + TLS,提供加密、完整性校验、身份认证。

工程上要点:

  1. TLS 握手有额外开销(CPU、RTT);
  2. 通过 TLS1.3、会话复用、OCSP Stapling、硬件加速可显著优化;
  3. 现代互联网服务默认全站 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”,而在:

  1. ABA 问题;
  2. 内存回收安全(节点何时能释放);
  3. 可维护性和可验证性。

工程上常见组合:

  • 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 的核心作用有两个:

  1. 保证被动关闭方能收到最后的 ACK 重传(防止对端没收到最后确认);
  2. 让旧连接中的延迟报文自然消失,避免污染后续同四元组新连接。

所以它不是“坏状态”,而是 TCP 为可靠性付出的必要代价。

线上 TIME_WAIT 很多时,正确思路不是“粗暴关掉”,而是:

  • 优先看是否短连接过多,改为连接复用/长连接;
  • 扩大本地临时端口范围;
  • 调整连接关闭策略与超时;
  • 客户端侧合理使用连接池,避免频繁建连拆连。

不建议依赖激进内核参数“硬压”TIME_WAIT,容易引入隐性网络问题。

代码:

# 查看 TIME_WAIT 数量
ss -ant | awk '{print 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

昨天 07:14
门头沟学院 C++
点赞 评论 收藏
分享
暑期实习什么时候投?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务