5道常见的Java面试题

2019 年 5 月 10 日

5道常见的Java面试题

1.Exception 和 Error 有什么区别?(2)



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


  1. Hashtable、HashMap、TreeMap有什么不同?(9)



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


  1. 什么情况下Java程序会产生死锁?(18)



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


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


  1. Java并发类库提供的线程池有哪几种?(21)



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


  1. 如何监控和诊断JVM堆内和堆外内存使用?(26)



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


文章出自极客时间Java核心技术36讲专栏


2019 年 5 月 10 日 18:206762

评论

发布
暂无评论
发现更多内容

架构师训练营第三周课后作业

天涯若海

Week 7 作业一

黄立

架构师训练营 - 第三周课后练习

joshuamai

屏读时代,我们患上了注意力缺失候群症

脑极体

从广西的新基建耕种,读懂一颗名为智能体的种子

脑极体

GrowingIO 响应式编程探索和实践

GrowingIO技术专栏

响应式编程

架构师训练营 第三周作业(手写单例模式)

springH₂O

架构训练营

【涂鸦物联网足迹】物联网主流通信方式

IoT云工坊

人工智能 云计算 大数据 物联网 云平台

手把手教你如何在Windows安装Anaconda

计算机与AI

Python Anaconda

第三周作业

丁乐洪

应用层软件开发教父教你如何重构,资深程序员必备专业技能

小Q

Java 学习 架构 面试 重构

GitHub上超牛的Java进阶教程,汇总Java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识

Java架构之路

Java 程序员 架构 面试 编程语言

8张图带你分析Redis与MySQL数据一致性问题

Java架构师迁哥

Week 7 性能优化总结

黄立

【涂鸦物联网足迹】涂鸦云平台全景介绍

IoT云工坊

人工智能 云计算 大数据 物联网平台 物联网

https 握手失败问题排查全记录

lockdown56

nginx https 网络 HTTP 抓包

阿里P8大牛精心整理,GitHub上超火的《Java工程师成神之路》从基础,到高级、底层、架构、进阶、扩展,囊括了Java体系内的所有知识点。

Java架构之路

Java 程序员 架构 面试 编程语言

一周信创舆情观察(10.26~11.1)

统小信uos

在Idea中使用JUnit单元测试

jiangling500

单元测试 IDEA JUnit

力扣解题:第三题(个人思路整理)

人语驿边桥

力扣

架构师训练营 - 第三周学习总结

joshuamai

架構師訓練營第 1 期 - 第 07 周總結

Panda

架構師訓練營第 1 期

穿越时空的回响:华为欧洲创新日的蝴蝶振翅

脑极体

解决大中型浏览器(Chrome)插件开发痛点:自定义热更新方案——1.原理分析及构建部署实现

梁龙先森

Java chrome 前端 浏览器 技术方案

WSL还是不错的

孙苏勇

WSL2 工具链 wsl

架构师训练营 - 第 7 周课后作业(1 期)

阿甘

区块链usdt承兑商支付系统开发,usdt跑分系统搭建

WX13823153201

一道比较运算符相关的面试题把我虐的体无完肤

新世界杂货铺

1分钟带你解锁Angular

Leo

学习 前端 angular 前端进阶训练营

6年Java开发经验,蚂蚁金服面试3+2次,最终有惊无险通过!(已拿offer)

Java架构之路

Java 程序员 架构 面试 编程语言

极客大学 - 架构师训练营 第七周作业

9527

5道常见的Java面试题-InfoQ