JVM 面試精選 20 題

在這里插入圖片描述

目錄

      • 1. 什么是 JVM、JDK 和 JRE?它們之間的關系是什么?
      • 2. Java 內存區域(運行時數據區)有哪些?
      • 3. 說說你對 JVM 垃圾回收機制的理解。
      • 4. 常用的垃圾回收算法有哪些?
      • 5. 什么是 Minor GC、Major GC 和 Full GC?
      • 6. JVM 調優的常用參數有哪些?
      • 7. 說說 Java 對象的創建過程。
      • 8. 什么是 JVM 類加載機制?
      • 9. 什么是雙親委派模型?
      • 10. 常見的 JVM 垃圾回收器有哪些?
      • 11. 為什么說 CMS 會產生內存碎片?
      • 12. 什么是 JIT 編譯器?它的作用是什么?
      • 13. 什么是逃逸分析?
      • 14. 談談你對強引用、軟引用、弱引用、虛引用的理解。
      • 15. 什么是 OOM(Out of Memory)?如何排查?
      • 16. JVM 發生 GC 時,STW(Stop-The-World)是什么?
      • 17. 為什么說 JVM 堆是分代的?
      • 18. 對象在 JVM 中的內存布局是怎樣的?
      • 19. JVM 中的線程死鎖如何排查?
      • 20. 簡述 JVM 的執行引擎。


JVM(Java Virtual Machine)作為 Java 語言的核心,是每個 Java 開發者都繞不開的話題。在面試中,JVM 相關問題幾乎是必考項。本文整理了 20 道常見的 JVM 面試題,并附帶詳細解答,幫助你更好地準備面試。

1. 什么是 JVM、JDK 和 JRE?它們之間的關系是什么?

解答:

  • JVM(Java Virtual Machine):Java 虛擬機,是運行 Java 字節碼的虛擬機。它負責將編譯好的 .class 文件翻譯成機器碼并執行。JVM 只是一個規范,不同的廠商可以有不同的實現,比如 HotSpot。
  • JRE(Java Runtime Environment):Java 運行時環境,它包含了 JVM 和運行 Java 程序所需的核心類庫(如 java.langjava.util 等)。如果你只需要運行一個 Java 程序,安裝 JRE 就足夠了。
  • JDK(Java Development Kit):Java 開發工具包,是提供給 Java 開發人員使用的,它包含了 JRE、編譯器(javac)、調試工具(jdb)等開發工具。如果你需要編寫和編譯 Java 程序,必須安裝 JDK。

關系:
JDK > JRE > JVM。JDK 包含 JRE,而 JRE 包含 JVM 和核心類庫。

2. Java 內存區域(運行時數據區)有哪些?

解答:

根據《Java 虛擬機規范》,Java 虛擬機運行時數據區分為以下幾個部分:

  • 程序計數器(Program Counter Register):一塊較小的內存空間,是當前線程所執行的字節碼的行號指示器。每個線程都有獨立的程序計數器,它是線程私有的。
  • Java 虛擬機棧(Java Virtual Machine Stacks):每個方法在執行時都會創建一個棧幀,用于存儲局部變量表、操作數棧、動態鏈接、方法出口等信息。線程私有
  • 本地方法棧(Native Method Stacks):與虛擬機棧類似,但是為虛擬機使用到的 Native 方法服務。線程私有
  • Java 堆(Java Heap):虛擬機所管理的內存中最大的一塊。所有線程共享,用于存放對象實例和數組。它是垃圾回收的主要區域。
  • 方法區(Method Area):用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據。所有線程共享。在 JDK 1.8 之后,方法區被 元空間(Metaspace) 取代,元空間在本地內存中,不受 JVM 內存限制。

3. 說說你對 JVM 垃圾回收機制的理解。

解答:

垃圾回收(Garbage Collection, GC)是 JVM 自動管理內存的一種機制。它的主要任務是回收堆內存中不再使用的對象,釋放內存空間。

