華為OD面試真題精選
專欄:華為OD面試真題精選
目錄: 2024華為OD面試手撕代碼真題目錄以及八股文真題目錄
文章目錄
- 華為OD面試真題精選
- 虛擬機分區
- 1. **虛擬磁盤分區**
- 2. **虛擬機的內存分區**
- 3. **CPU分配**
- 4. **虛擬網絡分區**
- 5. **存儲虛擬化和分區**
- 6. **虛擬機分區管理**
- 7. **常見虛擬化平臺的分區管理**
- 內存回收
- 1. **Java內存管理概述**
- 2. **垃圾回收機制概述**
- 3. **Java 垃圾回收的主要算法**
- 4. **Java 垃圾回收的主要區域**
- 5. **常見的垃圾回收器**
- 6. **垃圾回收的調優**
- 分代回收流程
- 分代回收流程
- 1. **內存分代**
- 2. **垃圾回收流程**
- 2.1 **年輕代回收(Minor GC)**
- 2.2 **老年代回收(Major GC 或 Full GC)**
- 2.3 **永久代回收(Full GC)**
- 3. **晉升機制**
- 4. **觸發垃圾回收**
- MySQL,索引失效
- 常見的 MySQL 索引失效場景
- 1. **條件中對索引列做了函數或運算**
- 2. **隱式類型轉換**
- 3. **在索引列上使用 `!=` 或 `<>`**
- 4. **在索引列上使用 `IS NULL` / `IS NOT NULL`**
- 5. **LIKE 以通配符開頭**
- 6. **OR 條件混用索引列和非索引列**
- 7. **范圍查詢 + 索引列順序問題**
- 8. **ORDER BY 使用非索引字段**
- 類加載器、類加載過程和類加載機制
- 一、類加載器(ClassLoader)
- 1.1 類加載器的作用
- 1.2 常見的類加載器
- 二、類加載過程(生命周期)
- 2.1 加載(Loading)
- 2.2 驗證(Verification)
- 2.3 準備(Preparation)
- 2.4 解析(Resolution)
- 2.5 初始化(Initialization)
- 三、類加載機制
- 3.1 雙親委派模型(Parent Delegation Model)
- 優點:
- 示例流程:
- 四、打破雙親委派(如 SPI)
- 線程池拒絕策略
- 一、線程池任務滿的條件
- 二、JDK 提供的 4 種拒絕策略
- 三、自定義拒絕策略
- 四、實際應用建議
虛擬機分區
虛擬機分區是指在虛擬化環境中劃分虛擬機的存儲和資源,以便更好地管理和隔離不同虛擬機之間的操作和數據。分區可以包括磁盤分區、內存分配、CPU分配等,確保虛擬機之間不會互相干擾,同時可以根據需要分配資源。以下是關于虛擬機分區的一些關鍵概念和技術。
1. 虛擬磁盤分區
虛擬機的磁盤分區是指在虛擬磁盤中創建多個邏輯分區,類似于物理機上的磁盤分區。虛擬機的磁盤可以分為多個分區,每個分區可以有不同的用途,例如:
- 系統分區:用于存放操作系統。
- 數據分區:用于存放應用程序數據。
- 交換分區:類似于物理機上的交換空間,提供虛擬內存。
在虛擬化平臺(如 VMware、VirtualBox 或 Hyper-V)中,虛擬磁盤文件通常是一個大文件,像 .vmdk
(VMware)或 .vdi
(VirtualBox),它們可以根據需要進行分區。
2. 虛擬機的內存分區
在虛擬化中,每個虛擬機都分配一定的物理內存(RAM)。分區的目的是合理地分配內存資源,避免虛擬機之間的內存沖突。虛擬化平臺會將物理內存劃分成多個虛擬內存塊,并將這些內存塊分配給各個虛擬機。操作系統內部的內存管理(如頁表、虛擬內存管理)將在虛擬機內進行處理。
3. CPU分配
虛擬化平臺提供虛擬CPU(vCPU)來分配給虛擬機。每個虛擬機都可以擁有多個虛擬CPU(例如一個虛擬機可以分配2個vCPU),這些vCPU對應的是物理CPU的核心。CPU分區實際上是將虛擬機需要的CPU資源分配給虛擬機,并確保虛擬機之間的CPU資源不會相互沖突。
4. 虛擬網絡分區
虛擬機通常也會連接到虛擬網絡中。在虛擬化平臺中,可以通過虛擬交換機(Virtual Switch)和網絡接口卡(vNIC)來進行虛擬網絡的配置與分區。通過虛擬網絡分區,可以實現虛擬機之間的網絡隔離、網絡帶寬的限制以及跨虛擬機的網絡訪問控制。
5. 存儲虛擬化和分區
在虛擬化環境中,存儲分區常見的方式包括:
- 共享存儲:多個虛擬機共享同一存儲資源,可以通過網絡文件系統(NFS)或 iSCSI 等協議實現。
- 直通存儲:將物理存儲直接分配給虛擬機進行使用。
- 虛擬磁盤格式:如 VMDK(VMware)、VHD(Hyper-V)、VDI(VirtualBox)等,虛擬機使用這些格式的虛擬磁盤文件進行存儲分配。
6. 虛擬機分區管理
虛擬機分區的管理包括:
- 創建與調整分區:可以在虛擬機創建時為其分配硬盤空間和其他資源,或者在虛擬機運行過程中動態調整資源(例如擴展磁盤、增加內存、增加CPU等)。
- 資源監控與限制:虛擬化平臺通常提供對虛擬機資源使用的監控工具,管理員可以監控虛擬機的資源使用情況,必要時進行資源限制或調整。
- 備份與恢復:虛擬機的分區可以在備份時一并保存,恢復時可以根據備份的狀態進行還原。
7. 常見虛擬化平臺的分區管理
不同的虛擬化平臺提供不同的管理工具來實現虛擬機分區。
-
VMware:
- VMware vSphere 提供強大的虛擬機資源管理,支持磁盤分區、內存分配、虛擬CPU分配等功能。
- 使用
VMFS
(虛擬機文件系統)進行磁盤管理,支持虛擬磁盤的分配和擴展。
-
VirtualBox:
- VirtualBox 支持通過虛擬硬盤(VDI、VHD、VMDK)來進行虛擬機磁盤分區。
- 內存分配和CPU分配可以通過虛擬機的設置界面進行調整。
-
Hyper-V:
- Hyper-V 使用 VHD 或 VHDX 格式的虛擬磁盤來實現磁盤分區,并支持內存和CPU資源的分配。
- Hyper-V 管理器提供了資源分配和調整的圖形化界面。
內存回收
在 Java 中,內存回收是通過垃圾回收機制(Garbage Collection, GC)來自動管理內存的。垃圾回收的目的是回收不再被引用的對象所占用的內存,避免內存泄漏,并保持程序的高效性。
1. Java內存管理概述
Java 的內存分為多個區域,每個區域負責不同的內存管理任務。主要的內存區域包括:
- 堆內存(Heap):用于存儲創建的對象,垃圾回收器會主要關注堆內存中的對象。
- 棧內存(Stack):用于存儲方法的局部變量和調用過程的棧幀。棧內存的管理不需要垃圾回收。
- 方法區(Method Area):存儲類信息、常量池、靜態變量等,也叫做“永久代”(PermGen)或“元空間”(Metaspace),根據 Java 版本的不同,管理方式有所不同。
- 程序計數器(Program Counter Register):每個線程有一個程序計數器,用來存儲當前線程的執行位置,幫助虛擬機執行字節碼。
2. 垃圾回收機制概述
Java 使用**自動垃圾回收(GC)**來管理堆內存。垃圾回收的過程包括以下幾個步驟:
-
標記(Mark):GC 會首先標記出所有仍然存活的對象。對象存活的標準通常是“被引用”。如果一個對象可以通過鏈式引用從根對象(如線程棧、靜態引用等)訪問到,那么它是存活的。
-
清除(Sweep):標記階段之后,GC 會清除所有沒有被標記的對象,釋放它們占用的內存空間。
-
壓縮(Compact):有些垃圾回收器(如 G1)會對堆中的對象進行壓縮,避免出現內存碎片。這樣做的目的是將存活的對象移動到堆的一端,方便后續的內存分配。
3. Java 垃圾回收的主要算法
Java 中的垃圾回收器有多種算法,常見的包括:
-
標記-清除算法(Mark and Sweep):最基礎的算法,標記所有活躍對象,清除所有未標記的對象。缺點是清除后會產生內存碎片。
-
復制算法(Copying):將內存分為兩部分,每次只使用其中一部分。垃