百度Java研發面試題分析
1. 單例模式常見的應用場景分析。
在23種設計模式中,單例模式排行老大。雖然理解簡單,但是對于應用場景。你真正的熟悉么?使用單例,是由于沒必要每個請求都新建一個對象,這樣既浪費CPU又浪費內存;之所以用多例,是為了防止并發問題;即一個請求改變了對象的狀態,此時對象又處理另一個請求,而之前請求對對象狀態的改變導致了對象對另一個請求做了錯誤的處理。
先來說說Java web中的單例應用場景:數據庫連接池就是單例模式,有且僅有一個連接池管理者,管理多個連接池對象。我們常用的service和dao層的對象通常都是 單例的(由于其所有的請求都用一個對象來處理),而struts2中的action則是多例,由于每個請求是用一個新的對象來處理的(因為action本 身含有請求參數的值,即可改變的狀態)。 log4j日志記錄也是單例模式,因為從始至終都僅維護一個對象。(應用程序的日志應用,一般都何用單例模式實現,這一般是由于共享的日志文件一直處于打 開狀態,因為只能有一個實例去操作,否則內容不好追加)。
2. 什么是平衡二叉樹。
它或者是一顆空樹,或者具有以下性質的二叉樹:它的左子樹和右子樹的深度之差的絕對值不超過1,且它的左子樹和右子樹都是一顆平衡二叉樹。
3. 什么是紅黑樹。
紅黑樹是特殊的平衡二叉樹。遵循紅定理和黑定理。紅定理:在一條路徑上不能出現兩個相連的紅節點;黑定理:根節點必須是黑節點,而且所有節點通向樹的尾端的路徑上,所含的黑節點的個數必須相等。
4. 什么是B樹。(二叉搜索樹)
所有節點存儲一個關鍵字;非葉子結點的左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的`子樹;所有非葉子節點最多擁有兩個兒子。
5. 什么是B-樹。(多路搜索樹)
根節點兒子樹[2,m];非根節點非葉子節點的兒子樹[m/2,m];每個節點的關鍵字數為[m/2-1,m-1]。
6. 什么是B+樹。
B+樹是B-樹的變體;在B-樹的定義之上,補充定義有:所有關鍵字都在葉子節點出現;所有葉子節點增加一個鏈指針;非葉子節點的子樹與關鍵字個數相同。
總結:平衡二叉樹是一種二叉搜索樹。其可以保證在log2(n)的時間內找到節點,而普通的二叉搜索樹在最壞情況下性能近似與鏈表,所用時間為log(n)。紅黑樹用在內部排序,即全放在內存中的,微軟STL的map和set的內部實現就是紅黑樹。B樹多用在內存里放不下,大部分數據存儲在外存上時。因為B樹層數少,因此可以確保每次操作,讀取磁盤的次數盡可能的少。在數據較小,可以完全放到內存中時,紅黑樹的時間復雜度比B樹低。反之,數據量較大,外存中占主要部分時,B樹因其讀磁盤次數少,而具有更快的速度。
補充紅黑樹的由來:在查找中,雖然hash表查找非常迅速,但是隨著數據的種類增多,hash表長會變得更長,且沖突也會越來越多,那么如何才能實現無論在多大數據量的情況下,查找依然是高性能的呢?同時我們又知道樹是很好的一種數據結構,那用于插入,刪除,查找等都是很高效的數據樹構,但問題是在很壞的情況下,操作很費時間,它的性能得到不保證,比如二叉查找樹中如果左子樹與右子樹相差太遠,那么查找時就很費時間。這時為了保證其有高效性,就得保證左樹與右樹不能差得太遠,當向樹中插入時,就按一定規則調整,使其達到規則,從而使其整體與局部查找效率得到提高。這就是紅黑樹的規則。
7. final finally finalize三者的區別。
finalize是一個方法,而且它是 Object類中的一個方法。當垃圾收集器在確定這個對象沒有被引用時調用對象的finalize方法。它的作用是為GC清理對象之前做一些必要的清理工 作(如輸入/輸出連接的對象的 finalize 方法可執行顯式 I/O 事務,以便在永久丟棄對象之前中斷連接)。
finally用在try,catch異常機制中,不管什么情況都會執行。
final修飾類,表示不可被繼承;修飾基本數據類型,即常量不可變;修飾引用類型,指向的對象內容可變,對象不可變。
8. Error Exception RuntimeException
異常機制的繼承結構首先,基類為 Throwable;Error和Exception繼承Throwable;RuntimeException和IOException等繼承 Exception(即具體的RuntimeException繼承RuntimeException).
Error描述了內部錯誤以及資源耗盡的情形。應用程序不應該拋出這種類型的對象(一般是由虛擬機拋出)。程序級別不能處理。
Exception則包括 RuntimeException和其他非RuntimeException的。RuntimeException包括錯誤的類型轉換、數組越界訪問和試 圖訪問空指針等等。處理RuntimeException的原則是:如果出現RuntimeException,那么一定是程序員的錯誤。例如,可以通過 檢查數組下標和數組邊界來避免數組越界訪問異常。非RuntimeException(IOException等等):這類異常一般是外部錯誤,例如試圖 從文件尾后讀取數據等,這并不是程序本身的錯誤,而是在應用環境中出現的外部錯誤。
總結:比如5/0就是runtimeException異常,這樣的異?梢栽诔绦蚶锊蛔鎏幚,不會報錯,運行時才會報異常。非runtimeException異常就是在程序里就要進行try catch的,不進行處理就會報錯。
9. 區別TCP UDP HTTP HTTPS SFTP FTP
TCP可靠連接,三次握手,四次揮手。
UDP不可靠連接。
HTTPS是SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議。要比HTTP協議安全。它使用SSL即是安全套接字層(SSL)進行信息交換。HTTP需要申請證書,是收費的。
FTP是文件傳輸協議。在網站上,如果你想把文件和人共享,最便捷的方式莫過于把文件上傳到FTP服務器上,其他人通過FTP客戶端程序來下載所需要的文件。FTP進行文件傳輸需要通過端口進行。一般所需端口為:控制鏈路—TCP端口21?刂破鞫恕S糜诎l送指令給服務器以及等待服務器響應。數據鏈路---TCP端口20。數據傳輸端口。用來建立數據傳輸通道的。主要用來從客戶向服務器發送一個文件、從服務器向客戶發送一個文件、從服務器向客戶發送文件或目錄列表。FTP為了適應不同的網絡環境,支持主動連接和被動連接兩種模式。這兩種模式都主要針對數據鏈路進行的,跟控制鏈路無關。SFTP是Secure File Transfer Protocol的縮寫,是安全文件傳送協議。可以為傳輸文件提供一種安全的加密方法。跟ftp幾乎語法功能一樣。SFTP是SSH的一部分,是一種傳輸檔案至Blogger伺服器的安全方式。它本身沒有單獨的守護進程,必須使用sshd守護進程來完成相應的連接操作,所以從某種意義上來說,SFTP并不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以使用SFTP是十分安全的。但由于這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多。在對網絡安全性要求更時,代替FTP使用。
10. Java的參數傳遞中,值傳遞和引用傳遞區別。
值傳遞的時候,傳遞的參數是值的拷貝傳遞,傳遞動作完成以后就毫無瓜葛了。引用傳遞,傳遞的參數是引用的地址。也就是變量所對應的內存空間的地址。這兩者的區分類比當初C語言中的,用函數方法交換兩個數的值。
int i = 0;
i = i++;
//輸出 i的值是0; 順序應該是:先計算表達式的值,得0,然后i加1,此時i=1,最后賦值,賦值是把表達式的值賦值,所以,i又變成0了.
11. 服務器網絡編程中,解決回話跟蹤有哪幾種方法?
Cookie; Session; URL重寫;
cookie在J2EE項目中的使用,Java中把Cookie封裝成了java.servlet.http.Cookie類。每個Cookie都是該 Cookie類的對象。服務器通過操作Cookie類對象,對客戶端Cookie進行操作。通過request.getCookies()獲取客戶端提交 的所有Cookie(以Cookie[]數組形式返回),通過 response.addCookie(Cookiecookie)向客戶端設置Cookie。Cookie對象使用key-value屬性對的形式保存 用戶狀態,一個Cookie對象保存一個屬性對,一個request或者response同時使用多個Cookie。。
// 服務器端獲取cookie
Cookie[]cookies = request.getCookies();
for (int i = 0; cookies != null && i < cookies.length;i++) {
Cookiecookie = cookies[i];
if("username".equals(cookie.getName())) {
}
}
//服務器端設置cookie
String username = "sa";
Cookie usernameCookie = new Cookie("username", username);
response.addCookie(usernameCookie);
cookie的不可跨域名性和cookie的有效期。
http://m.shddsc.com/【百度Java研發面試題分析】相關文章:
百度java開發面試題06-21
Java經典面試題05-06
java面試題01-31
面試指南-百度Java工程師面試題匯總05-15
java學習:Java面試題和答案07-23
java基礎面試題02-26
JAVA經典算法面試題01-06
Java面試題集07-19
常見java面試題02-25