![Java最常見(jiàn)面試真題_第1頁(yè)](http://file4.renrendoc.com/view/68d6b47bec48c28b6dce429efdc9b58d/68d6b47bec48c28b6dce429efdc9b58d1.gif)
![Java最常見(jiàn)面試真題_第2頁(yè)](http://file4.renrendoc.com/view/68d6b47bec48c28b6dce429efdc9b58d/68d6b47bec48c28b6dce429efdc9b58d2.gif)
![Java最常見(jiàn)面試真題_第3頁(yè)](http://file4.renrendoc.com/view/68d6b47bec48c28b6dce429efdc9b58d/68d6b47bec48c28b6dce429efdc9b58d3.gif)
![Java最常見(jiàn)面試真題_第4頁(yè)](http://file4.renrendoc.com/view/68d6b47bec48c28b6dce429efdc9b58d/68d6b47bec48c28b6dce429efdc9b58d4.gif)
![Java最常見(jiàn)面試真題_第5頁(yè)](http://file4.renrendoc.com/view/68d6b47bec48c28b6dce429efdc9b58d/68d6b47bec48c28b6dce429efdc9b58d5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——Java最常見(jiàn)面試真題Java最常見(jiàn)面試真題
Java最常見(jiàn)面試真題你都看過(guò)了嗎?面試之前看看真題會(huì)對(duì)您的求職更有利哦。更多內(nèi)容請(qǐng)關(guān)注我!
面向?qū)ο缶幊蹋∣OP)
1、面向?qū)ο蟮奶卣饔心男┓矫妫?/p>
封裝,繼承,多態(tài)和抽象。下面我們會(huì)逐個(gè)分析這些特性。
封裝給對(duì)象供給了暗藏內(nèi)部特性和行為的才能。對(duì)象供給一些能被其他對(duì)象訪問(wèn)的方法來(lái)變更它內(nèi)部的數(shù)據(jù)。在Java當(dāng)中,有3種修飾符:public,private和protected。每一種修飾符給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪問(wèn)權(quán)限。
下面列出了使用封裝的一些好處:
通過(guò)暗藏對(duì)象的屬性來(lái)養(yǎng)護(hù)對(duì)象內(nèi)部的狀態(tài)。
提高了代碼的可用性和可維護(hù)性,由于對(duì)象的行為可以被單獨(dú)的變更或者是擴(kuò)展。
遏止對(duì)象之間的不良交互提高模塊化。
多態(tài)是編程語(yǔ)言給不同的底層數(shù)據(jù)類型做一致的接口表示的一種才能。一個(gè)多態(tài)類型上的操作可以應(yīng)用到其他類型的值上面。
繼承給對(duì)象供給了從基類獲取字段和方法的才能。繼承供給了代碼的重用行,也可以在不修改類的處境下給現(xiàn)存的類添加新特性。
抽象是把想法從概括的實(shí)例中分開(kāi)出來(lái)的步驟,因此,要根據(jù)他們的功能而不是實(shí)現(xiàn)細(xì)節(jié)來(lái)創(chuàng)造類。Java支持創(chuàng)造只暴漏接口而不包含方法實(shí)現(xiàn)的抽象的類。這種抽象技術(shù)的主要目的是把類的行為和實(shí)現(xiàn)細(xì)節(jié)分開(kāi)開(kāi)。
抽象和封裝的不同點(diǎn)
抽象和封裝是互補(bǔ)的概念。一方面,抽象關(guān)注對(duì)象的行為。另一方面,封裝關(guān)注對(duì)象行為的細(xì)節(jié)。一般是通過(guò)暗藏對(duì)象內(nèi)部狀態(tài)信息做到封裝,因此,封裝可以看成是用來(lái)供給抽象的一種策略。
常見(jiàn)的Java問(wèn)題
1.訪問(wèn)修飾符public,private,protected以及不寫(xiě)(默認(rèn))時(shí)的識(shí)別?
修飾符當(dāng)前類同包子類其它包
public
protected
private
default
類的成員不寫(xiě)訪問(wèn)修飾時(shí)默認(rèn)為default。
默認(rèn)對(duì)于同一個(gè)包中的其他類相當(dāng)于公開(kāi)(public),對(duì)于不是同一個(gè)包中的其他類相當(dāng)于私有(private)。受養(yǎng)護(hù)(protected)對(duì)子類相當(dāng)于公開(kāi),對(duì)不是同一包中的沒(méi)有父子關(guān)系的類相當(dāng)于私有。Java中,外部類的修飾符只能是public或默認(rèn),類的成員(包括內(nèi)部類)的修飾符可以是以上四種。
2.JDK和JRE的識(shí)別是什么?
Java運(yùn)行時(shí)環(huán)境JRE是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet需要的欣賞器插件。Java開(kāi)發(fā)工具包JDK是完整的Java軟件開(kāi)發(fā)包,包含了JRE,編譯器和其他的工具譬如:JavaDoc,Java調(diào)試器,可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行Java應(yīng)用程序。
3.Java支持的數(shù)據(jù)類型有哪些?什么是自動(dòng)拆裝箱?
Java語(yǔ)言為每個(gè)原始類型供給了包裝類型:
-原始類型:boolean,char,byte,short,int,long,float,double
-包裝類型:Boolean,Character,Byte,Short,Integer,Long,F(xiàn)loat,Double
自動(dòng)裝箱是Java編譯器在根本數(shù)據(jù)類型和對(duì)應(yīng)的對(duì)象包裝類型之間做的一個(gè)轉(zhuǎn)化。譬如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。
classAutoUnboxingTest
publicstaticvoidmainString[]args
Integera=newInteger4;
Integerb=4;//將4自動(dòng)裝箱成Integer類型
intc=4;
System.out.printlna==b;//false兩個(gè)引用沒(méi)有引用同一對(duì)象
System.out.printlna==c;//truea自動(dòng)拆箱成int類型再和c對(duì)比
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
4.闡述final、finally、finalize的識(shí)別。
-final:修飾符(關(guān)鍵字)有三種用法:假設(shè)一個(gè)類被聲明為final,意味著它不能再派生出新的子類,即不能被繼承,因此它和abstract是反義詞。將變量聲明為final,可以保證它們?cè)谑褂弥胁槐蛔兏?,被聲明為final的變量務(wù)必在聲明時(shí)給定初值,而在以后的引用中只能讀取不成修改。被聲明為final的方法也同樣只能使用,不能在子類中被重寫(xiě)。
-finally:通常放在trycatch的后面構(gòu)造總是執(zhí)行代碼塊,這就意味著程序無(wú)論正常執(zhí)行還是發(fā)生奇怪,這里的代碼只要JVM不關(guān)閉都能執(zhí)行,可以將釋放外部資源的代碼寫(xiě)在finally塊中。
-finalize:Object類中定義的方法,Java中允許使用finalize方法在垃圾收集器將對(duì)象從內(nèi)存中除掉出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在銷毀對(duì)象時(shí)調(diào)用的,通過(guò)重寫(xiě)finalize方法可以整理系統(tǒng)資源或者執(zhí)行其他清理工作。
5.Java中是否可以籠罩override一個(gè)private或者是static的方法?
static關(guān)鍵字說(shuō)明一個(gè)成員變量或者是成員方法可以在沒(méi)有所屬的類的實(shí)例變量的處境下被訪問(wèn)。
Java中static方法不能被籠罩,static修飾的方法是靜態(tài)綁定的,而方法籠罩是為了實(shí)現(xiàn)多態(tài),是動(dòng)態(tài)綁定,所以static修飾的方法不需要被籠罩。
無(wú)法重寫(xiě)被private修飾的方法,由于被private修飾的父類方法在子類中是不成見(jiàn)的。
6.Java中的方法籠罩Overriding和方法重載Overloading是什么意思?
Java中的方法重載發(fā)生在同一個(gè)類里面兩個(gè)或者是多個(gè)方法的方法名一致但是參數(shù)不同的處境。與此相對(duì),方法籠罩是說(shuō)子類重新定義了父類的方法。方法籠罩務(wù)必有一致的方法名,參數(shù)列表和返回類型?;\罩者可能不會(huì)限制它所籠罩的方法的訪問(wèn)。
Java最常見(jiàn)面試真題
7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?
當(dāng)新對(duì)象被創(chuàng)造的時(shí)候,構(gòu)造函數(shù)會(huì)被調(diào)用。每一個(gè)類都有構(gòu)造函數(shù)。在程序員沒(méi)有給類供給構(gòu)造函數(shù)的處境下,Java編譯器會(huì)為這個(gè)類創(chuàng)造一個(gè)默認(rèn)的構(gòu)造函數(shù)。
Java中構(gòu)造函數(shù)重載和方法重載很好像??梢詾橐粋€(gè)類創(chuàng)造多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)務(wù)必有它自己唯一的參數(shù)列表。
Java不支持像C++中那樣的復(fù)制構(gòu)造函數(shù),這個(gè)不同點(diǎn)是由于假設(shè)你不自己寫(xiě)構(gòu)造函數(shù)的處境下,Java不會(huì)創(chuàng)造默認(rèn)的復(fù)制構(gòu)造函數(shù)。
8.接口和抽象類的識(shí)別是什么?
Java供給和支持創(chuàng)造抽象類和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:
接口中全體的方法隱含的都是抽象的。而抽象類那么可以同時(shí)包含抽象和非抽象的方法。
類可以實(shí)現(xiàn)好多個(gè)接口,但是只能繼承一個(gè)抽象類
類假設(shè)要實(shí)現(xiàn)一個(gè)接口,它務(wù)必要實(shí)現(xiàn)接口聲明的全體方法。但是,類可以不實(shí)現(xiàn)抽象類聲明的全體方法,當(dāng)然,在這種處境下,類也務(wù)必得聲明成是抽象的。
抽象類可以在不供給接口方法實(shí)現(xiàn)的處境下實(shí)現(xiàn)接口。
Java接口中聲明的變量默認(rèn)都是final的。抽象類可以包含非final的變量。
Java接口中的成員函數(shù)默認(rèn)是public的。抽象類的成員函數(shù)可以是private,protected或者是public。
接口是十足抽象的,不成以被實(shí)例化。抽象類也不成以被實(shí)例化,但是,假設(shè)它包含main方法的話是可以被調(diào)用的。
9.Java支持多繼承么?
不支持,Java不支持多繼承。每個(gè)類都只能繼承一個(gè)類,但是可以實(shí)現(xiàn)多個(gè)接口。
10.什么是值傳遞和引用傳遞?
對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是變更了對(duì)象副本,也不會(huì)影響源對(duì)象的值。
對(duì)象被引用傳遞,意味著傳遞的并不是實(shí)際的對(duì)象,而是對(duì)象的引用。因此,外部對(duì)引用對(duì)象所做的變更會(huì)反映到全體的對(duì)象上。
Java線程
1.進(jìn)程和線程的識(shí)別是什么?
進(jìn)程是執(zhí)行著的應(yīng)用程序,而線程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線程。線程又叫做輕量級(jí)進(jìn)程。
2.創(chuàng)造線程有幾種不同的方式?哪一種是最優(yōu)的?為什么?
有三種方式可以用來(lái)創(chuàng)造線程:
繼承Thread類
實(shí)現(xiàn)Runnable接口
應(yīng)用程序可以使用Executor框架來(lái)創(chuàng)造線程池
實(shí)現(xiàn)Runnable接口這種方式更受接待,由于這不需要繼承Thread類。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對(duì)象的處境下,這需要多繼承(而Java不支持多繼承),只能實(shí)現(xiàn)接口。同時(shí),線程池也是分外高效的,很輕易實(shí)現(xiàn)和使用。
3.概括的解釋下線程的幾種可用狀態(tài)?
線程在執(zhí)行過(guò)程中,可以處于下面幾種狀態(tài):
就緒Runnable:線程打定運(yùn)行,不確定立馬就能開(kāi)頭執(zhí)行。
運(yùn)行中Running:進(jìn)程正在執(zhí)行線程的代碼。
等待中Waiting:線程處于阻塞的狀態(tài),等待外部的處理終止。
睡眠中Sleeping:線程被強(qiáng)制睡眠。
I/O阻塞BlockedonI/O:等待I/O操作完成。
同步阻塞BlockedonSynchronization:等待獲取鎖。
死亡Dead:線程完成了執(zhí)行。
4.同步方法和同步代碼塊的識(shí)別是什么?
在Java語(yǔ)言中,每一個(gè)對(duì)象有一把鎖。線程可以使用synchronized關(guān)鍵字來(lái)獲取對(duì)象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級(jí)別粗粒度鎖或者是代碼塊級(jí)別細(xì)粒度鎖。
5.在監(jiān)視器Monitor內(nèi)部,是如何做線程同步的?程序理應(yīng)做哪種級(jí)別的同步?
監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同步代碼塊,確保一次只有一個(gè)線程執(zhí)行同步代碼塊。每一個(gè)監(jiān)視器都和一個(gè)對(duì)象引用相關(guān)聯(lián)。線程在獲取鎖之前不允許執(zhí)行同步代碼。
6.什么是死鎖deadlock?
兩個(gè)進(jìn)程都在等待對(duì)方執(zhí)行完畢才能持續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無(wú)限的等待中。
7.如何確保N個(gè)線程可以訪問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?
使用多線程的時(shí)候,一種分外簡(jiǎn)樸的制止死鎖的方式就是:指定獲取鎖的依次,并強(qiáng)制線程按照指定的依次獲取鎖。因此,假設(shè)全體的線程都是以同樣的依次加鎖和釋放鎖,就不會(huì)展現(xiàn)死鎖了。
8.線程的sleep方法和yield方法有什么識(shí)別?
-sleep方法給其他線程運(yùn)行機(jī)遇時(shí)不考慮線程的優(yōu)先級(jí),因此會(huì)給低優(yōu)先級(jí)的線程以運(yùn)行的機(jī)遇;yield方法只會(huì)給一致優(yōu)先級(jí)或更高優(yōu)先級(jí)的線程以運(yùn)行的機(jī)遇;
-線程執(zhí)行sleep方法后轉(zhuǎn)入阻塞(blocked)狀態(tài),而執(zhí)行yield方法后轉(zhuǎn)入就緒(ready)狀態(tài);
-sleep方法聲明拋出InterruptedException,而yield方法沒(méi)有聲明任何奇怪;
-sleep方法比yield方法(跟操作系統(tǒng)CPU調(diào)度相關(guān))具有更好的可移植性。
9.舉例說(shuō)明同步和異步。
假設(shè)系統(tǒng)中存在臨界資源(資源數(shù)量少于競(jìng)爭(zhēng)資源的線程數(shù)量的資源),例如正在寫(xiě)的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就務(wù)必舉行同步存?。〝?shù)據(jù)庫(kù)操作中的排他鎖就是最好的例子)。當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不夢(mèng)想讓程序等待方法的返回時(shí),就理應(yīng)使用異步編程,在好多處境下采用異步途徑往往更有效率。事實(shí)上,所謂的同步就是指阻塞式操作,而異步就是非阻塞式操作。
10.啟動(dòng)一個(gè)線程是調(diào)用run還是start方法?
啟動(dòng)一個(gè)線程是調(diào)用start方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行,這并不意味著線程就會(huì)立刻運(yùn)行。run方法是線程啟動(dòng)后要舉行回調(diào)(callback)的方法。
Java集合類
1.Java集合類框架的根本接口有哪些?
Java最常見(jiàn)面試真題
Java集合類供給了一套設(shè)計(jì)良好的支持對(duì)一組對(duì)象舉行操作的接口和類。Java集合類里面最根本的接口有:
Collection:代表一組對(duì)象,每一個(gè)對(duì)象都是它的子元素。
Set:不包含重復(fù)元素的Collection。
List:有依次的collection,并且可以包含重復(fù)元素。
Map:可以把鍵key映射到值value的對(duì)象,鍵不能重復(fù)。
2.為什么集合類沒(méi)有實(shí)現(xiàn)Cloneable和Serializable接口?
集合類接口指定了一組叫做元素的對(duì)象。集合類接口的每一種概括的實(shí)現(xiàn)類都可以選擇以它自己的方式對(duì)元素舉行保存和排序。有的集合類允許重復(fù)的鍵,有些不允許。
3.什么是迭代器Iterator?
Iterator接口供給了好多對(duì)集合元素舉行迭代的方法。每一個(gè)集合類都包含了可以返回迭代器實(shí)例的
迭代方法。迭代器可以在迭代的過(guò)程中刪除底層集合的元素。
克隆cloning或者是序列化serialization的語(yǔ)義和含義是跟概括的實(shí)現(xiàn)相關(guān)的。因此,理應(yīng)由集合類的概括實(shí)現(xiàn)來(lái)抉擇如何被克隆或者是序列化。
4.Iterator和ListIterator的識(shí)別是什么?
下面列出了他們的識(shí)別:
Iterator可用來(lái)遍歷Set和List集合,但是ListIterator只能用來(lái)遍歷List。
Iterator對(duì)集合只能是前向遍歷,ListIterator既可以前向也可以后向。
ListIterator實(shí)現(xiàn)了Iterator接口,并包含其他的功能,譬如:增加元素,替換元素,獲取前一個(gè)和后一個(gè)元素的索引,等等。
5.快速失敗fail-fast和安好失敗fail-safe的識(shí)別是什么?
Iterator的安好失敗是基于對(duì)底層集合做拷貝,因此,它不受源集合上修改的影響。java.util包下面的全體的集合類都是快速失敗的,而java.util.concurrent包下面的全體的類都是安好失敗的??焖偈〉牡鲿?huì)拋出ConcurrentModificationException奇怪,而安好失敗的迭代器永遠(yuǎn)不會(huì)拋出這樣的奇怪。
6.Java中的HashMap的.工作原理是什么?
Java中的HashMap是以鍵值對(duì)key-value的形式存儲(chǔ)元素的。HashMap需要一個(gè)hash函數(shù),它使用hashCode和equals方法來(lái)向集合/從集合添加和檢索元素。當(dāng)調(diào)用put方法的時(shí)候,HashMap會(huì)計(jì)算key的hash值,然后把鍵值對(duì)存儲(chǔ)在集合中適合的索引上。假設(shè)key已經(jīng)存在了,value會(huì)被更新成新值。HashMap的一些重要的特性是它的容量capacity,負(fù)載因子loadfactor和擴(kuò)容極限thresholdresizing。
7.hashCode和equals方法的重要性表達(dá)在什么地方?
Java中的HashMap使用hashCode和equals方法來(lái)確定鍵值對(duì)的索引,當(dāng)根據(jù)鍵獲取值的時(shí)候也會(huì)用到這兩個(gè)方法。假設(shè)沒(méi)有正確的實(shí)現(xiàn)這兩個(gè)方法,兩個(gè)不同的鍵可能會(huì)有一致的hash值,因此,可能會(huì)被集合認(rèn)為是相等的。而且,這兩個(gè)方法也用來(lái)察覺(jué)重復(fù)元素。所以這兩個(gè)方法的實(shí)現(xiàn)對(duì)HashMap的精確性和正確性是至關(guān)重要的。
8.HashMap和Hashtable有什么識(shí)別?
HashMap和Hashtable都實(shí)現(xiàn)了Map接口,因此好多特性分外好像。但是,他們有以下不同點(diǎn):
HashMap允許鍵和值是null,而Hashtable不允許鍵或者值是null。
Hashtable是同步的,而HashMap不是。因此,HashMap更適合于單線程環(huán)境,而Hashtable適合于多線程環(huán)境。
HashMap供給了可供給用迭代的鍵的集合,因此,HashMap是快速失敗的。另一方面,Hashtable供給了對(duì)鍵的列舉Enumeration。
一般認(rèn)為Hashtable是一個(gè)遺留的類。
9.數(shù)組Array和列表ArrayList有什么識(shí)別?什么時(shí)候理應(yīng)使用Array而不是ArrayList?
下面列出了Array和ArrayList的不同點(diǎn):
Array可以包含根本類型和對(duì)象類型,ArrayList只能包含對(duì)象類型。
Array大小是固定的,ArrayList的大小是動(dòng)態(tài)變化的。
ArrayList供給了更多的方法和特性,譬如:addAll,removeAll,iterator等等。
對(duì)于根本類型數(shù)據(jù),集合使用自動(dòng)裝箱來(lái)裁減編碼工作量。但是,當(dāng)處理固定大小的根本數(shù)據(jù)類型的時(shí)候,這種方式相比較較慢。
10.ArrayList和LinkedList有什么識(shí)別?
ArrayList和LinkedList都實(shí)現(xiàn)了List接口,他們有以下的不同點(diǎn):
ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)1時(shí)間繁雜度對(duì)元素舉行隨機(jī)訪問(wèn)。與此對(duì)應(yīng),LinkedList是以元素列表的形式存儲(chǔ)它的數(shù)據(jù),每一個(gè)元素都和它的前一個(gè)和后一個(gè)元素鏈接在一起,在這種處境下,查找某個(gè)元素的時(shí)間繁雜度是On。
相對(duì)于ArrayList,LinkedList的插入,添加,刪除操作速度更快,由于當(dāng)元素被添加到集合任意位置的時(shí)候,不需要像數(shù)組那樣重新計(jì)算大小或者是更新索引。
LinkedList比ArrayList更占內(nèi)存,由于LinkedList為每一個(gè)節(jié)點(diǎn)存儲(chǔ)了兩個(gè)引用,一個(gè)指向前一個(gè)元素,一個(gè)指向下一個(gè)元素。
11.Comparable和Comparator接口是干什么的?列出它們的識(shí)別。
Java供給了只包含一個(gè)compareTo方法的Comparable接口。這個(gè)方法可以個(gè)給兩個(gè)對(duì)象排序。概括來(lái)說(shuō),它返回負(fù)數(shù),0,正數(shù)來(lái)說(shuō)明輸入對(duì)象小于,等于,大于已經(jīng)存在的對(duì)象。
Java供給了包含compare和equals兩個(gè)方法的Comparator接口。compare方法用來(lái)給兩個(gè)輸入?yún)?shù)排序,返回負(fù)數(shù),0,正數(shù)說(shuō)明第一個(gè)參數(shù)是小于,等于,大于其次個(gè)參數(shù)。equals方法需要一個(gè)對(duì)象作為參數(shù),它用來(lái)抉擇輸入?yún)?shù)是否和comparator相等。只有當(dāng)輸入?yún)?shù)也是一個(gè)comparator并且輸入?yún)?shù)和當(dāng)前comparator的排序結(jié)果是一致的時(shí)候,這個(gè)方法才返回true。
12.什么是Java優(yōu)先級(jí)隊(duì)列PriorityQueue?
PriorityQueue是一個(gè)基于優(yōu)先級(jí)堆的無(wú)界隊(duì)列,它的元素是按照自然依次naturalorder排序的。在創(chuàng)造的時(shí)候,我們可以給它供給一個(gè)負(fù)責(zé)給元素排序的對(duì)比器。PriorityQueue不允許null值,由于他們沒(méi)有自然依次,或者說(shuō)他們沒(méi)有任何的相關(guān)聯(lián)的對(duì)比器。結(jié)果,PriorityQueue不是線程安好的,入隊(duì)和出隊(duì)的時(shí)間繁雜度是Ologn。
Java最常見(jiàn)面試真題
13.你了解大O符號(hào)big-Onotation么?你能給出不同數(shù)據(jù)布局的例子么?
大O符號(hào)描述了當(dāng)數(shù)據(jù)布局里面的元素增加的時(shí)候,算法的規(guī)?;蛘呤切阅茉谧顗牡膱?chǎng)景下有多么好。
大O符號(hào)也可用來(lái)描述其他的行為,譬如:內(nèi)存消耗。由于集合類實(shí)際上是數(shù)據(jù)布局,我們一般使用大O符號(hào)基于時(shí)間,內(nèi)存和性能來(lái)選擇最好的實(shí)現(xiàn)。大O符號(hào)可以對(duì)大量數(shù)據(jù)的性能給出一個(gè)很好的說(shuō)明。
14.如何權(quán)衡是使用無(wú)序的數(shù)組還是有序的數(shù)組?
有序數(shù)組最大的好處在于查找的時(shí)間繁雜度是Ologn,而無(wú)序數(shù)組是On。有序數(shù)組的缺點(diǎn)是插入操作的時(shí)間繁雜度是On,由于值大的元素需要往后移動(dòng)來(lái)給新元素騰位置。相反,無(wú)序數(shù)組的插入時(shí)間繁雜度是常量O1。
15.Java集合類框架的最正確實(shí)踐有哪些?
根據(jù)應(yīng)用的需要正確選擇要使用的集合的類型對(duì)性能分外重要,譬如:假使元素的大小是固定的,而且能事先知道,我們就理應(yīng)用Array而不是ArrayList。
有些集合類允許指定初始容量。因此,假設(shè)我們能估計(jì)出存儲(chǔ)的元素的數(shù)目,我們可以設(shè)置初始容量來(lái)制止重新計(jì)算hash值或者是擴(kuò)容。
為了類型安好,可讀性和剛強(qiáng)性的理由總是要使用泛型。同時(shí),使用泛型還可以制止運(yùn)行時(shí)的ClassCastException。
使用JDK供給的不變類immutableclass作為Map的鍵可以制止為我們自己的類實(shí)現(xiàn)hashCode和equals方法。
編程的時(shí)候接口優(yōu)于實(shí)現(xiàn)。
底層的集合實(shí)際上是空的處境下,返回長(zhǎng)度是0的集合或者是數(shù)組,不要返回null。
16.Enumeration接口和Iterator接口的識(shí)別有哪些?
Enumeration速度是Iterator的2倍,同時(shí)占用更少的內(nèi)存。但是,Iterator遠(yuǎn)遠(yuǎn)比Enumeration安好,由于其他線程不能夠修改正在被iterator遍歷的集合里面的對(duì)象。同時(shí),Iterator允許調(diào)用者刪除底層集合里面的元素,這對(duì)Enumeration來(lái)說(shuō)是不成能的。
17.HashSet和TreeSet有什么識(shí)別?
HashSet是由一個(gè)hash表來(lái)實(shí)現(xiàn)的,因此,它的元素是無(wú)序的。add,remove,contains方法的時(shí)間繁雜度是O1。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國(guó)鉬絲探傷儀行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025至2031年中國(guó)蝎子行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年男子氧化標(biāo)槍項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國(guó)環(huán)類鍛件行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年改性丙烯酸水性卓面漆項(xiàng)目可行性研究報(bào)告
- 2025年工程機(jī)械萬(wàn)向節(jié)項(xiàng)目可行性研究報(bào)告
- 2025年內(nèi)旋轉(zhuǎn)式濃度變送器項(xiàng)目可行性研究報(bào)告
- 2025至2030年中國(guó)DL-肉毒堿鹽酸鹽數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年高強(qiáng)玻璃纖維紗項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年中國(guó)鋁材專用鋸數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 企業(yè)法律顧問(wèn)方案
- 哈佛大學(xué)住房研究聯(lián)合中心:2024年美國(guó)房屋租賃報(bào)告
- 農(nóng)商銀行貴金屬分析報(bào)告
- 人教版英語(yǔ)八年級(jí)下冊(cè)全冊(cè)教案教學(xué)設(shè)計(jì)及教學(xué)反思
- 軟件確認(rèn)報(bào)告-模板
- 馬克思主義的誕生(何)
- 《紅樓夢(mèng)第五回》課件
- 供應(yīng)鏈管理 課件 項(xiàng)目一 供應(yīng)鏈及供應(yīng)鏈管理認(rèn)知
- 2023年全國(guó)醫(yī)學(xué)博士外語(yǔ)統(tǒng)一考試(英語(yǔ))
- 2024年中儲(chǔ)棉總公司招聘筆試參考題庫(kù)含答案解析
- 微整培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論