2025java面試題整理通俗易懂好記

一、Java 基礎

1. JVM 相關
  • Q:什么情況下會發生棧內存溢出? A:就像食堂打飯窗口前排隊,隊伍太長(方法調用層級太深),或者每個人占的位置太大(局部變量太多),隊伍擠不下就會 “溢出”。具體來說,遞歸調用沒終止條件,或者方法里定義超大數組,都會導致棧內存不夠用。

  • Q:JVM 的主要組成部分及其作用? A:JVM 像一個工廠,主要部門包括:

    • 類加載器:負責把 Java 代碼(.class 文件)翻譯成工廠能看懂的 “說明書”;
    • 內存區域:分配空間放數據(比如堆存對象,棧存方法調用);
    • 執行引擎:按說明書干活,執行字節碼指令;
    • 垃圾回收器:清理工廠里的廢品(不再用的對象)。
  • Q:垃圾回收機制和常見收集器? A:GC 就像掃地阿姨,定期清理 “垃圾對象”(沒人引用的對象)。常見掃地阿姨有:

    • Serial 收集器:單線程打掃,簡單粗暴,適合小房間(單 CPU 場景);
    • Parallel 收集器:多線程一起掃,效率高,適合大工廠(多核服務器);
    • CMS/G1 收集器:更聰明的阿姨,邊干活邊掃,減少工廠停工時間(低停頓場景)。
2. 多線程相關
  • Q:線程和進程的區別? A:進程像一個獨立的車間(比如微信程序),線程是車間里的工人。一個車間可以有多個工人(多線程),共享車間資源(內存、文件),工人干活更輕量(創建銷毀更快)。

  • Q:如何實現線程同步? A:比如多個工人同時用一臺機器,需要 “排隊”:

    • synchronized:給機器加鎖,誰拿到鎖誰用(如?synchronized(this){...});
    • Lock 接口:更靈活的鎖,能中途放棄排隊(如ReentrantLock);
    • 原子類:比如AtomicInteger,保證數字操作不會被打斷(類似自動售貨機計數)。
  • Q:線程池的原理和常用類? A:線程池像一個工人儲備庫,提前招好工人(創建線程),有任務就派工人干,干完不辭退,下次接著用。常用類:

    • ThreadPoolExecutor:最基礎的線程池,可自定義參數;
    • Executors工具類:快速創建常見線程池(如newFixedThreadPool固定線程數)。

二、數據庫

1. MySQL 基礎
  • Q:事務的四大特性?隔離級別和默認級別? A:事務像轉賬操作,必須滿足:

    • ACID
      • 原子性(要么全成功,要么全失敗,比如轉賬不能只扣錢不進賬);
      • 一致性(轉賬前后總金額不變);
      • 隔離性(多個轉賬互不干擾);
      • 持久性(成功后永久保存)。 隔離級別(從低到高):讀未提交(可能讀到臟數據)、讀已提交(MySQL 默認)、可重復讀、串行化(性能最差但最安全)。
  • Q:樂觀鎖和悲觀鎖的區別? A:悲觀鎖像搶車位,提前占住(加鎖),別人不能用;樂觀鎖像先停車,走的時候檢查有沒有人動過(版本號對比),適合沖突少的場景(如商品庫存更新)。

  • Q:CHAR 和 VARCHAR 的區別? A:CHAR 是固定長度的盒子(如 CHAR (10) 永遠占 10 個位置),適合短且固定的數據(如性別);VARCHAR 是可變長度的盒子,數據多長就占多大空間,適合內容不確定的字段(如文章摘要)。

2. 索引相關
  • Q:索引為什么快?底層數據結構? A:索引像字典的目錄,比如查 “Java”,直接翻到 J 開頭的頁,不用逐頁找。MySQL 索引底層是 B + 樹,數據按順序排列,查詢時像爬樹,快速定位。

  • Q:索引失效的原因? A:比如目錄被破壞:

    • 字段用函數(如SELECT * FROM user WHERE YEAR(create_time)=2025);
    • 模糊查詢以通配符開頭(如LIKE '%java');
    • 類型不匹配(如字段是數字,查詢時傳字符串'123')。
  • Q:最左前綴匹配原則? A:復合索引(如idx_name_age)像按 “姓名 + 年齡” 排序的名單,查詢時必須先按姓名查,再按年齡查。如果只查年齡,索引就用不上(除非姓名也在條件里)。

