2022年Java面試問答
已發表: 2022-08-03你是程序員嗎? 並且您已選擇 Java 編程語言作為您建立職業的首選利基市場? 恭喜! 你選對了。 據統計,美國程序員平均年收入為 105,801 美元。 即平均每小時 50.87 美元、每週 2,035 美元和每月 8,817 美元。 這不是令人印象深刻嗎?
但是,作為一名 Java 程序員獲得一份夢想的工作並不是一廂情願的事情。 在全球 800 萬 Java 程序員中,只有大約 56,585 人在美國獲得有報酬的工作,這使得作為 Java 程序員的求職競爭非常激烈。 如果您必須找到理想的工作,那麼您需要具備 Java 編程語言的基本和復雜方面的能力。
現在您知道作為一名 Java 程序員獲得一份工作是多麼有競爭力,以及有資格成為少數幾個獲得 Java 程序員工作的人的要求。 請記住,成功是機會會議準備的函數。 隨著我們的進步,我們設計了一個問答指南,以幫助您在面試階段擴大規模,並可能找到您夢寐以求的工作。 這份清單是在文章的幫助下編制的——為 Apollotechnical 上的 Java 面試問題和答案做準備。 讓我們繼續吧。
面向新生的基本 Java 面試問題
你對 Java 的理解是什麼?
Java 是一種通用、面向對象和跨平台的編程語言,在全球 30 億台設備上用於各種任務,例如社交網絡應用程序、音頻和視頻程序、遊戲、海量數據處理、嵌入式設備等。
Java和Python之間的比較
簡而言之,Java 是一種通用的、以對象為中心的編程語言,它基於類,但所需的規範較少。 由於其快速、可靠和以結果為導向的聲譽,它是開發手機、遊戲機、筆記本電腦、高端科學計算機等應用程序的首選編程語言。另一方面,Python 是一種翻譯的、以對象為中心的和提升的動態結構化編程語言。 Python 通過啟用模塊和包來促進程序靈活性和代碼重用。
概述主要的 Java 特性
- Java 是面向對象的
- Java 與平台無關
- 具有出色的多線程實現
- 使用簡單的語言
- 並且是架構中立的
Java中的對像是什麼意思
在 Java 中,對像是另一個稱為“類”的 Java 分組的組件(也稱為“實例”)。 每個對像都有一個獨特的狀態、行為/動作和身份。 字段(變量)存儲對象的狀態,而方法(操作)展示對象的動作。 在運行時,對像是從標識為類的框架中創建的。
對像也可以是表示現實世界實體的基於對象的編程的基本元素。
Java編程中Stringbuffer和Stringbuilder的區別
StringBuffer 和 StringBuilder 的主要區別在於四個參數:性能/速度、線程安全、可用性和同步。 StringBuilder 是 StringBuffer 類的非同步變體。
StringBuffer 和 StringBuilder 的另一個區別是前者是線程安全的,而後者不是。
區分 JDK、JRE 和 JVM
Java 開發工具包 (JDK) 包括編寫、故障排除和分析 Java 編程工具。 JRE 是一組類和對像以及 JVM 運行應用程序所需的其他隨附文件。 JVM 不提供任何軟件開發工具。
Java Development Kit (JDK) 是用於創建 Java 應用程序的軟件產品。 JRE 是一個軟件包,其中包含運行 Java 編程所需的 Java 類庫和其他組件。 Java 虛擬機 (JVM) 解釋 Java 字節語言並創建適合執行的氛圍。 JDK是平台相關的,JRE是平台相關的,JVM是平台相關的,規模更大。
定義繼承
在 Java 中,繼承是一種將一個類的特徵轉移到另一個類的原理。 它是 Java 中一個類從另一個類獲取屬性或允許一個類擁有另一個類的特性(方法和屬性)的框架。
Java 中的類是什麼?
類是面向對象編程中的基本元素。 它是一種定義歸因於類實例化的狀態和功能的格式。 類也是一個邏輯模板,因為它用於構建共享相似屬性和方法的模型。
比較Java中的重載和覆蓋
重載是指具有相同名稱的同一類的方法,但每個方法具有不同的標准或具有不同類型和順序的相同標準。 而重寫意味著在與超類相同的標題下擁有具有相同技術的子類以及相同類型的標準和返回值。
此外,重載是一種命令行多態性,具有靜態鍵和重載靜態方法。 重寫是一種程序執行多態性,具有靈活的鍵和無法重寫靜態方法。
解釋使用雙重檢查鎖定在 Java 中創建線程安全的單例
單例模式是一種眾所周知的設計模式,其中一個類在其整個生命週期中僅限於一個實例,並且多個客戶端共享該實例。 單例模式體現了兩個主要職責:第一個是確保只生成一個類實例。 第二個是提供一種方法,每個人都可以在全球範圍內訪問該特定實例。
Singleton 設計在多線程程序中面臨的挑戰之一是確保只生成一個類的實例,即使不同的用戶同時調用 getInstance() 技術。 雙重檢查鎖定係統通過確保僅在第一次調用 getInstance() 函數並且在沒有上述同步的情況下再次帶回相同實例的任何時候創建單個 Singleton 案例時才使用同步,從而糾正了這種困境所有其他實例。
Java中級面試題
什麼是 JDK? 提到JDK的變種?
JDK 代表 Java 開發工具包。 Java Development Kit (JDK) 是任何 Java 應用程序開發過程中的首選軟件。 Java Development Kit (JDK) 包括編寫、故障排除和分析 Java 編程工具。
從根本上說,JDK 是 Java 標準版或 Java 企業版實現。 由於平台進行了重大升級,Java 在 1998 年更名為 Java 2(簡稱為 Java 2 SDK 或 J2SDK)。 它開發了三個獨立的 Java 版本來支持各種應用程序。
- J2SE 代表 Java 2 Platform, the Basic and Usual Edition,適用於桌面和服務器環境。
- J2EE 代表 Java 2 Platform, Corporate Edition,專為業務應用程序設計,包括基於雲的存儲和在線服務支持等功能。
- J2ME(Java 2 平台,微型版)專門用於已安裝和移動的小工具或平台。
然而,在 2004 年,變體的標籤分別被修改為 Java ME(Java 平台微型版)、Java EE(Java 平台企業版)和 Java SE(Java 平台標準版)。 開發工具包的名稱也從“Java 2 SDK”更改為“JDK”。 此外,操作上下文被重命名為“JRE”而不是“J2RE”。 Java SE 6 和 Java EE 5 及其版本的變體仍在使用中。

