
网络面试题
似来
一个老程序员
展开
-
大厂面试题-Netty中提供了哪些线程模型?
说到线程模型,又不得不说Netty中的ReactorReactor直译过来叫做反应堆,它是Netty支持异步多线程的核心组件。常见的Reactor线程模型有三种,分别是:Reactor单线程模型、Reactor多线程模型、主从Reactor多线程模型。1、单线程单Reactor模型在Reactor模型有三个重要的组件:1Reactor:主要负责将IO事件发派给对应的Handler2、Acceptor:用于处理客户端连接请求。原创 2023-11-02 15:54:29 · 93 阅读 · 0 评论 -
大厂面试题-Netty中有哪些核心组件?
ChannelHandlerContext:用来保存ChannelHandler的上下文信息。的核心组件分为三层,分别是网络通信层、事件调度层和服务编排层。Channel:相当于完成网络通信的载体。EventLoop:相当于线程池中的线。的数据处理器,数据接收后,通过指定的。:负责服务端监听,用来监听指定端口。:负责客户端启动并用来链接远程。请求,并分配线程执行处理请求。上是一个线程池,主要负责接收。服务编排层有三个核心组件。原创 2023-11-02 15:50:34 · 90 阅读 · 0 评论 -
大厂面试题-Netty是什么,为什么要使用Netty?
Netty在NIO的基础上还做了很多优化,比如零拷贝机制、内存池管理等等,因此,总体运行性能。Netty提供统一的API,支持多种通信模型,如阻塞、非阻塞,以及epoll、poll等模型。到了Netty通信框架,比如Zookeeper、Dubbo、RocketMQ等等,经。封装的高性能的网络通信框架。等,并且针对数据通信的拆包、黏包问题,了大型项目的使用和考验更加成熟稳定。3、可以使用自带的编解码器解决。默认提供了多协议的通信支持。,我们可以利用这些封装好的。量、低延迟、低资源消耗,比。原创 2023-11-02 15:45:43 · 154 阅读 · 0 评论 -
大厂面试题-为什么Netty线程池默认大小为CPU核数的2倍
延迟指的是发出请求到收到响应的时间,吞吐量指的是。因为,提高吞吐量也不能只简单的只依赖线程池,还可以通过缓存、微服务拆分,优化业务逻辑、优。都知道使用多线程的本质是为了提升程序的性能,总体来说有两个最核心的指标,一个延迟,一个吞。条件下延迟越短吞吐量越大,但由于它们是不同的维度,一个是时间,一个是空间,并不能相互转。耗时为1:1,调整线程大小之后,性能效果也不一定符合期望值。因此,提升性能最主要的目的就是要降低延迟,提高吞吐量。操作的耗时比是1:2,也就是说3个线程是合适的,这样。原创 2023-11-02 15:42:08 · 241 阅读 · 0 评论 -
大厂面试题-什么是拆包和粘包?怎么解决?
拆包指的是把一个完整的数据包拆分成多个小包进行发送,而接收端可能无法一次性接收到所有小包,导致接收到的数据不完整。粘包指的是把多个数据包粘合在一起一次性发送,而接收端可能无法正确区分每个数据包,导致接收到的数据出现错位或混乱。通过自定义消息协议,并在协议头中保存数据包的长度信息,接收方可以根据这个长度来解析数据包来保证消息的完整性。基于定长消息,也就是发送端的消息长度是固定的 ,服务端按照固定长度来解析。流的传输,所以数据在传输的过程中会被分割成一个个的数。所以,候选人在回答这个问题之前,必须要了解这个。原创 2023-11-02 15:36:28 · 252 阅读 · 0 评论 -
大厂面试题-select和epoll的区别
select和epoll都是I/O多路复用的机制,它们可以让一个进程监听多个文件描述符的IO事件或者连接事件,只要其中任意一个或多个文件描述符就绪,就会触发阻塞唤醒,使得应用程序可以直接进行数据的读取或者写入。的优势,例如在处理少量文件描述符或需要跨平台支持的情况下,select是一个更好的选择。处理大量文件描述符时,select的性能随着监听集合的增大而逐渐下降,而。是基于事件通知的机制,它只需要遍历当前就绪的文件描述符集合,大大减。,一般受到操作系统的限制,而epoll没有这个限制,原创 2023-11-02 15:34:37 · 164 阅读 · 0 评论 -
大厂面试题-什么是IO的多路复用机制?
服务端此时不需要等待,只需要启动一个线程,通过selector.select()阻塞轮询复路器上就绪的channel即可,也就是说,如果某个客户端连接数据传输完成,那么select()方法会返回就绪的channel,然后执行相关的处理就可以了。客户端请求到服务端后,此时客户端在传输数据过程中(如图),为了避免Server端在read客户端数据过程中阻塞,服务端会把该请求注册到Selector复路器上,统提供的IO复用机制的实现,其中select和poll是基于轮询的方式。去获取这个就绪的连接进行读写操作。原创 2023-11-02 15:32:24 · 63 阅读 · 0 评论 -
大厂面试题-Netty中Reactor模式的理解
也就是把处理IO就绪事件的线程和处理Handler业务逻辑的线程进行分离,每个Handler由一个独立线程来处理,在这种设计下,即便是存在Handler线程阻塞问题,也不会对IO线程造成影响。在多线程Reactor模型下,所有的IO操作都是由一个Reactor来完成的,而且Reactor运行在单个线程里面。Reactor做灵活扩展,从而适应不同的并发量,解决了单个Reactor模式的性能瓶颈问题。想是把响应IO事件和业务处理进行分离,通过一个或者多个线程来处理IO事。阻塞,就会影响整个服务的吞吐量。原创 2023-11-02 15:31:02 · 143 阅读 · 0 评论 -
大厂面试题-Cookie和Session的区别
然后客户端下一次再访问服务器的时候,就可以携带这些状态数据发送到服务器端,服务端可以根据Cookie里面携带的内容来识别使用者。客户端第一次访问服务端的时候,服务端会针对这次请求创建一个会话,并生成一个唯一的sessionId来标注这个会话。的请求里面,每次都会携带sessionid,服务器端就可以根据这个sessionid来。来看,Cookie是客户端的存储机制,Session是服务端的存储机制。机制,再结合客户端的Cookie机制,就可以实现有状态的。,可以存储当前会话产生的一些状态数据。原创 2023-11-02 14:14:49 · 55 阅读 · 0 评论 -
大厂面试题-TCP协议为什么要设计三次握手?
a.可靠性体现在TCP协议通信双方的数据传输是稳定的,即便是在网络不好的情。c.面向连接,是说数据传输之前,必须要建立一个连接,然后基于这个连接进行。c.客户端收到服务端的请求后,再次发送ACK,这个ACK。样一个通道的最小值。手,就是通信双方一共需要发送三次请求,才能确保这个连接的建立。后,发送SYN和ACK,这里的SYN表示服务端的同步序列。议,是一种可靠的,基于字节流的,面向连接的传输层协议。连接初始化造成的混乱问题,比如说在网络比较差的情况下,到请求的一个确认,表示告诉客户端,我收到了你的请。原创 2023-11-02 14:11:33 · 121 阅读 · 0 评论 -
大厂面试题-IO和NIO区别
NIO,是JDK1.4里面新增的一种NEW IO机制,相比于传统的IO,NIO在效率上做了很大的优化,并且新增了几个核心组件。Socket的IO通信,它是属于阻塞式IO,也就是说,在连接以及IO事件未就绪的情况下。因此,总的来说,IO和NIO的区别,站在网络IO的视角来说,前者是阻塞IO,后者。)另外,还提供了非阻塞的特性,所以,对于网络IO来说,NIO通常也称为。I/O,指的是IO流,它可以实现数据从磁盘中的读取以及写入。行数据的IO操作的时候,Java里面提供了Socket的方式。原创 2023-11-02 14:05:46 · 289 阅读 · 0 评论 -
大厂面试题-什么是服务网格?
服务网格这个概念出来很久了,从2017年被提出来,到2018年正式爆发,很多云厂商和互联网企业都在纷纷向服务网格靠拢。像蚂蚁集团、美团、百度、网易等一线互联网公司,都有服务网格的落地应用。服务网格是微服务架构的更进一步升级,它的核心目的是实现网络通信与业务逻辑的分离,使得开发人员更加专注在业务的实现上。原创 2023-11-01 17:38:59 · 126 阅读 · 0 评论 -
大厂面试题-介绍一下Netty
当NIO线程负载过重之后,处理速度将变慢,这会导致大量客户端连接超时,超时之后往往会进行重发,这更加重了NIO线程的负载,最终会导致大量消息积压和处理超时,成为系统的性能瓶颈;Acceptor,请求接收者,在实践时其职责类似服务器,并不真正负责连接请求的建立,而只将其请求委托Main Reactor线程池来实现,起到一个转发的作用。一个NIO线程同时处理成百上千的链路,性能上无法支撑,即便NIO线程的CPU负荷达到100%,也无法满足海量消息的读取和发送;但是对于高负载、大并发或。原创 2023-11-01 17:08:43 · 144 阅读 · 0 评论 -
大厂面试题-网络四元组
四元组,简单理解就是在TCP协议中,去确定一个客户端连接的组成要素,它包括源。TCP是全双工协议,也就是说数据允许在连接的两个方向上同时传输,时候,通过源IP地址、目标IP地址、源端口号、目标端口号来确定一。因为服务器的IP和端口是不变的,只要客户端的IP和端口彼此不。此时建立的四元组就是(10.23.15.3,59461,当多个客户端连接到服务端的时候,服务端需要去识别每一个连接。建立一个对指定端口号的监听,比如8080。这里的客户端,如果是反向通信,它又变成了服务端。是说,当一个客户端和服务端建立。原创 2023-11-01 17:02:58 · 234 阅读 · 0 评论