一、TCP和UDP的区别?TCP为什么要三次握手?
TCP: 面向连接、高可靠、点对点通信、占用资源多、效率低(慢)
UDP: 面向数据报文、不可靠,多用于广播通信、占用资源少,效率高(快)
为什么三次握手:如果是两次握手,可能造成连接资源浪费的后果
二、Java 有几种IO?有什么区别?
1、三种IO:
BIO:同步阻塞IO;client发送请求之后一直等待server返回结果。
特点:吞吐量低,可靠性低,适用于连接较少且比较固定的场景;JDK1.4之前的唯一选择;编程模型简单
NIO:同步非阻塞IO;client发送请求之后执行其他逻辑,时不时检查server是否回复
特点:吞吐量高,可靠性高;是用于连接较多且为短连接的情况;例如:聊天室;编程模型复杂
AIO:异步非阻塞IO;client发送请求之后执行其他逻辑,由专门的消息通知器来返回server的结果
特点:吞吐量大,可靠性强,适用于连接较多且为长连接的情况;例如:相册服务器;编程模型相对于NIO简单,但是异步通知需要操作系统层面的支持
三、Java的NIO的几个核心组件是什么?分别有什么作用?
Selector Buffer Channel
1、Buffer用于存储Client写入的请求,当Server需要处理请求的时候,从Buffer中读取
2、Channel相当于一个流,当Server需要处理请求时,Channel会将Buffer中的请求注册到Selector;注册之后,Selector会通知一个空闲的Thread进行请求的处理;一个Selector对应一个或者多个Thread
3、Buffer和Channel都是可读可写
四、Select,Poll,Epoll有什么区别?
他们是NIO多路复用的三种实现方式,由Linux操作系统提供。
前置知识:
用户空间和内核空间:通过内核空间,可以直接访问操作系统的底层硬件设备;用户空间不行。所以,用户空间需要切换到内核空间后才能进行硬件设备的访问。
文件描述符(File Description) FD: 是一个抽象的概念,形式上是一个整数,实际上是一个索引;在Unix和Linux中,一切的设备都是以文件的形式存在的。FD就是一个记录程序所打开文件的记录表;所以,当程序每打开一个文件或者创建一个文件时,内核空间中就会向程序返回一个FD。
Select
Select会维护一个FD的集合fd_set。将fd_set从用户空间复制到内核空间,激活socket。集合的大小受到操作系统的限制;Select fd_set的底层实现的数据结构是数组
Poll
Poll的实现机制和Select差不多,但是Poll机制维护的fd_set大小突破了操作系统的限制;Poll FD的底层实现的数据结构是链表
Epoll
Epoll不会扫描所有的FD,只将用户关心的FD复制到内核空间,减少用户空间向内核空间拷贝的数据量
实现方式 | 区别 |
---|---|
Select | 操作方式:扫描,数据结构:数组,最大连接数:受限于操作系统,IO效率一般 |
Poll | 操作方式:扫描,数据结构:链表,最大连接数:不限,IO效率一般 |
Epoll | 操作方式:事件回调,数据结构:红黑树,最大连接数:不限,IO效率高 |
Java中的NIO的实现参照DefaultSelectorProvider源码。
五、描述一下HTTP和HTTPS的区别
1、HTTP是一种面向连接的无状态通信协议;HTTPS在HTTP的基础上增加了一层SSL,保证数据安全并且增加了对访问者的验证机制,会记录访问者的信息,是有状态的。
2、HTTP免费,HTTPS需要收费的证书加密
3、传输协议不同,默认使用的端口也不同;HTTP默认使用80端口,HTTPS默认使用443端口
4、HTTPS建立连接时比较费时,影响服务的响应速度和吞吐量;而且HTTPS也不是绝对安全的,在面对DDOS攻击的时候几乎不起任何作用。