Java面试易忽略知识点

1. CompletableFuture中thenApply()thenCompose()的区别

考察点:组合式异步编程
解析

  • ​**thenApply()**:接收前序任务结果,返回普通对象(同步转换),适用简单数据处理。
  • ​**thenCompose()**:接收前序任务结果,返回新的CompletableFuture(异步嵌套),用于链式调用异步任务。
    示例
 

java

CompletableFuture.supplyAsync(() -> "Hello")  .thenCompose(s -> CompletableFuture.supplyAsync(() -> s + " World")); // 链式异步  

2. Java模块化系统(JPMS)如何解决“自动模块”问题?

考察点:模块化依赖管理
解析

  • 自动模块:非模块化JAR包会被视为自动模块,导出所有包并读取所有其他模块。
  • 解决方案:在module-info.java中显式声明依赖:
     

    java

    requires transitive com.example.lib; // 传递依赖  

3. 如何用GraalVM将Spring Boot应用编译为原生镜像?

考察点:AOT编译与云原生优化
解析

  1. 添加依赖
     

    xml

    <dependency>  <groupId>org.springframework.experimental</groupId>  <artifactId>spring-native</artifactId>  
    </dependency>  
  2. 编译命令
     

    bash

    mvn spring-boot:build-image  

优势:启动时间<50ms,内存占用降低60%。


4. 记录类型(Records)能否实现Builder模式?

考察点:不可变数据结构设计
解析

  • 限制:Records默认生成final类,字段不可变,需通过静态内部类模拟Builder:
     

    java

    public record User(Long id, String name) {  public static class Builder {  private Long id;  private String name;  // Setter方法  public User build() { return new User(id, name); }  }  
    }  

5. 模式匹配在instanceofswitch中的性能差异

考察点:新特性底层优化
解析

  • ​**instanceof模式匹配**:编译器生成类型检查代码,性能与传统instanceof+强制转型相当。
  • ​**switch模式匹配**​(Java 21预览):生成跳表优化,适合多分支场景,性能优于链式if-else

6. ZGC的“染色指针”如何实现并发标记?

考察点:低延迟GC原理
解析

  • 指针元数据:在64位指针中存储标记位、重定位状态等,无需STW即可更新对象状态。
  • 读屏障:在访问对象时动态修正指针,保证并发标记期间线程安全。

7. JFR(Java Flight Recorder)如何定位线程阻塞问题?

考察点:性能分析工具
步骤

  1. 录制JFR数据:
     

    bash

    jcmd <pid> JFR.start duration=60s filename=blocking.jfr  
  2. 分析jdk.JavaMonitorWait事件,查看持有锁的线程栈。

8. 如何用JMH测试StringBufferStringBuilder的性能差异?

考察点:基准测试实践
代码

 

java

@BenchmarkMode(Mode.Throughput)  
public class StringBenchmark {  @Benchmark  public void testStringBuffer() {  StringBuffer sb = new StringBuffer();  for (int i=0; i<1000; i++) sb.append(i);  }  // 类似实现StringBuilder测试  
}  

结论:单线程下StringBuilder快30%,多线程需考虑锁竞争。


9. 密封类(Sealed Classes)在领域驱动设计(DDD)中的应用

考察点:领域模型限制
场景:定义核心领域对象,限制子类扩展:

 

java

public sealed interface PaymentMethod permits CreditCard, PayPal {}  
public final class CreditCard implements PaymentMethod { /* 字段校验逻辑 */ }  

优势:强制业务规则,避免模型污染。


10. 虚拟线程(Project Loom)与传统线程池的资源消耗对比

考察点:轻量级并发模型
数据

  • 传统线程:1个线程 ≈ 1MB栈内存,万级线程消耗GB级内存。
  • 虚拟线程:1个虚拟线程 ≈ 1KB内存,支持百万级并发。
    适用场景:IO密集型服务(如API网关、爬虫)。

11. 静态类初始化陷阱:静态代码块与构造函数的执行顺序

考察点:类加载机制
示例

 

java

class Parent {  static { System.out.println("Parent静态块"); }  Parent() { System.out.println("Parent构造器"); }  
}  
class Child extends Parent {  static { System.out.println("Child静态块"); }  Child() { System.out.println("Child构造器"); }  
}  
// 输出顺序:Parent静态块 → Child静态块 → Parent构造器 → Child构造器  

12. Optional.orElse()orElseGet()的性能差异

考察点:延迟计算优化
解析

  • ​**orElse()**:无论Optional是否为空,都会执行参数表达式。
  • ​**orElseGet()**:仅在Optional为空时执行Supplier逻辑,适合高开销操作。

13. 方法句柄(MethodHandle)与反射的性能对比

考察点:底层API优化
数据

  • 反射调用:每次调用检查访问权限,性能较差。
  • 方法句柄:JVM内联优化,性能接近直接方法调用(快5-10倍)。
    示例
 

java

MethodHandles.Lookup lookup = MethodHandles.lookup();  
MethodHandle mh = lookup.findVirtual(String.class, "length", MethodType.methodType(int.class));  
int len = (int) mh.invokeExact("test"); // len=4  

14. JNI调用的内存泄漏风险及解决方案

考察点:本地方法安全
风险点

  • 未正确释放NewGlobalRef创建的全局引用。
  • 本地代码中直接修改Java对象未同步回JVM。
    解决:使用try-finally块确保释放资源,或换用JNA/JNR等安全框架。

15. 动态代理在Spring AOP中的性能瓶颈

考察点:代理机制优化
问题:JDK动态代理基于接口,CGLIB基于类,后者生成子类可能导致方法final修饰符冲突。
优化:Spring 5默认使用CGLIB,可通过@EnableAspectJAutoProxy(proxyTargetClass=true)强制使用。


16. 弱引用(WeakReference)在缓存设计中的误用场景

考察点:引用类型特性
陷阱:若缓存键通过弱引用持有,可能被GC提前回收,导致缓存失效。
方案:使用WeakHashMap或搭配ReferenceQueue手动清理。


17. JVM退出时的钩子函数(ShutdownHook)执行限制

考察点:JVM生命周期
规则

  • 钩子函数必须快速执行,超时会被强制终止。
  • 已执行System.exit()后注册的钩子无效。

18. 常量折叠(Constant Folding)对程序逻辑的潜在影响

考察点:编译器优化
示例

 

java

final int a = 1;  
final int b = 2;  
System.out.println(a + b); // 编译时优化为3,字节码中无加法指令  

注意:依赖编译时常量的计算可能隐藏逻辑错误。


19. 伪共享(False Sharing)在并发计数器的解决方案

考察点:CPU缓存优化
问题:多个线程修改同一缓存行的不同变量,导致缓存失效。
解决

 

java

@Contended // JVM参数需加-XX:-RestrictContended  
public class Counter {  public volatile long value1;  public volatile long value2;  
}  

20. Java模块化系统中如何允许第三方库反射访问私有字段?

考察点:模块权限控制
配置:在module-info.java中开放包:

 

java

open module com.example.app {  opens com.example.internal to spring.core; // 对特定模块开放  
}  

风险:过度开放可能导致封装性破坏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VLLM专题(十九)—兼容 OpenAI 的服务器

vLLM 提供了一个 HTTP 服务器,能够实现 OpenAI 的 Completions API、Chat API 等功能! 您可以通过 vllm serve 命令启动服务器,或者通过 Docker 启动: vllm serve NousResearch/Meta-Llama-3-8B-Instruct --dtype auto --api-key token-abc123要调用服务器,您可以使用官…

【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程)

