java高級面試題
java高級工程師在求職面試中,要學(xué)會做好準(zhǔn)備,提前了解那些面試題目很重要,下面小編已經(jīng)為你們整理了java高級面試題,希望可以幫到你。
java高級面試題1
1、Java集合框架是什么?說出一些集合框架的優(yōu)點?
答:每種編程語言中都有集合,最初的Java版本包含幾種集合類:Vector、Stack、HashTable和Array。隨著集合的廣泛使用,Java1.2提出了囊括所有集合接口、實現(xiàn)和算法的集合框架。在保證線程安全的情況下使用泛型和并發(fā)集合類,Java已經(jīng)經(jīng)歷了很久。它還包括在Java并發(fā)包中,阻塞接口以及它們的實現(xiàn)。集合框架的部分優(yōu)點如下:
(1)使用核心集合類降低開發(fā)成本,而非實現(xiàn)我們自己的集合類。
(2)隨著使用經(jīng)過嚴(yán)格測試的集合框架類,代碼質(zhì)量會得到提高。
(3)通過使用JDK附帶的集合類,可以降低代碼維護(hù)成本。
(4)復(fù)用性和可操作性。
2、集合框架中的泛型有什么優(yōu)點?
答:Java1.5引入了泛型,所有的集合接口和實現(xiàn)都大量地使用它。泛型允許我們?yōu)榧咸峁┮粋€可以容納的對象類型,因此,如果你添加其它類型的任何元素,它會在編譯時報錯。這避免了在運行時出現(xiàn)ClassCastException,因為你將會在編譯時得到報錯信息。泛型也使得代碼整潔,我們不需要使用顯式轉(zhuǎn)換和instanceOf操作符。它也給運行時帶來好處,因為不會產(chǎn)生類型檢查的字節(jié)碼指令。
3、Java集合框架的基礎(chǔ)接口有哪些?
答:Collection為集合層級的根接口。一個集合代表一組對象,這些對象即為它的元素。Java平臺不提供這個接口任何直接的實現(xiàn)。
Set是一個不能包含重復(fù)元素的集合。這個接口對數(shù)學(xué)集合抽象進(jìn)行建模,被用來代表集合,就如一副牌。
List是一個有序集合,可以包含重復(fù)元素。你可以通過它的索引來訪問任何元素。List更像長度動態(tài)變換的數(shù)組。
Map是一個將key映射到value的對象。一個Map不能包含重復(fù)的key:每個key最多只能映射一個value。
一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。
4、為何Collection不從Cloneable和Serializable接口繼承?
答:Collection接口指定一組對象,對象即為它的元素。如何維護(hù)這些元素由Collection的具體實現(xiàn)決定。例如,一些如List的Collection實現(xiàn)允許重復(fù)的元素,而其它的如Set就不允許。很多Collection實現(xiàn)有一個公有的clone方法。然而,把它放到集合的所有實現(xiàn)中也是沒有意義的。這是因為Collection是一個抽象表現(xiàn)。重要的是實現(xiàn)。
當(dāng)與具體實現(xiàn)打交道的時候,克隆或序列化的語義和含義才發(fā)揮作用。所以,具體實現(xiàn)應(yīng)該決定如何對它進(jìn)行克隆或序列化,或它是否可以被克隆或序列化。
在所有的實現(xiàn)中授權(quán)克隆和序列化,最終導(dǎo)致更少的靈活性和更多的限制。特定的實現(xiàn)應(yīng)該決定它是否可以被克隆和序列化。
5、為何Map接口不繼承Collection接口?
答:盡管Map接口和它的實現(xiàn)也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map繼承Collection毫無意義,反之亦然。
如果Map繼承Collection接口,那么元素去哪兒?Map包含key-value對,它提供抽取key或value列表集合的方法,但是它不適合“一組對象”規(guī)范。
6、Iterator是什么?
答:Iterator接口提供遍歷任何Collection的接口。我們可以從一個Collection中使用迭代器方法來獲取迭代器實例。迭代器取代了Java集合框架中的Enumeration。迭代器允許調(diào)用者在迭代過程中移除元素。
java高級面試題2
1.Java的HashMap是如何工作的?
HashMap是一個針對數(shù)據(jù)結(jié)構(gòu)的鍵值,每個鍵都會有相應(yīng)的值,關(guān)鍵是識別這樣的值。
HashMap 基于 hashing 原理,我們通過 put ()和 get ()方法儲存和獲取對象。當(dāng)我們將鍵值對傳遞給 put ()方法時,它調(diào)用鍵對象的 hashCode ()方法來計算 hashcode,讓后找到 bucket 位置來儲存值對象。當(dāng)獲取對象時,通過鍵對象的 equals ()方法找到正確的鍵值對,然后返回值對象。HashMap 使用 LinkedList 來解決碰撞問題,當(dāng)發(fā)生碰撞了,對象將會儲存在 LinkedList 的下一個節(jié)點中。 HashMap 在每個 LinkedList 節(jié)點中儲存鍵值對對象。
2.什么是快速失敗的故障安全迭代器?
快速失敗的Java迭代器可能會引發(fā)ConcurrentModifcationException在底層集合迭代過程中被修改。故障安全作為發(fā)生在實例中的一個副本迭代是不會拋出任何異常的。快速失敗的故障安全范例定義了當(dāng)遭遇故障時系統(tǒng)是如何反應(yīng)的。例如,用于失敗的快速迭代器ArrayList和用于故障安全的迭代器ConcurrentHashMap。
3.Java BlockingQueue是什么?
Java BlockingQueue是一個并發(fā)集合util包的一部分。BlockingQueue隊列是一種支持操作,它等待元素變得可用時來檢索,同樣等待空間可用時來存儲元素。
4.什么時候使用ConcurrentHashMap?
在問題2中我們看到ConcurrentHashMap被作為故障安全迭代器的一個實例,它允許完整的并發(fā)檢索和更新。當(dāng)有大量的并發(fā)更新時,ConcurrentHashMap此時可以被使用。這非常類似于Hashtable,但ConcurrentHashMap不鎖定整個表來提供并發(fā),所以從這點上ConcurrentHashMap的性能似乎更好一些。所以當(dāng)有大量更新時ConcurrentHashMap應(yīng)該被使用。
java高級面試題3
1.通過什么參數(shù)分配Java內(nèi)存使用?
java -Xms128m -Xmx512m
2.Treemap和Hashmap區(qū)別是什么?
TreeMap對Key進(jìn)行排序,而HashMap不排序。HashMap通過hashcode對其內(nèi)容進(jìn)行快速查找, 而TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個有序的結(jié)果你就應(yīng)該 使用TreeMap(HashMap中元素的排列順序是不固定的)。
3.為何加入:private static final long serialVersionUID?
可以利用JDK的bin目錄下的serialver.exe工具產(chǎn)生。
序列化時為了保持版本的兼容性,即在版本升級時反序列化仍保持 對象的唯一性。在java中serialVersionUID是唯一控制著能否反序列化成功的標(biāo)志, 只要這個值不一樣,就無法反序列化成功。
4.JSp編譯和執(zhí)行原理?
JSp文件的Scriptlets在編譯后將被包含于該JSp servlet的service()方法。當(dāng)JSp引擎處理客戶端請求時,JSp Scriptlets在被請求的時候被執(zhí)行。如果scriptlet產(chǎn)生輸出,輸出將在out (JSpWriter)對象中進(jìn)行緩存然后最終發(fā)送到客戶端。
5.怎么解決JSp/Servlet web中中文亂碼的問題
6.JDBC中,statement,prepared statement ,Callable statement的區(qū)別是什么?
Statement 接口提供了執(zhí)行語句和獲取結(jié)果的基本方法。preparedStatement 接口添加了處理 IN 參數(shù)的方法;而 CallableStatement 添加了處理 OUT 參數(shù)的方法。
preparedStatement:對于同一條語句的多次執(zhí)行,Statement每次都要把SQL語句發(fā)送給數(shù)據(jù)
庫,這樣做效率明顯不高,而如果數(shù)據(jù)庫支持預(yù)編譯,preparedStatement可以先把要執(zhí)行的語句一次發(fā)給它,然后每次執(zhí)行而不必發(fā)送相同的語句,效率當(dāng)然提高,當(dāng)然如果數(shù)據(jù)庫不支持預(yù)編譯,
preparedStatement會象Statement一樣工作,只是效率不高而不需要用戶工手干預(yù).
另外preparedStatement還支持接收參數(shù).在預(yù)編譯后只要傳輸不同的參數(shù)就可以執(zhí)行,大大
提高了性能.
CallableStatement:是preparedStatement的子類,它只是用來執(zhí)行存儲過程的.
看了“java高級面試題”