學(xué)好java技術(shù)后,大家面臨的問題便是求職,在求職過程中,求職者會(huì)被問到很多專業(yè)技術(shù)上的問題,那么有哪些是Java程序員面試中容易被問到的問題呢?下面云和小編收集了八個(gè)常常被問到的Java面試題,希望能幫助到大家。
Java程序員面試中容易被問到的問題
1.闡述 Java 7 和 Java 8 的區(qū)別。
實(shí)話說,兩者有很多不同。如果你能列出最重要的,應(yīng)該就足夠了。你應(yīng)該解釋 Java 8 中的新功能。想要獲得完整清單,請?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)對代碼的類型檢查。
2.你了解哪些集合類型?
你應(yīng)該知道以下幾個(gè)最重要的類型:ArrayList、LinkedList、HashMap、HashSet
之后,你可能會(huì)被問到這樣一些問題,比如何時(shí)應(yīng)該使用此種特定類型,它比其他的好在哪里,它是怎么存儲(chǔ)數(shù)據(jù)的以及隱匿在其后的數(shù)據(jù)結(jié)構(gòu)是什么。
最好的方法是盡可能多地了解這些集合類型,因?yàn)檫@類問題幾乎是無窮盡的。
3.Object 類包含哪些方法?
這是一個(gè)非常常見的問題,用來確定你對基礎(chǔ)知識(shí)的熟悉程度。以下是每個(gè)對象都具有的方法:
在 java.lang 包中,Object 類位于類層次結(jié)構(gòu)的頂端。每個(gè)類都是 Object 類直接或間接的子類。你使用或編寫的每個(gè)類都繼承了 Object 類中的實(shí)例方法。你并不需要使用這些方法中的任何一種,但是,如果你選擇這樣做,則可能需要用你的類的特定代碼來重寫這些方法。以下是本節(jié)所討論的從 Object 類中繼承的方法:
protected Object clone throws CloneNotSupportedException 創(chuàng)建并返回此對象的副本。
public boolean equals(Object obj) 判斷另一對象與此對象是否「相等」。
protected void finalize throws Throwable 當(dāng)垃圾回收機(jī)制確定該對象不再被調(diào)用時(shí),垃圾回收器會(huì)調(diào)用此方法。
public final Class getClass 返回此對象的運(yùn)行時(shí)類。
public int hashCode 返回此對象的散列碼值。
public String toString 返回此對象的字符串表示形式。
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)
4.為什么 String 對象是不可變的?
因?yàn)樽址?Java 中是不可變的,由此 Java 運(yùn)行時(shí)環(huán)境節(jié)省了大量堆空間,因?yàn)椴煌?String 變量可以引用池中的同一 String 變量。如果 String 不是不可變的, 則字符串駐留(String interning)將是不可能的,因?yàn)橐坏┤我蛔兞扛乃玫腟tring對象的值,它也會(huì)反映在其他變量中。
如果字符串不是不可變的,那么它可能會(huì)對應(yīng)用程序造成嚴(yán)重的安全威脅。例如,數(shù)據(jù)庫用戶名和密碼都作為 String 傳遞以獲取數(shù)據(jù)庫連接,Socket 編程的主機(jī)和端口信息也是如此。由于字符串是不可變的,因此其值不能被更改。否則,任何黑客都可以篡改其引用的值,這會(huì)導(dǎo)致應(yīng)用程序中的安全問題。
由于 String 是不可變的,因此它對與多線程處理來說是安全的,并且可以在不同的線程之間共享單個(gè) String 實(shí)例。這避免了為線程安全使用同步;字符串是隱式線程安全的。
字符串被用在 Java 類加載器中,其不可變性為類加載器加載正確的類提供了安全性。否則的話,請考慮這樣一個(gè)危險(xiǎn)的情況,在你嘗試加載 java.sql.Connection 類時(shí),你引用的值卻被更改為 myhacked.Connection,并且它能對數(shù)據(jù)庫執(zhí)行你不需要的操作。
由于 String 是不可變的,因此在它被創(chuàng)建時(shí)其散列碼就被緩存,不需要再次計(jì)算。這使得它成為映射中鍵的理想對象,它的處理速度比其他HashMap 鍵類型快。這就是為什么 String 是 HashMap 中最常用的鍵類型。
5.final,finally,和 finalize 三者之間有什么不同?
final 關(guān)鍵字用于在多個(gè)語境下定義只能分配一次的實(shí)體。
finally 代碼塊是用于執(zhí)行重要代碼 (如關(guān)閉連接、流等) 的代碼塊。無論是否處理異常,finally 代碼塊總會(huì)被執(zhí)行。finally 代碼塊緊隨 try 代碼塊或 catch 代碼塊。
finalize 是在刪除或銷毀對象之前垃圾回收器總會(huì)調(diào)用的方法,該方法使得垃圾回收機(jī)制能夠執(zhí)行清理活動(dòng)。
6.如何使一個(gè)類不可變?
將類聲明為 final,使其無法被繼承。
所有域都用 private 修飾,不允許直接訪問。
不提供變量的 setter 方法。
所有可變域都用 final 修飾, 使它的值只能分配一次。
通過構(gòu)造函數(shù)執(zhí)行深克隆初始化所有域。
對 getter 方法獲取的對象執(zhí)行克隆以返回副本,而不是返回實(shí)際的對象引用。
7.什么是單例模式?
單例模式是指一個(gè)類僅允許創(chuàng)建其自身的一個(gè)實(shí)例,并提供對該實(shí)例的訪問權(quán)限。它包含靜態(tài)變量,可以容納其自身的唯一和私有實(shí)例。它被應(yīng)用于這種場景——用戶希望類的實(shí)例被約束為一個(gè)對象。在需要單個(gè)對象來協(xié)調(diào)整個(gè)系統(tǒng)時(shí),它會(huì)很有幫助。
8.什么是依賴注入?
依賴注入是spring框架中的解耦的一種策略,稱為DI,主要有set方式(提供set和get方法)和constractor(構(gòu)造方法)方式,它使得類與類之間以配置文件的形式組織在一起,而不是硬編碼的方式
Java程序員面試中容易被問到的問題都有哪些呢?以上就是常見的八個(gè)Java面試題,如果你了解了這些問題,相信你能在面試中獲得很大的優(yōu)勢,即使這次面試沒有被問到,很可能下次的面試中就會(huì)被問到了哦,更多java培訓(xùn)咨詢盡在云和數(shù)據(jù)官網(wǎng),歡迎大家?guī)碜稍儭?/p>
Copyright ? 2013-2021 河南云和數(shù)據(jù)信息技術(shù)有限公司 豫ICP備14003305號 ISP經(jīng)營許可證:豫B-20160281