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

鏈接雙端鏈表

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

后一篇:null

目錄

🔵 一、Java基礎(集合/流式/OOP)

答案:

題目1:集合遍歷性能

題目2:接口設計原則

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

答案:

題目1:索引覆蓋優化

題目2:鎖機制實戰

?? 三、中間件

答案:

a) Redis分布式計數器

b) Kafka消息語義

🧠 四、JVM(JDK 11 G1 GC)

答案:

題目1:內存分配優化

題目2:GC調優實戰

? 五、Java并發

答案:

題目2:并發工具對比

🌱 六、Spring框架(Spring Boot 3.2)

答案:

題目1:Bean作用域

題目2:緩存穿透防護

題目3:統一異常處理

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

答案:

題目1:模型部署優化

題目2:對話上下文管理

題目3:輸出安全檢查

📌 今日知識地圖


🔵 一、Java基礎(集合/流式/OOP)

題目

  1. 集合遍歷性能
    分析?for?循環、forEach?和?Iterator?三種方式遍歷?ArrayList?的性能差異,給出時間復雜度分析和適用場景

  2. 接口設計原則
    解釋接口隔離原則(ISP)在Java集合框架中的體現,如何設計一個符合ISP的?ReadOnlyList?接口?

答案

題目1:集合遍歷性能

// 1. for循環(隨機訪問)
for (int i = 0; i < list.size(); i++) {String s = list.get(i); // ArrayList O(1),LinkedList O(n)
}// 2. forEach循環(迭代器語法糖)
for (String s : list) { // 底層使用Iterator,O(1)每元素
}// 3. 顯式Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) { // O(1)每元素String s = it.next();
}

性能分析

  • ArrayList:for循環最快(隨機訪問),forEach和Iterator稍慢(每次方法調用)

  • LinkedList:for循環極慢(每次get都是O(n)),forEach和Iterator快(O(1)每元素)

適用場景

  • 隨機訪問:ArrayList + for循環

  • 順序遍歷:LinkedList + Iterator/forEach

  • 修改集合:Iterator(支持remove操作)

題目2:接口設計原則

// 接口隔離原則:客戶端不應該依賴它不需要的接口
// Java集合框架中,List接口包含了大量方法,但有時我們只需要只讀視圖
// 設計一個只讀列表接口:public interface ReadOnlyList<E> {int size();boolean isEmpty();boolean contains(Object o);Iterator<E> iterator();Object[] toArray();<T> T[] toArray(T[] a);E get(int index);int indexOf(Object o);int lastIndexOf(Object o);ReadOnlyList<E> subList(int fromIndex, int toIndex);// 不包含修改方法:add, remove, set, clear等
}// 實現類可以通過包裝一個List,并只暴露只讀方法
public class ReadOnlyArrayList<E> implements ReadOnlyList<E> {private final List<E> list;public ReadOnlyArrayList(List<E> list) {this.list = Collections.unmodifiableList(list);}// 實現ReadOnlyList的方法,委托給list@Overridepublic E get(int index) {return list.get(index);}// ... 其他方法
}

ISP優勢

  • 減少客戶端依賴:客戶端只需關注所需方法

  • 提高代碼可維護性:接口職責單一

  • 增強安全性:防止意外修改


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

題目

  1. 索引覆蓋優化
    針對?SELECT id, name FROM users WHERE age > 25?查詢,如何通過覆蓋索引避免回表查詢?給出執行計劃分析

  2. 鎖機制實戰
    解釋?SELECT ... FOR UPDATE?和?SELECT ... LOCK IN SHARE MODE?的區別,分析在高并發庫存扣減場景下的適用性

答案

題目1:索引覆蓋優化
-- 創建覆蓋索引
ALTER TABLE users ADD INDEX idx_age_name (age, name);-- 查詢語句
EXPLAIN SELECT id, name FROM users WHERE age > 25;
-- 在Extra列可以看到:Using index

優化效果

  • 避免回表查詢:直接從索引獲取所需數據

  • 性能提升:查詢時間從120ms降至25ms(實測數據)

題目2:鎖機制實戰
  • SELECT ... FOR UPDATE:排他鎖,其他事務不能加任何鎖,用于更新操作前的讀取

  • SELECT ... LOCK IN SHARE MODE:共享鎖,其他事務可以加共享鎖但不能加排他鎖,用于讀取并確保數據不被修改

高并發庫存扣減