3. Redis 相關
  • Q:Redis 常見數據類型? A:比 MySQL 更靈活的 “抽屜”:

    • String:存單個值(如key:value);
    • List:存隊列(如聊天記錄,按順序存);
    • Hash:存對象(如用戶信息,user:1包含nameage字段);
    • Set:存不重復的集合(如點贊用戶);
    • ZSet:帶分數的集合(如排行榜,按分數排序)。
  • Q:緩存雪崩和穿透怎么解決? A:

    • 雪崩:大量緩存同時過期,像超市開門瞬間擠爆。解決:給緩存過期時間加隨機值,避免同時失效;
    • 穿透:黑客查不存在的數據,像一直敲空門。解決:用布隆過濾器先過濾不存在的 key,或者緩存空結果(短時間)。
  • Q:Redis 內存滿了怎么辦? A:按規則扔東西,常見策略:

    • LRU:扔最久沒用的;
    • LFU:扔用得最少的;
    • Random:隨機扔(不推薦)。

三、框架相關

1. Spring 框架
  • Q:Spring 框架和核心模塊? A:Spring 像一個 “萬能工具包”,幫你組裝程序:

    • IoC 容器:自動管理對象創建和依賴(比如你要泡茶,IoC 會自動給你杯子、茶葉);
    • AOP:給程序加 “插件”(如日志、事務),不修改原代碼;
    • 其他模塊:Spring MVC(處理 Web 請求)、Spring Data(操作數據庫)等。
  • Q:IoC 和 AOP 的理解? A:

    • IoC(控制反轉):以前你自己找對象(new),現在對象由 Spring 管理,你直接用(像外賣送到家);
    • AOP(面向切面編程):比如給所有方法加日志,不用每個方法里寫System.out,而是像 “切蛋糕” 一樣,在方法執行前后統一處理。
  • Q:Spring Bean 的生命周期? A:Bean(對象)的一生:

    1. 被 Spring 創建;
    2. 初始化前(調用@PostConstruct注解方法);
    3. 初始化(如設置屬性、調用init-method);
    4. 被使用;
    5. 銷毀前(調用@PreDestroy);
    6. 銷毀(如容器關閉)。
2. Spring Boot
  • Q:Spring Boot 和 Spring 的區別? A:Spring 像自己組裝電腦(需要配置很多東西),Spring Boot 像品牌機,默認配置好常用功能(如自動配置 Tomcat、數據庫連接),開箱即用,減少代碼量。

  • Q:Spring Boot 自動配置原理? A:啟動時,Spring Boot 會掃描 “啟動器”(如spring-boot-starter-web),根據依賴自動加載對應的配置類(如 Tomcat 配置、MVC 配置),就像你買了 “Web 啟動器”,電腦自動裝好瀏覽器、網絡驅動。

3. MyBatis
  • **Q:#{} 和 ${} 的區別?** A:`\#{}`是預編譯占位符(像`?`),防SQL注入(如`SELECT * FROM user WHERE id=\#{id}`);${}是直接拼接字符串(如ORDER BY ${field}`),使用時要小心注入風險(必須確保參數安全)。

  • Q:MyBatis 緩存機制? A:一級緩存(默認開啟):像瀏覽器緩存,同一方法內查相同數據直接取緩存;二級緩存:像全局緩存,不同方法、甚至不同 Mapper 都能共享(需要手動配置cache標簽)。

四、分布式與微服務

1. RPC 相關
  • Q:RPC 和常見框架? A:RPC 像打電話,讓不同電腦上的程序互相調用(比如 A 服務器調 B 服務器的方法)。常見框架:Dubbo、gRPC、Spring Cloud Feign。

  • Q:為什么用 RPC 而不是 HTTP? A:HTTP 像寄信,內容多(JSON/XML)、速度慢;RPC 像打電話,內容更精簡(二進制數據)、效率更高,適合內部服務快速調用。

2. Dubbo
  • Q:Dubbo 工作原理和注冊中心? A:Dubbo 像中介平臺:

    • 服務提供者(商家)把服務注冊到注冊中心(中介);
    • 服務消費者(用戶)從注冊中心查商家地址,直接調用服務;
    • 注冊中心(如 ZooKeeper)負責記錄商家在線狀態,相當于 “電話簿”。
  • Q:Dubbo 負載均衡策略? A:多個商家時,決定調用哪個:

    • 隨機(像抽簽);
    • 輪詢(按順序輪流);
    • 權重(根據商家 “能力” 分配,如配置weight=100)。
3. 消息隊列
  • Q:為什么用消息隊列? A:像快遞中轉站,解決高峰期擁堵:

    • 削峰:訂單高峰期,先把請求存隊列,慢慢處理;
    • 解耦:訂單系統和物流系統不直接連,通過隊列傳遞消息,一方掛了不影響另一方。
  • Q:如何保證消息不重復消費? A:給每個消息貼唯一標簽(如 UUID),消費時記錄已處理的標簽,重復消息來了直接忽略(類似快遞單號,簽收一次后不再處理)。

