10 道大厂面试必考的计算机网络问题-陶辉 极客时间

article/2025/9/29 20:31:07

大厂中更多会考察你的长板.

在大厂中要学会求助

1.TCP的三次握手机制,为什么要三次?

为什么需要握手?

需要同步序列号,当然也有MSS(最大报文段长度),滑动窗口.

为什么是3次?

正常想法应该是:

C:我要建连接,我的seq是这个;

S:我收到了

S:我的Seq是这个

C:我也收到了

关连接的时候就是这样的思路.关连接的时候,允许消息处于半打开状态.Server关连接,而Client没有关连接的情况下,Client还可以长时间的发送数据(linux中不会对半打开状态下设置超时时间).

而建立连接时不允许半打开状态(半建立状态)就收发消息,因此需要Server同时发送确认ack和自己的序列号seq.

ps: HTTP:是单工,client发请求,server发响应.TCP:双工.

2.HTTP协议缓存处理流程

过期缓存304和200之间的差别.

$:cash,和cache发音相似,用来表示缓存.

Proxy:正向代理服务器,代理客户端

Gateway:网关,可以充当反向代理服务器,代理服务端.

根据摘要信息判断缓存是否最新,如果没有改变,会发送304告诉客户端没有改变;如果改变发送200,并重新获取资源.

3.输入URL后发生了什么

http请求的编码并非简单的是你输入的网址.

tcp:进程到进程

IP:主机之间

mac:局域网内的通讯

4.HTTP长连接的优点

长连接:connection:keep-alive

短:connection:close

连接越多,占内存越多,切换连接也会占用更多的cpu.

TCP支持1GB的文件也支持1B的文件,UDP发送大文件就有问题(因为TCP建立连接,是流传输的,有丢包重传机制;而UDP对于大文件,需要分批传输,UDP可能会丢包,导致文件不能够正常使用).

慢启动:每个TCP连接过程,一开始不分配太大的带宽,慢慢地把速度提上去.如果连接多,经历的慢启动的时间也会增多.

缺点:TCP是字符流协议,需要从文件头传到文件尾,一个字节一个字节的传,顺序不能乱. 如果只传输一个请求无所谓,不会有顺序乱的问题.如果在一个连接上同时传输多个请求,第一个没传完绝对不能第二个,是一种串行的方式.会出现队头阻塞,一个报文丢包了,那么后面的即使传过去了,对方的应用层也不能接收.

5.CLOSE_WAIT产生的原因

这个状态表示程序出了bug,而不是配置上的问题.

在关闭时不提客户端还是服务端,因为两者都可以发起关闭的请求,这里用主动端和被动端.

主动端的FIN_WAIT_1,FIN_WAIT_2,TIME_WAIT,服务器端会对这三种状态进行精细配置,linux下默认前两个是1min,最后一个是2min.

被动端的CLOSE_WAIT可以长时间存在,TCP允许这种半打开的状态,一端可以发消息,另一端不可以发了.但这种状态的场景是很少的,一般看到CLOSE_WAIT,应该是出bug了.

6.多播

多播包括广播和组播,一般是局域网中使用,5G中将在互联网中使用多播.

IPTV就是多播,arp攻击也是多播.

在多播中,网络设备去复制报文.

7.服务器的最大并发连接数

端口和进程是关联起来的,如果没有端口就没法关联到进程.

1台服务器它的ip在确定的情况下,目的ip和目的端口可变的情况下,可以建立2^(32+16)个连接. 

实践层面:在linux下可以配置ip_local_port_range把端口的范围进行修改.一台服务器可能有多个网卡,有很多虚拟ip地址,物理ip地址.

实现高并发的关键点在于不要处理一个连接的时间太长,否则会导致其他连接超时.把粒度切得非常小,这时候适合使用事件驱动的方式(无阻塞).

8.TCP/UDP的选择

TCP:字符流协议,可以传递任意长度的消息.要利用UDP实现传输大文件,需要应用层做比较复杂的封装.用UDP传输大量的消息时,需要在应用层做流量控制,否则会把网络打死.而TCP自带流量控制,包括滑动窗口(通过缓冲区,接收窗口)?

UDP:用UDP可以实现广播,组播,TCP不行. 效率高:UDP的报文头比TCP小很多,有效信息占比高.HTTP3不用TCP,用UDP.TCP由内核实现的.实时性更好,适合直播,车联网等.

9.TLS/SSL如何保障信息安全

PKI证书:解决信任问题,通过非对称加密(比如RSA)解决的.

