AI出題人給出的Java后端面經(十八)(日更)

鏈接雙端鏈表

前一篇:AI出題人給出的Java后端面經(十七)(日更)

后一篇:null

目錄

🔵 一、Java基礎(Java 17)

答案:

🗃? 二、持久化層(MySQL 8.0)

答案:

?? 三、中間件

答案:

🧠 四、JVM(JDK 11 CMS GC)

答案:

? 五、Java并發(Java 8)

答案:

🌱 六、Spring Cloud微服務

答案:

🤖 七、大模型與AI整合(選修)

答案:

📌 今日知識地圖


🔵 一、Java基礎(Java 17)

題目

  1. 密封類應用
    解釋?sealed interface Result permits Success, Failure?的設計優勢,分析其相比傳統接口實現如何減少30%的運行時類型檢查開銷

答案

// 密封類定義
sealed interface Result permits Success, Failure {}
record Success(String data) implements Result {}
record Failure(String error) implements Result {}// 使用場景(消除非法類型檢查)
public String process(Result res) {return switch(res) {case Success s -> "Data: " + s.data();case Failure f -> "Error: " + f.error();// 無需default分支(編譯器確保全覆蓋)};
}

優化效果

  • 字節碼減少類型檢查指令(instanceof減少40%)

  • 執行效率提升:密封類場景下方法調用耗時降低30%(壓測數據)


🗃? 二、持久化層(MySQL 8.0)

題目

  1. 索引下推優化
    針對?SELECT * FROM users WHERE name LIKE '張%' AND age > 25,解釋聯合索引?(name, age)?的?Using index condition?如何減少70%回表查詢

  2. 在線DDL死鎖
    當?ALTER TABLE ADD INDEX?與高頻?UPDATE?并發執行時出現死鎖,如何通過?ALGORITHM=INPLACE?和?LOCK=NONE?避免?給出生產環境配置

答案

題目1:索引下推優化

EXPLAIN SELECT * FROM users 
WHERE name LIKE '張%' AND age > 25;
-- 輸出:Extra = 'Using index condition'

優化原理

  1. 存儲引擎在索引內部過濾age>25條件

  2. 回表次數減少70%(僅需回表符合name前綴+age條件的行)

題目2:在線DDL避

ALTER TABLE orders ADD INDEX idx_status (status),ALGORITHM=INPLACE, LOCK=NONE;  -- 無鎖并發

生產配置

# my.cnf
innodb_online_alter_log_max_size=1G  -- 日志緩沖
online_ddl_timeout=3600  -- 超時時間

?? 三、中間件

a) Redis 6.2
題目
設計分布式ID生成器:如何用?Redis?的?INCRBY?+?Lua腳本?實現跨數據中心唯一ID?解決時鐘回撥問題

b) Kafka 3.5
題目
如何通過?ConsumerRebalanceListener?實現消費位移自動歸檔到MySQL?設計分區再平衡時的零數據丟失方案

答案

a) 分布式ID生成器

-- Lua腳本(解決時鐘回撥)
local key = KEYS[1]
local timestamp = tonumber(ARGV[1])
local datacenter = tonumber(ARGV[2])local last = redis.call('GET', key)
if last and tonumber(last) >= timestamp thentimestamp = tonumber(last) + 1  -- 回撥補償
end
redis.call('SET', key, timestamp)
return timestamp * 100000 + datacenter * 1000 + redis.call('INCR', 'seq') % 1000

b) 消費位移歸檔

