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岗常见面试题(附答案)

Java基础与新特性

Q:Java17引入的密封类(SealedClasses)解决了什么问题?与普通类的继承限制有何不同?

A:密封类通过`sealed`修饰符明确指定允许继承的子类,解决了类继承开放性不可控的问题。普通类默认允许所有子类继承(除非用`final`禁止),而密封类需在声明时通过`permits`列出允许的子类,这些子类必须是`final`、`sealed`或`nonsealed`(非密封)的。例如:

```java

publicsealedclassShapepermitsCircle,Rectangle{...}

publicfinalclassCircleextendsShape{...}//必须为final或sealed/nonsealed

```

这种设计提升了类型安全,尤其在需要严格控制扩展的场景(如API设计)中,避免未预期的子类破坏原有逻辑。

Q:Lambda表达式的底层实现机制是什么?与匿名内部类有何区别?

A:Lambda表达式通过JVM的`invokedynamic`指令实现,运行时动态提供轻量级的函数对象,相比匿名内部类更高效。区别在于:

1.作用域:Lambda访问外部变量时,变量无需显式声明为`final`,但实际仍需保证不可变性;匿名内部类访问外部变量必须是`final`或效果上的`final`。

2.类提供:匿名内部类编译时提供独立的`.class`文件(如`Outer$1.class`),而Lambda在运行时动态提供,减少类加载开销。

3.`this`指向:Lambda中的`this`指向外层类实例,匿名内部类的`this`指向自身实例。

Q:Java泛型中的类型擦除(TypeErasure)会导致哪些问题?如何解决?

A:类型擦除是指编译时泛型信息被擦除,运行时无法获取具体类型参数。常见问题:

无法在运行时判断泛型类型(如`listinstanceofListString`编译错误);

泛型类不能继承`Throwable`(因类型擦除后`ExceptionT`与`Exception`冲突);

基本类型无法直接作为泛型参数(需用包装类)。

解决方法:通过反射传递`Type`信息(如使用`ClassT`或`TypeReference`),或在设计API时通过方法参数间接获取类型(如Guava的`TypeToken`)。

并发编程与虚拟线程

Q:Java21的虚拟线程(VirtualThreads)与平台线程(PlatformThreads)的核心区别是什么?适用场景有哪些?

A:虚拟线程是由JVM管理的轻量级线程,基于协程模型,依附于平台线程(操作系统线程)运行。核心区别:

资源占用:平台线程默认栈大小1MB+,虚拟线程栈仅KB级,可创建百万级虚拟线程;

调度方式:平台线程由OS内核调度,上下文切换成本高;虚拟线程由JVM调度,通过`Continuation`实现用户态切换,阻塞时自动让渡执行权;

阻塞影响:平台线程阻塞会占用OS线程资源;虚拟线程阻塞时,其依附的平台线程可执行其他虚拟线程,避免资源浪费。

适用场景:高并发IO密集型任务(如HTTP服务处理、数据库查询),但需避免CPU密集型任务(虚拟线程不会主动让出CPU,可能导致饥饿)。

Q:ReentrantLock的公平锁与非公平锁实现差异是什么?生产环境中为何通常选择非公平锁?

A:公平锁(`newReentrantLock(true)`)遵循FIFO原则,新线程需加入等待队列尾部;非公平锁在尝试加锁时会先CAS抢占锁,若成功则直接获取,否则加入队列。

非公平锁更常用的原因:

1.性能更高:减少线程切换次数(抢占成功时无需唤醒等待线程);

2.实际场景中,绝对公平可能导致大量线程频繁切换,整体吞吐量下降;

3.多数业务不要求严格公平(如用户请求处理,后到的短任务可能先完成)。

Q:如何用`CompletableFuture`实现多任务的聚合?举一个“先并行查询用户信息和订单信息,再合并结果”的例子。

A:可通过`thenCombine`或`allOf`实现。示例:

```java

CompletableFutureUseruserFuture=CompletableFuture.supplyAsync(()queryUser(123));

CompletableFutureOrderorderFuture=CompletableFuture.supplyAsync(()que

文档评论(0)

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

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

1亿VIP精品文档

相关文档