Java进阶架构之架构筑基面试题:JVM+Netty+并发编程

12. Java中你怎样唤醒一个阻塞的线程?

13. 在Java中CycliBarriar和CountdownLatch有什么区别?

串行无锁化设计,即消息的处理尽可能在同一个线程内完成,期间不进行线程切换,这样就避免了多线程竞争和同步锁。表面上看,串行化设计似乎CPU利用率不高,并发程度不够。但是,通过调整NIO线程池的线程参数,可以同时启动多个串行化的线程并行运行,这种局部无锁化的串行线程设计相比一个队列-多个工作线程模型性能更优。

java内存模型(JMM)是线程间通信的控制机制.JMM定义了主内存和线程之间抽象关系。线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化。Java内存模型的抽象示意图如下:

心跳,对服务端:会定时清除闲置会话inactive(netty5),对客户端:用来检测会话是否断开,是否重来,检测网络延迟,其中idleStateHandler类 用来检测会话状态

10. 你将如何使用threaddump?你将如何分析Thread dump?

9. 什么是竞争条件?你怎样发现和解决竞争?

15. 你在多线程环境中遇到的常见的问题是什么?你是怎么解决它的?

Netty的高性能表现在哪些方面?

java内存模型

可靠性,链路有效性检测:链路空闲检测机制,读/写空闲超时机制;内存保护机制:通过内存池重用ByteBuf;ByteBuf的解码保护;优雅停机:不再接收新消息、退出前的预处理操作、资源的释放操作。

面试题解答

1. 首先,线程A把本地内存A中更新过的共享变量刷新到主内存中去。

2. 然后,线程B到主内存中去读取线程A之前已更新过的共享变量。

从上图来看,线程A与线程B之间如要通信的话,必须要经历下面2个步骤:

14. 什么是不可变对象,它对写并发应用有什么帮助?

11. 为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?

推荐产品

客服:

微 信:

阿里旺旺:

淘宝店铺:淘宝官方网店

  

查看更多