对称加密(比如AES)要比非对称快很多.

传递密钥需要用到密钥交换协议,需要在SSL握手时确定使用哪种交换协议,目前主要使用的椭圆曲线.椭圆曲线比之前的DH协议快很多,而且有前向安全性(就算后来破解了密码,之前的数据还是不能用).

10.HTTP2的优点

gRPC使用的是HTTP2.0.

1.0的缺点:

-header太长了,比如cookie里存了很多东西,User-Agent也很长,而且每条请求都会发一遍,很浪费带宽.

-长连接时,不支持多路复用.

2.0解决方案:

-消息推送:1.0中对于服务器返回来的响应,浏览器会解析,可能此时需要css,js文件,再向服务器去请求,这就多了交互次数.而实际上服务器可以把关联性的资源推送.

-多路复用: 1.0中目前chrome中最多支持6个TCP连接,而现在网页中动辄成百上千个资源,每个TCP连接需要传输很多的请求,而且是串行的.而2.0可以多路复用,可以一次性传输很多个对象(当然也有优先级).

1.0的编码效率低,2.0可以压缩一半以上.

比如用数字来代替user-agent;

常用的61个header写死在代码中,称为静态表;不在这里的,建立动态表.

之前用字符串表示整数比较浪费内存,比如"1000000"需要七个字节,而实际上一个整数4个字节(32位)就可以了,而且可以表示到40多亿.

css,js不出来时是看不到页面的,可以先把这些加载出来.

再比如依赖中,先加载框架类的资源,再加载应用类的.

整理自B站视频:10 道大厂面试必考的计算机网络问题_哔哩哔哩_bilibili


http://chatgpt.dhexx.cn/article/X9gUYP5B.shtml

相关文章

TVP思享 | 四个全新维度,极限优化HTTP性能

导语 | 当产品的用户量不断翻番时,需求会倒逼着你优化HTTP协议。那么,要想极限优化HTTP性能,应该从哪些维度出发呢?本文将由TVP陶辉老师,为大家分享四个全新维度。「TVP思享」专栏,凝结大咖思考&#xff0c…

uni-app从入门到放弃(一)

文章目录 一、uni-app简单介绍什么是uni-app?uni-app的优点跨平台发行,运行体验更好通用前端技术栈,学习成本更低开发生态,组件更丰富 二、功能框架浏览图三、创建项目1、安装HBuilderX2、创建uni-app3、运行项目4、官方提示 四、项目中使用扩展组件五、…

CUDA——从入门到放弃

1. 知识准备 1.1 中央处理器(CPU) 中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit&#xf…

MySQL从入门到放弃(三)

插入数据 插入数据之前首先创建一张persons表 CREATE TABLE persons( id INT NOT NULL AUTO_INCREMENT, name CHAR(40) NOT NULL DEFAULT 无名, age INT NOT NULL DEFAULT 0, info CHAR(50) NULL, PRIMARY KEY(id) ); 为表的所有字段插入数据 一次插入一条数据 INSERT INTO…

Python从入门到放弃

Python基础知识: Python列表 Python元组 Python字符串 Python字典 Python正则 Python字典排序 Python编码Python正则表达式 Python集合 Python map Python reduce Python lambdaPython 函数Python 文件 Python数据可视化编程: Python数据可视化Python画…

1、LabVIEW从入门到放弃

LabVIEW从入门到放弃 一、其实不想学二、学习资源三、成果展示四、声明 一、其实不想学 最近导师想要用LabVIEW写点东西,进行一些实验验证。虽然之前摸过几天,也就是为了应付考试,啥都没学到。接下来时间可能真的需要从入门到放弃了~   总结…

Linux从入门到放弃

mac环境下的linux搭建 一.linux作为一个开源的操作系统,以其稳定性和安全性,是程序员必不可少且需要掌握的系统。可能用惯了windows以及mac的我们一开始用起来很难受,但相信我,用惯了以后,你会更难受。小玩笑而已&…

C语言从入门到放弃

Unix是C的作者开发的。 Unix附属诞生物,当时使用的是cc编译器 然后有了linux就封装成了gcc编译器,但由于考虑到老家伙的使用习惯,还保留了cc C语言是结构化程序语言(一个程序能包含多个函数).C语言简单粗暴&#xff0c…

c语言从入门到秃头表情包,c语言从入门到放弃表情包 - c语言从入门到放弃微信表情包 - c语言从入门到放弃QQ表情包 - 发表情 fabiaoqing.com...

