目录

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

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

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

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

五、描述下HTTP和HTTPS的区别


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

TCP Transfer Control Protocol 是一种面向连接的、可靠的、传输层通信协议。
特点: 好比是打电话:面向连接的,点对点的通信,高可靠的,效率比较低,占用的系统资源比较多。
UDP User Datagram Protocol 是一种无连接的, 不可靠的、传输层通信协议。
特点:好比是广播:不需要连接,发送方不管接收方有没有准备好,直接发消息;可以进行广播发送的;传输不可靠,有可能丢失消息;效率比较高;协议就会比较简单,占用的系统资源就比较少
TCP建立连接三次握手,断开连接四次挥手
3、如果是两次握手,可能造成连接资源浪费的情况。
为什么是三次握手?
第一次握手 (客户端发送 SYN 报文给服务器,服务器接收该报文):客户端什么都不能确认;服务器确认了对方发送正常,自己接收正常。
第二次握手 (服务器响应 SYN 报文给客户端,客户端接收该报文):客户端确认了:自己发送、接收正常,对方发送、接收正常;服务器确认了:对方发送正常,自己接收正常。
第三次握手 (客户端发送 ACK 报文给服务器):客户端确认了:自己发送、接收正常,对方发送、接收正常; 服务器确认了:自己发送、接收正常,对方发送、接收正常。

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

1)BIO 同步阻塞IO:可靠性差,吞吐量低,适用于连接比较少且比较固定的场景。 JDK1.4之前唯一的选择。编程模型最简单NIO 同步非阻塞IO 可靠性比较好,吞吐量也比较高,适用于连接比较多并且连接比较短(轻操作),例如聊天室。JDK1.4开始支持。编程模型最复杂。
2)AIO 异步非阻塞IO:可靠性是最好的,吞吐量也是非常高。适用于连接比较多,并且连接比较长(重操作)。例如 相册服务器。JDK7版本才支持的。编程模型比较简单, 需要操作系统来支持。同步 、异步- 针对请求 和 阻塞、非阻塞 - 针对客户端。 在一个网络请求中,客户端会发一个请求到服务端。
3)NIO 同步非阻塞IO:
1、客户端发了请求后,就一直等着服务端响应。客户端:阻塞。 请求:同步
2、客户端发了请求后,就去干别的事情了。时不时的过来检查服务端是否给出了相应。 客户端:非阻塞。 请求:同步。
3、换成异步请求。客户端发了请求后,就坐在椅子上,等着服务端返回响应。 客户端:阻塞。 请求:异步
4、客户端发了请求后,就去干别的事情了。等到服务端给出响应后,再过来处理业务逻辑。 客户端;非阻塞。 请求:异步。

常见的 IO 模型有哪些?Java 中 BIO、NIO、AIO 的区别?_七胜文状元兼参谋将军的博客-CSDN博客何为 I/O?I/O(Input/Outpu) 即输入/输出 。我们先从计算机结构的角度来解读一下 I/O。根据冯.诺依曼结构,计算机结构分为 5 大部分:运算器、控制器、存储器、输入设备、输出设备。输入设备(比如键盘)和输出设备(比如鼠标)都属于外部设备。网卡、硬盘这种既可以属于输入设备,也可以属于输出设备。输入设备向计算机输入数据,输出设备接收计算机输出的数据。从计算机结构的视角来看的话, I/O 描述了计算机系统与外部设备之间通信的过程。我们再先从应用程序的角度来解读一下 I/O。根https://blog.csdn.net/yanziyu0721730/article/details/113242616


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

Channel、Buffer、Selector
1)channel类似于一流: 每个channel对应一个buffer缓冲区。channel会注册到 selector。
2)select会根据channel上发生的读写事件:将请求交由某个空闲的线程处理。
3)selector对应一个或者多个线程。
4)Buffer和Channel都是可读可写的。
NIO 简单实例_辣是真滴牛啤的博客-CSDN博客_nio实例前言在 Java 中,数据传输 IO 模型大概分为三类:BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)。在 BIO 中,服务器会针对每一个连接都去开一个新的线程进行处理,这样实现非常简单快速,但是对于资源消耗巨大,于是提出了 NIO。在看本博客之前建议先了解一下 NIO 的基本用法。一、NIO简介NIO 是一种基于事件驱动的 IO 模型,面向缓冲区编程,NIO有三大核心部分:Channel(通道)、Buffer(缓冲区)、Selector(选择器)。通俗理解,NIO 的一个线程管理https://blog.csdn.net/qq_43327091/article/details/106158787

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

