美文网首页程序员
Java进阶架构之架构筑基面试题:JVM+Netty+并发编程

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

作者: d2890c1dd688 | 来源:发表于2019-02-27 21:57 被阅读3次

架构筑基

Java程序性能优化

JVM性能调优

Linux基础与进阶

Mysql

Tomcat

并发编程进阶

高性能Netty框架


JVM

内存模型以及分区,需要详细到每个区放什么

堆里面的分区:Eden,survival (from+ to),老年代,各自的特点

对象创建方法,对象的内存分配,对象的访问定位

GC的两种判定方法

SafePoint是什么?

GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?

GC收集器有哪些?CMS收集器与G1收集器的特点

Minor GC与Full GC分别在什么时候发生?

几种常用的内存调试工具:jmap、jstack、jconsole、jhat

类加载的几个过程

JVM内存分哪几个区,每个区的作用是什么?

如和判断一个对象是否存活?(或者GC对象的判定方法)

简述java垃圾回收机制?

java中垃圾收集的方法有哪些?

java内存模型

java类加载过程?

简述java类加载机制?

类加载器双亲委派模型机制?

什么是类加载器,类加载器有哪些?

简述java内存分配与回收策率以及Minor GC和Major GC


Netty

BIO、NIO和AIO的区别?

NIO的组成?

Netty的特点?

Netty的线程模型?

TCP 粘包/拆包的原因及解决方法?

了解哪几种序列化协议?

如何选择序列化协议?

Netty的零拷贝实现?

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

NIOEventLoopGroup源码?


并发编程

现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?

在Java中Lock接口比synchronized块的优势是什么?你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写,以此来保持它的完整性,你会怎样去实现它?

在java中wait和sleep方法的不同?

用Java实现阻塞队列

用Java写代码来解决生产者——消费者问题

用Java编程一个会导致死锁的程序,你将怎么解决?

什么是原子操作,Java中的原子操作是什么?

Java中的volatile关键是什么作用?怎样使用它?在Java中它跟synchronized方法有什么不同?

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

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

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

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

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

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

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


面试题解答

java内存模型

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

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

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

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

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

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

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

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

Netty安全性:支持的安全协议:SSL V2和V3,TLS,SSL单向认证、双向认证和第三方CA认证。

高效并发编程的体现:volatile的大量、正确使用;CAS和原子类的广泛使用;线程安全容器的使用;通过读写锁提升并发性能。IO通信性能三原则:传输(AIO)、协议(Http)、线程(主从多线程)

流量整型的作用(变压器):防止由于上下游网元性能不均衡导致下游网元被压垮,业务流中断;防止由于通信模块接受消息过快,后端业务线程处理不及时导致撑死问题。

TCP参数配置:SO_RCVBUF和SO_SNDBUF:通常建议值为128K或者256K;SO_TCPNODELAY:NAGLE算法通过将缓冲区内的小封包自动相连,组成较大的封包,阻止大量小封包的发送阻塞网络,从而提高网络应用效率。但是对于时延敏感的应用场景需要关闭该优化算法。

用Java实现阻塞队列

这是一个相对艰难的多线程面试问题,它能达到很多的目的。第一,它可以检测侯选者是否能实际的用Java线程写程序;第二,可以检测侯选者对并发场景的理解,并且你可以根据这个问很多问题。如果他用wait()和notify()方法来实现阻塞队列,你可以要求他用最新的Java 5中的并发类来再写一次。


最后

面试题及答案的获取方式,也为大家提供一个交流学习的平台:805685193。有免费分享的视频,还有Java架构思维导图,主要分享分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频。

相关文章

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/itbquqtx.html