【C上岸】C常见面试题目 – 网络编程篇网络编程在C后端/游戏服务器/音视频/高性能服务等领域是高频考察点。下面这些题目基本覆盖了主流互联网公司近几年C岗位的网络相关真实面试题按难度和出现频率大致排序。基础 中频题几乎必问socket编程中 listen 的 backlog 参数到底代表什么如果 backlog 设置为1会有什么实际效果accept() 返回的新连接 socket fd 和原始 listen fd 有什么本质区别它们的文件描述符指向的内核对象是否一样TCP 三次握手和四次挥手详细流程哪些包可以合并为什么 TIME_WAIT 状态要等待 2MSL什么是 TCP 的半连接队列SYN队列和全连接队列accept队列如何查看和调整它们的大小ss -ltn 能看到什么close() 一个 socket 后为什么还会出现大量 TIME_WAIT如何优雅地减少 TIME_WAITSO_REUSEADDR、SO_REUSEPORT、tcp_tw_reuse、tcp_tw_recycle 的区别与风险epoll 的 LT 和 ET 两种工作模式分别是什么意思在 ET 模式下有哪些必须注意的编程细节epoll 和 poll/select 相比有哪些优势epoll_create、epoll_ctl、epell_wait 三个函数的参数和返回值分别代表什么一个已经建立的 TCP 连接双方都没有 close如果中间路由器突然断电了双方如何感知到连接已经失效保活机制、SO_KEEPALIVE 的作用和参数什么是 TCP 的 Nagle 算法和延迟 ACK它们在什么场景下会导致延迟如何关闭它们send() / write() 返回值小于要发送的字节数时应该怎么处理有没有可能 send() 直接返回 -1 且 errno 是 EAGAIN中高级 高频题大厂爱问非阻塞 socket epoll ET 模式下read()/recv() 应该循环读到多少才停怎么判断真正读完了write()/send() 在非阻塞模式下一次性写不完数据应该怎么处理剩余数据常见的两种方案是什么什么是 TCP 的 send buffer 和 receive buffer它们的大小如何查看和调整/proc/sys/net/ipv4/tcp_wmem 和 tcp_rmem一个 TCP 连接上同时存在大量小包发送时性能瓶颈可能出现在哪里如何优化解释一下 TCP 的滑动窗口、拥塞窗口、慢启动、拥塞避免、快速重传、快速恢复的过程。什么是 TCP 的 head-of-line blocking队头阻塞HTTP/1.1、HTTP/2、HTTP/3 分别是如何解决或缓解这个问题的在使用 epoll 时如果一个 fd 同时可读可写epoll_wait 返回后应该先处理读还是先处理写为什么多线程 Reactor vs 单线程 Reactor vs 多线程 Proactor 模型分别是什么各自优缺点muduo、libevent、libev、asio 大致属于哪一类如何用 C 实现一个简单的协程网络库难点保存上下文、调度、与 epoll 的集成如果让你设计一个支持十万并发的单进程网络服务器你会怎么组织代码结构会使用哪些关键技术/设计模式框架 工程题偏大厂/资深muduo 网络库的核心类有哪些EventLoop、Channel、Poller、TimerQueue、Acceptor、Connector、TcpServer、TcpConnection 分别负责什么muduo 中为什么 TcpConnection 没有暴露 fd 给用户而是封装了 sendInLoop()muduo 的定时器是怎么实现的TimerQueue 使用了什么数据结构如何做到 O(log n) 插入和 O(1) 拿到最近定时器asio 的 io_context 和 strand 分别解决什么问题post() 和 dispatch() 的区别是什么protobuf muduo / asio / brpc 组合使用时常见的封包拆包方式有哪些长度前缀 包体、google::protobuf::Message 的 SerializeToArray如何在 C 中实现一个基于 epoll 的高性能 HTTP/1.1 服务器需要处理哪些边界情况Connection: keep-alive、chunked、pipeline、异常关闭检测什么是 TCP 的 zero window 探测如何避免自己陷入 zero window 状态在高并发场景下如何避免 accept 惊群问题SO_REUSEPORT 的原理和注意事项解释一下 epoll 的水平触发和边缘触发在实际编码中导致的经典 bug 案例至少说出两种。如果让你实现一个支持 WebSocket 的服务器你会怎么设计协议升级、帧解析、心跳、断线重连逻辑更偏底层 / 性能优化 / 故障排查方向资深/架构epoll 的内核实现里红黑树和就绪链表分别起什么作用copy 到用户态的 epoll_event 是怎么组织的epoll 的 ET 模式下为什么必须使用 non-block fd如果用了 block fd 会发生什么accept4() 相比 accept() 多了什么能力SOCK_NONBLOCK、SOCK_CLOEXECTCP 的 SYN cookie 是如何工作的它解决了什么问题在 Linux 上如何查看某个进程的 TCP 连接状态分布ss -m、ss -o、/proc/net/tcptcpdump 抓包时如何只抓某个连接的完整握手和挥手过程写出过滤表达式一个连接在 CLOSE_WAIT 状态卡住了可能的原因有哪些怎么快速定位大量 ESTABLISHED 但没有数据交互的连接应该怎么处理SO_LINGER、tcp_fin_timeout如何用 C 实现一个简单的 HTTP/3QUIC客户端或服务器需要依赖哪些库ngtcp2、lsquic、quiche在 C 高性能网络服务中你最常用的性能分析工具和指标有哪些perf、火焰图、strace、bpftrace、sar、netstat -s、ss -tm建议复习优先级按真实面试命中率排序TCP 三次握手、四次挥手、TIME_WAIT、SO_REUSEADDR/PORTepoll LT/ET、非阻塞读写完整处理流程muduo / asio 核心类职责与经典设计滑动窗口、拥塞控制、Nagle、延迟 ACKaccept 惊群、SO_REUSEPORTsend/recv 返回值处理、缓冲区管理WebSocket 协议升级与帧格式HTTP/2 队头阻塞 vs HTTP/3 QUIC如果想针对其中某几道题要详细答案、代码示例、画图解释、或者想模拟面试被追问的连环炮随时告诉我祝上岸顺利