网络与IO

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

TCP Transfer Control Protocol 是一种面向连接的、可靠的、传输层通信协议。
特点: 好比是打电话: 面向连接的,点对点的通信,高可靠的,效率比较低,占用的系统资源比较多。
UDP User Datagram Protocol 是一种无连接的,不可靠的、传输层通信协议。
特点:好比是广播:不需要连接,发送方不管接收方有没有准备好,直接发消息,可以进行广播发送的;传输不可靠,有可能丢失消息;效率比较高;协议就会比较简单,占用的系统资源就比较少。

如果是两次握手可能会造成连接资源浪费的情况。
考虑网络不稳定因素,如果clent发送成功,server也成功发出响应,但是接收过程中网络有延迟,导致client端一直没有收到响应认为此次连接是失败的,而server端认为是成功的,但是client端后面一直不发送报文,导致server端一直等待请求而造成资源浪费。

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

BIO-同步阻塞IO,可靠性差,吞吐量底适用于连接比较少且比较固定的资源。编程模型最简单。
NIO-同步非阻塞IO,可靠性比较好,吞吐量也比较高。适用于连接比较多且比较短的资源。编程模型最复杂。
AIO-异步非阻塞IO,可靠性最好的,吞吐量也非常高,适用于连接比较多,并且连接比较长(重操作)。例如相册服务器。编程模型比较简单,需要操作系统支持。
同步、异步和阻塞、非阻塞。

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

Channer、Buffer、Selector.
channel类似于一流。每个channel对应一个buffer缓冲区。channel会注册到selector。
select会根据channel上发生的读写事件,将请求交由某个空闲的线程处理。selector对应一个或者多个线程.
Buffer和Channel都是可读可写的。

select,poll和epoll有什么区别?

它们都是NIO中Selector的实现机制。实现IO多路复用。是由操作系统提供的。
用户空间和内核空间:操作系统对内核做了一定保护,防止应用程序随意地破坏操作系统。操作系统为了保护系统安全,将内核划分为两个部分,一个是用户空间,一个是内核空间。用户空间不能直接访问底层的硬件设备,必须通过内核空间。
文件描述符 File Descriptor(FD):是一个抽象的概念,形式上是一个整数,实际上是一个索引值,指向内核中为每个进程维护进程打开的文件记录表。当程序打开一个文件或者创建一个文件时,内核就会向进程返回一个FD.

在内核中会记录一张表,这张表会记录每个进程打开了哪些文件。这张表就叫做文件描述。


select机制:会维护一个FD的集合fd_set。

select机制: 会维护一个FD的结合 fd set,将fd set从用户空复制到内核空间,激活socket。 x64 2048 fd set是一个数组结构。
Pol机制: 和selecter机制是差不多的,把fd set结构进行了优化,FD集合的大小就突破了操作系统的限制。 pollfd结构来代替fd set,通过链表实现的。
EPoll: Event Poll.Epoll不再扫描所有的FD,只将用户关心的FD的事件存放到内核的一个事件表当中。这样,可以减少用户空间与内核空间之前需要拷贝的数据。

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

java当中的NIO用的哪种机制?

java的NIO当中是用的那种机制?
可以查看DefaultSelectorProvider源码。在windows下,WindowsSelectorProvider。
而Linux下,根据Linux的内核版本,2.6版本以上,就是EPollSelectorProvider,否则就是默认的PollSelectorProvider。

什么是认证和授权? 如何设计一个权限认证框架?

认证: 就是对系统访问者的身份进行确认。二维码登录、手机短信登录、指纹、刷脸。。。用户名密码登录、
授权: 就是对系统访问者的行为进行控制。授权通常是在认证之后,对系统内的用户隐私数据进行保护。后台接口访问权限.
前台控件的访问权限。
RBAC模型:主体 -》角色-》资源 -》访问系统的行为。
认证和授权也是对一个权限认证框架进行扩展的两个主要的方面。

什么是SSo? 与Auth2.0有什么关系?

OAuth2.0的使用场景通常称为联合登录。一处注册,多处使用。
SSO Single Sign On 单点登录。一处登录,多处同时登录.
SSO的实现关键是将Session信息集中存储。Spring Security。

Netty的线程模型是怎么样的

Netty同时支持Reactor单线程植型、Reactor多线程模型和Reactor主从多线程模型,用户可根据启动参数配置在这三种模型之间切换。
服务端启动时,通常会创建两个NioEventLoopGroup实例,对应了两个独立的Reactor线程池,bossGroup负责外理客户端的连接请求,workerGroup负责处理//0相关的操作,执行系统Task、定时任务Task等。用户可根据服务端引导类ServerBootstrap配置参数选择Reactor线程模型,进而最大限度地满足用户的定制化需求。

Netty的高性能体现在哪些方面

1.NIO模型,用最少的资源做更多的事情。
2.内存零拷贝,尽量减少不必要的内存拷贝,实现了更高效率的传输。
3.内存池设计,申请的内存可以重用,主要指直接内存。内部实现是用一颗二叉查找树管理内存分配情况。
4.串行化处理读写:避免使用锁带来的性能开销。即消息的处理尽可能再同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。表面上看,串行化设计似乎CPU利用率不高,并发程度不够。但是,通过调整NIO线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队里-多个工作线程模型性能更优
5.高性能序列化协议:支持protobuf等高性能序列化协议5.
6.高效并发编程的体现:volatile的大量、正确使用,CAS和原子类的广泛使用,线程安全容器的使用,通过读写锁提升并发性能。

posted @ 2023-03-07 06:03  君莫笑我十年游  阅读(32)  评论(0编辑  收藏  举报