突擊復習清單(高頻核心考點)

  1. 🔒 鎖的作用與使用(synchronized vs ReentrantLock)
    面試官為什么問:考察你對并發編程基礎的掌握程度。

速記答案:

作用:保證線程安全,解決多線程環境下對共享資源訪問的數據不一致問題。

synchronized:JVM關鍵字,是悲觀鎖。用法:

修飾實例方法:鎖是當前實例對象 (this)

修飾靜態方法:鎖是當前類的Class對象

修飾代碼塊:鎖是synchronized括號里配置的對象

ReentrantLock:JDK類,也是悲觀鎖。比synchronized更靈活:

必須手動加鎖(lock())和解鎖(unlock()),通常放在finally塊中保證必然解鎖。

可以嘗試非阻塞獲取鎖 (tryLock())

可以設置公平鎖(先等待的線程先獲得鎖)

可以綁定多個條件變量 (Condition),實現分組喚醒線程

對比總結:

特性 synchronized ReentrantLock
實現 JVM層面,關鍵字 JDK層面,API
鎖釋放 自動釋放 必須手動unlock()
靈活性 不靈活 靈活(可嘗試、可公平、可中斷)
性能 1.6后優化得很好,兩者差不多 兩者差不多
面試時這么說:”鎖的核心作用是保證線程安全。synchronized最簡單,JVM自動管理。但如果需要嘗試獲取鎖、公平鎖或者更復雜的線程協作,就用ReentrantLock。“

  1. ?? Spring Cloud 服務注冊與發現
    面試官為什么問:考察你對微服務核心原理的理解。

速記答案:

服務注冊:服務提供者(如user-service)啟動時,把自己的網絡地址(IP、端口)注冊到注冊中心(如Eureka、Nacos)。

服務發現:服務消費者(如order-service)要調用user-service時,不去寫死地址,而是去注冊中心查找user-service的可用地址列表,然后再調用。

核心組件:

Eureka Server:注冊中心,一個獨立的服務。

Eureka Client:集成到每個微服務中,負責注冊和發現。

好處:服務動態上下線,消費者無需硬編碼地址,實現了服務解耦。

面試時這么說:”就像酒店的前臺。服務提供者就是客房,入住時在前臺登記(注冊)。服務消費者就是客人,需要找客房時先去前臺問房間號(發現),然后再過去。注冊中心(Eureka/Nacos)就是那個前臺。“

  1. 🍃 Spring Boot 中如何使用鎖?
    面試官為什么問:考察你是否能在實際項目中應用并發知識。

速記答案:

在Spring Boot中,鎖的使用和普通Java應用一樣,但更要注意單例Bean的線程安全問題。

方法1:synchronized

java
@Service
public class UserService {
public synchronized void businessMethod() {
// 業務代碼,同一時間只有一個線程能進入
}
}
方法2:ReentrantLock (更推薦,更靈活)

java
@Service
public class UserService {
// 定義鎖對象
private final ReentrantLock lock = new ReentrantLock();

public void businessMethod() {lock.lock(); // 加鎖try {// 業務代碼} finally {lock.unlock(); // 解鎖必須放在finally塊中}
}

}
面試時這么說:”Spring Boot里用鎖和普通Java一樣。但因為它的Bean默認是單例的,所以高并發下成員變量會有線程安全問題,必須加鎖。我一般用ReentrantLock,因為控制起來更靈活。“

  1. 🏗? 微服務設計思路
    面試官為什么問:考察你的系統架構能力和全局觀。

速記答案(按模塊說):

服務拆分:按業務領域拆分(如用戶、訂單、商品服務),做到單一職責,避免臃腫。

服務治理:

注冊與發現:用Nacos或Eureka。

配置管理:用Nacos Config,統一管理配置,動態刷新。

服務調用:用OpenFeign,聲明式HTTP客戶端,像調用本地方法一樣調用遠程服務。

負載均衡:用Ribbon或LoadBalancer,實現服務調用的負載均衡。

容錯保護:用Sentinel或Hystrix,實現熔斷、降級、限流,防止服務雪崩。

網關:用Spring Cloud Gateway,統一入口,負責路由、鑒權、日志、監控等。

鏈路追蹤:用SkyWalking或Zipkin,解決微服務調用鏈路過長,難以排查問題的問題。