GC 的基本思想是:找到那些不再被任何引用所指向的對象,然后將其占用的內存回收。為了判斷對象是否“存活”,JVM 采用了兩種主要算法:

  • 引用計數算法:給每個對象添加一個引用計數器。當有地方引用它時,計數器加 1;引用失效時,計數器減 1。當計數器為 0 時,說明該對象可以被回收。但是,它無法解決對象之間循環引用的問題,所以現代 JVM 不使用此算法。
  • 可達性分析算法:通過一系列稱為 “GC Roots” 的對象作為起始點,從這些節點開始向下搜索,搜索所走過的路徑稱為引用鏈(Reference Chain)。當一個對象到 GC Roots 沒有任何引用鏈相連時,則證明此對象是不可用的。GC Roots 包括虛擬機棧中的引用對象、方法區中的靜態變量和常量等。

4. 常用的垃圾回收算法有哪些?

解答:

  • 標記-清除(Mark-Sweep)

    • 標記:從 GC Roots 開始標記所有可達對象。
    • 清除:遍歷整個堆,回收所有未被標記的對象。
    • 缺點:會產生大量不連續的內存碎片,導致后續需要大塊連續內存的對象無法分配,提前觸發 GC。
  • 復制(Copying)

    • 將內存分為大小相等的兩塊,每次只使用其中一塊。當這塊內存用完時,將存活的對象復制到另一塊上,然后清空已使用的這塊內存。
    • 優點:不會產生內存碎片,實現簡單高效。
    • 缺點:內存利用率只有 50%。常用于新生代
  • 標記-整理(Mark-Compact)

    • 標記:同標記-清除,標記所有存活對象。
    • 整理:讓所有存活對象都向一端移動,然后直接清理掉邊界以外的內存。
    • 優點:不會產生內存碎片。
    • 缺點:效率比標記-清除低,因為需要移動對象。常用于老年代
  • 分代收集

    • 結合了上述算法,根據對象的生命周期將堆分為新生代老年代
    • 新生代:大部分對象“朝生夕滅”,采用復制算法,效率高。
    • 老年代:對象存活率高,采用標記-整理或標記-清除算法,減少移動開銷。

5. 什么是 Minor GC、Major GC 和 Full GC?

解答:

  • Minor GC(新生代 GC)

    • 指發生在新生代的垃圾回收。
    • 新生代采用復制算法,因為對象存活率低,效率高。
    • 觸發條件:Eden 區滿時。
  • Major GC(老年代 GC)

    • 指發生在老年代的垃圾回收。
    • Major GC 通常會伴隨一次 Minor GC。
  • Full GC(全堆 GC)

    • 指對整個堆(新生代、老年代和方法區/元空間)進行垃圾回收。
    • 觸發條件:老年代空間不足;方法區空間不足;調用 System.gc() 等。
    • Full GC 的代價很高,會造成較長的 STW(Stop-The-World),應盡量避免。

6. JVM 調優的常用參數有哪些?

解答:

  • -Xms<size>:設置 JVM 的初始堆內存,等價于 -XX:InitialHeapSize
  • -Xmx<size>:設置 JVM 的最大堆內存,等價于 -XX:MaxHeapSize
  • -Xmn<size>:設置新生代的大小。
  • -XX:NewRatio=<ratio>:設置新生代和老年代的比例,例如 -XX:NewRatio=2 表示新生代與老年代的比例為 1:2。
  • -XX:MaxMetaspaceSize=<size>:設置元空間的最大大小。
  • -XX:+PrintGCDetails:打印詳細的 GC 日志。
  • -XX:+UseG1GC:使用 G1 垃圾回收器。
  • -Xss<size>:設置每個線程的棧大小。

7. 說說 Java 對象的創建過程。

