【吊打面试官】netty高频面试题知识点和答案

  1. Netty 是什么?
  2. Netty 的特点是什么?
  3. Netty 的优势有哪些?
  4. Netty 的应用场景有哪些?
  5. Netty 高性能表现在哪些方面?
  6. BIO、NIO和AIO的区别?
  7. NIO的组成?
  8. Netty的线程模型?
  9. TCP 粘包/拆包的原因及解决方法?
  10. 什么是 Netty 的零拷贝?
  11. Netty 中有哪种重要组件?
  12. Netty 发送消息有几种方式?
  13. 默认情况 Netty 起多少线程?何时启动?
  14. 了解哪几种序列化协议?
  15. 如何选择序列化协议?
  16. Netty 支持哪些心跳类型设置?
  17. Netty 和 Tomcat 的区别?
  18. NIOEventLoopGroup源码?
  19. Netty简介
    a) JDK原生NIO程序的问题
    b) Netty的特点
    c) Netty常见使用场景
  20. Netty高性能设计
    a) I/O模型
    i. 阻塞I/O
    ii. I/O复用模型
    iii. 基于buffer
    b) 线程模型
    i. 事件驱动模型
    ii. Reactor线程模型
    iii. Netty线程模型
    iv. 异步处理
  21. Netty架构设计
    a) 功能特性
    b) 模块组件
    i. Bootstrap、ServerBootstrap
    ii. Future、ChannelFuture
    iii. Channel
    iv. Selector
    v. NioEventLoop
    vi. NioEventLoopGroup
    vii. ChannelHandler
    viii. ChannelHandlerContext
    ix. ChannelPipline
    c) 工作原理架构
  22. 总结

答案详情如下:

6.BIO、NIO和AIO的区别?

BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。
伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。

NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

AIO:一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

BIO是面向流的,NIO是面向缓冲区的;BIO的各种流是阻塞的。而NIO是非阻塞的;BIO的Stream是单向的,而NIO的channel是双向的。

NIO的特点:事件驱动模型、单线程处理多任务、非阻塞I/O,I/O读写不再阻塞,而是返回0、基于block的传输比基于流的传输更高效、更高级的IO函数zero-copy、IO多路复用大大提高了Java网络应用的可伸缩性和实用性。基于Reactor线程模型。

在Reactor模式中,事件分发器等待某个事件或者可应用或个操作的状态发生,事件分发器就把这个事件传给事先注册的事件处理函数或者回调函数,由后者来做实际的读写操作。如在Reactor中实现读:注册读就绪事件和相应的事件处理器、事件分发器等待事件、事件到来,激活分发器,分发器调用事件对应的处理器、事件处理器完成实际的读操作,处理读到的数据,注册新的事件,然后返还控制权。

10.什么是 Netty 的零拷贝?

Netty 的零拷贝主要包含三个方面:

Netty 的接收和发送 ByteBuffer 采用 DIRECT BUFFERS,使用堆外直接内存进行 Socket 读写,不需要进行字节缓冲区的二次拷贝。如果使用传统的堆内存(HEAP BUFFERS)进行 Socket 读写,JVM 会将堆内存 Buffer 拷贝一份到直接内存中,然后才写入 Socket 中。相比于堆外直接内存,消息在发送过程中多了一次缓冲区的内存拷贝。

Netty 提供了组合 Buffer 对象,可以聚合多个 ByteBuffer 对象,用户可以像操作一个 Buffer 那样方便的对组合 Buffer 进行操作,避免了传统通过内存拷贝的方式将几个小 Buffer 合并成一个大的 Buffer。
Netty 的文件传输采用了 transferTo 方法,它可以直接将文件缓冲区的数据发送到目标 Channel,避免了传统通过循环 write 方式导致的内存拷贝问题。

回复【资料】领取完整答案:

图片说明

优质文章推荐

1、【吊打面试官】redis高频面试知识点和答案
https://blog.nowcoder.net/n/e4ba3dea1fbf49a3b80955b49cf7d841
2、【吊打面试官】spring高频面试知识点和答案
https://blog.nowcoder.net/n/418eb40949b4423881ed0a6c7f81fdca
3、【吊打面试官】计算机网络高频面试题和答案
https://blog.nowcoder.net/n/7c37283aece9449dae7f2f894c8b8dbb
4、【吊打面试官】spring boot高频面试知识点
https://blog.nowcoder.net/n/44078445e7324141b6b43bc5fc596a5f
5、【吊打面试官】zookeeper大厂高频面试题和答案
https://blog.nowcoder.net/n/6a7bd244b0f44922923e8c0aa7381d78
6、【吊打面试官】消息队列高频面试知识点
https://blog.nowcoder.net/n/ab72bb4585064bf69ce539e73323acba

全部评论

相关推荐

点赞 评论 收藏
分享
24分钟1.自我介绍2.黑盒测试用例设计方法3.运用刚才的测试方法对手机端淘宝购物车结算页面进行测试4.测试流程5.需求文档没有标明边界值,怎么确定边界值,确定边界值后怎么测6.你们公司自动化测试是测业务主流程还是新需求反问:不足之处答:问答问题前思考3s再答,针对提问再答
一笑而过2222:边:边界值分析法(处理输入边界) 类:等价类划分法(划分有效 / 无效输入) 定:判定表法(多条件组合的逻辑判定) 因:因果图法(分析输入输出的因果关系) 迁:状态迁移法(覆盖系统状态转换路径) 场:场景法(模拟端到端业务流程) 正:正交试验法(多因素组合的测试优化) 错:错误推测法(基于经验推测潜在漏洞) 记忆逻辑链(按测试场景优先级排序) 先处理明确输入:边界值 + 等价类(边类) 再处理条件组合:判定表 + 因果图(定因) 接着处理状态与流程:状态迁移 + 场景法(迁场) 最后优化多因素与补漏:正交试验 + 错误推测(正错)
查看6道真题和解析
点赞 评论 收藏
分享
见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
若怜君欢:驾驶证去掉吧,PPT啥的也去掉,本硕课程去掉,导师和研究方向去掉;加入本硕排名(好才写);技能栏加入你会的那些控制算法和滤波算法,这个比你会啥啥啥软件更有用;获奖写上去,奖学金啊,有没有专利啊之类的 电机和硬件这一块,属于传统制造业,制造业实习并不多。多投一些攒攒经验,有实习最好,没有也不需要焦虑(制造业实习其实除了转正,没多大用处) 最后,划重点,等秋招开始后,把你所有社交软件都发一份简历上去,并经常更新,找人内推你!
点赞 评论 收藏
分享
昨天 13:54
湖南大学 Web前端
秋招不是要开始了吗,我都打算润了,看大家还在找不敢润了
一条从:因为不是人人都像佬一样有实习像我们这种二本仔秋招没有实习也是白忙活
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务