他们是NIO中多路复用的三种实现机制,是由Linux操作系统提供的。
用户空间和内核空间:操作系统为了保护系统安全,将内核划分为两个部分,一个是用户空间,一个是内核空间。用户空间不能直接访问底层的硬件设备,必须通过内核空间。
文件描述符 File Descriptor(FD):是一个抽象的概念,形式上是一个整数,实际上是一个索引值。指向内核中为每个进程维护进程所打开的文件的记录表。当程序打开一个文件或者创建一个文件时, 内核就会向进程返回一个FD。Unix,Linux select机制: 会维护一个FD的结合 fd_set。将fd_set从用户空间复制到内核空间,激活socket。 x64 2048 fd_set是一个数组结构
Poll机制: 和selecter机制是差不多的,把fd_set结构进行了优化,FD集合的大小就突破了操作系统的限制。 pollfd结构来代替fd_set,通过链表实现的。
EPoll:Event Poll.Epoll不再扫描所有的FD,只将用户关心的FD的事件存放到内核的一个事件表当中。这样,可以减少用户空间与内核空间之前需要拷贝的数据。 简单总结:操作方式 底层实现 最大连接数 IO效率。
select:遍历 数组 受限于内核 一般
poll 遍历 链表 无上限 一般
epoll 事件回调 红黑树 无上限 高
java的NIO当中是用的那种机制? 可以查看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的缺点:
1、HTTPS的握手协议比较费时,所以会影响服务的响应速度以及吞吐量。
2、HTTPS也并不是完全安全的。他的证书体系其实并不是完全安全的。并且HTTPS在面对DDOS这样的攻击时,几乎起不到任何作用。
3、证书需要费钱,并且功能越强大的证书费用越高。

03:JAVA网络通信篇(5)相关推荐

  1. java 重定向到某个页面并弹出消息_Java开发面试宝典之网络通信篇

    Java开发过程中,面试时很重要的环节,想成为java开发工程师,需要面试环节,同时网络通信这一环节是很多java开发工程师必备技能,因此,拉勾IT课小编为大家提供网络通信篇面试 1.http协议的状 ...

  2. Java基础篇(03):流程控制语句,和算法应用

    本文源码:GitHub·点这里 || GitEE·点这里 一.分支语句 流程控制语句对任何一门编程语言都是非常重要的,Java中基于流程控制程序执行的不同步骤和代码块. 1.IF条件 IF条件语句会根 ...

  3. Java总结篇系列:Java多线程(三)

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 public cla ...

  4. 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)

    菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...

  5. Java总结篇系列:Java多线程(二)

    本文承接上一篇文章<Java总结篇系列:Java多线程(一)>. 四.Java多线程的阻塞状态与线程控制 上文已经提到Java阻塞的几种具体类型.下面分别看下引起Java线程阻塞的主要方法 ...

  6. Java提高篇——Java实现多重继承

    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...

  7. 【转】java提高篇(十)-----详解匿名内部类

    原文网址:http://www.cnblogs.com/chenssy/p/3390871.html 在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节 ...

  8. java提高篇(三十)-----Iterator

    本文转载地址:            http://blog.csdn.net/chenssy/article/details/37521461 迭代对于我们搞Java的来说绝对不陌生.我们常常使用J ...

  9. java提高篇(九)-----实现多重继承

    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...

最新文章

  1. Java面试题汇总及答案2021最新(ioNio)
  2. 海康威视 AI Cloud 软硬件平台
  3. 定时任务 Crontab命令 详解
  4. 7-34 任务调度的合理性 (25 分)(思路加详解+兄弟们冲呀)
  5. Dotnet Core
  6. 申请了:苹果已经在测试“毫米波”5G技术
  7. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
  8. linux终端怎么设置monaco,[Linux]Vim设置Monaco字体Vim颜色模板
  9. 解决删除文件时出现“无法读取源文件或磁盘”的办法
  10. python 读取TXT文件数据(字符或数值)存放在numpy数组中以及训练集测试集的处理(1)(个人笔记)
  11. 计算机课做名片怎么做,第7课制作个人小名片(教学设计)
  12. t检验怎么分析结果python_使用python 批量 配对t检验 医学 基础研究 数据分析
  13. Win10版本那么多怎么区别(2)
  14. linux如何初始化根文件系统,搭建自己的Linux根文件系统
  15. 16.15-S7-1200-开关量PWM的方式控制-固态继电器调节水温
  16. 图的连通性和连通分量
  17. ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础
  18. 中学计算机课小课题,小学信息技术学科小课题结题统计表已结题23个一等奖3.doc...
  19. SQLServer2017在使用insert在表中插入数据,显示列名无效
  20. 人生苦短,为何一定要学Python?

热门文章

  1. matlab_矩阵和数组
  2. 将matlab中多幅图合成为一幅图,MATLAB画图之多个图以子图的形式合为一个图
  3. Ubuntu配置中科大、清华、163镜像源
  4. 不仅仅程序员的格子衬衫!互联网公司时尚穿搭指南
  5. 【必读】C语言基础知识大全
  6. android顶部微信搜索,微信顶部栏有两个搜索栏
  7. MySQL最左匹配原则
  8. pixy php,Pixy快速入门指南.pdf
  9. RLT-DiMP: Robust Long-Term Object Tracking via Improved Discriminative Model Prediction
  10. MySQL 官方发音