Fork me on GitHub

Java面试题总结六网络通信

1.Http是无状态通信,Http的请求方式有哪些,可以自己定义新的请求方式么。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1.无状态的理解
http的无状态是指请求与请求之间不保存状态,即服务器端不会主动记住上一次请
求是谁发的,和这次请求有没有连系。如果服务器要记住上一次请求的相关信息,
必然需要将这些信息保存在服务器端,增大了服务器压力。要知道web应用的一个
主要目标是要同时为大量的客户端提供服务,因此让服务器端无状态,意味着对所
有客户端的处理一视同仁,提高了服务器的并发能力。(如果需要保存状态,可以
利用cookie,session等技术来实现)
2. HTTP请求方式
不能自定义新的请求方式,http 1.1已规定的请求方式有:
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
2.Socket通信,以及长连接,分包,连接异常断开的处理。
3.Socket通信模型的使用,AIO和NIO。
4.Socket框架Netty的使用,以及NIO的实现原理,为什么是异步非阻塞。
5.同步和异步,阻塞和非阻塞。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
“阻塞”与“非阻塞”与“同步”与“异步”不能简单的从字面埋解,提供一个从分布式系统角度的回答。

1. 同步与异步

同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)

所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用遐回, 就得到返回值了。

換句话说,就是由调用者主动等待这个调用的结果。

而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。換句话说,当一 个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

典型的异步编程模型比如Node.js

举个通俗的例子:

你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,“我查一下”,然后开始查啊查,等查好了 (可能是5秒,也可能是一天)告诉你结果(返回结果)。

而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过回电这神方式来回调。

2. 阻塞与非阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的扶态。

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

还是上面的例子, 你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己挂起,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩 了,当然你也要偶尔过几分钟check—下老板有没有遐回结果。阻塞和非阻塞与是否同步异步无关,跟老板通过什么方式回答你结果无关。
6.OSI七层模型,包括TCP,IP的一些基本知识
7.Http中,Get Post的区别
8.说说Http,TCP,UDP之间关系和区别。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。

在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层中有TCP协议与UDP协议。

在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。

TCP 传送控制协议(Transmission Control Protocol):

TCP是传输层的一个协议,基于IP协议,用来传输类似HTTP的信息。如果把IP协议类比为一个“公路”的话,那TCP协议可以看成是在公路上行驶的“卡车”。TCP协议是面向连接的协议,通过三次握手机制,尽量保证连接的可靠性。tcp的链接需要进行三次握手,释放连接需要四次挥手。

UDP 用户数据报协议 (User Datagram Protocol) :

  UDP也是传输层的一个协议。但是与TCP不同的是,UDP不是面向连接的,并不保证传输的可靠性,没有TCP的建立连接的三次握手机制,对于传输效率上面有了提升。

个人理解:

这个就比较简单粗暴了,A要给B传数据,然后就直接传了。

HTTP 超文本传输协议(HyperText Transfer Protocal):

  HTTP是在应用层的一个协议,本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传输协议。

  HTTP协议基于请求\响应模型的,并且是基于TCP协议的。

  HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
9.说说浏览器访问http://www.taobao.com,经历了怎样的过程。
1
2
3
4
5
6
7
1、客户端浏览器通过DNS解析到www.taobao.com的IP地址a,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到a,然后通过TCP进行封装数据包,输入到网络层。

2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

3、客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。
10.HTTP协议、 HTTPS协议,SSL协议及完整交互过程;
11.TCP的拥塞,快回传,ip的报文丢弃
12.Https处理的一个过程,对称加密和非对称加密
13.Head各个特点和区别

#####