JAVA面试-网络通信篇

一、TCP和UDP有什么区别?TCP为什么是三次握手,而不是两次?

TCP(Transer Control Protocol) 是一种面向连接的、可靠的、传输层通信协议 。点对点通信、高可靠性、传输效率比较低、占用系统资源比较多。
UDP(User Datagram Protocol) 是一种无连接的、不可靠的、传输层通信协议。 广播发送、不可靠、传输效率高、占用系统资源比较少、协议比较简单。

TCP 建立连接是三次握手,断开连接是四次握手。
如果是两次握手,可能造成链接资源浪费的情况。如果服务端发生阻塞,服务端发送握手信息给客户端,此时客户端由于之前服务端阻塞以为握手失败,此时,服务的就处于无限等待状态,而客户端已断开链接,从而造成了服务的资源浪费的情况。

二、JAVA有哪几种IO模型?有什么区别?

1、BIO 同步阻带IO

特点:可靠性差、吞吐量低、适用于连接比较少且比较固定的场景;编程模型简单。
在这里插入图片描述

2、NIO 同步阻塞IO

特点:可靠性比较好、吞吐量也比较高、适用于连接比较多且连接比较短(轻操作业)的场景;编程模型复杂。
在这里插入图片描述

3、AIO 异步非阻塞IO

特点:可靠性高、吞吐量高、适用于连接比较多且连接比较长(重操作)的场景;编程模型相对简单,但是需要操作系统的支持,目前Linux系统不支持
在这里插入图片描述

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

三个组件:channel、buffer、selector
在这里插入图片描述
channel 类似于流,每个 channel 对应一个 buffer 缓冲区,channel 会注册到 selector
selector 会根据 channel 上发生的读写事件,将事情请求交由某个空闲线程处理
buffer 和 channel 都是可读可写的

四、select、poll、epoll 有什么区别?

它们是由Linux操作系统提供的NIO中多路复用的三种实现机制。

操作系统为了保护系统安全,将内核划分为两个部分:一个是内核空,一个是用户空间。用户空间不能直接访问底层的硬件设备,它必须通过内核空间来访问硬件。

文件描述符 File Descriptor (FD) :是一个抽象的概念,形式上是一个整数,实际上是一个索引值。指向内核中为每个进程准确进程所打开的文件记录表,当程序打开或创建一个文件时,内核就会向进程返回一个FD。

select 机制:会维护一个FD的集合fd_set,将fd_set从用户空间复制到内核空间,激活Socket。
poll 机制:和 select 机制基本一样,把fd_set机构进行了优化。FD集合的大小突破了操作系统的限制。pollfd结构代替fd_set,通过链表实现
epoll 机制:Event Poll epoll 不再扫描素有的FD,只是将用户关心的FD的事件存放到内核的一个事件表当中,可以减少用户空间与内核空间之间的数据拷贝。

操作方式底层实现最大连接数IO效率
select遍历数组受限于内核一般
poll遍历链表无上限一般
epoll事件回调红黑树无上限

JAVA的NIO中用到的机制:
可以查看 DefaultSelectorProvider 类的源码,在Windwos 下,WindwosSelcetorProvide;在 Linux 下,根据内核版本,2.6以上就是 EPollSelectorProvider ,否则就是 PollSelectorProvider

五、描述HTTP和HTTPS的区别?

HTTP:是互联网应用最为广泛的一种网络通信协议,基于TCP,可以使浏览器工作更为高效,减少网络传输。
HTTPS:是HTTP的加强版,可以认为是 HTTP + SSL(secure socket layer) 在HTTP的基础上增加了一系列的安全机制。一方面保证数据传输安全,另一方面对访问者增加了验证机制,是目前现象架构下最为安全的解决方案。

主要区别
1、HTTTP 的连接时简单无状态的;HTTPS 的数据传输是经过证书加密的,安全性高;
2、HTTP 是免费的,而 HTTPS 需要申请证书,而证书通常是需要收费的,且价格不菲;
3、它们的传输协议也不同,所以它们的端口也不一样。HTTP 是 80 端口,HTTPS 是 443 端口;

HTTPS 的缺点
1、握手协议比较费时,所以会影响服务的相应速度已经吞吐量;
2、并不是完全安全的,因为它的证书不是完全安全的,而且HTTPS在面对DDOS这样的攻击时,几乎起不到任何作用;
3、证书需要钱,而且功能越强大的证书费用越高;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值