解答:

  1. 類加載檢查:當 JVM 遇到 new 指令時,首先檢查指令的參數是否能在常量池中定位到一個類的符號引用,并檢查這個符號引用代表的類是否已被加載、解析和初始化。
  2. 分配內存:在類加載檢查通過后,為新對象分配內存。
  3. 初始化零值:內存分配完成后,JVM 會將分配到的內存空間都初始化為零值(不包括對象頭),這保證了對象的實例字段在不賦初值時可以直接使用。
  4. 設置對象頭:JVM 會設置對象頭中的元數據,比如哈希碼、GC 年齡、鎖信息、對象所屬的類等。
  5. 執行 <init> 方法:執行對象的構造方法,按照代碼中的邏輯進行初始化。

8. 什么是 JVM 類加載機制?

解答:

類加載機制是 JVM 將 class 文件加載到內存,并對其進行校驗、準備、解析和初始化,最終形成可以被虛擬機直接使用的 Java 類型。

加載過程

  1. 加載(Loading):通過類的全限定名獲取二進制字節流,將這個字節流所代表的靜態存儲結構轉化為方法區的運行時數據結構,并在內存中生成一個代表該類的 java.lang.Class 對象。
  2. 驗證(Verification):確保 Class 文件的字節流中包含的信息符合當前虛擬機的要求,不會危害虛擬機自身的安全。
  3. 準備(Preparation):為類的靜態變量分配內存,并設置默認初始值(例如 int 類型為 0,boolean 類型為 false)。
  4. 解析(Resolution):將常量池中的符號引用替換為直接引用。
  5. 初始化(Initialization):執行 <clinit>() 方法,對類的靜態變量和靜態代碼塊進行賦值。

9. 什么是雙親委派模型?

解答:

雙親委派模型(Parent Delegation Model)是 Java 類加載器的一種工作機制。當一個類加載器收到類加載請求時,它并不會自己先去加載,而是先把這個請求委派給它的父類加載器去執行。如果父類加載器還存在父類加載器,則繼續向上委派,直到最頂層的啟動類加載器。只有當父類加載器在它的搜索范圍內找不到所需的類時,子類加載器才會嘗試自己去加載。

優點:

  • 避免重復加載:確保每個類在 JVM 中只加載一次。
  • 保證安全性:防止惡意代碼替換核心類庫,例如,用戶不能自己寫一個 java.lang.String 類來欺騙 JVM。

10. 常見的 JVM 垃圾回收器有哪些?

解答:

  • Serial(串行):單線程 GC,簡單高效,但會造成較長的 STW。適用于單核 CPU 或內存較小的客戶端應用。
  • ParNew:Serial 的多線程版本,用于新生代。
  • Parallel Scavenge:關注吞吐量(Throughput),即 CPU 用于執行用戶代碼的時間與 GC 時間的比值。可以有效利用多核 CPU。
  • CMS(Concurrent Mark Sweep):以獲取最短停頓時間為目標的 GC,采用“標記-清除”算法。在并發階段,GC 線程和用戶線程可以同時運行。
  • G1(Garbage First)分代收集器,將堆劃分為一個個的區域(Region),通過維護一個優先列表,優先回收垃圾最多的區域,從而實現可預測的停頓時間。適用于大內存服務器。
  • ZGC / Shenandoah:新一代的低延遲垃圾回收器,旨在實現幾乎不中斷的 GC 停頓時間(小于 10ms),適用于超大內存的應用。

11. 為什么說 CMS 會產生內存碎片?

解答:

CMS 垃圾回收器采用了標記-清除算法,這個算法的特點是:

  1. 標記:遍歷堆,標記所有存活對象。
  2. 清除:直接清除所有未標記對象占用的內存。

這個過程中,存活對象的位置不會改變,因此被清除的對象所占用的空間就成了不連續的“空洞”,也就是內存碎片。當一個需要大塊連續內存的新對象需要分配時,如果現有空閑內存雖然總量足夠,但是沒有足夠大的連續空間,就會導致分配失敗,從而不得不觸發一次 Full GC。

