首頁 > Java > Java面試題 > 主體

頻繁遇到的10個Java面試問題

王林
發布: 2021-02-04 10:20:13
轉載
3038 人瀏覽過

頻繁遇到的10個Java面試問題

以下是近來面試中常被問到的10個問題,現在整理分享出來,以供參考。

1、用10分來評估你自己——你在Java方面有多好?

如果您對自己或對Java的熟練程度不太確定,那麼這是一個非常棘手的問題。如果你是Java專家,你應該放低一點。在這之後,你可能會根據你所承認的程度得到問題。因此,例如,如果您說了10,但不能回答一個相當困難的問題,那麼這將是一個缺點。

2、解釋Java 7和Java 8的差異。

老實說,有很多不同之處。在這裡,如果你能列出最重要的,就足夠了。您應該解釋Java 8中的新特性。有關完整列表,請訪問原始網站:Java 8 JDK。

你應該知道的最重要的一點是:

Lambda表達式,一個新的語言特性,已經在這個版本中引入。 Lambda表達式可讓您將功能視為方法參數或程式碼視為資料。 Lambda表達式可讓您更緊湊地表達單方法介面的實例(稱為函數介面)。

Method references(方法參考)為已經有名稱的方法提供了易於閱讀的lambda表達式。

Default methods(預設方法)允許將新功能新增至庫的介面中,並確保與為這些介面的舊版本編寫的程式碼的二進位相容性。

Repeating annotations提供了將相同註解類型多次套用到相同宣告或型別使用的能力。

Type annotations 類型註解提供了在使用類型的任何地方應用註解的能力,而不僅僅是在聲明中。與可插入類型系統一起使用時,此特性支援改進的程式碼類型檢查。

3、您知道集合類型有哪些?

在這裡你應該知道最重要的一點:

ArrayList

LinkedList

HashMap

HashSet

在此之後,您可能會遇到一些問題,例如什麼時候應該使用這個特定的集合類型,與其他類型相比有什麼好處,它如何存儲數據,以及幕後的數據結構是如何運作的。

在這裡,最好的方法是盡可能多地了解這些集合類型,因為各種問題幾乎是取之不盡的。

4. Object 類別有哪些方法?

這是一個很常見的問題,用來確定你對基本知識的熟悉程度。這些是每個物件都有的方法:

Object類,屬於java.lang包,位於類別層次結構樹的頂部。每個類別都是物件類別的直接或間接的後代。您使用或編寫的每個類別都繼承物件的實例方法。您不需要使用任何這些方法,但是,如果您選擇這樣做,您可能需要使用特定於類別的程式碼覆蓋它們。

從本節討論的Object繼承的方法有:

  • protected Object clone() throws CloneNotSupportedException建立並傳回此物件的副本。
  • public boolean equals(Object obj)標識其他物件是否「等於」這個物件。
  • protected void finalize() throws Throwable當垃圾收集決定沒有對物件的參考時,垃圾收集器會在物件上呼叫。
  • public final Class getClass()傳回物件的執行時間類別。
  • public int hashCode()傳回物件的hashcode
  • #public String toString()傳回物件的字串表示形式。

Object的notify、notifyAll和wait方法都在同步程式中獨立執行執行緒的活動中起著作用,這將在後面討論,在這裡不會討論。

有五種方法:

  • public final void notify()
  • public final void notifyAll()
  • public final void wait()
  • #public final void wait(long timeout)
  • public final void wait(long timeout, int nanos)

5、為什麼String物件在Java中是不可變的?

1、因為字串在Java中是不可變的,才能有String pool。透過這種方式,Java執行時間節省了大量Java堆空間,因為不同的字串變數可以引用池中的相同字串變數。如果String不是不可變的,那麼String interning就不可能實現,因為如果任何變數改變了值,它就會反映在其他變數中。

