从面经中学到的三件事

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

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

相关推荐
时时三省1 小时前
【时时三省】计算机c语言二级考试选择题重点
c++
IT小白杨4 小时前
社媒多账号运营的环境隔离:一张图谱模型,解释清“为什么换IP还是被连坐“
经验分享·笔记·矩阵·指纹浏览器
ThornArmor4 小时前
重铸1996|肉体渲染:关节的裂缝:分段模型积木拼装与未成熟的 RSP 矩阵骨骼动画形变
c语言·汇编·c++·python·硬件架构·游戏机
Elsa️7466 小时前
算法一周刷题总结
c++·算法
风合星语6 小时前
2026 机器人工程实例(五):让 Allegro Hand 在 MuJoCo 中完成接触抓取——抓取状态机、稳定抬升与受控释放
c++·python·机器人·仿真
小羊没烦恼!6 小时前
Memory 记忆设计讨论:Agent Memory 的数据模型可以怎么设计
java·开发语言·前端·c++·c#
welfare9626 小时前
新号别搞:内存管理+模板初阶+STL简介
开发语言·c++
PC2005-cloud6 小时前
Rust学习笔记:控制流——if、loop、while、for与match
笔记·学习·rust
IT笔记7 小时前
Rust 迭代器多级链式调用执行顺序笔记
开发语言·笔记·rust