12. 什么是 JIT 編譯器?它的作用是什么?

解答:

JIT(Just-In-Time)編譯器,又稱即時編譯器,是 HotSpot JVM 中的一個重要組成部分。它的作用是在程序運行時,將頻繁執行的熱點代碼(Hot Spot Code)編譯為本地機器碼,從而提高代碼的執行效率。

Java 程序最初是解釋執行的,即由解釋器逐行翻譯字節碼。JIT 編譯器的出現彌補了這一缺點。當 JVM 發現某段代碼被多次調用或者是一個循環時,就會將其識別為熱點代碼,并交由 JIT 編譯器編譯。編譯后的本地代碼可以直接運行在操作系統上,效率更高。


13. 什么是逃逸分析?

解答:

**逃逸分析(Escape Analysis)**是 JVM 編譯器的一項優化技術,它分析對象是否會被方法外部訪問。

  • 不逃逸:一個對象只在方法內部使用,不會被外部引用。
  • 方法逃逸:對象作為方法的返回值,或者作為參數傳遞給其他方法。
  • 線程逃逸:對象被多個線程共享,例如作為靜態變量或者被添加到公共集合中。

逃逸分析的優化:

  • 棧上分配:如果一個對象不逃逸,可以直接在棧上分配內存。棧上的內存隨著方法結束自動回收,減輕了 GC 壓力。
  • 同步消除:如果一個對象只在一個線程中使用,即使它被 synchronized 包裹,JVM 也可以消除這個鎖,因為不會發生競爭。
  • 標量替換:如果一個對象不逃逸,并且可以拆分為基本類型,那么可以不創建這個對象,直接創建它的字段,節省內存。

14. 談談你對強引用、軟引用、弱引用、虛引用的理解。

解答:

  • 強引用(Strong Reference):最常見的引用類型,如 Object obj = new Object()。只要強引用存在,垃圾回收器永遠不會回收被引用的對象。
  • 軟引用(Soft Reference):用于描述一些還有用但非必需的對象。當內存空間不足時,JVM 會回收這些對象。常用于緩存。
  • 弱引用(Weak Reference):用于描述那些非必需的對象。只要發生垃圾回收,無論內存是否充足,都會回收被弱引用關聯的對象。常用于 WeakHashMap
  • 虛引用(Phantom Reference):最弱的引用,無法通過虛引用獲取對象實例。它唯一的用途是,在對象被回收時收到一個系統通知。常用于管理直接內存。

15. 什么是 OOM(Out of Memory)?如何排查?

解答:

OOM 指程序在申請內存時,JVM 沒有足夠的內存空間來分配。

常見的 OOM 類型:

  • java.lang.OutOfMemoryError: Java heap space:Java 堆內存不足,可能是創建了太多大對象,或者內存泄漏。
  • java.lang.OutOfMemoryError: Metaspace:元空間不足,可能是加載了太多類。
  • java.lang.OutOfMemoryError: unable to create new native thread:無法創建新的本地線程,可能是線程創建過多,或者操作系統對線程數有限制。

排查方法:

  1. 分析錯誤日志:查看 OOM 錯誤的具體類型和信息。
  2. 分析堆轉儲文件:使用 jmapHeapDumpOnOutOfMemoryError 生成 .hprof 文件,然后使用 MAT(Memory Analyzer Tool)VisualVM 等工具分析堆中對象的分布,找出導致 OOM 的“大對象”或對象數量異常增長。
  3. 查看 GC 日志:通過 PrintGCDetails 等參數打印 GC 日志,分析 GC 頻率和耗時,判斷是否頻繁 GC 導致內存不足。

16. JVM 發生 GC 時,STW(Stop-The-World)是什么?

解答:

**STW(Stop-The-World)**是指在進行垃圾回收時,JVM 停止所有的應用線程,直到 GC 過程結束。所有用戶線程都被暫停,無法響應請求,就像整個世界都停止了一樣。

