从面经中学到的三件事

1.手写TCP服务和流量控制相关的内容

TCP协议是传输层的有连接协议,是面向连接的,面向连接的本质是收发双方维护一定的数据结构。发送方的发送窗口由接收方的接收窗口和拥塞窗口共同决定,为min(cwnd,rwnd)。

如果设置流量窗口值过小,会导致不能充分利用链路,比如小于往返传输时延RTT乘以发送的带宽,如果流量窗口值过大,比如超过实际大小,会造成接收缓冲区溢出,内存占用过大,并且因为拥塞窗口控制而浪费流量窗口的缓存空间。

流量窗口的大小在实际实现中是根据字节流组件的容量决定的。

2.关于epoll有关的知识

epoll是用来解决IO多路复用的问题,所谓的IO多路复用就是线程不再是等待一个文件描述符的数据到来而是同时监听多个文件描述符。epoll和select以及poll相比更加高效。

select能监听的套接字的数量少于epoll,并且对于监听的文件描述符集合,每次select都要传输到内核,而epoll是在内核中维护要监听的文件描述符集合,不需要每次发送。epoll返回的是发生数据变化的文件描述符而select需要对所有文件描述符遍历判断是否有数据到来,因此epoll的效率也比select和poll更高。

3.关于Webserver的结构

Webserver由主线程负责监听各个连接是否有http请求等数据到来,由工作线程即线程池中的线程对各个连接进行处理,返回请求的结果,主线程和线程池中的工作线程通过工作队列联系起来,推送到队列末尾而线程池线程从队头取任务。

http的解析分成行解析,解析对应的任务以及进行具体的处理。对于每个连接,如果超时了会由主线程进行处理,维护一个增序的链表用来清理过期的连接。定时器是由增序的双向链表实现,每五秒的信号处理函数会使得主线程去处理定时器的链表。

总结,对于项目的理解,很大程度上是经历过拷问之后才更加熟悉的,还是应该在面试之前主动地拷打自己。

相关推荐
朔北之忘 Clancy11 小时前
青少年软编等考七级题解目录
开发语言·c++·青少年编程·gesp·csp·信奥赛·noi
汉克老师11 小时前
GESP2026年9月认证C++七级( 第一部分选择题(8~15题)精讲
c++·gesp·小学生·学c++编程
Mr_Macallon11 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
如意猴12 小时前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i12 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
汉克老师12 小时前
GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲
c++·gesp·小学生·学c++编程
sunoo-22912 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习
沫璃染墨13 小时前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu13 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
知识分享小能手13 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习