Java Interview网络篇

一、TCP和UDP的区别?TCP为什么要三次握手?

TCP: 面向连接、高可靠、点对点通信、占用资源多、效率低(慢)
UDP: 面向数据报文、不可靠,多用于广播通信、占用资源少,效率高(快)

为什么三次握手:如果是两次握手,可能造成连接资源浪费的后果
Java Interview网络篇

二、Java 有几种IO?有什么区别?

1、三种IO:

BIO:同步阻塞IO;client发送请求之后一直等待server返回结果。
特点:吞吐量低,可靠性低,适用于连接较少且比较固定的场景;JDK1.4之前的唯一选择;编程模型简单
Java Interview网络篇

NIO:同步非阻塞IO;client发送请求之后执行其他逻辑,时不时检查server是否回复
特点:吞吐量高,可靠性高;是用于连接较多且为短连接的情况;例如:聊天室;编程模型复杂
Java Interview网络篇

AIO:异步非阻塞IO;client发送请求之后执行其他逻辑,由专门的消息通知器来返回server的结果
特点:吞吐量大,可靠性强,适用于连接较多且为长连接的情况;例如:相册服务器;编程模型相对于NIO简单,但是异步通知需要操作系统层面的支持
Java Interview网络篇

三、Java的NIO的几个核心组件是什么?分别有什么作用?

Selector Buffer Channel
Java Interview网络篇

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攻击的时候几乎不起任何作用。

上一篇:简要笔记


下一篇:2021年最新kafka 面试题及答案解析,轻松搞定大厂面试官