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.pswp.cn/web/72708.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72708.shtml
英文地址,請注明出處:http://en.pswp.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 題目描述 小明是一位科學家,他需要參加一場重要的國際科學大會,以展示自己的最新研究成果。 小明的起點是第一個車站,終點是最后一個車站。然而,途中的各個車站之間的道路狀況、交通擁堵程度以…