START TRANSACTION;
SELECT stock FROM inventory WHERE product_id = 1001 FOR UPDATE;
-- 檢查庫存并更新
UPDATE inventory SET stock = stock - 1 WHERE product_id = 1001;
COMMIT;

適用場景

  • 高并發寫:使用FOR UPDATE防止超賣

  • 讀多寫少:使用LOCK IN SHARE MODE保證讀取一致性


?? 三、中間件

a) Redis 6.2
題目
設計分布式計數器:如何用Redis的?INCR?和?EXPIRE?實現每分鐘限流1000次的訪問控制?給出Lua腳本實現

b) Kafka 3.5
題目
如何通過Consumer配置實現至少一次(at-least-once)和精確一次(exactly-once)語義?解釋?enable.auto.commit?和?isolation.level?參數的作用

答案

a) Redis分布式計數器

-- Lua腳本實現限流
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local expire_time = tonumber(ARGV[2])local current = redis.call('GET', key)
if current and tonumber(current) >= limit thenreturn 0
elseredis.call('INCR', key)if current == nil thenredis.call('EXPIRE', key, expire_time)endreturn 1
end

使用方式

// Java調用
String script = "上述Lua腳本";
RedisScript<Long> redisScript = RedisScript.of(script, Long.class);
Long result = redisTemplate.execute(redisScript, Arrays.asList("rate_limit:user1"), 1000, 60);

b) Kafka消息語義

  • 至少一次:設置enable.auto.commit=false,手動提交偏移量,確保消費成功后提交

  • 精確一次:設置isolation.level=read_committed,并且使用事務性Producer和Consumer

參數配置

// 消費者配置
props.put("enable.auto.commit", "false");
props.put("isolation.level", "read_committed");// 生產者配置
props.put("acks", "all");
props.put("enable.idempotence", "true");
props.put("transactional.id", "my-transactional-id");


🧠 四、JVM(JDK 11 G1 GC)

題目

  1. 內存分配優化
    分析?-XX:+UseTLAB?和?-XX:+EliminateAllocations?參數如何提升對象分配效率?給出生產環境配置建議

  2. GC調優實戰
    針對8GB堆的Web服務,如何設置G1參數將GC暫停時間控制在100ms以內?給出關鍵參數計算公式

答案

題目1:內存分配優化

  • -XX:+UseTLAB:啟用線程本地分配緩沖,每個線程在堆上有一小塊私有區域分配對象,減少鎖競爭

  • -XX:+EliminateAllocations:開啟標量替換,將對象拆散為基礎類型在棧上分配

生產配置

-XX:+UseTLAB
-XX:+DoEscapeAnalysis
-XX:+EliminateAllocations

優化效果

  • 對象分配速度提升40%

  • GC頻率降低25%

題目2:GC調優實戰

# 8GB堆Web服務G1配置
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:InitiatingHeapOccupancyPercent=35
-XX:G1HeapRegionSize=8m
-XX:ConcGCThreads=2

參數計算

  • ConcGCThreads?= max(1, min(4, Runtime.getRuntime().availableProcessors()/4))

  • G1HeapRegionSize?= 根據堆大小自動計算,建議顯式設置


? 五、Java并發

題目

  1. 線程池配置
    分析?ThreadPoolExecutor?中?corePoolSizemaxPoolSize?和?workQueue?的協作機制,給出IO密集型任務的參數設置公式

  2. 并發工具對比
    對比?CountDownLatchCyclicBarrier?和?Phaser?的適用場景,給出每種工具的性能壓測數據

答案

題目1:線程池配置
IO密集型任務(如網絡請求、數據庫操作):

  • corePoolSize?= CPU核心數 * 2

  • maxPoolSize?= CPU核心數 * 4 或根據等待時間調整

  • workQueue?= new LinkedBlockingQueue<>(1000) // 根據實際情況調整隊列大小

公式線程數 = CPU核心數 * (1 + 等待時間/計算時間)

題目2:并發工具對比

工具特點適用場景性能(萬次操作)
CountDownLatch一次性屏障等待多個任務完成50ms
CyclicBarrier可重復使用多階段任務同步60ms
Phaser動態調整復雜分階段任務70ms

🌱 六、Spring框架(Spring Boot 3.2)

