中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

常被問到的十個 Java 面試題

2018-12-21    來源:importnew

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

在這篇文章中,我試圖收錄最有趣和最常見的問題。此外,我將為您提供正確的答案。

接下來,就讓我們來看看這些問題。

1. 以滿分十分來評估自己——你有多擅長 Java?

如果你并不完全確信你自己或是你對 Java 的熟練程度,那么這會是一個非常棘手的問題。如果有這種情況,你應該把打分調低一點。之后,你大概會得到與你承認的水平相符的問題。因此,假如你給自己滿分,卻不能回答一個有點難的問題,那將會對你不利。

2. 闡述 Java 7 和 Java 8 的區(qū)別。

實話說,兩者有很多不同。如果你能列出最重要的,應該就足夠了。你應該解釋 Java 8 中的新功能。想要獲得完整清單,請訪問官網:Java 8 JDK。

你應該知道以下幾個重點:

  • lambda 表達式,Java 8 版本引入的一個新特性。lambda 表達式允許你將功能當作方法參數或將代碼當作數據。lambda 表達式還能讓你以更簡潔的方式表示只有一個方法的接口 (稱為函數式接口) 的實例。
  • 方法引用,為已命名方法提供了易于閱讀的 lambda 表達式。
  • 默認方法,支持將新功能添加到類庫中的接口,并確保與基于這些接口的舊版本的代碼的二進制兼容性。
  • 重復注解,支持在同一聲明或類型上多次應用同一注解類型。
  • 類型注解,支持在任何使用類型的地方應用注解,而不僅限于聲明。此特性與可插入型系統(tǒng)一起使用時,可增強對代碼的類型檢查。

3. 你了解哪些集合類型?

你應該知道以下幾個最重要的類型:

  • ArrayList
  • LinkedList
  • HashMap
  • HashSet

之后,你可能會被問到這樣一些問題,比如何時應該使用此種特定類型,它比其他的好在哪里,它是怎么存儲數據的以及隱匿在其后的數據結構是什么。

最好的方法是盡可能多地了解這些集合類型,因為這類問題幾乎是無窮盡的。

4. Object 類包含哪些方法?

這是一個非常常見的問題,用來確定你對基礎知識的熟悉程度。以下是每個對象都具有的方法:

在?java.lang?包中,Object?類位于類層次結構的頂端。每個類都是?Object?類直接或間接的子類。你使用或編寫的每個類都繼承了?Object?類中的實例方法。你并不需要使用這些方法中的任何一種,但是,如果你選擇這樣做,則可能需要用你的類的特定代碼來重寫這些方法。以下是本節(jié)所討論的從?Object?類中繼承的方法:

  • protected Object clone() throws CloneNotSupportedException?創(chuàng)建并返回此對象的副本。
  • public boolean equals(Object obj)?判斷另一對象與此對象是否「相等」。
  • protected void finalize() throws Throwable?當垃圾回收機制確定該對象不再被調用時,垃圾回收器會調用此方法。
  • public final Class getClass()?返回此對象的運行時類。
  • public int hashCode()?返回此對象的散列碼值。
  • public String toString()?返回此對象的字符串表示形式。

Object?類的?notify,notifyAll?和?wait?方法都在同步程序中獨立運行線程的活動方面發(fā)揮了作用,這將在后面的課程中討論,在此不做介紹。其中有五種方法:

  • 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 對象是不可變的?

  1. 字符串池之所以可能,就是因為字符串在 Java 中是不可變的。由此 Java 運行時環(huán)境節(jié)省了大量堆空間,因為不同的 String 變量可以引用池中的同一 String 變量。如果 String 不是不可變的, 則字符串駐留(String interning)將是不可能的,因為一旦任一變量更改所引用的String對象的值,它也會反映在其他變量中。
  2. 如果字符串不是不可變的,那么它可能會對應用程序造成嚴重的安全威脅。例如,數據庫用戶名和密碼都作為 String 傳遞以獲取數據庫連接,Socket 編程的主機和端口信息也是如此。由于字符串是不可變的,因此其值不能被更改。否則,任何黑客都可以篡改其引用的值,這會導致應用程序中的安全問題。
  3. 由于 String 是不可變的,因此它對與多線程處理來說是安全的,并且可以在不同的線程之間共享單個 String 實例。這避免了為線程安全使用同步;字符串是隱式線程安全的。
  4. 字符串被用在 Java 類加載器中,其不可變性為類加載器加載正確的類提供了安全性。否則的話,請考慮這樣一個危險的情況,在你嘗試加載?java.sql.Connection?類時,你引用的值卻被更改為?myhacked.Connection,并且它能對數據庫執(zhí)行你不需要的操作。
  5. 由于 String 是不可變的,因此在它被創(chuàng)建時其散列碼就被緩存,不需要再次計算。這使得它成為映射中鍵的理想對象,它的處理速度比其他HashMap?鍵類型快。這就是為什么 String 是?HashMap?中最常用的鍵類型。

