Java核心技术面试精讲
杨晓峰
前Oracle首席工程师
立即订阅
43250 人已学习
课程目录
已完结 43 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 以面试题为切入点,有效提升你的Java内功
免费
模块一 Java基础 (14讲)
第1讲 | 谈谈你对Java平台的理解?
第2讲 | Exception和Error有什么区别?
第3讲 | 谈谈final、finally、 finalize有什么不同?
第4讲 | 强引用、软引用、弱引用、幻象引用有什么区别?
第5讲 | String、StringBuffer、StringBuilder有什么区别?
第6讲 | 动态代理是基于什么原理?
第7讲 | int和Integer有什么区别?
第8讲 | 对比Vector、ArrayList、LinkedList有何区别?
第9讲 | 对比Hashtable、HashMap、TreeMap有什么不同?
第10讲 | 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?
第11讲 | Java提供了哪些IO方式? NIO如何实现多路复用?
第12讲 | Java有几种文件拷贝方式?哪一种最高效?
第13讲 | 谈谈接口和抽象类有什么区别?
第14讲 | 谈谈你知道的设计模式?
模块二 Java进阶 (16讲)
第15讲 | synchronized和ReentrantLock有什么区别呢?
第16讲 | synchronized底层如何实现?什么是锁的升级、降级?
第17讲 | 一个线程两次调用start()方法会出现什么情况?
第18讲 | 什么情况下Java程序会产生死锁?如何定位、修复?
第19讲 | Java并发包提供了哪些并发工具类?
第20讲 | 并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?
第21讲 | Java并发类库提供的线程池有哪几种? 分别有什么特点?
第22讲 | AtomicInteger底层实现原理是什么?如何在自己的产品代码中应用CAS操作?
第23讲 | 请介绍类加载过程,什么是双亲委派模型?
第24讲 | 有哪些方法可以在运行时动态生成一个Java类?
第25讲 | 谈谈JVM内存区域的划分,哪些区域可能发生OutOfMemoryError?
第26讲 | 如何监控和诊断JVM堆内和堆外内存使用?
第27讲 | Java常见的垃圾收集器有哪些?
第28讲 | 谈谈你的GC调优思路?
第29讲 | Java内存模型中的happen-before是什么?
第30讲 | Java程序运行在Docker等容器环境有哪些新问题?
模块三 Java安全基础 (2讲)
第31讲 | 你了解Java应用开发中的注入攻击吗?
第32讲 | 如何写出安全的Java代码?
模块四 Java性能基础 (3讲)
第33讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?
第34讲 | 有人说“Lambda能让Java程序慢30倍”,你怎么看?
第35讲 | JVM优化Java代码时都做了什么?
模块5 Java应用开发扩展 (4讲)
第36讲 | 谈谈MySQL支持的事务隔离级别,以及悲观锁和乐观锁的原理和应用场景?
第37讲 | 谈谈Spring Bean的生命周期和作用域?
第38讲 | 对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?
第39讲 | 谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
周末福利 (2讲)
周末福利 | 谈谈我对Java学习和面试的看法
周末福利 | 一份Java工程师必读书单
结束语 (1讲)
结束语 | 技术没有终点
Java核心技术面试精讲
登录|注册

第38讲 | 对比Java标准NIO类库,你知道Netty是如何实现更高性能的吗?

杨晓峰 2018-08-04
今天我会对 NIO 进行一些补充,在专栏第 11 讲中,我们初步接触了 Java 提供的几种 IO 机制,作为语言基础类库,Java 自身的 NIO 设计更偏底层,这本无可厚非,但是对于一线的应用开发者,其复杂性、扩展性等方面,就存在一定的局限了。在基础 NIO 之上,Netty 构建了更加易用、高性能的网络框架,广泛应用于互联网、游戏、电信等各种领域。
今天我要问你的问题是,对比 Java 标准 NIO 类库,你知道 Netty 是如何实现更高性能的吗?

典型回答

