日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

经常被问到的十个 Java 面试题?你Get了吗?

發(fā)布時(shí)間:2024/7/23 java 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经常被问到的十个 Java 面试题?你Get了吗? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 以滿分十分來評(píng)估自己——你有多擅長 Java?

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

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

實(shí)話說,兩者有很多不同。如果你能列出最重要的,應(yīng)該就足夠了。你應(yīng)該解釋 Java 8 中的新功能。想要獲得完整清單,請(qǐng)?jiān)L問官網(wǎng):Java 8 JDK。

你應(yīng)該知道以下幾個(gè)重點(diǎn):

  • lambda 表達(dá)式,Java 8 版本引入的一個(gè)新特性。lambda 表達(dá)式允許你將功能當(dāng)作方法參數(shù)或?qū)⒋a當(dāng)作數(shù)據(jù)。lambda 表達(dá)式還能讓你以更簡潔的方式表示只有一個(gè)方法的接口 (稱為函數(shù)式接口) 的實(shí)例。

  • 方法引用,為已命名方法提供了易于閱讀的 lambda 表達(dá)式。

  • 默認(rèn)方法,支持將新功能添加到類庫中的接口,并確保與基于這些接口的舊版本的代碼的二進(jìn)制兼容性。

  • 重復(fù)注解,支持在同一聲明或類型上多次應(yīng)用同一注解類型。

  • 類型注解,支持在任何使用類型的地方應(yīng)用注解,而不僅限于聲明。此特性與可插入型系統(tǒng)一起使用時(shí),可增強(qiáng)對(duì)代碼的類型檢查。

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

你應(yīng)該知道以下幾個(gè)最重要的類型:

  • ArrayList

  • LinkedList

  • HashMap

  • HashSet

之后,你可能會(huì)被問到這樣一些問題,比如何時(shí)應(yīng)該使用此種特定類型,它比其他的好在哪里,它是怎么存儲(chǔ)數(shù)據(jù)的以及隱匿在其后的數(shù)據(jù)結(jié)構(gòu)是什么。

最好的方法是盡可能多地了解這些集合類型,因?yàn)檫@類問題幾乎是無窮盡的。

4. Object 類包含哪些方法?

這是一個(gè)非常常見的問題,用來確定你對(duì)基礎(chǔ)知識(shí)的熟悉程度。以下是每個(gè)對(duì)象都具有的方法:

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

  • protected Object clone() throws CloneNotSupportedException?創(chuàng)建并返回此對(duì)象的副本。

  • public boolean equals(Object obj)?判斷另一對(duì)象與此對(duì)象是否「相等」。

  • protected void finalize() throws Throwable?當(dāng)垃圾回收機(jī)制確定該對(duì)象不再被調(diào)用時(shí),垃圾回收器會(huì)調(diào)用此方法。

  • public final Class getClass()?返回此對(duì)象的運(yùn)行時(shí)類。

  • public int hashCode()?返回此對(duì)象的散列碼值。

  • public String toString()?返回此對(duì)象的字符串表示形式。

Object?類的?notify,notifyAll?和?wait?方法都在同步程序中獨(dú)立運(yùn)行線程的活動(dòng)方面發(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 對(duì)象是不可變的?

  • 字符串池之所以可能,就是因?yàn)樽址?Java 中是不可變的。由此 Java 運(yùn)行時(shí)環(huán)境節(jié)省了大量堆空間,因?yàn)椴煌?String 變量可以引用池中的同一 String 變量。如果 String 不是不可變的, 則字符串駐留(String interning)將是不可能的,因?yàn)橐坏┤我蛔兞扛乃玫腟tring對(duì)象的值,它也會(huì)反映在其他變量中。

  • 如果字符串不是不可變的,那么它可能會(huì)對(duì)應(yīng)用程序造成嚴(yán)重的安全威脅。例如,數(shù)據(jù)庫用戶名和密碼都作為 String 傳遞以獲取數(shù)據(jù)庫連接,Socket 編程的主機(jī)和端口信息也是如此。由于字符串是不可變的,因此其值不能被更改。否則,任何黑客都可以篡改其引用的值,這會(huì)導(dǎo)致應(yīng)用程序中的安全問題。

  • 由于 String 是不可變的,因此它對(duì)與多線程處理來說是安全的,并且可以在不同的線程之間共享單個(gè) String 實(shí)例。這避免了為線程安全使用同步;字符串是隱式線程安全的。

  • 字符串被用在 Java 類加載器中,其不可變性為類加載器加載正確的類提供了安全性。否則的話,請(qǐng)考慮這樣一個(gè)危險(xiǎn)的情況,在你嘗試加載?java.sql.Connection?類時(shí),你引用的值卻被更改為?myhacked.Connection,并且它能對(duì)數(shù)據(jù)庫執(zhí)行你不需要的操作。

  • 由于 String 是不可變的,因此在它被創(chuàng)建時(shí)其散列碼就被緩存,不需要再次計(jì)算。這使得它成為映射中鍵的理想對(duì)象,它的處理速度比其他HashMap?鍵類型快。這就是為什么 String 是?HashMap?中最常用的鍵類型。

  • 為什么 Java 中的字符串不可變?點(diǎn)擊這里了解更多。

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

    這是我最喜歡的問題。

    • final?關(guān)鍵字用于在多個(gè)語境下定義只能分配一次的實(shí)體。

    • finally?代碼塊是用于執(zhí)行重要代碼 (如關(guān)閉連接、流等) 的代碼塊。無論是否處理異常,finally?代碼塊總會(huì)被執(zhí)行。finally?代碼塊緊隨?try?代碼塊或?catch?代碼塊。

    • 這是在刪除或銷毀對(duì)象之前垃圾回收器總會(huì)調(diào)用的方法,該方法使得垃圾回收機(jī)制能夠執(zhí)行清理活動(dòng)。

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

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

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

    8. 如何使一個(gè)類不可變?

    我認(rèn)為這是一個(gè)相當(dāng)困難的問題。您需要對(duì)類進(jìn)行多次修改,以實(shí)現(xiàn)不可變性:

  • 將類聲明為?final,使其無法被繼承。

  • 所有域都用?private?修飾,不允許直接訪問。

  • 不提供變量的?setter?方法。

  • 所有可變域都用?final?修飾, 使它的值只能分配一次。

  • 通過構(gòu)造函數(shù)執(zhí)行深克隆初始化所有域。

  • 對(duì)?getter?方法獲取的對(duì)象執(zhí)行克隆以返回副本,而不是返回實(shí)際的對(duì)象引用。

  • 9. 什么是單例模式?

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

    10. 什么是依賴注入?

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

    為了讓學(xué)習(xí)變得輕松、高效,今天給大家免費(fèi)分享一套Java入門教學(xué)資源。幫助大家在成為Java架構(gòu)師的道路上披荊斬棘。需要資料的歡迎加入學(xué)習(xí)交流群:9285,05736

    總結(jié)

    以上是生活随笔為你收集整理的经常被问到的十个 Java 面试题?你Get了吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。