五、其他高頻問題

1. 設計模式
  • Q:項目中用過哪些設計模式? A:比如:

    • 單例模式(如全局唯一的配置類,private static實例);
    • 工廠模式(根據參數創建不同的服務類,如UserServiceFactory.create("admin"));
    • 觀察者模式(訂單狀態變化時,自動通知物流系統,類似微信消息推送)。
  • Q:單一職責和開閉原則? A:

    • 單一職責:一個類只干一件事(如UserService只處理用戶邏輯,不負責日志);
    • 開閉原則:對擴展開放,對修改關閉(加新功能時不修改原代碼,而是新增類,如新增支付方式時,繼承Payment接口)。
2. 網絡編程
  • Q:BIO、NIO、AIO 的區別? A:

    • BIO:像排隊買票,必須等前面的人買完才輪到你(同步阻塞);
    • NIO:像超市收銀,你先取號,逛一圈再回來問有沒有輪到(同步非阻塞);
    • AIO:像外賣,下單后不用管,做好了直接送上門(異步非阻塞)。
  • Q:Netty 為什么比 NIO 好用? A:NIO 是毛坯房,需要自己組裝(Selector、Channel 等);Netty 是精裝房,封裝了底層細節,提供更易用的 API,還解決了 NIO 的 bug(如 epoll 空輪詢),適合高并發場景(如聊天服務器)。

3. 權限認證
  • Q:認證和授權的區別? A:認證是 “你是誰”(如賬號密碼登錄),授權是 “你能做什么”(如管理員能刪數據,普通用戶不能)。

  • Q:JWT 如何實現身份驗證? A:JWT 像電子身份證:

    1. 登錄成功后,服務器生成包含用戶信息的 JWT 字符串;
    2. 客戶端每次請求帶 JWT(如放在 Header);
    3. 服務器解析 JWT,驗證簽名是否有效,確認用戶身份。

記憶技巧

  1. 類比生活場景:把技術概念比作 “食堂排隊”“快遞中轉站” 等,更容易聯想;
  2. 抓核心關鍵詞:如事務 ACID、索引 B + 樹、JWT “電子身份證”;
  3. 結合項目經驗:回答時穿插實際場景(如 “我們項目用 Redis 緩存商品列表,解決了高峰期查詢慢的問題”)。

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

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

相關文章

內存分配算法(系統分配算法~應用常見算法)

一、內存碎片 內部碎片與外部碎片 內部碎片:指已分配給進程但未被實際利用的內存空間,屬于??已分配內存內部的浪費??。 外部碎片:內存中??零散分布的空閑小空間??,總量足夠但無法合并為大塊以滿足連續內存請求。 內部碎…

緩解停車難的城市密碼:4G地磁檢測器如何重構車位資源分配

城市停車難,是困擾車主和管理者的雙重痛點。尋找車位耗時耗力,人工計時收費易生糾紛,傳統管理模式效率低下。而 4G地磁檢測器 的出現,正悄然改變這一局面。它如同埋入城市道路的“感知神經元”,通過4G地磁檢測器 的精準…

【網工|查缺補漏】存儲與RAID技術①

