- 相關(guān)推薦
java面試題目及答案
做好準(zhǔn)備是Java面試者應(yīng)該的,那么你有提前了解面試題目了嗎?以下是陽(yáng)光網(wǎng)小編幫你們整理的java面試題目及答案,一起來(lái)學(xué)習(xí)啦。
java面試題目及答案(一)
1.在HashTable中上下文同步是什么意思?
同步意味著在一個(gè)時(shí)間點(diǎn)只能有一個(gè)線程可以修改哈希表,任何線程在執(zhí)行hashtable的更新操作前需要獲取對(duì)象鎖,其他線程等待鎖的釋放。
2.哪些集合類提供對(duì)元素的隨機(jī)訪問(wèn)?
ArrayList、HashMap、TreeMap和HashTable類提供對(duì)元素的隨機(jī)訪問(wèn)。
3.Comparable和Comparator接口的區(qū)別是什么?
Comparable和Comparator接口被用來(lái)對(duì)對(duì)象集合或者數(shù)組進(jìn)行排序。Comparable接口被用來(lái)提供對(duì)象的自然排序,我們可以使用它來(lái)提供基于單個(gè)邏輯的排序。 Comparator接口被用來(lái)提供不同的排序算法,我們可以選擇需要使用的Comparator來(lái)對(duì)給定的'對(duì)象集合進(jìn)行排序。
4.與Java集合框架相關(guān)的有哪些最好的實(shí)踐?
(1)根據(jù)需要選擇正確的集合類型。比如,如果指定了大小,選用Array而非ArrayList。如果想根據(jù)插入順序遍歷一個(gè)Map,需要使用TreeMap。如果不想重復(fù),應(yīng)使用Set。
(2)一些集合類允許指定初始容量,所以如果能夠估計(jì)到存儲(chǔ)元素的數(shù)量,可以使用它,就避免了大小調(diào)整。
(3)基于接口編程,而非基于實(shí)現(xiàn)編程,它允許后來(lái)輕易地改變實(shí)現(xiàn)。
(4)總是使用類型安全的泛型,避免在運(yùn)行時(shí)出現(xiàn)ClassCastException。
(5)使用JDK提供的不可變類作為Map的key,可以避免實(shí)現(xiàn)hashCode()和equals()。
(6)盡可能使用Collections工具類,或者獲取只讀、同步或空的集合,而非編寫(xiě)自己的實(shí)現(xiàn)。它將會(huì)提供代碼重用性,它有著更好的穩(wěn)定性和可維護(hù)性。
java面試題目及答案(二)
1,談?wù)刦inal, finally, finalize的區(qū)別。
final?修飾符(關(guān)鍵字)如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭1宦暶鳛閒inal的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally?再異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。
finalize?方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。
2,Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)? 匿名的內(nèi)部類是沒(méi)有名字的內(nèi)部類。不能extends(繼承) 其它類,但一個(gè)內(nèi)部類可以作為一個(gè)接口,由另一個(gè)內(nèi)部類實(shí)現(xiàn)。
3,Static Nested Class 和 Inner Class的不同,說(shuō)得越多越好(面試題有的很籠統(tǒng))。
Nested Class (一般是C++的說(shuō)法),Inner Class (一般是JAVA的說(shuō)法)。Java內(nèi)部類與C++嵌套類最大的不同就在于是否有指向外部的引用上。
注: 靜態(tài)內(nèi)部類(Inner Class)意味著1創(chuàng)建一個(gè)static內(nèi)部類的對(duì)象,不需要一個(gè)外部類對(duì)象,2不能從一個(gè)static內(nèi)部類的`一個(gè)對(duì)象訪問(wèn)一個(gè)外部類對(duì)象
4,&和&&的區(qū)別。
&是位運(yùn)算符。&&是布爾邏輯運(yùn)算符。
5,HashMap和Hashtable的區(qū)別。
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
HashMap 類沒(méi)有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。
Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?/p>
6,Collection 和 Collections的區(qū)別。
Collections是個(gè)java.util下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。
Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口。
7,什么時(shí)候用assert。
斷言是一個(gè)包含布爾表達(dá)式的語(yǔ)句,在執(zhí)行這個(gè)語(yǔ)句時(shí)假定該表達(dá)式為 true。如果表達(dá)式計(jì)算為 false,那么系統(tǒng)會(huì)報(bào)告一個(gè) AssertionError。它用于調(diào)試目的:
assert(a > 0); // throws an AssertionError if a <= 0
斷言可以有兩種形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 應(yīng)該總是產(chǎn)生一個(gè)布爾值。
Expression2 可以是得出一個(gè)值的任意表達(dá)式。這個(gè)值用于生成顯示更多調(diào)試信息的 String 消息。
斷言在默認(rèn)情況下是禁用的。要在編譯時(shí)啟用斷言,需要使用 source 1.4 標(biāo)記:
javac -source 1.4 Test.java
要在運(yùn)行時(shí)啟用斷言,可使用 -enableassertions 或者 -ea 標(biāo)記。
要在運(yùn)行時(shí)選擇禁用斷言,可使用 -da 或者 -disableassertions 標(biāo)記。
要系統(tǒng)類中啟用斷言,可使用 -esa 或者 -dsa 標(biāo)記。還可以在包的基礎(chǔ)上啟用或者禁用斷言。
可以在預(yù)計(jì)正常情況下不會(huì)到達(dá)的任何位置上放置斷言。斷言可以用于驗(yàn)證傳遞給私有方法的參數(shù)。不過(guò),斷言不應(yīng)該用于驗(yàn)證傳遞給公有方法的參數(shù),因?yàn)椴还苁欠駟⒂昧藬嘌裕蟹椒ǘ急仨殭z查其參數(shù)。不過(guò),既可以在公有方法中,也可以在非公有方法中利用斷言測(cè)試后置條件。另外,斷言不應(yīng)該以任何方式改變程序的狀態(tài)。
java面試題目及答案(三)
1.什么是Java集合API?
Java集合API是用來(lái)表示和操作集合的統(tǒng)一框架,包括接口、實(shí)現(xiàn)類以及幫助程序員完成一些編程的算法。
2.Java集合框架的接口有哪些?
具體來(lái)說(shuō),Java集合框架有6個(gè)集合接口,最基本的是Collection接口,由三個(gè)接口Set、List、SortedSet繼承,另外兩個(gè)接口是Map、SortedMap,這兩個(gè)接口不繼承Collection,表示映射而不是真正的集合。
Collection為集合層級(jí)的根接口。一個(gè)集合代表一組對(duì)象,這些對(duì)象即為它的元素。Java平臺(tái)不提供這個(gè)接口任何直接的實(shí)現(xiàn)。
Set是一個(gè)不能包含重復(fù)元素的集合。這個(gè)接口對(duì)數(shù)學(xué)集合抽象進(jìn)行建模,被用來(lái)代表集合。
List是一個(gè)有序集合,可以包含重復(fù)元素?梢酝ㄟ^(guò)它的索引來(lái)訪問(wèn)任何元素,更像長(zhǎng)度動(dòng)態(tài)變換的數(shù)組。
Map是一個(gè)將key映射到value的對(duì)象.一個(gè)Map不能包含重復(fù)的key。
3.Iterator是什么?
Iterator接口提供遍歷任何Collection的接口。我們可以從一個(gè)Collection中使用迭代器方法來(lái)獲取迭代器實(shí)例。迭代器取代了Java集合框架中的Enumeration。迭代器允許調(diào)用者在迭代過(guò)程中移除元素。
4.Iterator和Listlterator的區(qū)別是什么?
(1)Iterator可以遍歷Set和List集合,而ListIterator只能遍歷List。
(2)Iterator只可以向前遍歷,而LIstIterator可以雙向遍歷。
(3)ListIterator從Iterator接口繼承,然后添加了一些額外的功能,比如添加一個(gè)元素、替換一個(gè)元素、獲取前面或后面元素的索引位置。
5.對(duì)比HashMap和HashTable。
兩者都是用key-value方式獲取數(shù)據(jù)。Hashtable是原始集合類之一(也稱作遺留類)。HashMap作為新集合框架的一部分在Java2的1.2版本中加入。它們之間有以下區(qū)別:
(1) HashMap允許key和value為null,而HashTable不允許。
(2)HashTable是同步的,而HashMap不是。所以HashMap適合單線程環(huán)境,HashTable適合多線程環(huán)境。
(3)HashMap提供對(duì)key的Set進(jìn)行遍歷,因此它是fail-fast的,但HashTable提供對(duì)key的.Enumeration進(jìn)行遍歷,它不支持fail-fast。
(4)HashTable被認(rèn)為是個(gè)遺留的類,如果尋求在迭代的時(shí)候修改Map,應(yīng)使用CocurrentHashMap。
6.如何決定選用HashMap還是TreeMap?
對(duì)于在Map中插入、刪除和定位元素這類操作,HashMap是最好的選擇。然而,假如你需要對(duì)一個(gè)有序的key集合進(jìn)行遍歷,TreeMap是更好的選擇;谀愕腸ollection的大小,也許向HashMap中添加元素會(huì)更快,將map換為TreeMap進(jìn)行有序key的遍歷。
【java面試題目及答案】相關(guān)文章:
java面試常見(jiàn)題目04-03
java經(jīng)典面試題目12-09
java面試題目201704-05
java面試題目大全12-04
java面試問(wèn)題及答案04-05
java面試基礎(chǔ)題及答案04-02
java常見(jiàn)面試題目04-04
java基礎(chǔ)面試題及答案04-05
高級(jí)java面試題及答案04-04