TCP和UDP有什么区别?TCP三次握手不是两次?
TCP:面向连接,可靠的,传输层通信协议。点对点,占用资源多,效率低。
UDP:无连接,不可靠,传输层通信协议。广播,协议简单,占用资源少,效率高。
两次握手客户端在第一次握手推出后造成资源浪费。
JAVA有几种IO模型?
BIO:同步阻塞IO,可靠性差,吞吐量低。适用于连接少,且比较固定的场景。JDK1.4唯一选择。
NIO:同步非阻塞IO:可靠性好,吞吐量较高。适用于连接多,且连接短操作,例如聊天室,Netty。JDK1.4+。
AIO:异步非阻塞IO:可靠性好,吞吐量高,适用于连接多,且连接长操作,例如相册服务器,视频流,JDK1.7+
同步,异步针对请求,阻塞,非阻塞针对客户端
客户端发请求,一直等待服务器响应:客户端:阻塞,请求:同步
客户端发请求,轮询服务器响应:客户端:非阻塞,请求:同步
客户端发请求,等待服务器响应:客户端:阻塞,请求:异步
客户端发请求,不等待服务器返回响应:客户端:非阻塞,请求:异步
JAVA NIO核心组件?
Channel Buffer Selector
Buffer:缓冲区,手动或自动将数据送到channel/client。
Channel:接口,类似流,每个Channel对应一个Buffer缓冲区。Channel会注册到Selector上,用于读写数据
Selector:选择器,能够检测多个注册的通道是否有事件发生。如果有事件发生,对该事件进行相应的处理,只用一个线程去管理多个通道(连接),极大地减少了系统开销,简化了初始化成本和多线程之间上下文切换的成本。
select,poll和epoll区别?javaNIO使用那种机制?
NIO中Selector核心实现机制。
用户空间和内核空间:操作系统为保护系统安全,将内核划分为两个部分。用户空间不能直接访问底层硬件设备,必须通过内核空间。
文件描述符(FD):形式上是整数,实际上是索引,指向内核为每个进程维护进程所打开的文件记录表,当程序打开/创建一个文件时,内核就会向i昵称返回一个FD。
select:会维护一个FD集合fd_set,将fd_set从用户空间复制到内核空间,激活socket。fdSet在x64大小2048。
poll:类似select,把fd_set优化为pollFd(链表)结构。fd集合突破大小限制。
epoll:事件驱动,不再扫描所有的fd,只将用户关心(读写)的fd事件存放在内核的事件表中,这样减少了从用户到内核的拷贝数据。
总结:
select:遍历 数组 受限内核2048 低
poll: 遍历 链表 无上限 低
epoll: 遍历 红黑树 无上限 高
java中可查看DefaultSelectorProvider源码,在windows下使用WindowsSelectorProvider,而Linux下,根据Linux内核版本,2.6+使用EpollSelectorProvider,否则使用默认的PollSelectorProvider。
select:1984年,poll:1997年,epoll:2002年。受限于机器硬件。
描述下HTTP和HTTPS的区别。
HTTP:网络通信协议。基于TCP,使浏览器工作高效,减少网络传输。
HTTPS:是HTTP加强版。是HTTP+SSL(Secure Socket Layer)。在HTTP的基础上增加了一系列的安全机制,一方面保证数据传输安全,另一方面对访问者增加了验证机制(证书)。
区别:
1.HTTP:连接简单,无状态,HTTPS:传输经过证书加密,安全性高
2.HTTP:免费。HTTPS:申请证书收费
3.他们的传输协议不同,HTTP默认80端口,HTTPS默认443端口
HTTPS缺点:握手协议费时,影响响应速度及吞吐量。HTTPS证书体系也并不是完全安全,对于DDOS攻击也没用还会起反作用。功能越强大的证书越贵。