【云原生之kubernetes实战】在k8s环境中高效部署minio对象存储(详细教程) 前言一、minio介绍1.1 MinIO简介1.2 主要特点1.3 主要使用场景二、相关知识介绍2.1 本次实践存储介绍2.2 k8s存储介绍三、本次实践介绍3.1 本次实践简介3.2 本次环境规划3.3 部署前需准备工作四、检查…

【高项】信息系统项目管理师(八)项目质量管理【3分】

项目质最管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求。以满足干系人目标的各个过程。项目质量管理以执行组织的名义支持过程的持续改进活动,项目质量管理需要兼顾项目管理与项目可交付成果两个方面,它适用于所有项目无论项目的可付成果具有何种特性。质…

python-leetcode 48.括号生成

题目&#xff1a; 数字n代表生成括号的对数&#xff0c;设计一个函数&#xff0c;用于生成所有可能并且有效的括号组合。 方法一&#xff1a;回溯 可以生成所有 2**2n 个 ‘(’ 和 ‘)’ 字符构成的序列&#xff0c;然后检查每一个是否有效即可 为了生成所有序列&#xff0c…

TDE透明加密技术:免改造实现华为云ECS中数据库和文件加密存储

在数字经济与云计算深度融合的今天&#xff0c;华为云ECS&#xff08;弹性云服务器&#xff09;已成为企业数字化转型的核心载体&#xff0c;承载着数据库、文件存储、AI训练等关键业务。然而&#xff0c;云上数据安全形势日益严峻&#xff1a;2024年全球云环境勒索攻击同比激增…

3D点云数据处理中的聚类算法总结

1.欧式聚类&#xff1a; 基于点的空间距离&#xff08;欧几里得距离&#xff09;来分割点云&#xff0c;将距离较近的点归为同一簇。 欧式聚类需要的参数&#xff1a;邻域半径R,簇的最小点阈值minPts&#xff0c;最大点数阈值maxPts。 实现效率&#xff1a; O(n * log n) 实现…

PCL--点云可视化