構造函數可以返回值嗎?
了解構造函數不像 Java 編程中使用的常規技術,它不會返回或帶回任何指定的結果,這可能會對代碼造成重大影響或影響。 構造函數可以包含無限的指令,但它不能帶回或返回語句的值或結果。
解釋 Java 中的“THIS”關鍵字
“This”是 Java 中的一個特定術語,用於指定程序員現在正在運行的實體。 關鍵字僅作為與使用運算符有關的不同參數的前綴 – 句點 (.),它可以在方法或構造函數內部使用。 'This' 關鍵字並不經常使用,因為大多數應用程序旨在避免出現必要的情況。 通過術語“this”提供對實例變量的訪問。
解釋 Java 中的 'SUPER' 關鍵字
在 Java 中,流行語“super”是與引用父類實例的繼承概念相關聯的相對參數,假設派生類在組或方法中具有與父類同名的參數。 當子類需要訪問基類中的參數、函數或構造函數時,主要使用該術語。
解釋Java中的方法重載
在 Java 中,重載是指具有相同名稱和類但具有不同標準的方法,反之亦然。 兩種或多種技術具有統一的名稱和類,但重載時的簽名不同。 重載是一種命令行多態性,它會拉伸方法的行為,從而導致重載。
我們可以在 Java 中重載靜態方法嗎?
在 Java 中,靜態方法的行為類似於常規的重載方法,因此可以重載。 但是,如果目標是重載靜態方法,則必須提供具有相同名稱但方法簽名不同的附加靜態方法。
定義後期綁定
後期綁定是一種格式,它指示編譯器不應該對方法調用進行類型檢查,不檢查參數,並且應該將所有內容留給運行時(一個實例在 COM 編程中)。
定義動態方法分派
動態方法分派是指在運行時而不是在編譯時解決或修復對覆蓋方法的調用。
為什麼鍊錶中的delete函數比數組快
LinkedList 刪除操作返回 O(1)。 但是 ArrayList 刪除操作在最壞的情況下返回 O(n),即刪除第一個條目時,在最好的情況下返回 O(1),同時刪除最後一個元素。 與 ArrayList 相比,LinkedList 元素刪除更快。 這樣做的原因是每個 LinkedList 元素都有兩個指針(地址)指向列表中的兩個相鄰成員。 因此,刪除節點涉及修改節點的兩個相鄰組件中的參考位置。
面向有經驗的高級 Java 面試問題
儘管繼承是一個流行的 oops 概念,但它不如組合有利。 解釋!
Java 類只能有一個超類,因為該語言不支持多重繼承。 在各種功能中,例如讀取和寫入文件,編譯結構更可取。 您可以將其與私人成員的作家和讀者能力進行比較。 在組合物的幫助下,可以防止破壞封裝,同時實現顯著的柔韌性。 由於繼承而無法進行的單元測試可以在組合的幫助下實現。
使用 new() 創建字符串與使用文字創建字符串有何不同?
當我們使用 new() 生成 String 時,會在堆內存中構建一個新對象。 與字符串文字相比,執行時間更長,因此落後。 但是,當使用字符串字面量創建的字符串的字符串中已建立數據時,該相同數據與字符串池中的字符串變量存在鏈接。 無需使用相同的已建立數據構建全新的字符串即可實現這一點。
儘管有垃圾收集器,程序中是否可能超出內存限制?
是的。 垃圾收集器的存在不會以任何方式阻止或阻礙程序內存不足。
為什麼需要同步? 借助相關示例進行解釋
同步是一種確保所有重合線程同時運行的機制。 同步可防止由不一致的協同內存視圖產生的內存一致性問題。 在同步方法中,對象由線程監視並保持在適當的位置。 如果另一個線程正在執行同步方法,則當前線程將停止,直到前一個線程釋放監視器。
比方說,在需要查找對特定 URL 發出的請求數的情況下,運行多個請求必然會導致計數不穩定。 假設線程 1 將計數視為 12; 加一將增加到 13。 同時,另一個線程 2 也將計數視為 12,並且以同樣的方式通過添加 1 將計數增加到 13。計數值的這種不可預測性的發生是因為最終得到的不是預期的最終值 14值將是 13。這是同步在函數增加時發揮作用的地方 (),因此阻止了對計數的並發訪問。
你能解釋一下 Java 線程的生命週期嗎?
在 Java 中,線程的生命週期被定義為線程從出生到死亡的狀態轉換。 當線程實例生成,調用Thread類的start()函數時,線程進入runnable狀態。 當 Thread 類調用 sleep() 或 wait() 方法時,線程變得不可運行。
使用無序數組與使用有序數組之間的權衡是什麼?
有序數組的一個主要優點是它的搜索時間複雜度為 O(log n)。 有序數組上的插入操作具有 O(n) 的時間複雜度,因為必須移動得分較高的成員以生成新的變體。 另一方面,無序數組的插入操作需要 O(1) 的穩定時間。
是否可以在java中兩次導入相同的類或包,在運行時會發生什麼?
是的。 無論導入類或包的頻率如何,JVM 都會在運行時內部加載一次。
如果代碼 system.Exit(o) 寫在 try 塊的末尾,“Finally”塊會被執行嗎?
不,“finally”塊在這種情況下不會執行,因為當 System.exit (0) 被激活時,控件會立即離開程序,因此“finally”永遠不會執行。 如果系統。 無異常調用 exit(0); 該程序將不會運行。
Java中的標記接口你理解什麼
沒有常量或方法的接口稱為標記接口或標記接口,因為它為編譯器和 JVM 提供了有關對象運行時類型的信息。 遠程接口、Serializable 和 Cloneable 是標記接口的示例,所有這些接口都是空的。
解釋 Java 中的術語“雙大括號初始化”
在 Java 中,雙括號初始化是 2 個獨立過程的混合。 在這種情況下,涉及兩個大括號 ({)。 當在 java 代碼中顯示兩個連續的大括號時,會發生雙大括號初始化。
未命名內部類的構造是第一個大括號,而初始化塊是第二個大括號。 當未命名的內部類使用初始化塊時,會發生 Java 雙大括號初始化。
結論
作為新手程序員甚至是經驗豐富的程序員,這些面試問題可能會顯得有些棘手。 但是,如果您致力於練習這些問題,那麼您一定會在下一次獲得機會時獲得成功。