(更多相關面試題推薦:java面試題目及答案

#2、如果字串不是不可變的,那麼它將對應用程式造成嚴重的安全威脅。例如,資料庫使用者名稱和密碼作為字串傳遞,以獲得資料庫連接、套接字編程主機和作為字串傳遞的連接埠詳細資訊。因為String是不可變的,所以它的值不能改變。否則,任何駭客都可能更改引用值,從而導致應用程式中的安全問題。

3、由於String是不可變的,所以它對於多執行緒是安全的,並且單一字串實例可以在不同的執行緒之間共享。為了線程安全,避免使用同步;字串是隱式線程安全的。

4、字串在Java類別載入器中使用,不可變性提供了正確的類別被類別載入器載入的安全性。例如,考慮一個您試圖載入java.sql的實例。連接類,但引用的值被更改為myhacking。連接類,可以對資料庫執行不需要的操作。

5、因為String是不可變的,所以它的hashcode會在建立時緩存,不需要再計算。這使它成為映射中鍵的一個很好的候選對象,而且它的處理速度比其他HashMap鍵對象快。這就是為什麼String是HashMap鍵最常用的物件。

6、Final、Finally和Finalize的差別是什麼?

這個問題是我最喜歡的。

final 關鍵字在幾個上下文中用來定義一個只能指派一次的實體。

Java finally區塊是用來執行重要程式碼的區塊,例如關閉連線、串流等。無論是否處理異常,Java finally區塊總是被執行。 Java finally區塊跟隨try或catch區塊。

Finalize是 GarbageCollector(垃圾收集器)在刪除/銷毀物件之前呼叫的方法,物件有資格進行垃圾收集以執行清理活動。

7、diamond的問題是什麼?

diamond問題反映了為什麼不允許在Java中進行多次繼承。如果有兩個類別具有具有特定方法的共用超類,那麼它將在兩個子類別中被重寫。然後,如果您決定從這兩個子類別繼承,那麼如果您想呼叫該方法,語言無法決定您想要呼叫哪個方法

我們把這個問題稱為鑽石問題。它的名字來自上面的圖片,它描述了警告。

8、你怎麼能讓一個類別不可變的?

#我認為這是一個相當困難的問題。你需要對你的類別做一些修改,以實現不變性:

1、將類別宣告為final,這樣它就不能擴展了。

2、讓所有欄位都是私有的,這樣就不允許直接存取。

3、不要為變數提供setter方法

4、讓所有可變欄位成為final,這樣它的值只能被賦值一次。

5、透過執行深度複製的建構子初始化所有欄位。

6、在getter方法中執行物件克隆,以傳回副本,而不是傳回實際的物件參考。

9、單例Singleton什麼意思?

singleton是一個類,它只允許自己的一個實例被創建,並提供對所創建實例的存取。它包含靜態變量,這些靜態變數可以容納其自身的惟一和私有實例。當使用者希望將類別的實例化限制為一個物件時,可以使用它。當需要單一物件來協調跨系統的操作時,這通常是有幫助的。

10、什麼是依賴注入?

這是您在Java EE或Spring工作時必須知道的第一個問題。控制反轉(Inversion of Control,縮寫為IoC),是物件導向程式設計中的一種設計原則,可以用來減少電腦程式碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection,簡稱DI),還有一種方式叫做「依賴查找」(Dependency Lookup)。透過控制反轉,物件在被創建的時候,由一個調控系統內所有物件的外界實體,將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。

元件不做定位查詢,只提供普通的Java方法讓容器去決定依賴關係。容器全權負責的元件的組裝,它會把符合依賴關係的物件經由JavaBean屬性或建構函式傳遞給需要的物件。透過JavaBean屬性注射依賴關係的做法稱為設值方法注入(Setter Injection);將依賴關係作為建構子參數傳入的做法稱為建構器注入(Constructor Injection)

總結

############################ ##在本文中,我們討論了10大Java面試問題,我認為,根據我的經驗,這是當今最重要的問題。如果你知道這些,我相信你在招募過程中會有很大的優勢。 ######如果你在這個主題上有類似的經歷,或者你有一些成功的故事,請在下面的評論中分享。 ######相關推薦:###java影片教學######

以上是頻繁遇到的10個Java面試問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!