2025年高频java基础面试题及答案.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文档。上传文档
查看更多

2025年高频java基础面试题及答案

1.面向对象的三大特性是什么?请结合实际场景说明多态的实现机制

面向对象的三大核心特性是封装、继承和多态。封装通过访问控制(private、protected、public)隐藏对象内部状态,仅暴露必要接口;继承允许子类复用父类代码并扩展新功能;多态则指同一行为在不同对象上表现不同形态。多态的实现依赖于方法重写(Override)和动态绑定(DynamicBinding)。例如定义抽象类Animal,包含抽象方法cry(),子类Cat和Dog分别重写该方法。当通过Animal类型引用指向Cat对象时(Animala=newCat()),调用a.cry()会在运行时根据实际对象类型调用Cat的cry()方法,这一过程由JVM通过对象头的类型指针查找方法表(vtable)实现动态分派。

2.抽象类和接口的区别是什么?Java8之后接口有哪些新特性?

抽象类可包含抽象方法和具体方法,有构造方法,子类通过extends单继承;接口只能定义抽象方法(Java8前)或默认方法、静态方法(Java8后),无构造方法,类通过implements多实现。Java8为接口引入default方法(提供方法默认实现,解决接口升级时子类必须重写的问题)和static方法(可直接通过接口名调用);Java9增加private方法(用于封装接口内多个default方法的公共逻辑);Java16引入密封接口(sealedinterface),限制可实现该接口的类。例如:

```java

publicinterfaceMyInterface{

defaultvoiddefaultMethod(){

commonLogic();//调用private方法

}

privatevoidcommonLogic(){

System.out.println(公共逻辑);

}

}

```

3.HashMap的底层数据结构是什么?JDK7和JDK8有哪些主要差异?

HashMap底层采用“数组+链表+红黑树”的复合结构。数组作为哈希表的主干(table数组),每个元素是链表或红黑树的头节点。当插入元素时,通过hash(key)(n-1)计算桶索引(n为数组长度),若发生哈希冲突则以链表形式挂载;当链表长度≥8且数组长度≥64时,链表转换为红黑树(O(n)查询优化为O(logn));当红黑树节点数≤6时退化为链表。

JDK7与JDK8的核心差异:

数据结构:JDK7是“数组+链表”,JDK8引入红黑树;

插入方式:JDK7采用头插法(可能导致扩容时链表反转引发死循环),JDK8采用尾插法(避免多线程扩容的环链问题);

hash计算:JDK7的hash()方法通过4次异或+位移扰动,JDK8简化为(h=key.hashCode())^(h16)(保留高16位参与计算,减少低位碰撞);

扩容条件:JDK7先判断是否需要扩容再插入,JDK8先插入再判断是否需要扩容。

4.说说ArrayList和LinkedList的区别,以及如何选择?

ArrayList基于动态数组实现,支持O(1)时间的随机访问(通过索引定位),但插入/删除元素(非尾部)需要移动后续元素,时间复杂度O(n);LinkedList基于双向链表实现,节点包含prev和next指针,插入/删除元素只需修改相邻节点指针(O(1)时间,若已知节点位置),但随机访问需遍历链表(O(n)时间)。

选择建议:

频繁随机访问(如遍历、按索引查询)选ArrayList;

频繁插入/删除(尤其是中间位置)选LinkedList;

ArrayList默认初始容量10,扩容时新容量为原1.5倍(oldCapacity+(oldCapacity1)),大量数据时需注意扩容开销;LinkedList无容量限制,但节点额外占用内存(每个节点存储两个指针)。

5.解释synchronized的底层实现和锁升级过程

synchronized是Java的内置锁,基于对象头的Monitor(监视器)实现。Java对象头包含MarkWord(存储哈希码、GC分代年龄、锁状态等)和类型指针(指向类元数据)。锁升级过程为:

偏向锁:线程首次访问同步块时,MarkWord存储该线程ID(偏向状态),后续无竞争时直接进入同步块(无CAS操作);

轻量级锁:其他线程尝试获取锁时,偏向锁升级为轻量级锁(当前线程栈帧中创建LockRecord,MarkWord指向该记录),通过CAS竞争锁

文档评论(0)

yclhdq + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档