STW 的目的是為了保證 GC 過程中的數據一致性。如果在 GC 時,用戶線程還在不斷創建新對象、修改引用關系,那么 GC 線程將無法準確地判斷哪些對象是存活的,導致回收錯誤。

現代的垃圾回收器(如 CMS、G1、ZGC)都在努力減少 STW 的時間,甚至實現并發 GC,讓 GC 線程和用戶線程同時運行,從而減少對應用程序的影響。

17. 為什么說 JVM 堆是分代的?

解答:

**分代(Generational)**是 JVM 堆內存的一種管理策略,基于一個重要的假設:絕大多數對象都是“朝生夕滅”的

  • 新生代(Young Generation):用于存放新創建的對象。這里的大多數對象在 Minor GC 后都會被回收。采用復制算法,效率很高。
  • 老年代(Old Generation):用于存放經過多次 Minor GC 仍然存活的對象。這些對象生命周期較長。采用標記-整理標記-清除算法,減少移動開銷。

這種分代管理可以根據不同區域對象的特點,采用最適合的 GC 算法,從而提高 GC 效率。

18. 對象在 JVM 中的內存布局是怎樣的?

解答:

一個 Java 對象在堆內存中主要包含三部分:

  1. 對象頭(Object Header)

    • Mark Word:存儲對象的哈希碼、GC 年齡、鎖信息等。
    • Klass Pointer:指向對象所屬類的元數據指針。
  2. 實例數據(Instance Data)

    • 存儲對象的所有成員變量(包括父類的成員變量)。
  3. 對齊填充(Padding)

    • 保證對象的大小是 8 字節的倍數。這不是必需的,只是為了方便 CPU 訪問。

19. JVM 中的線程死鎖如何排查?

解答:

  1. 使用 jps 命令:找到 Java 進程 ID。
  2. 使用 jstack 命令jstack <pid>jstack 會打印出 JVM 中所有線程的堆棧信息,如果存在死鎖,它會明確地在日志中報告死鎖信息,并列出涉及死鎖的線程和鎖。
  3. 分析 jstack 結果:仔細閱讀 jstack 的輸出,找到 Found one Java-level deadlock 的信息,然后根據堆棧信息分析是哪些線程、哪些鎖導致了死鎖。
  4. 使用圖形化工具:如 VisualVM,它可以直觀地顯示線程狀態、CPU 使用情況,并能自動分析死鎖。

20. 簡述 JVM 的執行引擎。

解答:

**執行引擎(Execution Engine)**是 JVM 的核心組成部分,它負責執行被加載到內存中的字節碼。執行引擎的工作方式有兩種:

  1. 解釋執行:由**解釋器(Interpreter)**逐條讀取和翻譯字節碼指令,然后執行。這種方式啟動快,但執行效率低。
  2. 編譯執行:由 JIT 編譯器將熱點代碼編譯成機器碼。這種方式啟動慢,但一旦編譯完成,執行效率高。

現代的 JVM 普遍采用解釋器和 JIT 編譯器并存的混合模式。程序剛啟動時,解釋器快速執行;當代碼被多次調用后,JIT 編譯器介入,將熱點代碼編譯成高效的本地代碼,以達到最佳性能。

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

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

相關文章

CMIP6 氣候模式核心特性解析

在全球氣候變化研究中&#xff0c;CMIP6&#xff08;第六次耦合模式比較計劃&#xff09;的氣候模式是關鍵工具。以下從研發背景與核心能力角度&#xff0c;解析五類主流模式的技術特點與適用場景。 一、主流模式技術特性 1. CanESM5/CanESM5-1&#xff08;加拿大環境與氣候變…

【牛客刷題】BM63 跳臺階:三種解法深度解析(遞歸/DP動態規劃/記憶化搜索)

