从面经中学到的三件事

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

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

相关推荐
李永奉5 分钟前
杰理可视化SDK开发-音频录制功能使用教程
笔记·单片机·嵌入式硬件·mcu·物联网·音视频
another heaven8 分钟前
【C/C++ C++ 新特性中的那些内存优化的特性】
c语言·开发语言·c++
ysu_031418 分钟前
【C++ 进阶之路】(二)从内联函数到类与对象:深挖内存对齐、this 指针与三大默认成员函数
开发语言·数据结构·c++·笔记·面向对象·this
叼烟扛炮23 分钟前
Linux 学习笔记(三十二):线程控制——创建、等待与分离
linux·运维·服务器·笔记·学习·1024程序员节
布莱克60524 分钟前
C++ 中 set 与 map 的区别详解
开发语言·c++·算法·哈希
我叫洋洋28 分钟前
Allegro 画布“垃圾显示“清理指南:把板子调成干净工作台(实战总结)
c语言·c++·单片机·嵌入式硬件·eda·嘉立创
Nuanyt38 分钟前
LeetCode Hot 100 · 双指针 3 题 Java
java·笔记·算法·leetcode·双指针
深圳老胡1 小时前
FDC2212 + STM32G030 液面探测:IIC 读数跳动导致下探深度不一致的排查与解决
笔记·stm32·单片机·代码规范·1024程序员节
程序边界1 小时前
一台数据集成软件的拆解笔记(上):把 KFS 装起来、跑起来,再挑一堆毛病
笔记·原型模式
jimy11 小时前
构造函数表达式的值类别是:prvalue
开发语言·c++