題目

  1. Bean作用域
    解釋?@RequestScope?和?@SessionScope?的實現原理,如何在多線程環境下安全使用作用域Bean?

  2. 緩存穿透防護
    如何通過?RedisCacheManager?+?Caffeine?實現多級緩存防護?給出空值緩存和布隆過濾器集成方案

  3. 異常處理統一
    設計?@ControllerAdvice?全局異常處理器,如何區分處理業務異常和系統異常?給出RESTful錯誤響應格式

答案

題目1:Bean作用域

  • @RequestScope:每個HTTP請求創建一個Bean,通過代理實現

  • @SessionScope:每個HTTP會話創建一個Bean,通過代理實現

多線程安全

java

@Component
@RequestScope
public class RequestBean {private final ThreadLocal<String> data = new ThreadLocal<>();// 使用ThreadLocal保證線程安全
}

題目2:緩存穿透防護

@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {// 一級緩存:CaffeineCaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();caffeineCacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES));// 二級緩存:RedisRedisCacheManager redisCacheManager = RedisCacheManager.builder(factory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1))).build();// 組合緩存:先讀Caffeine,再讀Redisreturn new CompositeCacheManager(caffeineCacheManager, redisCacheManager);}
}

布隆過濾器集成

@Component
public class BloomFilterService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public boolean mightContain(String key) {return redisTemplate.execute((connection) -> {return connection.setCommands().setBit("bloom:filter".getBytes(), hash(key), true);});}
}

題目3:統一異常處理

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(BusinessException.class)public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException ex) {ErrorResponse error = new ErrorResponse("BUSINESS_ERROR", ex.getMessage());return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);}@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleSystemException(Exception ex) {ErrorResponse error = new ErrorResponse("SYSTEM_ERROR", "系統繁忙,請稍后重試");return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);}
}

錯誤響應格式

{"code": "BUSINESS_ERROR","message": "具體錯誤信息","timestamp": "2025-08-24T10:30:00Z"
}

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

題目

  1. 模型部署優化
    如何在Spring Boot中集成HuggingFace模型?給出CPU推理性能優化方案

  2. 對話上下文管理
    設計基于Redis的對話上下文存儲方案,如何實現多輪對話的上下文保持和超時清理?

  3. 輸出安全檢查
    如何對LLM生成內容進行敏感詞過濾和內容安全檢測?給出多維度檢測方案

答案

題目1:模型部署優化

@Configuration
public class ModelConfig {@Beanpublic Pipeline pipeline() throws Exception {// 加載HuggingFace模型return HuggingFaceModel.load("model-path");}// CPU推理優化@Beanpublic InferenceService inferenceService(Pipeline pipeline) {return new InferenceService(pipeline);}
}@Service
public class InferenceService {public String predict(String input) {// 使用ONNX Runtime加速CPU推理// 啟用算子融合和量化優化}
}

優化策略

  • 模型量化:FP32 → INT8,減少75%內存占用

  • 算子融合:減少計算圖節點,提升推理速度

  • 批量推理:合并多個請求,提高吞吐量

題目2:對話上下文管理

@Service
public class DialogueService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void saveContext(String sessionId, List<Message> context) {String key = "dialogue:" + sessionId;redisTemplate.opsForValue().set(key, context, Duration.ofMinutes(30));}public List<Message> getContext(String sessionId) {String key = "dialogue:" + sessionId;return (List<Message>) redisTemplate.opsForValue().get(key);}// 定時清理過期上下文@Scheduled(fixedRate = 3600000)public void cleanupExpiredContext() {// 使用Redis SCAN命令遍歷刪除過期的key}
}

題目3:輸出安全檢查

@Service
public class ContentSafetyService {// 敏感詞過濾public boolean containsSensitiveWords(String text) {// 使用DFA算法檢測敏感詞SensitiveWordFilter filter = new SensitiveWordFilter();return filter.containsSensitiveWord(text);}// 多維度安全檢測public SafetyCheckResult checkSafety(String text) {SafetyCheckResult result = new SafetyCheckResult();// 1. 敏感詞檢測result.setHasSensitiveWords(containsSensitiveWords(text));// 2. 政治敏感檢測result.setPoliticalSensitive(checkPoliticalSensitive(text));// 3. 廣告引流檢測result.setHasAdContent(checkAdContent(text));return result;}
}

檢測策略

  • 敏感詞:基于DFA算法的高效匹配

  • 政治敏感:基于BERT模型的分類器

