五道java高级面试题及答案_极悦注册
专注Java教育14年 全国咨询/投诉热线:444-1124-454
极悦LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 五道java高级面试题及答案

五道java高级面试题及答案

更新时间:2020-02-12 10:41:12 来源:极悦 浏览2321次


  1、Exception和Error有什么区别?


五道java高级面试题及答案


  Exception和Error都是继承了Throwable类,在Java中只有Throwable类型的实例才可以被抛出或者捕获,它是异常处理机制的基本组成类型。Exception和Error体现了Java平台设计者对不同异常情况的分类。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Error是指在正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是Error的子类。


  2、Hashtable、HashMap、TreeMap有什么不同?


五道java高级面试题及答案


  Hashtable是早期Java类库提供的一个哈希表实现,本身是同步的,不支持null键和值,由于同步导致的性能开销,所以已经很少被推荐使用。HashMap是应用更加广泛的哈希表实现,行为上大致上与HashTable一致,主要区别在于HashMap不是同步的,支持null键和值等。通常情况下,HashMap进行put或者get操作,可以达到常数时间的性能,所以它是绝大部分利用键值对存取场景的首选。TreeMap则是基于红黑树的一种提供顺序访问的Map,和HashMap不同,它的get、put、remove之类操作都是O(log(n))的时间复杂度,具体顺序可以由指定的Comparator来决定,或者根据键的自然顺序来判断。


  3、什么情况下Java程序会产生死锁?


五道java高级面试题及答案


  死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一直处于等待之中,没有任何个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。


  大部分死锁本身并不难定位,掌握基本思路和工具使用,理解线程相关的基本概念,比如各种线程状态和同步、锁、Latch等并发工具,就已经足够解决大多数问题了。


  4、Java并发类库提供的线程池有哪几种?


五道java高级面试题及答案


  通常开发者都是利用Executors提供的通用线程池创建方法,去创建不同配置的线程池,主要区别在于不同的ExecutorService类型或者不同的初始参数。Executors目前提供了5种不同的线程池创建配置:newCachedThreadPool()、newFixedThreadPool(intnThreads)、newSingleThreadExecutor()、newSingleThreadScheduledExecutor()和newScheduledThreadPool(intcorePoolSize)、newWorkStealingPool(intparallelism)。


  5、如何监控和诊断JVM堆内和堆外内存使用?


五道java高级面试题及答案


  了解JVM内存的方法有很多,具体能力范围也有区别,可以使用综合性的图形化工具,如JConsole、VisualVM等。这些工具具体使用起来相对比较直观,直接连接到Java进程,然后就可以在图形化界面里掌握内存使用情况。以JConsole为例,其内存页面可以显示常见的堆内存和各种堆外部分使用状态。也可以使用命令行工具进行运行时查询,如jstat和jmap等工具都提供了一些选项,可以查看堆、方法区等使用数据。或者,也可以使用jmap等提供的命令,生成堆转储文件,然后利用jhat或EclipseMAT等堆转储分析工具进行详细分析。


      以上就是极悦注册机构小编介绍的“五道java高级面试题及答案”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


相关推荐







提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>