百度java面試題參考

百度java面試題參考

長沙達內(nèi)教育      2022-04-22 05:14:01     10

百度java面試題參考,相信有不少小伙伴都想通過學(xué)習java進入到知名企業(yè),百度公司就是很多朋友所向往的,當然要去百度也需要參加面試才可以,長沙達內(nèi)

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細介紹

相信有不少小伙伴都想通過學(xué)習java進入到知名企業(yè),百度公司就是很多朋友所向往的,當然要去百度也需要參加面試才可以,長沙達內(nèi)教育java培訓(xùn)機構(gòu)的小編就為大家準備了百度java面試題參考,希望對大家能夠有所幫助。

1.linkedHashMap 的應(yīng)用

基于 linkedHashMap 的訪問順序的特點,可構(gòu)造一個 LRU(Least Recently Used) 最近最少使用簡單緩存。 也有一些開源的緩存產(chǎn)品如 ehcache 的淘汰策略( LRU )就是在 linkedHashMap 上擴展的。

2.Cloneable 接口實現(xiàn)原理

Cloneable接口是Java開發(fā)中常用的一個接口, 它的作用是使一個類的實例能夠?qū)⒆陨砜截惖搅硪粋€新的實例中, 注意,這里所說的“拷貝”拷的是對象實例,而不是類的定義,進一步說,拷貝的是一個類的實例中各字段的值。

在開發(fā)過程中,拷貝實例是常見的一種操作,如果一個類中的字段較多,而我們又采用在客戶端中逐字段復(fù)制的方 法進行拷貝操作的話,將不可避免的造成客戶端代碼繁雜冗長,而且也無法對類中的私有成員進行復(fù)制,而如果讓需要 具備拷貝功能的類實現(xiàn)Cloneable接口,并重寫clone()方法,就可以通過調(diào)用clone()方法的方式簡潔地實現(xiàn)實例 拷貝功能。

深拷貝(深復(fù)制)和淺拷貝(淺復(fù)制)是兩個比較通用的概念,尤其在C++語言中,若不弄懂,則會在delete的時候出問題,但是我們在這幸好用的是Java。雖然Java自動管理對象的回收,但對于深拷貝(深復(fù)制)和淺拷貝(淺復(fù)制),我們 還是要給予足夠的重視,因為有時這兩個概念往往會給我們帶來不小的困惑。

淺拷貝是指拷貝對象時僅僅拷貝對象本身(包括對象中的基本變量),而不拷貝對象包含的引用指向的對象。深拷 貝不僅拷貝對象本身,而且拷貝對象包含的引用指向的所有對象。舉例來說更加清楚:對象 A1 中包含對 B1 的引用, B1 中包含對 C1 的引用。淺拷貝 A1 得到 A2 , A2 中依然包含對 B1 的引用, B1 中依然包含對 C1 的引 用。深拷貝則是對淺拷貝的遞歸,深拷貝 A1 得到 A2 , A2 中包含對 B2 ( B1 的 copy )的引用, B2 中包含 對 C2 ( C1 的 copy )的引用。

若不對clone()方法進行改寫,則調(diào)用此方法得到的對象即為淺拷貝

3.異常分類以及處理機制

Java標準庫內(nèi)建了一些通用的異常,這些類以Throwable為頂層父類。

Throwable又派生出Error類和Exception類。

錯誤:Error類以及他的子類的實例,代表了JVM本身的錯誤。錯誤不能被程序員通過代碼處理,Error很少出現(xiàn)。

因此,程序員應(yīng)該關(guān)注Exception為父類的分支下的各種異常類。

異常:Exception以及他的子類,代表程序運行時發(fā)送的各種不期望發(fā)生的事件??梢员籎ava異常處理機制使用, 是異常處理的核心。

總體上我們根據(jù) Javac 對異常的處理要求,將異常類分為二類。

非檢查異常( unckecked exception ): Error 和 RuntimeException 以及他們的子類。 javac 在編譯時, 不會提示和發(fā)現(xiàn)這樣的異常,不要求在程序處理這些異常。所以如果愿意,我們可以編寫代碼處理(使用 try… catch…finally )這樣的異常,也可以不處理。對于這些異常,我們應(yīng)該修正代碼,而不是去通過異常處理器處理 。這樣的異常發(fā)生的原因多半是代碼寫的有問題。如除0錯誤 ArithmeticException ,錯誤的強制類型轉(zhuǎn)換錯 誤 ClassCastException ,數(shù)組索引越界 ArrayIndexOutOfBoundsException ,使用了空對象 NullPointerException 等等。