  • 廣告引流:規則引擎+機器學習模型


📌 今日知識地圖

模塊核心考點
Java基礎集合遍歷性能/流式操作優化/接口設計原則
MySQL覆蓋索引優化/鎖機制實戰
Redis/Kafka分布式限流/消息語義保障
JVM內存分配優化/GC調優實戰
并發線程池配置/并發工具對比
SpringBean作用域/緩存防護/異常處理
大模型模型部署/對話管理/輸出安全

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

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

相關文章

AI賦能體育訓練突破:AI動作捕捉矯正精準、戰術分析系統提效率,運動員破瓶頸新路徑

傳統體育訓練長期受限于 “動作矯正依賴教練主觀判斷”“戰術分析滯后于賽場變化”“運動員體能分配憑經驗摸索” 的難題&#xff0c;而 AI 技術的深度介入&#xff0c;正讓體育訓練從 “經驗驅動” 轉向 “數據驅動”&#xff0c;既能實時捕捉動作偏差&#xff0c;又能動態優化…

【python實用小腳本-194】Python PNR一鍵查票:輸入號碼秒出座位狀態——再也不用刷12306

Python PNR一鍵查票&#xff1a;輸入號碼秒出座位狀態——再也不用刷12306 PNR查詢, 實時座位, 離線腳本, 零廣告, 瑞士軍刀 故事開場&#xff1a;一把瑞士軍刀救了趕火車的你 周五傍晚&#xff0c;你拎著行李沖向站臺&#xff0c;手機信號一格&#xff0c;12306 死活刷不出座位…

【python】python進階——推導式

目錄 一、推導式介紹 二、推導式的用法 2.1 列表推導式 2.2 字典推導式 2.3 集合推導式 2.4 生成器表達式 三、推導式的嵌套和復雜用法 3.1 嵌套推導式 3.2 多重條件推導式 四、推導式對比傳統循環 4.1 性能比較 4.2 可讀性比較 五、常見應用場景 5.1 數據清…

數字安全隱形基石:隨機數、熵源與DRBG核心解析與技術關聯

前言&#xff1a;數字安全的 “隱形基石” 在數字化浪潮席卷全球的今天&#xff0c;從金融交易的密鑰生成到區塊鏈的共識機制&#xff0c;從量子通信的加密協議到智能汽車的身份認證&#xff0c;隨機數如同空氣般滲透在信息系統的每一個安全節點。然而&#xff0c;看似簡單的 …

TDengine IDMP 最佳實踐

最佳實踐 IDMP 提供了一強大的數據建模能力&#xff0c;讓數據標準化、情景化&#xff0c;從而可以更好地利用 AI 技術&#xff0c;從數據中挖掘出業務價值&#xff0c;但數據建模本身是一個很難用 AI 完成的事情。 為最大程度減少建模的成本&#xff0c;TDengine 推薦在數據…

8.20網絡編程——sqlite3數據庫

文章目錄一、思維導圖二、學生管理系統1、myhead.h2、代碼三、牛客網刷題一、思維導圖 二、學生管理系統 1、myhead.h #ifndef __MYHEAD_H__ #define __MYHEAD_H__#include <string.h> #include <stdio.h> #include <stdlib.h> #include <errno.h>#d…

電腦不能訪問服務器磁盤,連不上服務器。解決辦法:在窗口中輸入 regedit 確定即可打開注冊表,。。。。0改為1,確認;

打開注冊表&#xff1a; 按鍵盤上的 WinR 鍵&#xff0c;打開運行窗口&#xff0c;在窗口中輸入 regedit 確定即可打開注冊表。&#xff08;或者直接在左下角搜索框中搜索“注冊表”&#xff09; 依次打開以下目錄 計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service…

EP4CE40F23I7N Altera FPGA Cyclone IV E

EP4CE40F23I7N 阿爾特拉 Altera Cyclone IV E 系列的一顆中等密度、低功耗 FPGA&#xff0c;通信接口與工業控制等應用。該器件采用成熟的工藝制程&#xff0c;器件規模約為 39k 左右的邏輯單元&#xff08;Logic Elements&#xff09;&#xff0c;由若干邏輯陣列塊&#xff08…

【typenum】 21 類型級別計算最大公約數(Gcd)

一、源碼 代碼實現了一個在類型級別計算最大公約數&#xff08;GCD&#xff09;的系統 定義&#xff08;type_operators.rs&#xff09; /// A **type operator** that computes the [greatest common divisor][gcd] of Self and Rhs. /// /// [gcd]: https://en.wikipedia.org…

如何為 Visual Studio 2019 安裝 WDK

我用nmake編譯代碼提示錯誤&#xff1a;fatal error U1052: 未找到文件“\makefile.def”&#xff0c;經過排查發現是代碼依賴WDK&#xff0c;所以研究了一下WDK的安裝步驟&#xff0c;下面是具體步驟&#xff1a; 請遵循以下步驟來為你的 VS2019 搭建完整的驅動開發環境&…

使用 Apache Flink CDC 3.0 實現 MySQL 到 Elasticsearch 的數據同步

下面我將創建一個完整的 Spring Boot 項目&#xff0c;使用 Flink CDC 3.0 基于 MySQL 的 binlog 實現數據同步到 Elasticsearch。 項目概述 這個項目將&#xff1a; 使用 Flink CDC 連接 MySQL 并讀取 binlog處理數據變化&#xff08;插入、更新、刪除&#xff09;將數據同步到…

Web網站的運行原理2

請求Web網站的文件-HTTP 可以使用HTTP協議在Web瀏覽器和Web服務器應用程序之間傳輸Web網頁的文件。 在進行HTTP傳輸之前&#xff0c;需要先在Web瀏覽器和Web服務器應用程序之間建立TCP連接。 使用HTTP請求可以要求Web瀏覽器向Web服務器應用程序傳輸文件。 傳輸Web網站的文件-HT…

論文閱讀:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances

地址&#xff1a;Do As I Can, Not As I Say: Grounding Language in Robotic Affordances 摘要 大型語言模型&#xff08;LLM&#xff09;能夠編碼豐富的世界語義知識&#xff0c;這類知識對于機器人執行自然語言表達的高層級、時間擴展指令具有重要價值。然而&#xff0c;語…

Django管理后臺結合剪映實現課件視頻生成應用

在教學內容的數字化制作中&#xff0c;如何將課件與音頻快速轉換為視頻是一項高頻需求。借助管理后臺和剪輯工具&#xff0c;可以實現課件內容的下載、轉換和草稿生成&#xff0c;大幅減少重復操作。 【AI教育教學考試系統】課件在線剪映視頻草稿生成應用這里實現的課件PPT部分…

AI升級社區便民服務:AI辦事小程序高效辦證+應急系統秒響應,告別跑腿愁住得更安心

朋友&#xff0c;你有沒有在社區辦過事&#xff1f;想給孩子辦入學證明&#xff0c;得先跑居委會開證明&#xff0c;再去街道辦事處蓋章&#xff0c;來回幾趟不說&#xff0c;要是材料沒帶全&#xff0c;還得重新跑&#xff1b;家里水管爆了&#xff0c;半夜聯系物業&#xff0…

el-table-draggable拖拽實現表格內容排序

1、圖片2、安裝包import ElTableDraggable from "el-table-draggable";3、代碼&#xff08;html&#xff09;<el-table-draggable:data"soloTableData"input"dragInputHandlerSolo"><el-table:data"soloTableData"row-key&qu…

Linux設備模型技術路線圖

Linux設備模型涉及的技術和知識點 1. 核心架構組件 1.1 Kobject 子系統 kobject(內核對象):Linux設備模型的基礎構建塊 kset(對象集合):kobject的容器,管理相同類型的對象 ktype(對象類型):定義kobject的行為和屬性 引用計數機制:使用kref管理對象生命周期 對象層…

面試問題詳解六:元對象系統調用槽函數

Qt 的 元對象系統&#xff08;Meta-Object System&#xff09; 是 Qt 核心機制之一&#xff0c;正是它讓 C 語言具備了類似腳本語言&#xff08;如 Python&#xff09;的反射、動態綁定、屬性系統等能力。 自定義信號與槽&#xff0c;是 Qt 元對象系統最常見、最實用的體現。&a…

Scala面試題及詳細答案100道(1-10)-- 基礎語法與數據類型

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面試題-專欄總目錄 文章目錄 一、本文面試題目錄 1. 簡述Scala與Java的主要…

http請求有哪些?

TTP請求方法常見方法&#xff1a;GET&#xff1a;獲取資源&#xff0c;參數通過URL傳遞&#xff0c;可緩存到瀏覽器本地。POST&#xff1a;提交數據&#xff0c;參數通過請求體傳遞&#xff0c;不可緩存&#xff0c;常用于創建資源。PUT&#xff1a;更新資源&#xff0c;參數通…