1 Star 0 Fork 31

阿明 / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2021年常见的网络编程面试题集合,附答案.md 11.61 KB
一键复制 编辑 原始数据 按行查看 历史

2021年常见的网络编程面试题集合,附答案

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

网络编程

题1:同步、异步、阻塞、非阻塞概念是什么?

同步是指函数调用在没得到结果之前,没有调用结果,不返回任何结果。

异步是指函数调用在没得到结果之前,没有调用结果,返回状态信息。

阻塞是指函数调用在没得到结果之前,当前线程挂起。得到结果后才返回。

非阻塞是指函数调用在没得到结果之前,当前线程不会挂起,立即返回结果。

题2:为什么 RPC 框架需要序列化?

RPC(Remote Protocal Call)服务为异步服务是通过网络传输数据。

网络传输的数据必须是二进制数据,但调用方请求的出入参数都是对象。对象是不能直接在网络中传输的,所以需要提前把它转成可传输的二进制,并且要求转换算法是可逆的,这个过程我们一般叫做“序列化”。这时,服务提供方就可以正确地从二进制数据中分割出不同的请求,同时根据请求类型和序列化类型,把二进制的消息体逆向还原成请求对象,这个过程称之为“反序列化”。

如下图:

16377614121.jpg

总结来说,序列化就是将对象转换成二进制数据的过程,而反序列就是反过来将二进制转换为对象的过程。

16377615531.jpg

为什么RPC框架需要序列化?因为网络传输的数据必须是二进制数据,所以在RPC调用中,对入参对象与返回值对象进行序列化与反序列化是一个必须的过程。

题3:网络传输协议本质和作用是什么?

协议本质是双方约定好的一种传输规则,其作用是为了让传输数据的双方节点能建立连接,按照约定去传输和解析数据。

题4:HTTP 状态码常见的都有哪些?

当浏览者访问网页时,浏览器会向网页所在服务器发出请求。浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code。

下面是常见的HTTP状态码:

200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 404 - 请求的资源(网页等)不存在 500 - 内部服务器错误

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。

HTTP状态码共分为5种类型:

“1**”状态码表示信息,服务器收到请求,需要请求者继续执行操作。

“2**”状态码表示成功,操作被成功接收并处理。

“3**”状态码表示重定向,需要进一步的操作以完成请求。

“4**”状态码表示客户端错误,请求包含语法错误或无法完成请求。

“5**”状态码表示服务器错误,服务器在处理请求的过程中发生了错误。

题5:TCP/IP连接时有几次握手?释放几次?

建立时三次握手

为了双方都互相知道已经准备好进行数据传输,确认一个初始传输序列号,以免产生错误的连接。

1)第一次握手

客户端:将标志位SYN(SYN:同步序列编号)置为1,并产生一个同步值(seq=j),将数据包发送到服务器,并使自己处于SYN_SENT状态,等待服务器确认。

2)第二次握手

服务端: 收到客户端发来的数据包,由SYN标志位为1知道客户端请求建立连接,知道同步值seq=j后,将自己的SYN和ACK置为1,产生一个确认包ack=j+1,同时产生一个同步值seq=k,然后发送数据包,并使自己处于SYN_RECV状态(接收状态)。

3)第三次握手

客户端: 收到服务端发来的数据包,将自己的ACK(接收状态)置为1,并产生一个确认包ack=k+1,然后发送数据包,此时双方同时处于SYN_ESTABLISHED状态,建立连接,等待发送和接收数据,完成三次握手。

释放时四次挥手

第一次挥手

客户端将自己的FIN置为1(意思为关闭连接,自己这边没有发送的数据了),同时产生一个同步值seq=u,将数据包发送给服务器。

第二次挥手

服务器收到以后,由于可能还没有发送完自己的数据,先将自己的ACK置为1(回应状态,意思知道了),并产生一个确认包ack=u+1,并产生一个同步值v,将数据包发送给客户端。

第三次挥手

服务器发送完没有发送的数据后,将自己的FIN置为1(意思可以关闭连接),ACK置为1(回应状态,意思收到),并产生一个同步值w,产生确认包ack=u+1(基于客户端的,跟上一次一样,因为客户端只发送了一次)。

第四次挥手

