从面经中学到的三件事

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

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

相关推荐
Go Work1 小时前
docker 占满根分区时先分清谁在吃盘
经验分享·笔记
汉克老师2 小时前
《从C++小白到算法高手:GESP 1—8级成长地图》第一讲:认识GESP——从编程新手到算法探索者
c++·gesp·信息学竞赛·小学生学c++
3095566662 小时前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数
java·笔记·python·ios·iphone·股票数据api·股票数据接口
蒸蒸yyyyzwd2 小时前
从邓明学习的后端笔记
笔记·学习
岑梓铭3 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
晴天的雨.9923 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven3 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_406981033 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
I_belong_to_jesus14 小时前
C++关于分支预测的优化1
开发语言·c++·算法