Java面試寶典:基礎一

?? 1. Java跨平臺原理(字節碼文件與JVM)
  • 核心機制
    • Java源程序(.java)編譯為與平臺無關的字節碼文件(.class,而非直接生成機器碼。
    • 字節碼由**Java虛擬機(JVM)**解釋執行,JVM將字節碼轉換為目標平臺的機器指令。
  • 關鍵特點
    • 一次編譯,到處運行:只要目標平臺安裝對應的JVM,同一份.class文件即可運行。
    • 性能權衡:解釋執行比C/C++直接編譯為機器碼效率低,但跨平臺性強。
  • 對比C/C++
    • C/C++需針對不同平臺重新編譯生成特定機器碼,Java通過JVM屏蔽底層差異。
      在這里插入圖片描述
      在這里插入圖片描述

🔐 2. Java的安全性
  • 語言層級安全
    • 取消指針:用引用替代指針,避免內存非法訪問和越界問題。
    • 垃圾回收(GC):自動管理內存,防止內存泄漏和野指針。
    • 異常處理try/catch/finally結構化捕獲錯誤,增強健壯性。
    • 強制類型檢查:防止不安全的類型轉換。
  • 底層安全機制
    • 字節碼校驗器:驗證字節碼合法性。
    • 類加載器(ClassLoader):隔離不同類訪問權限。
    • 運行時內存布局:防止內存沖突。
    • 文件訪問限制:沙箱機制限制惡意代碼。

📦 3. Java三大版本
版本全稱應用場景特點
J2SEJava 2 Standard Edition桌面應用、基礎開發包含核心類庫(I/O、網絡等)
J2EEJava 2 Enterprise Edition企業級應用(電商、ERP系統)擴展Servlet/JSP/EJB等組件
J2MEJava 2 Micro Edition嵌入式設備(功能機、機頂盒)精簡J2SE,專有API(不用于Android)

關系:J2EE包含J2SE,J2ME包含部分J2SE核心類。


🛠? 4. JVM、JDK、JRE 核心概念
  • JVM(Java虛擬機)
    • 執行字節碼的虛擬計算機,實現跨平臺(不同OS有專屬JVM)。
    • 核心功能:解釋字節碼、內存管理、安全控制。
  • JRE(Java運行環境)
    • = JVM + 核心類庫(如rt.jar)。
    • 僅支持運行已編譯的Java程序(無編譯能力)。
  • JDK(Java開發工具包)
    • = JRE + 開發工具(javac編譯器、jar打包工具等)。
    • 開發者必需,支持開發、調試、運行。

關系總結:JDK ? JRE ? JVM 。


📝 5. Java三種注釋類型
類型語法用途
單行注釋//注釋內容臨時注釋單行代碼
多行注釋/* 注釋內容 */注釋多行代碼(不可嵌套)
文檔注釋/** 注釋內容 */生成API文檔(通過javadoc工具)

示例

/**  * 動物類(文檔注釋)  * @author Developer  */  
public class Animal {  int age; // 單行注釋:年齡屬性  /* 多行注釋:  void eat() { ... }  */  
}  

🧮 6. 8種基本數據類型及字節數
數據類型關鍵字字節數取值范圍
字節型byte1-128 ~ 127
短整型short2-32768 ~ 32767
整型int4-231 ~ 231-1
長整型long8-2?3 ~ 2?3-1
單精度浮點型float4科學計數法(約±3.4e3?)
雙精度浮點型double8科學計數法(約±1.8e3??)
字符型char2Unicode字符(0~65535)
布爾型boolean1位true/false

布爾型大小:實際占用1位,但JVM通常以1字節處理。


🔄 7. i++ vs ++i 區別與示例
  • 共同點
    • 等價于 i = i + 1,若獨立成句(如 i++;),效果相同。
  • 不同點
    • i++(后置自增):先取值,后自增。
      int a = 5;  
      int b = a++;  // b=5, a=6  
      
    • ++i(前置自增):先自增,后取值。
      int x = 5;  
      int y = ++x;  // y=6, x=6  
      

關鍵:在表達式中影響其他變量的計算結果。


? 8. & vs &&| vs ||
  • &|
    • &:按位與(操作整數)或邏輯與(操作布爾值)。
    • |:按位或(整數)或邏輯或(布爾值)。
    • 特點:無論左側結果如何,右側操作數都會執行。
  • &&||
    • 短路特性
      • &&:左側為false時,右側不執行。
      • ||:左側為true時,右側不執行。
    • 高效場景
      if (list != null && list.size() > 0) // 避免空指針異常  
      

優先使用:短路運算符(&&/||)提升效率。


? 9. 高效計算:2乘以8的最優解法
  • 答案2 << 3
  • 原理
    • 左移運算(<< n)等價于乘以2的n次方。
    • 2 << 3 = 2 × 23 = 16。
  • 優勢
    • CPU直接支持位運算,效率高于乘法指令。

擴展a * 8a << 3(適用于任意整數)。


🔄 10. 基本數據類型轉換規則
  • 自動轉換(隱式)
    • 小范圍 → 大范圍(如 byteint)。
    • 方向:byte → short → int → long → float → double
  • 強制轉換(顯式)
    • 大范圍 → 小范圍需手動轉型,可能丟失精度或溢出。
    double d = 10.24;  
    long l = (long) d;  // l=10(精度丟失)  
    
  • 特殊規則
    • byte/short/char參與運算時自動提升為int
      在這里插入圖片描述

📚 Java面試寶典:核心知識點詳解(下)


🔄 11. if多分支 vs switch多分支
特性if-else if-elseswitch-case
適用場景分支較少(≤5),條件為區間或邏輯表達式分支多且為等值判斷(整型/枚舉/字符串)
執行邏輯條件從上至下判斷,匹配即停止從匹配入口執行,不加break會穿透
條件類型支持任意布爾表達式(>, !=, 等)僅支持等值比較(不可用>, <
性能分支多時效率較低跳轉表實現,多分支時效率更高

示例

// if處理區間判斷  
if (score >= 90) grade = "A";  
else if (score >= 80) grade = "B";  // switch處理固定值  
switch (level) {  case 1: System.out.println("初級"); break;  case 2: System.out.println("中級");  
} // 若level=2,會輸出"中級"并穿透后續case  

🔄 12. while vs do-while循環
循環類型執行順序首次條件=false時適用場景
while先判斷 ? 后執行循環體一次都不執行需要前置條件檢查
do-while先執行 ? 后判斷至少執行一次循環體必須執行一次的場景

關鍵區別

int i = 0;  
while (i > 0) {   // 不執行  System.out.println("while循環");  
}  do {              // 執行一次  System.out.println("do-while循環");  
} while (i > 0);  

? 13. break 與 continue 作用
關鍵字作用示例場景
break立即退出整個循環體滿足條件時提前終止循環
continue跳過本次循環,進入下一次迭代跳過無效數據,繼續處理后續元素

嵌套循環

outer: for (int i=0; i<5; i++) {  for (int j=0; j<5; j++) {  if (j == 3) break outer; // 跳出外層循環  if (j == 1) continue;    // 跳過j=1的本次迭代  }  
}  

🧮 14. 遞歸算法示例:計算 n!
public static int factorial(int n) {  if (n == 1) return 1;           // 遞歸出口  return n * factorial(n - 1);    // 遞歸調用  
}  
// 調用:factorial(5) = 120  

?? 15. 遞歸的優缺點
優點缺點
代碼簡潔,描述問題自然效率低(函數調用開銷大)
解決復雜問題(如樹遍歷)棧溢出風險(深度過大)
數學定義直觀映射(如斐波那契)難調試和維護

使用原則

  • 必須有明確的遞歸出口
  • 深度可控(一般 ≤ 1000 層)
  • 避免重復計算(可用緩存優化)

📦 16. 數組核心特性
  1. 類型統一:所有元素類型相同(聲明時指定)
  2. 長度固定:創建后不可改變(arr.length
  3. 內存連續:分配連續空間,索引訪問(O(1)
  4. 默認值
    • int0double0.0
    • booleanfalse, 引用類型 → null
  5. 索引從0開始:有效范圍 [0, length-1]

🔢 17~19. 三大排序算法

1. 冒泡排序(優化版)

void bubbleSort(int[] arr) {  for (int i = 0; i < arr.length-1; i++) {  boolean swapped = false;  for (int j = 0; j < arr.length-1-i; j++) {  if (arr[j] > arr[j+1]) {  int temp = arr[j];  arr[j] = arr[j+1];  arr[j+1] = temp;  swapped = true;  }  }  if (!swapped) break; // 無交換時提前終止  }  
}  

2. 選擇排序

void selectionSort(int[] arr) {  for (int i = 0; i < arr.length-1; i++) {  int minIndex = i;  for (int j = i+1; j < arr.length; j++) {  if (arr[j] < arr[minIndex]) minIndex = j;  }  int temp = arr[i];  arr[i] = arr[minIndex];  arr[minIndex] = temp;  }  
}  

3. 插入排序

void insertionSort(int[] arr) {  for (int i = 1; i < arr.length; i++) {  int key = arr[i], j = i-1;  while (j >= 0 && arr[j] > key) {  arr[j+1] = arr[j]; // 后移元素  j--;  }  arr[j+1] = key;  }  
}  

🔄 20. 可變參數(Varargs)特性
  • 語法類型... 參數名(如 String... names
  • 規則
    1. 必須是方法最后一個參數
    2. 內部按數組處理names.length 獲取數量)
    3. 調用靈活:
      print("A");          // 等價于 print(new String[]{"A"})  
      print("A", "B", "C"); // 等價于 print(new String[]{"A","B","C"})  
      
  • 禁止:不能與同類型數組方法重載(編譯沖突)

典型應用String.format()、日志工具等方法


🧩 21. 類與對象關系
概念定義現實比喻示例
對象的模板(抽象)汽車設計圖class Car { ... }
對象類的實例(具體)根據圖紙造的實體車Car myCar = new Car()

關鍵點

  • 類定義了屬性(字段)和行為(方法)
  • 對象通過new創建,每個對象擁有獨立內存空間
  • 同一類的對象共享方法定義,但屬性值不同

🆚 22. 面向過程 vs 面向對象
維度面向過程面向對象
核心思想步驟為中心(函數驅動)對象為中心(數據封裝)
代碼組織按功能拆分成函數按現實實體抽象成類
典型語言C, PascalJava, C#, Python
優勢簡單問題高效復雜系統易擴展、維護
核心特性無封裝、繼承、多態支持三大特性

方法重載和方法重寫(覆蓋)的區別
在這里插入圖片描述

開發演進
大型系統中,面向對象通過封裝(隱藏細節)、繼承(代碼復用)、多態(接口統一)顯著降低復雜度。


🔑 23. this 與 super 關鍵字
關鍵字作用使用場景
this1. 指代當前對象解決字段/局部變量同名沖突
2. 調用本類構造方法this()構造方法重載時復用代碼
super1. 調用父類成員訪問被重寫的父類方法
2. 調用父類構造方法super()子類構造方法中初始化父類部分

約束

  • this()super() 必須在構造方法首行
  • 不可在靜態方法中使用(無"當前對象"概念)

?? 24. static 關鍵字詳解

四大用途

  1. 靜態變量:類級別共享(所有對象共用同一份)
    class Student {  static String school = "北大"; // 所有學生共享  
    }  
    
  2. 靜態方法:無需對象即可調用(禁止訪問非靜態成員)
    Math.max(10, 20); // 經典用例  
    
  3. 靜態代碼塊:類加載時執行一次(初始化靜態資源)
    static {  System.out.println("類已加載!");  
    }  
    
  4. 靜態內部類:不依賴外部類實例(可獨立存在)

內存特性

  • 靜態成員在方法區存儲(非堆內存)
  • 類加載時初始化,程序結束時銷毀

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

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

相關文章

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

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

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

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

Vue 快速入門

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

JAVA-JWT

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

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

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

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

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

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

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

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

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

兩款支持3D地圖的WebGIS框架對比

前言 在當前的WebGIS技術發展中&#xff0c;3D地形圖的可視化已經成為一個非常重要的功能&#xff0c;尤其是在城市規劃、環境監測和虛擬旅游等領域中的應用。對于開發者而言&#xff0c;選擇一個強大且適合的WebGIS框架是實現這些功能的關鍵。目前市場上較為流行的支持3D地形…

Github 2025-06-26 Go開源項目日報Top10

根據Github Trendings的統計,今日(2025-06-26統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Go項目10PureBasic項目1使用Gitleaks保護和發現機密信息 創建周期:2203 天開發語言:Go協議類型:MIT LicenseStar數量:14645 個Fork數量:13…

C++實現魷魚、羊了個羊、掃雷、原神模擬

C++ 魷魚游戲模擬實現 魷魚游戲中的經典場景可以通過C++模擬實現,例如“紅綠燈”游戲。以下是一個簡化版本的核心代碼框架: #include <iostream> #include <thread> #include <chrono> #include <cstdlib> #include <ctime> #include <ve…

從用戶到權限:解密 AWS IAM Identity Center 的授權之道

大家好&#xff0c;今天我們來解決一個非常具體的實戰問題&#xff1a;如何讓 IAM Identity Center 中創建的用戶真正獲得 AWS 賬戶的操作權限&#xff0c;從而取代老舊的 IAM 用戶管理模式&#xff1f; 如果我們盯著用戶詳情頁&#xff0c;想找一個“附加角色”的按鈕&#x…

在 Spring Boot 中使用 MyBatis-Plus 的詳細教程

前言 在現代的 Java Web 開發中&#xff0c;Spring Boot 和 MyBatis 已經成為主流框架組合。為了提升開發效率和簡化數據庫操作&#xff0c;MyBatis-Plus&#xff08;簡稱 MP&#xff09;應運而生。它是一個 MyBatis 的增強工具&#xff0c;在 MyBatis 的基礎上只做增強不做改…

AI生成內容泛濫時代:從“袋鼠登機“視頻看AI鑒偽與游戲智能的未來

近年來&#xff0c;AI生成內容的質量突飛猛進&#xff0c;從文本到圖像再到視頻&#xff0c;幾乎達到了以假亂真的程度。近期一段"人類在飛機上吵架看呆袋鼠"的視頻在社交網絡瘋傳&#xff0c;獲得數千萬次觀看后&#xff0c;才被證實是AI生成內容&#xff0c;這一事…

為什么在linux中不能直接使用pip進行安裝

您好&#xff0c;這是一個非常深刻且關鍵的問題&#xff0c;觸及了 Linux 系統管理與 Python 開發實踐的核心原則。理解了這一點&#xff0c;您就真正開始像一位經驗豐富的開發者那樣思考了。 簡單來說&#xff0c;答案是&#xff1a;為了保護操作系統自身的穩定和完整性。 讓…

IDEA相關配置記錄

IDEA相關配置記錄 參考鏈接&#xff1a; 參考鏈接&#xff1a; 1、安裝jdk D:\Program Files\Java\jdk-21 https://blog.csdn.net/2302_81410974/article/details/142031416 2、安裝maven D:\Java\workspace-maven\apache-maven-3.9.10 . ├── LICENSE ├── NOTICE ├──…

FastGPT私有化部署完整指南

&#x1f680; FastGPT 私有化部署完整指南 &#x1f4cb; 環境要求 硬件要求 最低配置:CPU: 4核內存: 8GB存儲: 50GB網絡: 穩定互聯網連接推薦配置:CPU: 8核內存: 16GB存儲: 100GB SSD網絡: 10Mbps帶寬軟件環境 必需軟件:- Docker: > 20.10.0- Docker Compose: > 2.…

系統架構設計師論文分享-基于架構的軟件設計方法及應用

我的軟考歷程 摘要 2023年2月&#xff0c;我所在的公司做了開發紗線MES系統的決定&#xff0c;該系統為國內紗線工廠提供SAAS服務&#xff0c;旨在提高紗線工廠的智能化和數字化水平。我在該項目中被任命為系統架構設計師&#xff0c;全面掌管該項目的架構設計工作。本文將結…

團結引擎發布純鴻蒙應用

大家好&#xff0c;我是阿趙。 ??這里嘗試一下用團結引擎發布純鴻蒙系統的應用。 一、 安裝鴻蒙系統發布需要的組件 在團結引擎的Hub里面找到Add modules: 然后找到OpenHarmony的支持選項&#xff0c;由于我已經安裝過了&#xff0c;所以會顯示Installed&#xff0c;如果沒…

C++基礎(FreeRDP編譯)

安裝 先安裝openssl 保姆級OpenSSL下載及安裝教程,OpenSSL下載及安裝教程-CSDN博客 vcpkg integrate install 安裝 vcpkg install zlib vcpkg install ffmpeg:x64-windows 編譯指令 PS D:\freerdp\FreeRDP\build> cmake .. -G "Visual Studio 17 2022" -A x…