JavaSE 高频面试题及参考答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

JavaSE高频面试题及参考答案

一、基础语法与数据类型

问题:Java中基本数据类型和引用数据类型的区别?

答案:基本类型(byte/short/int/long/float/double/char/boolean)直接存储值,存放在栈内存;引用类型(类、接口、数组等)存储对象的内存地址,栈存地址、堆存实际对象。基本类型默认值固定(如int默认0),引用类型默认值是null。

问题:int和Integer有什么区别?什么时候用Integer?

答案:int是基本类型,Integer是包装类(引用类型)。Integer提供了数值转换、比较等方法(如parseInt()、compareTo()),还能处理null值场景(比如数据库查询结果可能为null,用Integer接收避免空指针)。另外,Integer有常量池缓存(-128~127),超出范围会新建对象,int则直接赋值。

问题:String为什么是不可变的?

答案:String类被final修饰,不能被继承;内部存储字符的char[]数组也是privatefinal的,既不能修改数组引用,也不能通过外部访问修改数组内容。不可变的好处是线程安全、能复用常量池中的对象,减少内存开销。

二、面向对象(OOP)

问题:封装、继承、多态的含义和作用?

答案:

封装:隐藏对象内部细节,通过getter/setter控制属性访问,比如实体类的私有属性,避免外部随意修改,保证数据安全性。

继承:子类继承父类的非私有属性和方法,减少代码冗余,比如Animal类的eat()方法,Dog类继承后可直接使用,还能扩展自己的bark()方法。

多态:同一行为的不同表现形式,核心是方法重写和向上转型,比如父类引用指向子类对象(Animaldog=newDog()),调用eat()时执行子类重写的方法,提高代码灵活性。

问题:final、finally、finalize的区别?

答案:

final:修饰类不能被继承,修饰方法不能被重写,修饰变量(基本类型值不变,引用类型地址不变)。

finally:try-catch-finally中,无论是否抛出异常,finally块都会执行(除非用System.exit(0)终止程序),常用来关闭资源(流、数据库连接)。

finalize:Object类的方法,垃圾回收器回收对象前会调用该方法,程序员不能主动调用,且JDK9后已被标记为过时,不推荐使用。

问题:抽象类和接口的区别?

答案:

维度

抽象类

接口

继承/实现

单继承(extends)

多实现(implements)

方法修饰

可含普通方法和抽象方法

JDK8+可含默认方法/静态方法,抽象方法无实现

属性修饰

可含各种访问修饰符的属性

只能是publicstaticfinal常量

构造方法

有构造方法(不能实例化)

无构造方法

设计目的

体现“is-a”关系,复用代码

体现“has-a”关系,定义行为规范

三、集合框架

问题:ArrayList和LinkedList的区别?

答案:

底层实现:ArrayList基于动态数组(Object[]),LinkedList基于双向链表。

访问效率:ArrayList支持随机访问(get(intindex)时间复杂度O(1)),LinkedList需遍历链表(O(n))。

增删效率:LinkedList在链表首尾或指定节点增删(O(1)),ArrayList增删需移动数组元素(O(n))。

内存占用:LinkedList每个节点需存储前后指针,内存开销更大;ArrayList存在数组扩容预留空间。

问题:HashMap的底层实现(JDK8前后区别)?

答案:

JDK7:数组+链表(哈希表),通过key的hashCode()计算数组索引,哈希冲突时用链表存储相同索引的元素(拉链法)。

JDK8:数组+链表+红黑树,当链表长度超过阈值(默认8)且数组长度=64时,链表转为红黑树(查询时间复杂度从O(n)降为O(logn));数组长度不足64时会先扩容。

核心逻辑:put时先计算key的哈希值,扰动处理后得到数组索引,判断该位置是否为空,为空则直接插入,不为空则判断key是否相同(equals()),相同则覆盖值,不同则链表/红黑树插入。

问题:HashMap和ConcurrentHashMap的区别?

答案:

线程安全:HashMap非线程安全,多线程操作可能出现数据不一致;ConcurrentHashMap是

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档