一些java面试高频题
1.說出ArrayList,Vector, LinkedList的存儲性能和特性?
答案:ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
2.errorpage的作用
errorPage作用:當JSP頁面可能出現異常時,可以告知容器將出現的異常拋到errorPage指定的頁面進行處理。
errorPage應用:
在某一個可能出現異常的頁面,通過page指令設置errorPage屬性。如下:
1
<%@ page errorPage=“a.jsp”%>
然后在a.jsp文件中,添加isErrorPage屬性,并且設置屬性值為true,進行異常的處理:
1
<%@ page isErrorPage=“true”%>
最后在a.jsp文件中就可以使用隱含對象exception進行異常的處理啦。
3.Java中sleep()與wait()區別
1、每個對象都有一個鎖來控制同步訪問,Synchronized關鍵字可以和對象的鎖交互,來實現同步方法或同步塊。sleep()方法正在執行的線程主動讓出CPU(然后CPU就可以去執行其他任務),在sleep指定時間后CPU再回到該線程繼續往下執行(注意:sleep方法只讓出了CPU,而并不會釋放同步資源鎖!!!);wait()方法則是指當前線程讓自己暫時退讓出同步資源鎖,以便其他正在等待該資源的線程得到該資源進而運行,只有調用了notify()方法,之前調用wait()的線程才會解除wait狀態,可以去參與競爭同步資源鎖,進而得到執行。(注意:notify的作用相當于叫醒睡著的人,而并不會給他分配任務,就是說notify只是讓之前調用wait的線程有權利重新參與線程的調度);
2、sleep()方法可以在任何地方使用;wait()方法則只能在同步方法或同步塊中使用;
3、sleep()是線程線程類(Thread)的方法,調用會暫停此線程指定的時間,但監控依然保持,不會釋放對象鎖,到時間自動恢復;wait()是Object的方法,調用會放棄對象鎖,進入等待隊列,待調用notify()/notifyAll()喚醒指定的線程或者所有線程,才會進入鎖池,再次獲得對象鎖才會進入運行狀態;
原文:https://blog.csdn.net/u012050154/article/details/50903326
4.哈希表
設哈希表長為11,哈希函數為Hash (key)=key%11。存在關鍵碼{7,29,22,16,92,44,8,19},采用線性探測法處理沖突,建立的hash表為
采用開放定址法處理沖突中的二次探測再散列(也即是題目中的二元探測法),哈希函數變為
對于43,代入公式為Hash(43) = 43 % 11 = 10, 則地址為10;
對于7,代入公式為Hash(7) = 7 % 11 = 7,則地址為7;
對于29,代入公式為Hash(29) = 29 % 11 = 7, 與7沖突,則采用二次探測進行消除沖突, 繼續(7 + 1) % 11 = 8,沒有沖突,則地址為8;
對于22,代入公式Hash(22) = 22 % 11 = 0, 則地址為0;
對于16,代入公式Hash(16) = 16 % 11 = 5, 則地址為5;
對于92,代入公式Hash(92) = 92 % 11 = 4,則地址為4;
對于44,代入公式Hash(44) = 44 % 11 = 0, 與22的地址沖突,則繼續(0 + 1) % 11 = 1,沒有沖突,則地址為1;
對于8, 代入公式Hash(8) = 8 % 11 = 8, 與29有沖突,則繼續(8 + 1) % 11 = 9, 沒有沖突,則地址為9;
對于19,代入公式Hash(19) = 19 % 11 = 8. 與 29有沖突,則繼續(8 + 1) * 11 = 9, 與8有沖突,繼續(8 - 1) % 11 = 7, 與7有沖突,則繼續(8 + 4) % 11 = 1, 與44有沖突,則繼續(8 - 4) % 11 = 4, 與92有沖突,則繼續(8 + 9) % 11 = 6, 沒有沖突,則地址為6。
答案為:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 22 | 44 | 92 | 16 | 19 | 7 | 29 | 8 | 43 |
原文:https://blog.csdn.net/sinat_34530053/article/details/93475097
5.二叉樹
二叉樹:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))
為:
詳細二叉樹,樹,森林的轉換見https://blog.csdn.net/qq_42147998/article/details/97393197
6.native關鍵字
native是調用操作系統的底層函數,而這些函數是由C和C++實現的。
native詳解:https://www.cnblogs.com/KingIceMou/p/7239668.html
7.java常用的字節流和處理流
按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分為節點流和處理流兩類。
節點流:可以從或向一個特定的地方(節點)讀寫數據。如FileReader.
處理流:是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。如 BufferedReader.處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次包裝,稱為流的鏈接。
JAVA常用的節點流:
1.文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件進行處理的節點流。
2.字符串 StringReader StringWriter 對字符串進行處理的節點流。
3.數 組 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 對數組進行處理的節點流(對應的不再是文件,而是內存中的一個數組)。
4.管 道 PipedInputStream PipedOutputStream PipedReader PipedWriter對管道進行處理的節點流。
常用處理流(關閉處理流使用關閉里面的節點流)
1.緩沖流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter 增加緩沖功能,避免頻繁讀寫硬盤。
2.轉換流:InputStreamReader OutputStreamReader 實現字節流和字符流之間的轉換。
3.數據流 DataInputStream DataOutputStream 等-提供將基礎數據類型寫入到文件中,或者讀取出來.
流的關閉順序
一般情況下是:先打開的后關閉,后打開的先關閉
另一種情況:看依賴關系,如果流a依賴流b,應該先關閉流a,再關閉流b。例如,處理流a依賴節點流b,應該先關閉處理流a,再關閉節點流b
可以只關閉處理流,不用關閉節點流。處理流關閉的時候,會調用其處理的節點流的關閉方法。
總結
以上是生活随笔為你收集整理的一些java面试高频题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树,森林与二叉树之间的转换
- 下一篇: 牛客java面试题总结版(一)