文章目錄 一、題目介紹 1.1 題目描述 1.2 示例 二、算法設計思路 2.1 核心問題分析 2.2 斐波那契數列關系 三、流程圖 解法1:遞歸法(自頂向下) 解法2:動態規劃(自底向上) 解法3:記憶化搜索(遞歸優化) 解法4: 優化DP流程(推薦) 四、解法實現 五、復雜度分析對比 六、…

《解構WebSocket斷網重連:指數退避算法的前端工業級實踐指南》

WebSocket作為客戶端與服務器雙向通信的核心載體,支撐著從在線協作、金融行情到即時通訊等各類高實時性場景。然而,網絡環境的動態變化—從用戶設備的Wi-Fi與蜂窩網絡切換,到公共網絡的臨時擁塞,再到服務器的短暫重啟—都可能導致WebSocket連接中斷,進而引發數據傳輸停滯、…

醫療潔凈間的“隱形助手”:富唯智能復合機器人如何重塑手術器械供應鏈

當手術刀片在無影燈下傳遞時&#xff0c;0.01mm的抓取偏差可能意味著感染風險——而富唯智能復合機器人以0.02mm的重復定位精度與99.999%無菌操作的硬實力&#xff0c;正成為高端醫療產線中替代人力的關鍵技術支點。一、醫療上下料的三大痛點&#xff1a;精度、潔凈與連續性1.毫…

《設計模式》工廠方法模式

1.工廠方法模式&#xff08;Factory Method&#xff09;定義 定義一個用于創建對象的接口&#xff0c;讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 1.1 UML圖&#xff1a; 主要有4個對象&#xff1a; 抽象工廠&#xff08;Abstract Creator&#xf…

冒泡排序——簡單理解和使用

閱前聲明&#xff1a;如果想直接了解冒泡排序的簡化思想&#xff0c;請跳至文章尾部在介紹之前&#xff0c;我們先看一個用到該功能的實戰訓練&#xff08;本人也是從中開始認識到冒泡排序這個函數定義&#xff09;對于小白來說&#xff0c;我的思路如下&#xff1a;1.題目中涉…

AI應用商業化加速落地 2025智能體爆發與端側創新成增長引擎

今年以來&#xff0c;人工智能 (AI) 正在進入從算力投入到云服務消耗再到商業化收入&#xff0c;最終回到算力再投入的良性循環&#xff0c;而 AI 應用的起量正是推動這一飛輪效應的關鍵。7 月 31 日&#xff0c;國務院常務會議審議通過了《關于深入實施 “人工智能 ” 行動的意…

Pytest測試框架基礎及進階

Pytest測試框架基礎# Pytest測試框架介紹# Pytest是Python一款三方測試框架&#xff0c;用于編寫和運行單元測試、集成測試和功能測試。Pytest測試框架具有簡單、靈活、易于擴展等特點&#xff0c;被廣泛應用于Python項目的測試工作中。 Pytest主要特點&#xff1a; 簡單易用…

航空裝備先進加工工藝與制造技術論壇——2025成都航空裝備展

300參展企業 11500㎡展區面積 7大專業展區 12000觀眾規模15同期會議 160發言嘉賓 5000參會嘉賓 100媒體報道航空工業飛速發展&#xff0c;先進加工工藝與制造技術成為了支撐航空裝備性能提升、質量保障和產能優化的核心基石。為探索前沿技術路徑、凝聚行業創新力量&#xff0c;…

為什么品牌更愿意為新品打廣告?

品牌資源向新品廣告傾斜&#xff0c;可以說是市場上的普遍現象。尤其對于沒有明星產品的品牌而言&#xff0c;新品推廣時企業的重要曝光節點。下面就讓我們一同來了解下&#xff0c;為什么品牌更愿意為新品打廣告。一、市場需求更充分新品廣告往往承擔著市場教育的功能&#xf…

電子電氣架構 --- 關于整車信息安全的一些思考

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 做到欲望極簡,了解自己的真實欲望,不受外在潮流的影響,不盲從,不跟風。把自己的精力全部用在自己。一是去掉多余,凡事找規律,基礎是誠信;二是…