面試時這么說:”我的設計思路是:先按業務模塊垂直拆分服務。然后通過注冊中心解決服務發現問題;用OpenFeign做聲明式調用;用Sentinel做熔斷降級保護下游服務;最后用API網關作為統一的流量入口。“

  1. 📊 SQL索引避免失效
    面試官為什么問:考察你的SQL優化實戰能力,這是性能調優的基礎。

速記答案(記住失效場景就等于知道如何避免):
失效場景:

最左前綴原則:聯合索引(a, b, c),查詢條件沒用到a,索引失效。

在索引列上計算或函數操作:WHERE YEAR(create_time) = 2023,WHERE amount * 2 > 100。

類型轉換:字符串字段varchar,用數字去查:WHERE code = 123(應改為WHERE code = ‘123’)。

Like以%開頭:WHERE name LIKE ‘%張’。

使用OR:如果OR前后的條件列不是都有索引,則索引可能失效。

面試時這么說:”要避免索引失效,最重要的是遵守最左前綴原則。另外,要避免對索引列做計算、函數操作、類型轉換,以及避免使用前導百分號的LIKE查詢和隨意的OR連接。“

  1. 🧠 JVM內存模型(運行時數據區)
    面試官為什么問:考察你對Java程序運行底層的理解,這是調優的基礎。

速記答案(記住圖就行):
線程私有的:

程序計數器:記錄當前線程執行到的字節碼行號。

虛擬機棧:存儲方法調用的棧幀,包含局部變量表、操作數棧等。StackOverflowError出自這里。

本地方法棧:為Native方法服務。

線程共享的:

堆:存放對象實例和數組,是垃圾回收的主要區域。OutOfMemoryError常在這里發生。分為新生代和老年代。

方法區:存儲類信息、常量、靜態變量。JDK8后叫元空間(Metaspace),使用本地內存。

面試時這么說:”JVM內存分線程共享和私有兩大塊。每個線程有自己的棧和程序計數器,用來執行方法。所有線程共享一個堆和方法區,堆里放對象,是GC的主戰場;方法區放類的元信息。“

  1. 🐞 代碼出錯如何排查定位?
    面試官為什么問:考察你的實際運維和問題解決能力,這是經驗的體現。

速記答案:

看日志:第一反應是查看應用日志和系統日志,95%的問題都能從這里找到線索。

CPU飆升:

top -> top -Hp [pid] 找到耗CPU的線程ID。

將線程ID轉16進制:printf “%x\n” [tid]。

jstack [pid] | grep -A 20 [十六進制tid] 查看該線程的堆棧信息,定位問題代碼。

內存溢出(OOM):

在啟動參數中添加-XX:+HeapDumpOnOutOfMemoryError,讓JVM在OOM時自動導出堆轉儲文件。

使用MAT或JVisualVM工具分析這個dump文件,找到是哪個對象占用了大量內存,以及是誰在引用它(GC Roots鏈)。

死鎖:

用jstack [pid]命令,查看輸出最后,如果有死鎖,JVM會明確告訴你。

面試時這么說:”我首先會查看日志。如果是CPU問題,我用top和jstack命令定位到具體線程和代碼行。如果是內存OOM,我會讓JVM自動導出heap dump,然后用MAT工具分析,找到泄漏對象。如果是死鎖,jstack命令能直接檢測出來。“

  1. 🔄 MQ如何避免重復消費?
    面試官為什么問:考察你對消息隊列可靠性的理解。

速記答案:

原因:網絡抖動、消費者重啟等導致MQ沒有收到確認,從而重發消息。

核心:解決之道不是防止重復,而是保證業務的冪等性(多次執行結果一致)。

方案:

數據庫唯一鍵:利用DB主鍵或唯一約束,插入成功才消費,重復插入會報錯。

Redis原子操作:用SETNX [消息ID]命令,設置成功才消費。

樂觀鎖:給數據加版本號version,更新時帶版本條件:update … set … where id=xxx and version=xxx。

面試時這么說:”重復消費無法完全避免,所以關鍵是做冪等設計。我最常用的方案是利用數據庫唯一鍵,收到消息后先嘗試insert一條記錄,如果重復則直接放棄,這樣就保證了只會被處理一次。“

  1. 🔐 分布式鎖怎么搞?
    面試官為什么問:考察你解決分布式環境下資源爭搶的能力。

速記答案:

基于Redis:

SET lock_key unique_value NX PX 30000:NX表示僅當不存在時設置,PX設置超時時間(防死鎖),unique_value(如UUID)用于安全釋放鎖。

優點:性能高。

缺點:主從切換時可能丟鎖(AP模型)。

基于ZooKeeper:

創建臨時有序節點,最小的節點獲鎖。監聽前一個節點,它釋放了你就獲得鎖。

優點:強一致性,可靠(CP模型)。臨時節點在客戶端斷開后自動刪除,避免死鎖。

缺點:性能比Redis差。

選型:要性能選Redis,要絕對可靠選ZooKeeper。常用框架:Redisson(Redis)、Curator(ZK)。

面試時這么說:”分布式鎖主要有兩種實現。Redis方案性能好,但理論上有極低概率失效。ZooKeeper方案可靠性高,但性能稍差。根據業務的容忍度來選擇,比如秒殺用Redis,金融交易用ZooKeeper。在實際項目中,我們直接用Redisson這個框架,它封裝得很好用。“

💡 面試技巧 & 最后鼓勵
別怕“忘了”:面試時如果突然忘了,可以說:“這塊細節我有點記不清了,我的理解是…”然后嘗試把你知道的核心概念講出來,這比完全沉默要好得多。

引導到你熟悉的項目:盡量把問題引到你做過的項目上。“這個知識點在我之前做XX項目的時候用到過,當時我們是…”這樣更有說服力。

展現思考過程:對于設計題,面試官更看重你的思路。即使最終方案不完美,把你思考的步驟和權衡的因素說出來,也是大大的加分項。

朋友,別因為一次面試否定自己。你已經有5年經驗,這些知識肯定都接觸過,只是暫時被埋沒了。把這些核心要點和關鍵詞記住,下次面試時就能迅速提取出來。

你不是不會,只是需要一點提示來喚醒記憶! 祝你下次面試一舉成功!

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

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

相關文章

2025年視頻大模型匯總、各自優勢及視頻大模型競爭焦點

文章目錄一、國際主流視頻大模型1. OpenAI Sora Turbo2. Google Veo 33. Runway Gen-3 Alpha二、國內主流視頻大模型1. 快手可靈AI2. 愛詩科技PixVerse V33. 阿里巴巴通義萬相2.14. 生數科技Vidu Q15. 字節跳動即夢AI三、核心趨勢與競爭焦點一、國際主流視頻大模型 1. OpenAI …

Android - 用Scrcpy 將手機投屏到Windows電腦上

工作生活當中,常常需要操作手機,但是用手操作顯然不如用鍵盤快。 再一個,你看視頻的時候,想做一些筆記,那你也得截個圖啦之類的, 那如果直接在電腦上能看也是非常方便的,這都需要投屏手機到電…

AlmaLinux 上 Python 3.6 切換到 Python 3.11

在 AlmaLinux 上將默認的 Python 3.6 升級或切換到 Python 3.11 是一個常見的需求。請注意,直接替換系統自帶的 Python 3.6 是非常危險的,因為許多系統工具(如 yum/dnf 包管理器)都依賴于它,盲目刪除或修改可能會導致系…

基于RBF-GA的鋁/鎂異材FSLW工藝參數優化研究

課題:基于RBF-GA的鋁/鎂異材FSLW工藝參數優化研究 1. 引言 (Introduction) 研究背景與意義: 輕量化需求:鋁(Al)和鎂(Mg)合金是航空航天、新能源汽車等領域實現輕量化的關鍵材料。實現二者的可靠…

【Prometheus】Prometheus監控Docker實戰

👻創作者:丶重明 👻創作時間:2025年8月23日 👻擅長領域:運維 目錄前言什么是Prometheus和cAdvisorPrometheuscAdvisor部署操作部署cAdvisor部署Prometheus指標說明cpu相關指標內存相關指標磁盤相關指標網絡…

2.7 提示詞調優編碼實戰(二)

目錄 四,提示詞模版優化 - 格式化 4.1 代碼示例 4.2 任務描述 4.3 模型輸出格式化 4.4 用戶輸入 4.5 輸出結果 四,提示詞模版優化 - 格式化 在簡單提示詞的基礎上,我們對提示詞模版中各部分進行格式化。包括任務描述增加了相應的字段。 同時對輸出增加了更多的定義和…

Kafka如何保證「消息不丟失」,「順序傳輸」,「不重復消費」,以及為什么會發生重平衡(reblanace)

前言 上一篇文章總結了kafka為什么快,下面來總結一下,kafka高頻的常見的問題。內容有點多,全部看完需要有一定的耐心。 kafka如何保證消息不丟失 Producer端 要保證消息不丟失,第一點要做的就是要保證消息從producer端發送到了…