檢查異常( checked exception ):除了 Error 和 RuntimeException 的其它異常。 javac 強制要求程序員 為這樣的異常做預(yù)備處理工作(使用 try…catch…finally 或者 throws )。在方法中要么用 try-catch 語句捕 獲它并處理,要么用throws子句聲明拋出它,否則編譯不會通過。這樣的異常一般是由程序的運行環(huán)境導(dǎo)致的。因 為程序可能被運行在各種未知的環(huán)境下,而程序員無法干預(yù)用戶如何使用他編寫的程序,于是程序員就應(yīng)該為這樣 的異常時刻準備著。如 SQLException , IOException , ClassNotFoundException 等。

需要明確的是:檢查和非檢查是對于 javac 來說的,這樣就很好理解和區(qū)分了。

4.wait 和 sleep 的區(qū)別

源碼如下:

(1) sleep 來自 Thread 類,和 wait 來自 Object 類。 

(2)最主要是sleep方法沒有釋放鎖,而wait方法釋放了 鎖,使得其他線程可以使用同步控制塊或者方法。 

(3)wait,notify和 notifyAll 只能在同步控制方法或者同步控制塊里面使用,而 sleep 可以在任何地方使用(使 用范圍)

(4)sleep 必須捕獲異常,而 wait , notify 和 notifyAll 不需要捕獲異常

• sleep 方法屬于 Thread 類中方法,表示讓一個線程進入睡眠狀態(tài),等待一定的時間之后,自動醒來進入到可 運行狀態(tài),不會馬上進入運行狀態(tài),因為線程調(diào)度機制恢復(fù)線程的運行也需要時間,一個線程對象調(diào)用了 sleep 方法之后,并不會釋放他所持有的所有對象鎖,所以也就不會影響其他進程對象的運行。但在 sleep 的過程中過 程中有可能被其他對象調(diào)用它的 interrupt() ,產(chǎn)生 InterruptedException 異常,如果你的程序不捕獲這個異 常,線程就會異常終止,進入 TERMINATED 狀態(tài),如果你的程序捕獲了這個異常,那么程序就會繼續(xù)執(zhí)行catch語 句塊(可能還有 finally 語句塊)以及以后的代碼。

注意 sleep() 方法是一個靜態(tài)方法,也就是說他只對當前對象有效,通過 t.sleep() 讓t對象進入 sleep ,這樣 的做法是錯誤的,它只會是使當前線程被 sleep 而不是 t 線程

• wait 屬于 Object 的成員方法,一旦一個對象調(diào)用了wait方法,必須要采用 notify() 和 notifyAll() 方法 喚醒該進程;如果線程擁有某個或某些對象的同步鎖,那么在調(diào)用了 wait() 后,這個線程就會釋放它持有的所有 同步資源,而不限于這個被調(diào)用了 wait() 方法的對象。 wait() 方法也同樣會在 wait 的過程中有可能被其他對 象調(diào)用 interrupt() 方法而產(chǎn)生 。
5.數(shù)組在內(nèi)存中如何分配

對于 Java 數(shù)組的初始化,有以下兩種方式,這也是面試中經(jīng)??嫉降慕?jīng)典題目:

靜態(tài)初始化:初始化時由程序員顯式指定每個數(shù)組元素的初始值,由系統(tǒng)決定數(shù)組長度,如:

動態(tài)初始化:初始化時由程序員顯示的指定數(shù)組的長度,由系統(tǒng)為數(shù)據(jù)每個元素分配初始值,如:

因為 Java 數(shù)組變量是引用類型的變量,所以上述幾行初始化語句執(zhí)行后,三個數(shù)組在內(nèi)存中的分配情況如下圖所示:

由上圖可知,靜態(tài)初始化方式,程序員雖然沒有指定數(shù)組長度,但是系統(tǒng)已經(jīng)自動幫我們給分配了,而動態(tài)初始化 方式,程序員雖然沒有顯示的指定初始化值,但是因為 Java 數(shù)組是引用類型的變量,所以系統(tǒng)也為每個元素分配 了初始化值 null ,當然不同類型的初始化值也是不一樣的,假設(shè)是基本類型int類型,那么為系統(tǒng)分配的初始化值 也是對應(yīng)的默認值0。

以上就是長沙達內(nèi)教育java培訓(xùn)機構(gòu)的小編針對“百度java面試題參考”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

Java面試題

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹慎!任何要求預(yù)付定金、匯款等方式均存在風險,謹防上當。