報錯:Eplan無法打開數據庫的解決方法

詳細報錯信息&#xff1a;無法打開數據庫 E:\eplan\部件\Microsoft\ESS_part001.mdb。針對64位版本的EPLAN 平臺需要使用64位版本的Microsoft Office. 一、報錯及解決方法 報錯信息&#xff1a;無法打開數據庫 E:\eplan\部件\Microsoft\ESS_part001.mdb。針對64位版本的EPLAN 平…

深度學習篇---卷積核的權重

卷積核權重&#xff1a;在深度學習的卷積操作中&#xff0c;“卷積核的權重” 是最核心的概念之一&#xff0c;它決定了卷積核能從圖像中 “看到” 什么特征&#xff08;比如邊緣、紋理&#xff0c;甚至是眼睛、車輪這樣的復雜結構&#xff09;。我們可以把它理解成卷積核的 “…

SMTPman,smtp ssl助力安全高效郵件傳輸!

SMTPman&#xff0c;smtp ssl助力安全高效郵件傳輸&#xff01;SMTPman&#xff0c;smtp ssl不僅僅是一種郵件協議方式&#xff0c;更是企業日常運營的重要支撐。通過SMTPman&#xff0c;smtp ssl&#xff0c;用戶可以獲得更快的投遞速度&#xff0c;更穩定的連接&#xff0c;以…

學習日志37 python

1 Python 和 Java 在類屬性&#xff08;靜態屬性&#xff09;和實例屬性的處理題目執行以下程序&#xff0c;輸出結果為&#xff08;&#xff09; class Base(object):count 0def __init__(self):pass b1 Base() b2 Base() b1.count b1.count 1 print(b1.count,end" …

對于QPS的理解和簡單

QPS&#xff08;Queries Per Second&#xff09; 是衡量系統吞吐量的核心指標&#xff0c;表示每秒能處理的請求數量。以下是關于QPS的完整解析和實踐指南&#xff1a;一、QPS的核心公式 QPS 總請求量 / 請求總時間&#xff08;秒&#xff09;典型場景計算&#xff1a; 日請求…

【筆記ing】考試腦科學 腦科學中的高效記憶法

前言本書是拙作《高中生學習法》的修訂版。《高中生學習法》出版已有十余年。這期間&#xff0c;腦科學研究不斷進步&#xff0c;十幾年前無法解釋的事情現在已經開始逐漸明晰。同時&#xff0c;書中有些內容甚至已經被明確證實是錯誤的。也就是說&#xff0c;《高中生學習法》…

Web安全 - 構建安全可靠的API:基于國密SM2/SM3的文件上傳方案深度解析

文章目錄概述1. 緣起&#xff1a;挑戰與目標2 . 核心架構&#xff1a;非對稱簽名與摘要算法的珠聯璧合威脅模型&#xff08;我們要防的攻擊&#xff09;密鑰管理體系3 . 簽名與驗證&#xff1a;一步一解&#xff0c;安全閉環3.1 A系統&#xff1a;簽名的生成&#xff08;請求前…

【MyBatis-Plus】一、快速入門

這里寫自定義目錄標題MyBatis-Plus 概述快速入門入門案例常用注解常見配置MyBatis-Plus 概述 MyBatis-Plus 簡介&#xff1a; MyBatis-Plus 是在 MyBatis 基礎上開發的一個 增強工具包&#xff0c;它簡化了 MyBatis 的開發&#xff0c;減少了大量重復代碼。它保持了 MyBatis …

PostgreSQL導入mimic4

一、PostgreSQL連接驗證 正確連接命令 使用psql工具連接目標數據庫&#xff0c;格式為&#xff1a;psql -h 127.0.0.1 -U 用戶名 -d 數據庫名 --password 示例&#xff08;用戶名Shinelon&#xff0c;數據庫mimic&#xff09;&#xff1a;psql -h 127.0.0.1 -U Shinelon -d mi…