网络相关
1.描述一下网络的三次握手四次挥手,为什么要这样做?
-
三次握手:
1、客户端调用
connect()
发起请求,请求报文SYN = 1
,seq = x
发送给服务器, 客户端此时为SYN_SENT
状态,等待服务器确认;2、服务器收到
SYN = 1
,知道客户端要请求连接,ack = x + 1
,ACK = 1
,SYN = 1
,seq = y
发送给客户端,服务器是SYN_RCVD
状态;3、客户端收到
ack = x + 1
,然后把ack = y + 1
,ACK = 1
,发送给服务器, 最后服务器确认ack = y+ 1
,然后建立成功,两方进入ESTABLISH
状态.
-
四次挥手:
1、客户端发送一个结束
FIN = 1
, 用来主动关闭和服务器的数据传输,停止发送数据,报文首部:FIN = 1
,seq = u
,随后客户端进入终止等待状态1,FIN_WAIT_1
;2、服务端收到这个
FIN
,发出确认报文ACK = 1
,确认收到的序号是收到的序号+1,即ack = u + 1
,且带上自己的序列号,seq = v
,和SYN
一样,一个FIN
将占用一个序号;如果服务器要发送数据,客户端依然要接收,该状态会维持一段时间,服务端会进入关闭等待状态,CLOSE_WAIT
,客户端收到服务器的确认请求后,进入终止等待2状态FIN_WAIT_2
,等待服务器发送链接释放报文,3、服务器向客户端发送链接释放报文,
FIN = 1
,ack = u + 1
,此时服务端还处于半关闭状态,服务器可能还会发送一些数据,此时序列号为seq = w
,如此,服务器进入最后确认状态,LAST_ACK
,等待客户端的确认.4.客户端收到服务器的链接释放报文后,回发确认,
ACK = 1
,ack = w + 1
,序列号是seq = u +1
,此时客户端进入时间等待状态TIME_WAIT
,此时TCP
连接还没有释放,必须经过最长报文段寿命的时间后,才进入CLOSED
状态,MSL
:最长报文段寿命,一般为2分钟,TCP
连接释放时,主动方必须经过2MSL
后才进入CLOSED
状态,因此主动方关闭比较晚.
2.网络的OSI
七层模型,并对应说说除了物理层外的各层功能,并说说各层中有什么协议? 还有 TCP/IP
四层模型, 各层的协议?
OSI
七层模型:
应用层
运行访问OSI环境的手段,传输单位为APDU
,主要包括的协议为FTP
、HTTP
、DNS
、SMTP
表示层
对数据进行翻译、加密和压缩、传输单位为PPDU
, 主要包括的协议为JPEG
、ASII
会话层
建立、管理和终止会话,传输单位为SPDU
,主要包括的协议为RPC
、NFS
传输层
提供端到端的可靠报文传递和错误恢复,传输单位为报文,主要包括的协议为TCP
、UDP
网络层
负责将数据包从源到宿的传递和网际互联,传输单位是包,主要协议是IP
、ARP
、ICMP
数据链路层
将比特组装成帧和点到点的传递,传输单位是帧,主要协议是MAC
、LAN
、PPP
-
物理层
通过媒介传输比特,单位是bit,主要协议是IEEE802.3
、CLOCK
、RJ45
TCP/IP
四层模型:应用层
是用来给用户提供服务的,包含了各种应用服务协议:FTP
,HTTP
和DNS
;封装成http
数据;传输层
是用来提供两台计算机之间的数据传输;包含TCP
和UDP
;给http
数据打上tcp
的首部;网络层
是用来处理网络中传输的数据包;与对方计算机之间进行多台计算机或网络设备进行传输时,网络层就是在众多的选项中选择一条传输路线
.再打上一层IP
首部,数据链路层
用来处理连接网络的硬件
部分,如光纤、网卡、驱动、操作系统,再打上以太网首部
3.
HTTPS
和HTTP
之间的区别,为什么要使用HTTPS
,HTTPS
的实现原理(这三个是层层递进的问的,所以不要只知道HTTPS
比较安全,使用了什么什么非对称加密和对称加密算法...最好是整个流程都去了解一下,如何获取公钥,数字证书有什么用,虽然工作中不是很重要,但是面试大家都是背八股文长大的,那不是更得知道的多才能显得你与众不同吗)区别:
底层:
HTTP
底层是通过建立socket
通道实现数据传输的,是基于TCP
的安全可靠的协议;HTTPS
是在HTTP
的基础上加上安全套接字层SSL
协议,构建的可进行加密传输
、身份认证
的协议;数据传输:
HTTP
是以明文发送内容,不适合传输敏感信息;HTTPS
是依靠证书验证服务器的身份,实现通信加密;连接方式: 两者使用完全不同的链接方式,
HTTP
端口是80
;HTTPS
端口使用443
.响应速度:
HTTP
要比HTTPS
响应速度快,首先都要先经过TCP
三次握手,CS之间交换三个包,而HTTPS
还要加上SSL握手需要的九个包,一共是12个包.
HTTPS
实现原理:客户端发出请求
HTTPS
与服务端建立SSL
链接,然后服务端返回一个公钥证书,客户端产生一个随机对称密钥;
使用公钥加密对称密钥;
发送加密后的对称密钥,服务器给个回应;
使用对称密钥进行加密通信.
4.
ARP
协议如何工作(这个也比较简单,但是后面会扩展问一些TCP
,UDP
的问题),会问某些场景是否使用TCP或者UDP,后面还转进了http1.0和1.1的长连接,感觉这个也是一个考点,记得不是很深刻了5.进程和线程的区别,为什么要有线程,线程拥有什么独立的资源, 多线程如何安全的访问进程中的资源,讲一下各种锁(这个也是八股文,操作系统必问,懂得都懂)
进程就是系统中正在运行的一个应用程序,可以理解为一个app;
线程是程序执行的最小单元,是进城中的一个实体,进程就是一系列的线程执行单元组成的
一个进程中可以有多个线程,但至少得有一个线程
多核CPU中,多个线程一起执行可以提高程序的执行效率
自旋锁:
互斥锁:
6.操作系统中的虚拟内存是什么,讲一讲
页面置换算法
,是否有了解过三级缓存机制(也是递进的问的!三级缓存机制是APP开发常用的也会考查)7.最后有一道算法题,leetcode 59,螺旋矩阵
定义上下左右四个边界
内缩遍历
8.IP地址和MAC地址的区别?
MAC地址
是物理层
和数据链路层
使用的地址,用来定义网络设备的位置,IP地址
是网络层
和以上各层使用的地址;IP地址
是放在IP数据报的首部,而MAC地址
是放在MAC帧
的首部.
9.请介绍一个操作系统中的中断
中断是指CPU对系统发生的某个事件做出的一种反应,CPU
暂停正在执行
的程序,保存现场
后自动去执行相应的处理程序,处理完该事件后再返回中断处,继续执行原来的程序.中断一般分为三类:一种是由CPU外部引起的,如I/O中断,时钟中断,一种是来自CPU内部事件或程序执行中引起的中断,例如(程序非法操作,地址越界,浮点溢出), 最后一种是在程序中使用了系统调用引起的.
中断处理一般分为中断响应和中断处理两个步骤,中断响应由硬件实施,中断处理主要由软件实施.