為什么 Java 中的字符串不可變?點擊這里了解更多。

6. final,finally,和 finalize 三者之間有什么不同?

這是我最喜歡的問題。

  • final?關鍵字用于在多個語境下定義只能分配一次的實體。
  • finally?代碼塊是用于執(zhí)行重要代碼 (如關閉連接、流等) 的代碼塊。無論是否處理異常,finally?代碼塊總會被執(zhí)行。finally?代碼塊緊隨?try?代碼塊或?catch?代碼塊。
  • 這是在刪除或銷毀對象之前垃圾回收器總會調用的方法,該方法使得垃圾回收機制能夠執(zhí)行清理活動。

7. 什么是菱形繼承問題?

菱形繼承問題反映了為什么在 Java 中我們不被允許實現多繼承。如果有兩個類共同繼承一個有特定方法的超類,那么該方法會被兩個子類重寫。然后,如果你決定同時繼承這兩個子類,那么在你調用該重寫方法時,編譯器不能識別你要調用哪個子類的方法。

我們把這個問題稱為?菱形繼承問題?。上圖對它作了說明,它也得名于此。

8. 如何使一個類不可變?

我認為這是一個相當困難的問題。您需要對類進行多次修改,以實現不可變性:

  1. 將類聲明為?final,使其無法被繼承。
  2. 所有域都用?private?修飾,不允許直接訪問。
  3. 不提供變量的?setter?方法。
  4. 所有可變域都用?final?修飾, 使它的值只能分配一次。
  5. 通過構造函數執(zhí)行深克隆初始化所有域。
  6. 對?getter?方法獲取的對象執(zhí)行克隆以返回副本,而不是返回實際的對象引用。

9. 什么是單例模式?

單例模式是指一個類僅允許創(chuàng)建其自身的一個實例,并提供對該實例的訪問權限。它包含靜態(tài)變量,可以容納其自身的唯一和私有實例。它被應用于這種場景——用戶希望類的實例被約束為一個對象。在需要單個對象來協(xié)調整個系統(tǒng)時,它會很有幫助。

10. 什么是依賴注入?

這是你必須知道的首要問題, 無論你是使用 Java EE 還是 Spring 框架。你可以看看我的文章,其中進一步地解釋了這一點:?什么是依賴注入?

總結

在本文中,我們討論了最常見的十個 Java 面試題——在我看來這是根據我的經驗總結出的時下最重要的問題。如果你了解這些問題,我相信你能在面試中獲得很大的優(yōu)勢。

希望我可以幫助到你!如果你有關于這個話題的類似經驗,或者有一些成功的故事,不要猶豫,在下面的評論區(qū)中分享它們。

再見!

原文鏈接: dzone 翻譯: ImportNew.com - ZIDANE
譯文鏈接: http://www.importnew.com/30956.html
[ 轉載請保留原文出處、譯者和譯文鏈接。]

關于作者: ZIDANE

查看ZIDANE的更多文章 >>

標簽: 安全 代碼 權限 數據庫

版權申明:本站文章部分自網絡,如有侵權,請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Spring源碼探究:容器

下一篇:ImportNew一周資訊:開發(fā)者應該了解的 RabbitMQ 最佳實踐