单独从性能角度,Netty 在基础的 NIO 等类库之上进行了很多改进,例如:
更加优雅的 Reactor 模式实现、灵活的线程模型、利用 EventLoop 等创新性的机制,可以非常高效地管理成百上千的 Channel。
充分利用了 Java 的 Zero-Copy 机制,并且从多种角度,“斤斤计较”般的降低内存分配和回收的开销。例如,使用池化的 Direct Buffer 等技术,在提高 IO 性能的同时,减少了对象的创建和销毁;利用反射等技术直接操纵 SelectionKey,使用数组而不是 Java 容器等。
使用更多本地代码。例如,直接利用 JNI 调用 Open SSL 等方式,获得比 Java 内建 SSL 引擎更好的性能。
在通信协议、序列化等其他角度的优化。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Java核心技术面试精讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(14)

  • 忆水寒
    Netty采用Reactor线程模型。这里面主要有三种Reactor线程模型。分别是单线程模式、主从Reactor模式、多Reactor线程模式。其都可以通过初试和EventLoopGroup进行设置。其主要区别在于,单Reactor模式就是一个线程,既进程处理连接,也处理IO。类似于我们传统的OIO编程。主从Reactor模式,其实就是将监听连接和处理IO的分开在不同的线程完成。最后,主从Reactor线程模型,为了解决多Reactor模型下单一线程性能不足的问题。改为了一组线程池进行处理。官方默认的是采用这种主从Reactor模型。其线程数默认为CPU内核的2倍。杨老师,不知道我说的对不对?

    作者回复: 对的

    2018-08-06
    26
  • 青鸟飞鱼
    个人觉得关于Netty这块知识讲的还是太表面化了,如果能深入点,肯定更好
    2019-02-21
    13
  • Levy
    netty线程模型一般分为监听线程和I/O处理线程,也即bossGroup和workerGroup,属于多Reactor模型

    作者回复: 是的,不同版本模型有点区别,但逻辑上都还是区分

    2018-08-04
    6
  • ttxser
    服务器的多reactor貌似不支持吧,boss虽然能设置多线程,但最后只能绑定一个线程到serversocket来accept?
    2018-08-17
    2
  • Allen
    有三种模型。1-1。1-n n-n. 并且可以根据实际情况自动进行调整,可谓是线程模型的终极版本,简直是太酷了
    2018-08-05
    2
  • 小恩
    杨老师您好,我有5年左右的Java开发经验,也不断的尝试学习netty,但还是找不到真正能够使用到的地方,最多看一些源码,学习一下简单的线程模型,netty离我最近的应该是spring boot 2.0里面的了,想请教一下在我们实际业务开发中,什么样的业务场景会用到netty,谢谢!
    2018-12-05
    2
    1
  • WolvesLeader
    一直不明白,n_n的使用场景
    2018-08-08
    1
  • 咖啡猫口里的咖啡猫🐱
    为什么我看着开源项目把netty做网络层,模型都是1-N ,为什么N-N会浪费资源
    2018-08-05
    1
  • Allen
    请问为啥不推荐netty权威指南?😋
    2018-08-05
    1
  • 慎独
    Reactor 模式和 Netty 线程模型这块,老师能详细讲解下吗?
    2019-12-04
  • 随心而至
    想深入还得自己结合实例,针对性地读读源码,之前囫囵吞枣似的读完了netty实战,并没有太理解本质。RTFSC,追根溯源,适可而止,确实太需要了
    2019-09-20
  • shern
    为啥默认的线程数是cpu核数的两倍?
    2019-07-22
    1
  • zt
    老师,能给说下mina和netty的相同和不同吗?

    作者回复: mina没仔细研究过...

    2018-08-06
  • L
    杨老师,可以的话麻烦推荐几个能获取到最新Java开发资料,或者编程领域相关的外文网站,博客等,就是想关注一些最新的技术信息
    2018-08-05
收起评论
14
返回
顶部