客户端收到,将自己的ACK置为1(收到),产生一个确认包ack=w+1,还有一个同步值seq=u+1,将自己的数据报发送给服务器。

题6:如何解决 HTTP 协议无状态协议?

解决HTTP协议无状态协议可以使用Cookie来解决无状态的问题,Cookie就相当于一个通行证,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个是”老用户“。

题7:应用层中常见的协议都有哪些?

应用层协议(application layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。

应用层协议

1)DNS:一种用以将域名转换为IP地址的Internet服务,域名系统DNS是因特网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。

现在顶级域名TLD分为三大类:国家顶级域名nTLD;通用顶级域名gTLD;基础结构域名。

域名服务器分为四种类型:根域名服务器;顶级域名服务器;本地域名服务器;权限域名服务器。

2)FTP:文件传输协议FTP是因特网上使用得最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件类型与格式,并允许文件具有存取权限。

基于客户服务器模式,FTP协议包括两个组成部分,一是FTP服务器,二是FTP客户端,提供交互式的访问面向连接,使用TCP/IP可靠的运输服务,主要功能:减少/消除不同操作系统下文件的不兼容性 。

3)telnet远程终端协议:telnet是一个简单的远程终端协议,它也是因特网的正式标准。又称为终端仿真协议。

4)HTTP:超文本传送协议,是面向事务的应用层协议,它是万维网上能够可靠地交换文件的重要基础。http使用面向连接的TCP作为运输层协议,保证了数据的可靠传输。

5)电子邮件协议SMTP:即简单邮件传送协议。SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。SMTP通信的三个阶段:建立连接、邮件传送、连接释放。

6)POP3:邮件读取协议,POP3(Post Office Protocol 3)协议通常被用来接收电子邮件。

7)远程登录协议(Telnet):用于实现远程登录功能。

8)SNMP:简单网络管理协议。由三部分组成:SNMP本身、管理信息结构SMI和管理信息MIB。SNMP定义了管理站和代理之间所交换的分组格式。SMI定义了命名对象类型的通用规则,以及把对象和对象的值进行编码。MIB在被管理的实体中创建了命名对象,并规定类型。

题8:Socket 前后端通信是如何实现服务器集群?

假设有两台A服务器服务S1和B服务器服务S2,应用服务S0

首先你接收客户端(浏览器)请求的服务肯定是单点(一对一)连接,之后交给应用服务S0处理分配给两台服务器A和B上的服务S1和S2。

分配原则可以按一定的策略,如计数器等,按当前活跃连接数来决定分给哪台服务器。也可以更科学的按两台服务器实际处理的数据量来分配,因为有些连接可能一直空闲。

如果两台服务器上的服务通信正常且数据库能够承受压力,访问请求并不是太多的情况下,可以考虑使用数据库传递消息,反之可以考虑使用Redis缓存技术。

如果需要即时传递消息,在其中一个服务器上的服务S1查找不到,把消息发给另外一台服务器上的服务S2或把消息存储至数据库或缓存当中,然后通知其他服务有生产消息。类似MQ处理方式可参考ActiveMQ。

题9:为什么客户端发出第四次挥手确认报文后要等 2MSL才能释放 TCP 连接?

这是因为考虑数据丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到。

注意:Linux系统中2MSL默认是60秒,那么一个MSL也就是30秒。

题10:通信双方如何进行端口绑定?

通常服务端启动时会绑定一个端口提供服务,而客户端在发起连接请求时会被随机分配一个端口号。

题11:socket-属于网络的哪一层

题12:http1.0-和-http1.1-有什么区别

题13:什么是应用层

题14:https-工作原理是什么

题15:序列化使用都有哪些注意事项

题16:socket-如何唯一标识一个进程

题17:http-中常见的请求头有哪些

题18:rpc-和-http-有什么区别

题19:http-和-https-有什么区别

题20:什么是对称加密和非对称加密

题21:什么情况下需要序列化为什么-rpc-参数需要序列化参数中日期类型用-sql.date-还是-util.date

题22:tcp-中在什么情况下发生粘包问题

题23:为什么-tcp-握手三次两次不可以吗

题24:rpc-和-http-分别有什么优缺点

题25:序列化都有哪些使用场景

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/AminDev/ebooks.git
git@gitee.com:AminDev/ebooks.git
AminDev
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891