原子操作匯編實現:原理、流程與代碼解析

🔬 原子操作匯編實現:原理、流程與代碼解析 引用:VC/C Intel x86 內聯匯編實現 “Interlocked” 原子變量各種操作 🌟 引言:原子操作的重要性 在多線程編程中,原子操作是確保數據一致性的關鍵機制。本文…

【WRF理論第十九期】內陸湖泊、水體的處理方式

目錄 WRF 模型中湖泊模擬概述 湖泊模型(Lake Model)集成 新增湖泊數據支持(如 WUDAPT + MODIS) LAKE_DEPTH Noah-MP + 湖泊模型聯合使用 namelist.input 配置說明 WRF 代碼更新 參考 論壇-WRF 湖泊模型(WRF-Lake model)與 SST 更新 WRF 模型中湖泊模擬概述 湖泊模型(La…

【滲透測試】SQLmap實戰:一鍵獲取MySQL數據庫權限

注:所有技術僅用于合法安全測試與防御研究,未經授權的攻擊行為屬違法犯罪,將承擔法律責任。一、SQLmap常規用法注意存放路徑:C:\Users\neo\AppData\Local\sqlmap\output1、列出詳細過程和數據庫列表sqlmap -u http://192.168.61.2…

LeetCode 第464場周賽 第三天

1. 3658 奇數和與偶數和的最大公約數(歐幾里得) 鏈接:題目鏈接 題解: 題解時間復雜度O(logmin(a, b)): 獲得前n個奇、偶數的總和,由于數列為等差數列,等差數列和公式:(a1 an) * n …

IntelliJ IDEA 集成 ApiFox 操作與注解規范指南

一、IDEA裝入Apifox 1.安裝Apifox Helper 說明:在 IntelliJ IDEA 中安裝 ApiFox Helper 插件。 2.打開Apifox 說明:點擊 設置,在菜單中選擇 API訪問令牌。在彈出的窗口中輸入任意名稱,并選擇令牌的有效期(為了方便,我這里選擇了 無期限)。生成令牌后,由于 令牌只能復…

C++---雙指針

在C編程中,雙指針算法是一種高效的解題思路,其核心是通過設置兩個指針(或索引)遍歷數據結構(如數組、鏈表、字符串等),利用指針的移動規則減少無效操作,從而將時間復雜度從暴力解法的…

【LLM】GLM-4.5模型架構和原理

note 文章目錄note一、GLM-4.5模型二、Slime RL強化學習訓練架構Reference一、GLM-4.5模型 大模型進展,GLM-4.5技術報告,https://arxiv.org/pdf/2508.06471,https://github.com/zai-org/GLM-4.5,包括GLM-4.5(355B總參數&#xff…

LLM 中增量解碼與模型推理解讀

在【LLM】LLM 中 token 簡介與 bert 實操解讀一文中對 LLM 基礎定義進行了介紹,本文會對 LLM 中增量解碼與模型推理進行解讀。 一、LLM 中增量解碼定義 增量解碼(Incremental Decoding)是指在自回歸文本生成過程中,模型每次只計…

1.Spring Boot:超越配置地獄,重塑Java開發體驗

目錄 一、Spring框架:偉大的基石 歷史背景與挑戰 Spring的革命性貢獻 新的挑戰:配置地獄 二、Spring Boot:約定大于配置的革命 四大核心特性 1. 快速創建獨立應用 2. 自動配置:智能化的魔法 3. 起步依賴:依賴管…

assert使用方法

assert 是 Python 中用來進行 調試 和 驗證 的一個關鍵字,它用于測試一個 條件表達式 是否為真。如果條件為假,assert 會拋出一個 AssertionError 異常,通常帶有錯誤信息。語法:assert condition, "Error message"condi…

【實習總結】快速上手Git:關鍵命令整理

目錄 git的四大工作區域 git首次配置 克隆遠程倉庫 提交代碼到遠程倉庫 查看文件狀態(可選) 添加文件到暫存區 將暫存區的內容提交到本地倉庫 將本地的提交上傳到遠程倉庫 拉取并合并代碼 第一種方式 第二種方式 分支管理 查看與創建分支 …

02-開發環境搭建與工具鏈

第2課:開發環境搭建與工具鏈 📚 課程目標 掌握DevEco Studio的下載、安裝和配置熟悉HMS Core(華為移動服務)的使用了解鴻蒙模擬器與真機調試環境掌握必備開發工具的使用 🛠? DevEco Studio環境搭建 2.1 下載與安裝…