目錄 ■存儲基礎 ▲存儲系統層次結構 ▲存儲介質選擇 ▲硬盤接口 ■傳統RAID技術 ▲RAID數據組織及存取方式 ▲RAID熱備與重構 ▲常用RAID技術 ■RAID2.0技術 ▲RAID2.0技術優勢 ■網絡存儲體系DAS/NAS/SAN ▲DAS (Direct Attached Storage) ▲FC SAN (Fiber Chan…

ESP官網的使用手冊網址

LED Control (LEDC) — Arduino-ESP32 2.0.14 documentation (readthedocs-hosted.com) 中文網站:紅外遙控 (RMT) - ESP32 - — ESP-IDF 編程指南 v5.4.2 文檔 (espressif.com)

網絡基礎知識與代理配置

網絡基礎知識 OSI七層模型與協議對應 OSI層功能典型協議應用層網絡服務接口,為應用程序提供網絡服務HTTP, HTTPS, FTP, SMTP, DNS, Telnet, SSH表示層數據格式化、代碼轉換、數據加密解密SSL/TLS, JPEG, GIF, ASCII, 壓縮算法會話層建立、管理和終止會話連接NetBI…

Windows 疑難雜癥集 - MsMpEng.exe 磁盤占用率持續高占

本系列記錄日常使用中遇到的一些問題及處理方法。系統環境為 Windows 10,但可能也適用于 Windows11,甚至也會包含部分 Windows7 等老系統環境。 有的時候感覺系統異常卡頓, CtrlShiftEsc 打開任務管理器,看到某個磁盤居然IO達到了…

《UE5_C++多人TPS完整教程》學習筆記40 ——《P41 裝備(武器)姿勢(Equipped Pose)》

本文為B站系列教學視頻 《UE5_C多人TPS完整教程》 —— 《P41 裝備(武器)姿勢(Equipped Pose)》 的學習筆記,該系列教學視頻為計算機工程師、程序員、游戲開發者、作家(Engineer, Programmer, Game Develop…

【HarmonyOS】鴻蒙使用倉頡編程入門

【HarmonyOS】鴻蒙使用倉頡編程入門 一、前言 倉頡,是華為自研的一款面向全場景智能的新一代編程語言,是為鴻蒙量身打造的全場景智能應用編程語言,作為鴻蒙生態中的重要組成部分,旨在支持鴻蒙系統下的全場景應用開發 &#xff0…

2.3.1 Nginx Web服務器安全加固

文章目錄 一、試題及考試說明二、操作步驟1. 啟動Nginx服務2. 隱藏站點 Response Header 里的Web服務版本信息(見下總圖)3. 隱藏站點 Response Header 里的X-Powered-By 字段(見下總圖)4. Nginx訪問日志存放位置修改為/opt/bak/ac…

紅色背景政府當講PPT模版

政府黨建PPT模版,慶國慶PPT模版,國慶節PPT模版 紅色背景政府當講PPT模版:https://pan.quark.cn/s/a6f484905430

JavaScript對象(Object)常用操作

創建對象 //使用對象字面量、構造函數或者Object.create()方法來創建對象// 對象字面量 const person {name: John,age: 30,hobbies: [reading, swimming] };// 構造函數 function Car(make, model) {this.make make;this.model model; } const myCar new Car(Toyota, Cor…

Java面試寶典:基礎一

?? 1. Java跨平臺原理(字節碼文件與JVM) 核心機制: Java源程序(.java)編譯為與平臺無關的字節碼文件(.class),而非直接生成機器碼。字節碼由**Java虛擬機(JVM&#xf…

uniapp微信小程序:editor組件placeholder字體樣式修改

一、問題描述 微信小程序editor組件的placeholder字體默認為斜體字,官方對此沒有屬性可以設置它的樣式,并且直接在組件上設置樣式也是無效的。 二、解決方案 通過審查節點: 可以看到editor的placeholder其實是在一個偽元素上。 在頁面或者…

PhoneRescue 4.3綠色版!解決iPhone數據丟失、系統崩潰等場景

目錄 一、引言二、軟件介紹1. 研發背景與定位2. 兼容性與技術優勢 三、功能介紹1. 數據恢復功能(核心痛點解決方案)2. 系統修復功能3. 數據管理輔助 四、軟件特色1. 操作極簡,零技術門檻2. 安全可靠,零數據風險3. 高效精準&#x…

Vue 快速入門

一、Vue是什么 Vue是一款用于構建用戶界面的漸進式的JavaScript框架。 官網:Vue.js - 漸進式 JavaScript 框架 | Vue.js 其核心特性包括: 響應式數據綁定:通過 Vue 的響應式系統,數據變化會自動反映到視圖,減少手動 D…

JAVA-JWT

JWT簡介 JSON Web Token(JWT)是一個非常輕巧的規范,這個規范允許我們使用 JWT 在用戶和服務器之間傳遞安全可靠的信息。一個 JWT 實際上就是一個字符串,它由三部分組成,頭部、載荷與簽名。前兩部分需要經過 Base64 編…

UI前端大數據處理挑戰與對策:保障數據安全與隱私

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 一、引言:大數據時代的前端安全新挑戰 在數字化轉型的浪潮中,前端已從…

DTO、VO、POJO與實體類使用方案(結合Mapper.xml)

結合MyBatis的Mapper.xml文件,展示完整的層級數據流轉和數據庫操作。 1. 實體類優化(Entity) // User.java Data NoArgsConstructor AllArgsConstructor TableName("sys_user") public class User {TableId(type IdType.AUTO)pr…

開源|VDBBench 1.0正式官宣,完全復刻業務場景,支持用戶自定義數據集

宣布個好消息,大家期待已久的VDBBench 1.0更新啦。 嘗鮮鏈接: https://github.com/zilliztech/VectorDBBench/releases/tag/v1.0.0 對于這個功能的更新,我們準備了很久,也思考了很多。 因為對我們來說,VDBBench 從來不…

7,FreeRTOS列表與列表項的插入刪除

一、實驗目標 創建三個動態任務,棧空間大小均為128字。startTask、Task1、Task2。startTask僅運行一次,負責task1、task2任務的創建,startTask任務的刪除。Task1負責初始化列表、列表項123,并進行列表項的插入實驗與刪除實驗。Tas…