跳转至

百度 C++ 面经真题整理

参考来源

高频真题

1. connect 什么时候返回?服务端 accept 什么时候返回?

速答: connect / accept 的返回时机本质都和 TCP 建连状态机有关;追问里通常会继续考三次握手、阻塞/非阻塞和错误处理。
细看: TCP、UDP、HTTP、HTTPS / IO、多路复用、零拷贝

2. 如果客户端 connect 返回了,但服务端掉线了或第三次握手没真正完成,客户端怎么感知?

速答: 靠后续读写错误、超时、KeepAlive/心跳或应用层探活去感知,单靠“建连成功过一次”并不等于连接永远可用。
细看: TCP、UDP、HTTP、HTTPS

3. 进程之间通信方式有哪些?

速答: 管道、消息队列、共享内存、信号量、socket 都算;面试里最好补一句“共享内存最快,但同步最难”。
细看: 进程、线程、内存、调度

4. I/O 多路复用底层怎么理解?

速答: 核心不是背 select/poll/epoll 名字,而是理解谁负责关注集合、谁负责就绪通知、为什么 epoll 适合大量连接。
细看: IO、多路复用、零拷贝

5. 浏览器输入 URL 之后发生了什么?

速答: 这题是典型链路题:DNS 解析、建连/TLS、HTTP 请求响应、页面渲染,每一步都能继续追。
细看: TCP、UDP、HTTP、HTTPS / RPC、消息队列、DNS、CDN

6. 三次握手里如果最后一次握手异常了会怎样?

速答: 本质要回到 TCP 状态机和超时重传,别把它答成“没握成就完了”;客户端和服务端对连接状态的一致性才是关键。
细看: TCP、UDP、HTTP、HTTPS

7. 阻塞和非阻塞、同步和异步有什么区别?

速答: 别混着答:阻塞/非阻塞说的是线程会不会在当前调用挂住,同步/异步说的是 IO 完成过程由谁负责推进。
细看: IO、多路复用、零拷贝

8. epoll 为什么比 select/poll 更适合大量连接?

速答: 因为 epoll 把关注集合和就绪事件分离,用户侧重点处理 ready list,而不是每次全量扫描。
细看: IO、多路复用、零拷贝

9. 输入 URL 之后,DNS 和 CDN 分别扮演什么角色?

速答: DNS 负责把名字解析到合适入口,CDN 负责把内容调度到更近的边缘节点,两者是链路里不同层的能力。
细看: RPC、消息队列、DNS、CDN

10. 如果一个连接看起来“连上了但不好用”,你会怎么排?

速答: 区分是建连成功但后续读写失败、超时、半开连接还是下游应用协议没走通;百度这类题很适合答成分层排障。
细看: 项目面试题:性能优化、线上排障、系统思维

11. 如果 DNS 解析慢,你会从哪些层面排查?

速答: 先看本地缓存、递归解析器、权威解析、网络质量和 TTL 策略,再判断是不是 CDN 调度或上游 DNS 本身有问题。
细看: RPC、消息队列、DNS、CDN

12. 如果 accept 很慢,是网络问题还是应用问题?

速答: 不能直接下结论,要区分 backlog、连接洪峰、应用处理不过来、线程池阻塞还是系统资源瓶颈;百度这类题适合按层拆。
细看: IO、多路复用、零拷贝

13. 什么情况下会出现半开连接,服务端该怎么处理?

速答: 常见于一端异常退出、网络断开但内核未及时感知的场景,通常靠 KeepAlive、应用层心跳、读写超时和连接清理策略兜底。
细看: TCP、UDP、HTTP、HTTPS

14. 如果 epoll_wait 一直没事件,但用户说服务卡住了,你会怎么想?

速答: 要区分是真的没流量,还是事件循环被别的线程阻塞、连接管理有 bug、应用层协议卡住,或者监控口径本身有问题。
细看: IO、多路复用、零拷贝

15. 一个服务器只能有一个 CA 证书吗?

速答: 不是,服务端可以根据域名、SNI、证书链配置等管理多张证书;面试里重点不是死记“一个还是多个”,而是理解 TLS 身份认证怎么工作。
细看: TCP、UDP、HTTP、HTTPS

答题提示

  • 百度这类页最适合用“从调用接口一路往协议和系统层拆”的方式回答。
  • connect/accept/epoll/DNS 这些题,主动分清“应用层、传输层、系统调用层”的边界很加分。
  • 如果是排障题,尽量答成“现象 → 分层定位 → 可能瓶颈 → 验证手段”。

这一类面经的百度风格

百度公开 C++/后端面经里常见特点是:

  • 很爱问协议栈和系统调用边界
  • connect / accept / URL 全链路这类题特别典型
  • 客户端线和后端线都会把网络题问得比较细