1、TCP和UDP 有什么区别? TCP为什么是三次握手,而不是两次?
tcp 就像打电话,面向连接的,点对点进行通讯的,高可靠的,效率比较低,占用资源比较多。 举几个例子:文件传输(准确高要求高、但是速度可以相对慢)、接受邮件、远程登录
三次握手 好比 A: 你在吗 B:我在 A:我来了 然后 建立连接 四次挥手, A : 我要走了 B: 你要走了吗 B:你真的要走了吗 A:我真的要走了
UDP 好比发短信或者广播,不需要连接,发送方不管接收方有没有转备好,直接发消息; 特点: 传输不可靠,有可能造成消息丢失,效率高,协议简单,占用资源少.
举几个例子:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)
2、java有哪几种IO模型?有什么区别?
BIO 同步阻塞IO
客户端发起请求,创建一个线程去请求服务器,同事客户端等待服务器返回,拿到结果,请求结束。
NIO 同步非阻塞IO
客户端发起请求,服务端通过选择器调度(管家)去执行,拿到结果,请求结束
对服务端来说再多的客户端,对应要处理的线程也只有一个,解决了线程创建资源浪费的情况
AIO 异步非阻塞IO JDK7 开始支持的
客户端发起请求,服务端创建队列接收请求,此时客户端不用等待,服务端处理完成,发送到队列,客户端监听到结果,完成请求。
区别: BIO可靠性差,吞吐量性能低,适用于连接少的场景,JDK1.4之前的选择。
NIO 可靠性好,吞吐性能高,适用于连接比较多,连接比较短的场景,例如聊天室
AIO 可靠性最好,吞吐量最高,适用于连接比较多,并且连接比较长的场景,比如(相册服务器)
3、java Nio的几个核心组件是啥?分别有什么作用
客户端发起请求,通过buffer组件,进入当前对应的Channel,然后到Selector,通知服务端去调度一个空闲的线程去处理当前请求。
Channel 每个Channel 对应一个buffer ,Channel会注册到Selector上。
Selector Selector会根据Channel上发生的读写事件,将请求交由给某个空闲的线程
Buffer 用来存消息 Buffer 和 Channel 都是可读可写的。
4、Selector 中select、poll 和epoll 的区别?
select 、poll 和epoll 是NIO中多路复用的三种实现机制。是由linux操作系统提供的。
用户空间 和内核空间:操作系统为了保护系统安全,将内核划分为两个部分,一个是用户空间,一个是内核空间
6、描述下HTTP和HTTPS的区别?
http: 是互联网引用最广泛的一种网络通信协议,基于TCP,可使用浏览器工作更为高效,减少网络传输。
HTTPS: 是http的加强版,可以认为是HTTP+SSL。在HTTP的基础上增加一系列的安全机制。一方面保证数据安全,另一方面对访问者增加了验证机制。目前架构下最为安全的解决方案。
主要区别:
1、http简单 无状态,HTTPS的数据是经过证书加密的,安全性更高。
2、端口不同 http默认80,https默认443
HTTPS的缺点:
1、https的握手协议比较费时,所以会影响服务的响应速度以及吞吐量。