用于单个显示、多个显示的头文件<visual_.h> visual_.h #pragma once #include <iostream> #include <thread> #include <pcl/visualization/pcl_visualizer.h>using namespace std::chrono_literals;/********************************************…

火星探测发展概述2025.3.20

一.火星探测历程 1.1 探索启蒙 火星探测的启蒙阶段可追溯至20世纪60年代,标志着人类对这颗神秘行星的科学探索正式拉开帷幕。这一时期的标志性事件包括: 1960年10月至1964年11月间,苏联和美国进行了6次火星探测尝试,但均以失败告终。 1964年11月28日,美国成功发射“水手…

DAPO:一个开源的大规模大型语言模型LLM强化学习系统

推断扩展赋予了大型语言模型前所未有的推理能力,强化学习作为激发复杂推理的核心技术,清华大学联合字节提出了解耦片段与动态采样策略优化(DAPO)算法,并全面开源了一个最先进的大规模强化学习系统,该系统使用Qwen2.5-32B基础模型在AIME 2024上取得了50分的高分。还开源了…

力扣刷题46. 全排列

46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 使用dfs搜索&#xff0c;查找所有的情况&#xff0c;首先定义所有的链表集合list&#xff0c;在定义每一种情况的链表res&#xff0c;在主函数中遍历所有的初始元素&#xff0c;首先初始化res&#xff0c;并且添加到res中&…

Metasploit Framework(MSF)使用教程与命令详解

Metasploit Framework&#xff08;简称MSF&#xff09;是一款功能强大的开源渗透测试工具&#xff0c;广泛应用于网络安全领域。它集成了大量的漏洞利用模块&#xff08;exploits&#xff09;、辅助模块&#xff08;auxiliary&#xff09;和载荷&#xff08;payloads&#xff0…

【Netty】客户端功能完善

超时控制 public class RequestTimeoutManager {private final HashedWheelTimer timer new HashedWheelTimer();private final ConcurrentMap<Long, Timeout> pendingRequests new ConcurrentHashMap<>();public void addRequest(long requestId, long timeout…

【鸿蒙开发】Hi3861学习笔记- DS18B20温度传感器

00. 目录 文章目录 00. 目录01. DS18B20简介02. DS18B20引脚及电路03. DS18B20内部结构框图04. DS18B20内存映射05. 硬件设计06. 软件设计07. 实验现象08. 附录 01. DS18B20简介 DS18B20 是常用的数字温度传感器&#xff0c;其输出的是数字信号&#xff0c;具有体积小&#xf…

跨境大文件传输如何突破延迟与丢包双重困局

一、行业痛点&#xff1a;跨国传输的挑战 在全球化业务场景中&#xff0c;跨境大文件传输常面临网络延迟高、丢包率频发等问题。传统TCP协议因其“先建联再传输”的机制&#xff0c;在高时延、高丢包环境下效率骤降&#xff0c;导致跨国协作、影视渲染、科研数据共享等场景中传…

uni-app——计时器和界面交互API

API 基本概要 概念说明 API&#xff08;应用程序接口&#xff09;是预先定义的方法集合&#xff0c;用于实现特定功能。在 uni-app 中&#xff0c;通过全局对象 uni 调用 API&#xff0c;例如 uni.getSystemInfoSync 获取设备信息。 API 分类与调用规则 事件监听型 以 on 开…

Dify 升级攻略:从0.15.3迈向1.1.0,元数据管理全攻略!

嘿&#xff0c;小伙伴们&#xff01;今天给大家带来一个超实用的干货分享——Dify从0.15.3升级到1.1.0版本的详细攻略。这次升级不仅带来了功能上的更新&#xff0c;还特别强化了元数据管理。相信很多小伙伴和我一样&#xff0c;一直在使用Dify来提升工作效率&#xff0c;但每次…

15.三数之和-力扣(python)

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1&a…

numpy学习笔记14:模拟随机游走过程

numpy学习笔记14&#xff1a;模拟随机游走过程 随机游走是一种数学统计模型&#xff0c;其中的每一步方向和大小都是随机的。下面使用 NumPy 模拟一维和二维的随机游走过程&#xff1a; 1.代码示例 import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.s…

YOLOv11 目标检测

本文章不再赘述anaconda的下载以及虚拟环境的配置&#xff0c;博主使用的python版本为3.8 1.获取YOLOv11的源工程文件 链接&#xff1a;GitHub - ultralytics/ultralytics: Ultralytics YOLO11 &#x1f680; 直接下载解压 2.需要自己准备的文件 文件结构如下&#xff1a;红…

dijkstra算法——47. 参加科学大会

卡码网:47. 参加科学大会https://kamacoder.com/problempage.php?pid=1047 题目描述 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。 小明的起点是第一个车站,终点是最后一个车站。然而,途中的各个车站之间的道路状况、交通拥堵程度以…