博雷顿科技股份公司 C++ 三面复盘

1. epoll 两种触发方式:LT 和 ET

  • LT只要 fd 上还有可读/可写事件,epoll_wait 每次都会返回该事件。 优点是简单,不容易漏事件;缺点是通知可能更频繁。
  • ET只有状态“发生变化”时才通知一次(例如从不可读变成可读)。 如果这次没把数据处理完,后续可能收不到提醒,容易“饿死”连接。 优点是高性能,减少重复通知;缺点是编程复杂、容易出错。

2. ET 模式注意点

使用要点:

  • fd 必须设为非阻塞(O_NONBLOCK)
  • 可读事件到来后要循环读,直到返回 EAGAIN/EWOULDBLOCK
  • 可写事件同理,循环写到 EAGAIN 或发送完
  • 一般配合 EPOLLONESHOT 防止并发线程重复处理同一 fd
  • 必须处理半包/粘包、对端关闭、异常等边界情况

一句话记忆:ET = 一次通知,必须“榨干”缓冲区。

3. TCP 服务端常见状态(你说的“状态码”通常指状态机)

常见状态:

  • LISTEN:服务端监听端口
  • SYN_RECV:收到客户端 SYN,回 SYN+ACK,等待 ACK
  • ESTABLISHED:连接建立完成,可收发数据
  • FIN_WAIT_1 / FIN_WAIT_2:主动关闭一方的状态
  • CLOSE_WAIT:被动关闭方收到 FIN,等待应用层 close
  • LAST_ACK:被动关闭方发出 FIN,等待最后 ACK
  • TIME_WAIT:主动关闭方等待 2MSL,确保对端收到 ACK

面试高频补充:CLOSE_WAIT 多通常是应用层没及时 close()。

4. TCP 三次握手 / 四次挥手

三次握手

1) 客户端发 SYN(seq=x) 2) 服务端回 SYN+ACK(seq=y, ack=x+1) 3) 客户端回 ACK(ack=y+1)

目的:双方确认“收发能力”和初始序列号可用。

四次挥手

1) 主动关闭方发 FIN 2) 被动关闭方回 ACK(进入 CLOSE_WAIT

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

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

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

全部评论
还行
点赞 回复 分享
发布于 02-26 22:20 湖北
LT和ET区别清楚了
点赞 回复 分享
发布于 02-26 21:28 北京

相关推荐

评论
1
1
分享

创作者周榜

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