?
1. Java語言基礎
1.1 Java是什么?
? ? Java是一種廣泛使用的編程語言,最初由Sun Microsystems(現為Oracle公司的一部分)于1995年發布。它是一種面向對象的、基于類的、通用型的編程語言,旨在讓應用程序“編寫一次,到處運行”(Write Once, Run Anywhere)。
1.2 Java的主要特性有哪些?
? ? 平臺獨立性:通過Java虛擬機(JVM)實現跨平臺運行。
? ? 面向對象:支持類、繼承、多態等概念。
? ? 自動內存管理:垃圾回收機制自動管理內存。
? ? 安全性:通過安全模型和類加載機制保障。
? ? 強類型語言:變量必須明確聲明類型。
1.3 JDK、JRE、JVM的區別是什么?
? ? JDK(Java Development Kit):包含開發Java程序所需的全部工具,如編譯器、調試器等。
? ? JRE(Java Runtime Environment):運行時環境,包含JVM和Java核心類庫,用于執行Java程序。
? ? JVM(Java Virtual Machine):Java虛擬機,是Java程序的運行環境,負責將Java字節碼轉換為機器碼執行。
2. 數據類型與變量
2.1 Java中有哪些基本數據類型?
? ? 整數類型:byte, short, int, long
? ? 浮點類型:float, double
? ? 字符類型:char
? ? 布爾類型:boolean
2.2 變量作用域有哪些?
? ? 類變量(靜態變量):用static修飾,屬于類本身,所有實例共享。
? ? 實例變量:沒有static修飾,屬于類的實例。
? ? 局部變量:在方法或代碼塊中定義,只在定義它的代碼塊中有效。
2.3 解釋一下Java中的自動裝箱和拆箱?
? ? 自動裝箱:將基本數據類型轉換為對應的包裝類對象(如int到Integer)。
? ? 自動拆箱:將包裝類對象轉換為基本數據類型(如Integer到int)。
3. 運算符與表達式
3.1 Java中有哪些運算符?
? ? 算術運算符:+、-、*、/、%、++、--
? ? 賦值運算符:=、+=、-=、*=、/=
? ? 關系運算符:<、>、<=、>=、==、!=
? ? 邏輯運算符:&&、||、!
? ? 位運算符:&、|、^、~、<<、>>、>>>
? ? 條件運算符(三元運算符):條件 ? 表達式1 : 表達式2
? ? 字符串連接運算符:+
3.2 解釋一下短路邏輯運算符?
? ? 在邏輯與(&&)運算中,如果第一個操作數為false,則整個表達式立即返回false,不再計算第二個操作數。
? ? 在邏輯或(||)運算中,如果第一個操作數為true,則整個表達式立即返回true,不再計算第二個操作數。
4. 流程控制
4.1 Java中的循環結構有哪些?
? ? for循環:基于索引的循環。
? ? while循環:當條件為真時重復執行。
? ? do-while循環:至少執行一次,然后檢查條件。
4.2 break和continue的區別是什么?
? ? break:立即終止當前循環或switch語句。
? ? continue:跳過當前循環的剩余部分,直接進入下一次循環迭代。
4.3 switch語句的使用場景?
? ? 用于替代多個if-else if條件判斷,特別是當判斷條件是單個變量且為整型、字符型或枚舉類型時。
5. 數組與集合
5.1 數組與集合的區別是什么?
? ? 數組:固定大小,存儲相同類型的元素,訪問速度快。
? ? 集合:動態大小,可以存儲不同類型的對象,提供了豐富的操作方法。
5.2 Java集合框架主要包含哪些接口和類?
? ? 主要接口:List、Set、Map、Queue
? ? 主要實現類:ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap、LinkedList(也實現了Deque接口)
5.3 ArrayList與LinkedList的區別是什么?
? ? ArrayList:基于動態數組實現,查詢效率高,插入刪除效率低(尤其是中間位置)。
? ? LinkedList:基于鏈表實現,插入刪除效率高,查詢效率低。
6. 面向對象編程
6.1 面向對象編程的三大特性是什么?
? ? 封裝:隱藏對象的屬性和實現細節,僅公開必要的接口。
? ? 繼承:子類繼承父類的屬性和方法,實現代碼復用。
? ? 多態:允許將子類對象視為父類對象使用,實現接口的動態綁定。
6.2 抽象類與接口的區別是什么?
? ? 抽象類可以有實現的方法,接口中的所有方法都是抽象的(Java 8以后接口可以有默認方法和靜態方法)。
? ? 一個類只能繼承一個抽象類,但可以實現多個接口。
? ? 抽象類主要用于定義類的模板,接口用于定義功能的契約。
6.3 什么是內部類?它有哪些類型?
? ? 內部類:定義在另一個類內部的類。
? ? 類型:成員內部類、局部內部類、匿名內部類、靜態內部類。
7. 異常處理
7.1 Java中的異常處理機制是怎樣的?
? ? 使用try-catch-finally結構捕獲和處理異常。
? ? throw用于主動拋出異常,throws用于聲明方法可能拋出的異常。
? ? 自定義異常類通常繼承自Exception或RuntimeException。
7.2 finally塊中的代碼什么時候執行?
? ? finally塊中的代碼總是會在try或catch塊之后執行,無論是否發生異常,除非在執行try或catch塊時程序終止(如System.exit()調用)。
8. 輸入輸出與文件操作
8.1 Java中的IO流分為哪幾類?
? ? 按功能分:輸入流(InputStream/Reader)和輸出流(OutputStream/Writer)。
? ? 按處理單位分:字節流(InputStream/OutputStream)和字符流(Reader/Writer)。
? ? 按流向分:節點流和處理流。
8.2 如何讀取和寫入文件?
? ? 使用FileReader/FileWriter、BufferedReader/BufferedWriter進行字符讀寫。
? ? 使用FileInputStream/FileOutputStream、BufferedInputStream/BufferedOutputStream進行字節讀寫。
9. 多線程與并發
9.1 什么是線程?Java如何實現多線程?
? ? 線程是CPU調度的基本單位,用于并發執行任務。
? ? Java通過繼承Thread類或實現Runnable接口來創建線程。
9.2 解釋一下線程的生命周期?
? ? 新建(New)、就緒(Runnable)、運行(Running)、阻塞(Blocked)、等待(Waiting)、時間等待(Timed Waiting)、終止(Terminated)。
9.3 同步與異步的區別是什么?
? ? 同步:多個任務按順序執行,一個任務完成后另一個任務才開始。
? ? 異步:多個任務并發執行,不等待上一個任務完成。
9.4 Java中如何實現線程同步?
? ? 使用synchronized關鍵字修飾方法或代碼塊。
? ? 使用顯式鎖(如ReentrantLock)。
? ? 使用原子變量類(如AtomicInteger)。
10. 網絡編程
10.1 Java網絡編程主要涉及哪些類?
? ? Socket類:用于客戶端網絡通信。
? ? ServerSocket類:用于服務器端監聽客戶端連接。
? ? InetAddress類:表示IP地址。
? ? URL和URLConnection類:用于處理網絡資源的訪問。
10.2 什么是TCP/IP協議?
? ? TCP(傳輸控制協議):面向連接的、可靠的、基于字節流的傳輸層通信協議。
? ? IP(互聯網協議):負責為互聯網上的每一臺計算機分配一個唯一的地址。
11. Java泛型
11.1 泛型的好處是什么?
? ? 提高代碼重用性,減少類型轉換錯誤。
? ? 編譯時類型檢查,提高代碼安全性。
11.2 泛型的類型擦除是什么?
? ? Java泛型是通過類型擦除來實現的,即在編譯期間將泛型類型信息擦除,替換為原始類型(通常是Object),并在必要時插入類型轉換代碼。
12. 注解與反射
12.1 什么是注解?
? ? 注解是Java提供的一種對代碼進行標注的機制,可以用于編譯時、加載時或運行時處理。
12.2 反射機制是什么?
? ? 反射允許程序在運行時動態地獲取類的內部信息(如屬性、方法),并能直接操作任意對象的內部屬性及方法。