从入门到精神异常(资深病友狗头著)_精神异常_病友_狗头表情 不好意思拿错了(Java Web从入门到精通)_拿错_JAVA_Web表情 C语言从研发到脱发_脱发_研发_语言表情 我也只是新手入门第一次见有人就如此会装逼 幸会幸会 哪里的话_新手入门_装逼_幸会幸表情 熊猫头写个C语言(666)_666…

深度学习---从入门到放弃(七)CNN进阶,迁移学习

深度学习—从入门到放弃(七)CNN进阶,迁移学习 引入 图像是高维的。即image_length* image_width*image_channels是一个很大的数字,而上一教程里所提到的CNN的权值共享便是一种解决图像和其他领域高维问题的方法。 从上图中可以…

【傻瓜攻略】深度学习之从入门到放弃

从研究生进来之后,一直到现在已经进行了一年关于DP的学习,写篇文章总结一下我蹒跚的学习过程。总结来说是一个从入门学习到几乎想要放弃的过程。顺带列举下面几个坑,希望能帮助一下同样在这条路上行走的旅人们。 1、overfitting这个东西 很…

android异步编程,使用RxAndroid处理异步任务

欢迎Follow我的GitHub, 关注我的简书. 其余参考Android目录. Demo Android Rx是响应式编程的意思, 本质是观察者模式, 是以观察者(Observer)和订阅者(Subscriber)为基础的异步响应方式. 在Android编程时, 经常会使用后台线程, 那么就可以使用这种方式. 目前的异步编程方式都会导…

RxAndroid 入门笔记

参考链接: http://gank.io/post/560e15be2dca930e00da1083#toc_10 https://mcxiaoke.gitbooks.io/rxdocs/content/Observables.html http://blog.chengyunfeng.com/?p948 http://www.apkbus.com/blog-705730-62567.html 要了解RxAndroid,必须先要了解RxJava,应…

【Rxandroid】Rxandroid源码解读

目录 1.AndroidSchedulers类的源码 2.RxAndroidPlugins类的源码 3.RxAndroidSechedulersHook类的源码 4.LooperScheduler类的源码 5.HandlerScheduler类的源码 6.BuildConfig类的源码 7.MainThreadSubscription类的源码 总结 将Rxandroid(1.2.1)…

Retrofit + RxAndroid 实践总结

在接入 Retrofit RxAndroid 之前,项目代码中主要存在如下问题: 服务器 API 的定义方式不一致,有的集中定义,有的定义在业务代码中,没有分类不便于维护。Request / Response / API 三者没有对应关系(Reque…

Rxjava3 RxAndroid

文章目录 Rxjava && Rxandroid引用方式 概念流程图代码示例ObservableObservable#subscribeOn(NonNull Scheduler scheduler)Observable#observeOn(NonNull Scheduler scheduler)ObservableSubscribeOnObservableObserveOn本文开头的代码示例等同于如下代码 Schedulers…

RxJava和RxAndroid学习记录

目录 1 概念和说明 1.1 响应式编程 1.2 RxJava 1.3 关于RxJava和RxAndroid 1.4 关于响应式编程和普通编程 2. 基本使用 2.1 基本元素关系图 2.2 代码示例: 2.3 关于subscribe() 2.4 线程调度 2.4.1 线程调度 2.4.2 RxJava内置的常用…

RxAndroid的基础使用

作为一个android开发者,在开发应用的过程中避免不了异步这个问题。android系统为我们提供了Handler这个类帮助我们进行线程间的通信和切换,但是GitHub上也有很多其他非常优秀的开源框架来帮助我们进行异步处理,比如今天学习的RxAndroid。 简…

rxandroid 基础知识

概述 在Android 中, 使用 rxandroid , rxandroid和rxJava的关系是,rxandroid包 依赖rxJava包,在其功能上增加了一些Android特有功能,项目中如果不需要指定rxJava包的版本,只需引入rxandroid包即可,如果需要更改 rxandroid包中默认的rxJava包版本 , 在项目中引入指定的rxJava包即…

RxAndroid使用初探;简洁、优雅、高效

引言 RxAndroid是一个开发库、是一种代码风格、也是一种思维方式。 正如标题所言,RxAndroid的特点是简洁、优雅、高效,它的优点是多线程切换简单、数据变换容易、代码简洁可读性好、第三方支持丰富易于开发;缺点是学习成本较高、出错难以排查。 用途与优势 起源 RxAndroid…