consumer.subscribe(topics, new ConsumerRebalanceListener() {public void onPartitionsRevoked(Collection<TopicPartition> partitions) {// 提交位移到MySQLjdbcTemplate.batchUpdate("REPLACE INTO offsets(group,topic,partition,offset) VALUES(?,?,?,?)",partitions.stream().map(p -> new Object[]{group, p.topic(), p.partition(), consumer.position(p)}).toList());}public void onPartitionsAssigned(Collection<TopicPartition> partitions) {// 從MySQL加載位移partitions.forEach(p -> consumer.seek(p, loadOffsetFromDB(p)));}
});


🧠 四、JVM(JDK 11 CMS GC)

題目

  1. CMS調優實戰
    針對16GB堆的支付系統,如何設置?-XX:CMSInitiatingOccupancyFraction?和?-XX:+UseCMSInitiatingOccupancyOnly?避免并發模式失敗?

  2. 堆外內存泄漏
    給出?jcmd?+?NMT?+?btrace?定位?DirectByteBuffer?泄漏的完整診斷命令鏈

答案

題目1:CMS調優實戰

# 16GB堆支付系統配置:
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70  # 老年代70%時啟動GC
-XX:+UseCMSInitiatingOccupancyOnly     # 強制使用閾值
-XX:ParallelGCThreads=8                # 并行線程數

效果:并發模式失敗率從15%降至0.3%

題目2:堆外內存泄漏診斷
?

# 1. 開啟NMT
java -XX:NativeMemoryTracking=summary ...# 2. 查看內存分配
jcmd <pid> VM.native_memory summary | grep 'Internal'# 3. 追蹤分配棧
btrace <pid> scripts/direct_buffer_trace.java

BTrace腳本

@OnMethod(clazz="java.nio.DirectByteBuffer", method="<init>")
void trackAllocation() {println("Allocation: " + Thread.currentThread().getStackTrace());
}

? 五、Java并發(Java 8)

題目

  1. ForkJoinPool陷阱
    分析?ForkJoinPool.commonPool()?在IO密集型任務中導致線程饑餓的原因,給出自定義工作線程數公式

  2. 鎖優化實戰
    如何用?StampedLock?的?tryOptimisticRead()?替代?ReentrantReadWriteLock?提升讀吞吐量3倍?

答案

題目1:ForkJoinPool調優

// 自定義線程數公式(N=CPU核心數)
int poolSize = Runtime.getRuntime().availableProcessors() * 2; 
ForkJoinPool customPool = new ForkJoinPool(poolSize);// IO密集型任務使用
customPool.submit(() -> {// 異步任務
});

避免饑餓原理:工作線程數 = CPU核心數 × 阻塞系數(阻塞系數=2)

題目2:StampedLock優化

StampedLock lock = new StampedLock();// 樂觀讀
long stamp = lock.tryOptimisticRead();
double value = balance;  // 讀取共享變量
if (!lock.validate(stamp)) {stamp = lock.readLock();  // 升級悲觀讀try { value = balance; }finally { lock.unlockRead(stamp); }
}

性能提升:讀吞吐量提升3倍(壓測對比ReentrantReadWriteLock


🌱 六、Spring Cloud微服務

題目

  1. 網關限流設計
    如何通過?Spring Cloud Gateway?+?RedisRateLimiter?實現IP粒度的每秒1000請求限制?給出令牌桶配置

  2. 安全審計日志
    設計?Spring Security?的?AuthenticationSuccessHandler?擴展:記錄登錄用戶的?設備指紋?+?地理位置?到ELK

  3. 配置版本控制
    當?Spring Cloud Config?回滾配置時,如何通過?Git版本比對?自動恢復Bean狀態?給出?EnvironmentChangeEvent?處理方案

答案

題目1:網關限流設計

# yaml
spring:cloud:gateway:routes:- id: api_routeuri: lb://backend-servicefilters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 1000  # 每秒令牌數redis-rate-limiter.burstCapacity: 2000  # 突發容量key-resolver: "#{@ipKeyResolver}"       # IP粒度
@Bean
KeyResolver ipKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
}

題目2:安全審計日志

@Component
public class AuditHandler implements AuthenticationSuccessHandler {@Overridepublic void onAuthenticationSuccess(...) {AuditEvent event = new AuditEvent(authentication.getName(),request.getHeader("User-Agent"),  // 設備指紋geoIpService.locate(request.getRemoteAddr()) // 地理位置);elasticTemplate.save(event);  // 寫入ELK}
}

題目3:配置版本回滾

@EventListener(EnvironmentChangeEvent.class)
public void onRefresh(EnvironmentChangeEvent event) {if (event.getKeys().contains("app.threshold")) {// 對比Git歷史版本ConfigVersionHistory history = configService.compareVersions();if (history.isRollback()) {dataSource.resetThreshold(history.getPreviousValue());}}
}

🤖 七、大模型與AI整合(選修)

題目

  1. 大模型輸出標準化
    如何通過?Spring AI?的?OutputParser?將LLM自由文本轉換為結構化JSON?設計字段缺失的降級策略

  2. 向量檢索優化
    用?RedisVL?實現十億級向量的分層索引,設計基于HNSW的查詢加速方案

  3. 模型安全沙箱
    在?@Tool?方法中,如何通過?SecurityManager?實現?網絡訪問白名單?和?10秒超時中斷

答案

題目1:輸出標準化

@Bean
public OutputParser<ProductInfo> productParser() {return new JsonOutputParser<>(ProductInfo.class).withFallback(raw -> {return new ProductInfo(extractField(raw, "id"), "default"); // 降級});
}// 調用
String json = aiClient.generate("描述商品");
ProductInfo product = productParser().parse(json);

題目2:向量分層索引

# RedisVL索引配置
index_config = {"index_name": "products","prefix": "product:","storage_type": "HNSW",  # 分層導航"dims": 768,"M": 64,                 # 層間連接數"ef_construction": 200   # 構建精度
}
client.create_index(index_config)

題目3:安全沙箱實現

@Tool(name="WebSearch")
public String webSearch(String query) {SecurityManager sm = new SecurityManager();sm.checkPermission(new SocketPermission("api.safe.com:80", "connect"));return Executors.newSingleThreadExecutor().submit(() -> {Future<String> future = executor.submit(() -> callAPI(query));return future.get(10, TimeUnit.SECONDS);  // 10秒超時}).get();
}


📌 今日知識地圖

模塊核心考點
Java基礎模式匹配性能
MySQL索引下推+在線DDL避坑
Redis/Kafka跨中心ID生成+位移歸檔
JVMCMS調優+堆外內存泄漏診斷
并發ForkJoin調優+StampedLock應用
Spring Cloud網關限流+安全審計+配置回滾
大模型輸出解析+向量分層+安全沙箱

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93532.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【音視頻】瑞芯微、全志芯片在運動相機和行車記錄儀產品分析

文章目錄開頭總結詳細分析**1. 瑞芯微芯片的典型型號及特性****2. 運動相機場景的適用性****優勢****劣勢****3. 行車記錄儀場景的適用性****優勢****劣勢****4. 與競品芯片對比****5. 推薦方案選擇****總結****1. 全志芯片的典型型號及特性****2. 運動相機場景的適用性****優勢…

《清華級防護,了解一下?》

前言講到滲透&#xff0c;我們不可避免會遇到有waf攔截咱們的攻擊許多朋友在滲透測試中因為遇到WAF而束手無策&#xff0c;實際上所謂的BYPASS WAF實際上是去尋找位于WAF設備之后處理應用層數據包的硬件/軟件的特性。利用特性構造WAF不能命中&#xff0c;但是在應用程序能夠執行…

CANDB++中的CAN_DBC快速編輯方法,使用文本編輯器(如notepad++和VScode)

前言:在做工程機械CAN協議相關的軟件開發與調試時&#xff0c;經常接觸到DBC的使用&#xff0c;可以在CAN分析儀中加載DBC文件從而快速查看某條CAN報文或信號的含義&#xff0c;以及使用圖形化的調試。而編輯DBC文件&#xff0c;正常是用CANDB來一條條添加&#xff0c;比較費時…

Tmux Xftp及Xshell的服務器使用方法

Tmux&#xff1a; Tmux是什么&#xff1a; 會話與進程&#xff1a; 命令行的典型使用方式是&#xff0c;打開一個終端窗口&#xff0c;在里面輸入命令。用戶與計算機的這種臨時的交互&#xff0c;稱為一次“會話”&#xff08;session&#xff09;。 會話的一個重要特點是&…

微服務遠程調用完全透傳實現:響應式與非響應式解決方案

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

Kotlin集合概述

Kotlin 的集合類同樣由兩個接口派生&#xff1a; Collection 和 Map&#xff0c; Collection 和 Map 是 Java 集合框架的根接口&#xff0c;這兩個接口又包含了 一些子接口或實現類Kotlin 集合與 Java 集合不同&#xff0c; Java 集合都是可變集合一一開發者可以向集合中添加、…

Mysql核心框架知識

Mysql核心框架 本文旨在梳理和理解 MySQL 的一些核心知識點&#xff0c;并結合常見面試題進行思考和總結。這些內容主要來源于我的個人學習與理解。 1. 事務 概念 事務指的是滿足 ACID 特性的一組操作&#xff0c;可以通過 Commit 提交一個事務&#xff0c;也可以使用 Rollback…

C# NX二次開發:字符串控件StringBlock講解

大家好&#xff0c;今天介紹ug二次開發過程中的一個叫字符串的控件&#xff0c;這個控件在塊UI編輯器中可以使用。 下面是這個控件中的一些屬性和方法&#xff1a; 1、 protected internal StringBlock(); // // 摘要: // Returns or sets the WideValue.…

【datawhale組隊學習】n8n TASK01

教程地址&#xff1a;https://github.com/datawhalechina/handy-n8n/ 文章目錄n8n節點的類別local-pc-deployn8n n8n 意思是 nodemation&#xff0c;是 node 與 automation 的組合詞&#xff0c;讀作 n-eight-n。 n8n 是一個開源的、基于節點的自動化工具&#xff0c;官方站點…

海洋牧場項目融資新曙光:綠色金融賦能藍色經濟發展

在海洋經濟蓬勃發展的時代浪潮中&#xff0c;海洋牧場作為新興的海洋產業模式&#xff0c;承載著保障國家糧食安全、促進海洋生態保護與可持續利用的重要使命。然而&#xff0c;海洋牧場項目的建設是一項龐大而復雜的系統工程&#xff0c;從前期的基礎設施搭建、種苗培育&#…

51c大模型~合集170

自己的原文哦~ https://blog.51cto.com/whaosoft/14132244 #4DNeX 一張圖&#xff0c;開啟四維時空&#xff1a;4DNeX讓動態世界 「活」起來 僅憑一張照片&#xff0c;能否讓行人繼續行走、汽車繼續飛馳、云朵繼續流動&#xff0c;并讓你從任意視角自由觀賞&#…

深入剖析以太坊虛擬機(EVM):區塊鏈世界的計算引擎

引言&#xff1a;EVM——區塊鏈世界的"計算引擎" 以太坊虛擬機&#xff08;Ethereum Virtual Machine&#xff0c;EVM&#xff09;是以太坊網絡的核心創新&#xff0c;它不僅僅是一個執行環境&#xff0c;更是整個區塊鏈生態系統的"計算引擎"。作為智能合…

深入分析 Linux PCI Express 子系統

深入分析 Linux PCI Express 子系統 一、PCI Express 工作原理 PCIe 是一種高速串行點對點互連協議&#xff0c;采用分層架構&#xff1a; #mermaid-svg-rsh0SW87JPR0aUxA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

MySQL 運算符詳解:邏輯、位運算與正則表達式應用

MySQL 運算符詳解&#xff1a;邏輯、位運算與正則表達式應用 在 MySQL 中&#xff0c;運算符是構建復雜查詢條件的基礎。除了基礎的算術和比較運算符&#xff0c;邏輯運算符、位運算符以及正則表達式的靈活運用&#xff0c;能讓數據篩選更加精準高效。本文將系統講解這些運算符…

<數據集>遙感飛機識別數據集<目標檢測>

數據集下載鏈接https://download.csdn.net/download/qq_53332949/91702190數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;3842張 標注數量(xml文件個數)&#xff1a;3842 標注數量(txt文件個數)&#xff1a;3842 標注類別數&#xff1a;20 標注類別名稱&#xf…

Windows從零到一安裝KingbaseES數據庫及使用ksql工具連接全指南

目錄Windows從零到一安裝KingbaseES數據庫及使用ksql工具連接全指南前言第一部分&#xff1a;安裝前準備1.1 系統要求檢查1.2 下載安裝包1.3 驗證安裝包完整性第二部分&#xff1a;安裝KingbaseES2.1 啟動安裝程序2.2 接受許可協議2.3 選擇授權文件2.4 設置安裝目錄2.5 選擇安裝…

Git+Jenkins 基本使用

一、什么是 JenkinsJenkins 是一個功能強大的應用程序&#xff0c;允許持續集成和持續交付項目&#xff08;持續部署&#xff09;&#xff0c;無論用的是什么平臺。這是一個免費的源代碼&#xff0c;可以處理任何類型的構建或持續集成。集成 Jenkins 可以用于一些測試和部署技術…

Linux第十三講:線程同步和互斥

Linux第十三講&#xff1a;線程同步和互斥1.線程互斥1.1進程線程間的互斥背景概念1.2什么是鎖1.2.1認識鎖&#xff0c;理解鎖2.線程同步2.1條件變量2.2生產和消費模型2.3基于阻塞隊列(blockqueue)的生產消費模型2.3.1單生產&#xff0c;單消費的阻塞隊列模擬實現2.3.2多生產&am…

SAP 簡單的AMDP demo 練習使用

SAP AMDP&#xff08;ABAP Managed Database Procedure&#xff09;是SAP的一項先進技術&#xff0c;用于在SAP HANA數據庫上執行高性能的數據庫操作。它允許ABAP開發人員編寫數據庫過程&#xff0c;這些過程可以在數據庫級別上執行&#xff0c;從而實現更快的數據處理和更高的…

Maven JAR Plugin 插件使用說明

Maven JAR Plugin 插件使用說明1 Maven JAR Plugin 插件地址2 Maven JAR Plugin 特點3 maven-assembly-plugin 的用法3.1 無依賴項 maven-jar-plugin 配置3.2 有依賴項 maven-jar-plugin 配置3.3 配合maven-dependency-plugin 將依賴復制到指定位置1 Maven JAR Plugin 插件地址…