




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
經(jīng)典word整理文檔,僅參考,雙擊此處可刪除頁(yè)眉頁(yè)腳。本資料屬于網(wǎng)絡(luò)整理,如有侵權(quán),請(qǐng)聯(lián)系刪除,謝謝!面向?qū)ο缶幊蹋∣OP)Java是一個(gè)支持并發(fā)、基于類(lèi)和面向?qū)ο蟮挠?jì)算機(jī)編程語(yǔ)言。下面列出了面向?qū)ο筌浖_(kāi)發(fā)的優(yōu)點(diǎn):代碼開(kāi)發(fā)模塊化,更易維護(hù)和修改。代碼復(fù)用。增強(qiáng)代碼的可靠性和靈活性。增加代碼的可理解性。面向?qū)ο缶幊逃泻芏嘀匾奶匦裕热纾悍庋b,繼承,多態(tài)和抽象。下面的章節(jié)我們會(huì)逐個(gè)分析這些特性。封裝被其他對(duì)象訪(fǎng)問(wèn)的方法來(lái)改變它內(nèi)部的數(shù)據(jù)。在Java當(dāng)中,有3種修飾符:public,private和protected。每一種修飾符給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪(fǎng)問(wèn)權(quán)限。下面列出了使用封裝的一些好處:通過(guò)隱藏對(duì)象的屬性來(lái)保護(hù)對(duì)象內(nèi)部的狀態(tài)。改變或者是擴(kuò)展。禁止對(duì)象之間的不良交互提高模塊化。參考這個(gè)文檔獲取更多關(guān)于封裝的細(xì)節(jié)和示例。多態(tài)-1-多態(tài)是編程語(yǔ)言給不同的底層數(shù)據(jù)類(lèi)型做相同的接口展示的一種能力。一個(gè)多態(tài)類(lèi)型上的操作可以應(yīng)用到其他類(lèi)型的值上面。繼承碼的重用行,也可以在不修改類(lèi)的情況下給現(xiàn)存的類(lèi)添加新特性。抽象們的功能而不是實(shí)現(xiàn)細(xì)節(jié)來(lái)創(chuàng)建類(lèi)。Java支持創(chuàng)建只暴漏接口而不實(shí)現(xiàn)細(xì)節(jié)分離開(kāi)。抽象和封裝的不同點(diǎn)抽象和封裝是互補(bǔ)的概念。一方面,抽象關(guān)注對(duì)象的行為。另一做到封裝,因此,封裝可以看成是用來(lái)提供抽象的一種策略。常見(jiàn)的Java問(wèn)題1.什么是Java虛擬機(jī)?為什么Java語(yǔ)言”?Java虛擬機(jī)是一個(gè)可以執(zhí)行Java源文件被編譯成能被Java虛擬機(jī)執(zhí)行的字節(jié)碼文件。Java被設(shè)計(jì)成允許應(yīng)用程序可以運(yùn)行在任意的平臺(tái),而不需要程序員為每一個(gè)平臺(tái)單獨(dú)重寫(xiě)或者是重新編譯。Java虛擬機(jī)讓這個(gè)變?yōu)榭赡?,因?yàn)樗赖讓佑布脚_(tái)的指令長(zhǎng)度和其他特性。-2-2.JDK和JRE的區(qū)別是什么?Java運(yùn)行時(shí)環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機(jī)。它同時(shí)也包含了執(zhí)行applet開(kāi)發(fā)工具包(JDK)是完整的Java調(diào)試器),可以讓開(kāi)發(fā)者開(kāi)發(fā)、編譯、執(zhí)行Java應(yīng)用程序。中是否可以覆蓋(override)一個(gè)private或者是static的方法?所屬的類(lèi)的實(shí)例變量的情況下被訪(fǎng)問(wèn)。Java中static方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時(shí)動(dòng)態(tài)綁定的,而static方法跟類(lèi)的任何實(shí)例都不相關(guān),所以概念上不適用。4.是否可以在static環(huán)境中訪(fǎng)問(wèn)非static變量?static變量在Java中是屬于類(lèi)的,它在所有的實(shí)例中的值是一Javastatic變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來(lái)訪(fǎng)問(wèn)非static因?yàn)檫@些變量還沒(méi)有被創(chuàng)建出來(lái),還沒(méi)有跟任何實(shí)例關(guān)聯(lián)上。5.Java支持的數(shù)據(jù)類(lèi)型有哪些?什么是自動(dòng)拆裝箱?Java語(yǔ)言支持的8中基本數(shù)據(jù)類(lèi)型是:byteshort-3-intlongfloatdoublebooleanchar自動(dòng)裝箱是Java編譯器在基本數(shù)據(jù)類(lèi)型和對(duì)應(yīng)的對(duì)象包裝類(lèi)型之間做的一個(gè)轉(zhuǎn)化。比如:把int轉(zhuǎn)化成Integer,double轉(zhuǎn)化成double,等等。反之就是自動(dòng)拆箱。6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?Java中的方法重載發(fā)生在同一個(gè)類(lèi)里面兩個(gè)或者是多個(gè)方法的類(lèi)型。覆蓋者可能不會(huì)限制它所覆蓋的方法的訪(fǎng)問(wèn)。7.Java中,什么是構(gòu)造函數(shù)?什么是構(gòu)造函數(shù)重載?什么是復(fù)制構(gòu)造函數(shù)?函數(shù)。在程序員沒(méi)有給類(lèi)提供構(gòu)造函數(shù)的情況下,Java編譯器會(huì)為這個(gè)類(lèi)創(chuàng)建一個(gè)默認(rèn)的構(gòu)造函數(shù)。Java中構(gòu)造函數(shù)重載和方法重載很相似。可以為一個(gè)類(lèi)創(chuàng)建多個(gè)構(gòu)造函數(shù)。每一個(gè)構(gòu)造函數(shù)必須有它自己唯一的參數(shù)列表。-4-Java不支持像果你不自己寫(xiě)構(gòu)造函數(shù)的情況下,Java不會(huì)創(chuàng)建默認(rèn)的復(fù)制構(gòu)造函數(shù)。8.Java支持多繼承么?不支持,Java不支持多繼承。每個(gè)類(lèi)都只能繼承一個(gè)類(lèi),但是可以實(shí)現(xiàn)多個(gè)接口。9.接口和抽象類(lèi)的區(qū)別是什么?Java提供和支持創(chuàng)建抽象類(lèi)和接口。它們的實(shí)現(xiàn)有共同點(diǎn),不同點(diǎn)在于:抽象和非抽象的方法。類(lèi)可以實(shí)現(xiàn)很多個(gè)接口,但是只能繼承一個(gè)抽象類(lèi)是,類(lèi)可以不實(shí)現(xiàn)抽象類(lèi)聲明的所有方法,當(dāng)然,在這種情況下,類(lèi)也必須得聲明成是抽象的。抽象類(lèi)可以在不提供接口方法實(shí)現(xiàn)的情況下實(shí)現(xiàn)接口。Java接口中聲明的變量默認(rèn)都是final的。抽象類(lèi)可以包含非final的變量。Java接口中的成員函數(shù)默認(rèn)是public的。抽象類(lèi)的成員函數(shù)可以是private,protected或者是public。但是,如果它包含main方法的話(huà)是可以被調(diào)用的。-5-也可以參考JDK8中抽象類(lèi)和接口的區(qū)別10.什么是值傳遞和引用傳遞?對(duì)象被值傳遞,意味著傳遞了對(duì)象的一個(gè)副本。因此,就算是改變了對(duì)象副本,也不會(huì)影響源對(duì)象的值。引用。因此,外部對(duì)引用對(duì)象所做的改變會(huì)反映到所有的對(duì)象上。Java線(xiàn)程11.進(jìn)程和線(xiàn)程的區(qū)別是什么?進(jìn)程是執(zhí)行著的應(yīng)用程序,而線(xiàn)程是進(jìn)程內(nèi)部的一個(gè)執(zhí)行序列。一個(gè)進(jìn)程可以有多個(gè)線(xiàn)程。線(xiàn)程又叫做輕量級(jí)進(jìn)程。12.創(chuàng)建線(xiàn)程有幾種不同的方式?你喜歡哪一種?為什么?有三種方式可以用來(lái)創(chuàng)建線(xiàn)程:繼承Thread類(lèi)實(shí)現(xiàn)Runnable接口應(yīng)用程序可以使用Executor框架來(lái)創(chuàng)建線(xiàn)程池實(shí)現(xiàn)Runnable接口這種方式更受歡迎,因?yàn)檫@不需要繼承Thread類(lèi)。在應(yīng)用設(shè)計(jì)中已經(jīng)繼承了別的對(duì)象的情況下,這需要多繼承(而Java常高效的,很容易實(shí)現(xiàn)和使用。13.概括的解釋下線(xiàn)程的幾種可用狀態(tài)。線(xiàn)程在執(zhí)行過(guò)程中,可以處于下面幾種狀態(tài):就緒(Runnable):線(xiàn)程準(zhǔn)備運(yùn)行,不一定立馬就能開(kāi)始執(zhí)行。-6-運(yùn)行中(Running):進(jìn)程正在執(zhí)行線(xiàn)程的代碼。等待中(Waiting):線(xiàn)程處于阻塞的狀態(tài),等待外部的處理結(jié)束。睡眠中(Sleeping):線(xiàn)程被強(qiáng)制睡眠。I/O阻塞(BlockedonI/O):等待I/O操作完成。同步阻塞(BlockedonSynchronization):等待獲取鎖。死亡(Dead):線(xiàn)程完成了執(zhí)行。14.同步方法和同步代碼塊的區(qū)別是什么?在Java語(yǔ)言中,每一個(gè)對(duì)象有一把鎖。線(xiàn)程可以使用synchronized關(guān)鍵字來(lái)獲取對(duì)象上的鎖。synchronized關(guān)鍵字可應(yīng)用在方法級(jí)別(粗粒度鎖)或者是代碼塊級(jí)別(細(xì)粒度鎖)。哪種級(jí)別的同步?監(jiān)視器和鎖在Java虛擬機(jī)中是一塊使用的。監(jiān)視器監(jiān)視一塊同和一個(gè)對(duì)象引用相關(guān)聯(lián)。線(xiàn)程在獲取鎖之前不允許執(zhí)行同步代碼。16.什么是死鎖(deadlock)??jī)蓚€(gè)進(jìn)程都在等待對(duì)方執(zhí)行完畢才能繼續(xù)往下執(zhí)行的時(shí)候就發(fā)生了死鎖。結(jié)果就是兩個(gè)進(jìn)程都陷入了無(wú)限的等待中。17.如何確保N個(gè)線(xiàn)程可以訪(fǎng)問(wèn)N個(gè)資源同時(shí)又不導(dǎo)致死鎖?獲取鎖的順序,并強(qiáng)制線(xiàn)程按照指定的順序獲取鎖。因此,如果所有的線(xiàn)程都是以同樣的順序加鎖和釋放鎖,就不會(huì)出現(xiàn)死鎖了。-7-Java集合類(lèi)18.Java集合類(lèi)框架的基本接口有哪些?Java集合類(lèi)提供了一套設(shè)計(jì)良好的支持對(duì)一組對(duì)象進(jìn)行操作的接口和類(lèi)。Java集合類(lèi)里面最基本的接口有:Collection:代表一組對(duì)象,每一個(gè)對(duì)象都是它的子元素。Set:不包含重復(fù)元素的`Collection。List:有順序的collection,并且可以包含重復(fù)元素。Map:可以把鍵(key)映射到值(value)的對(duì)象,鍵不能重復(fù)。19.為什么集合類(lèi)沒(méi)有實(shí)現(xiàn)Cloneable和Serializable接口?集合類(lèi)允許重復(fù)的鍵,有些不允許。20.什么是迭代器(Iterator)?Iterator接口提供了很多對(duì)集合元素進(jìn)行迭代的方法。每一個(gè)集合類(lèi)都包含了可以返回迭代器實(shí)例的迭代方法。迭代器可以在迭代的過(guò)程中刪除底層集合的元素。克隆(cloning)或者是序列化(serialization)的語(yǔ)義和含義是克隆或者是序列化。21.Iterator和ListIterator的區(qū)別是什么?下面列出了他們的區(qū)別:Iterator可用來(lái)遍歷Set和List集合,但是ListIterator只-8-能用來(lái)遍歷List。Iterator對(duì)集合只能是前向遍歷,ListIterator既可以前向也可以后向。ListIterator實(shí)現(xiàn)了Iterator增加元素,替換元素,獲取前一個(gè)和后一個(gè)元素的索引,等等。22.快速失敗(fail-fast)和安全失敗(fail-safe)的區(qū)別是什么?Iterator的安全失敗是基于對(duì)底層集合做拷貝,因此,它不受包下面的所有的集合類(lèi)都是快速失java.util.concurrent包下面的所有的類(lèi)都是安全失敗的??焖偈〉牡鲿?huì)拋出ConcurrentModificationException異常,而安全失敗的迭代器永遠(yuǎn)不會(huì)拋出這樣的異常。23.Java中的HashMap的工作原理是什么?Java中的HashMap是以鍵值對(duì)(key-value)的形式存儲(chǔ)元素的。HashMap需要一個(gè)hash函數(shù),它使用hashCode()和equals()方法來(lái)向集合/從集合添加和檢索元素。當(dāng)調(diào)用會(huì)計(jì)算key的hash值,然后把鍵值對(duì)存儲(chǔ)在集合中合適的索引上。如果key已經(jīng)存在了,value會(huì)被更新成新值。HashMap的一些重要的特性是它的容量(capacity),負(fù)載因子(loadfactor)和擴(kuò)容極限(thresholdresizing)。24.hashCode()和equals()方法的重要性體現(xiàn)在什么地方?Java中的HashMap使用hashCode()和equals()方法來(lái)確定鍵值-9-hash所以這兩個(gè)方法的實(shí)現(xiàn)對(duì)HashMap的精確性和正確性是至關(guān)重要的。25.HashMap和Hashtable有什么區(qū)別?HashMap和Hashtable都實(shí)現(xiàn)了Map接口,因此很多特性非常相似。但是,他們有以下不同點(diǎn):HashMap允許鍵和值是null,而Hashtable不允許鍵或者值是null。Hashtable是同步的,而HashMap不是。因此,HashMap更適合于單線(xiàn)程環(huán)境,而Hashtable適合于多線(xiàn)程環(huán)境。HashMap提供了可供應(yīng)用迭代的鍵的集合,因此,HashMap是快提供了對(duì)鍵的列舉(Enumeration)。一般認(rèn)為Hashtable是一個(gè)遺留的類(lèi)。26.數(shù)組(Array)和列表(ArrayList)有什么區(qū)別?什么時(shí)候應(yīng)該使用Array而不是ArrayList?下面列出了Array和ArrayList的不同點(diǎn):Array可以包含基本類(lèi)型和對(duì)象類(lèi)型,ArrayList只能包含對(duì)象類(lèi)型。Array大小是固定的,ArrayList的大小是動(dòng)態(tài)變化的。ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。-10-當(dāng)處理固定大小的基本數(shù)據(jù)類(lèi)型的時(shí)候,這種方式相對(duì)比較慢。27.ArrayList和LinkedList有什么區(qū)別?ArrayList和LinkedList都實(shí)現(xiàn)了List接口,他們有以下的不同點(diǎn):ArrayList是基于索引的數(shù)據(jù)接口,它的底層是數(shù)組。它可以以O(shè)(1)時(shí)間復(fù)雜度對(duì)元素進(jìn)行隨機(jī)訪(fǎng)問(wèn)。與此對(duì)應(yīng),LinkedList是以O(shè)(n)。相對(duì)于的插入,添加,刪除操作速度更新計(jì)算大小或者是更新索引。LinkedList比ArrayList更占內(nèi)存,因?yàn)長(zhǎng)inkedList為每一個(gè)節(jié)點(diǎn)存儲(chǔ)了兩個(gè)引用,一個(gè)指向前一個(gè)元素,一個(gè)指向下一個(gè)元素。也可以參考ArrayListvs.LinkedList。28.Comparable和Comparator接口是干什么的?列出它們的區(qū)別。Java提供了只包含一個(gè)compareTo()方法的Comparable接口。這個(gè)方法可以個(gè)給兩個(gè)對(duì)象排序。具體來(lái)說(shuō),它返回負(fù)數(shù),0,正數(shù)來(lái)表明輸入對(duì)象小于,等于,大于已經(jīng)存在的對(duì)象。Java提供了包含compare()和equals()兩個(gè)方法的Comparator-11-一個(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。29.什么是Java優(yōu)先級(jí)隊(duì)列(PriorityPriorityQueue是一個(gè)基于優(yōu)先級(jí)堆的無(wú)界隊(duì)列,它的元素是按照自然順序(naturalorder)排序的。在創(chuàng)建的時(shí)候,我們可以給它不允許null值,后,PriorityQueue不是線(xiàn)程安全的,入隊(duì)和出隊(duì)的時(shí)間復(fù)雜度是O(log(n))。30.你了解大O符號(hào)(big-Onotation)么?你能給出不同數(shù)據(jù)結(jié)構(gòu)的例子么?大O或者是性能在最壞的場(chǎng)景下有多么好。大O符號(hào)也可用來(lái)描述其他的行為,比如:內(nèi)存消耗。因?yàn)榧螼O符號(hào)可以對(duì)大量數(shù)據(jù)的性能給出一個(gè)很好的說(shuō)明。31.如何權(quán)衡是使用無(wú)序的數(shù)組還是有序的數(shù)組?有序數(shù)組最大的好處在于查找的時(shí)間復(fù)雜度是O(logn),而無(wú)序數(shù)組是O(n)。有序數(shù)組的缺點(diǎn)是插入操作的時(shí)間復(fù)雜度是O(n),-12-插入時(shí)間復(fù)雜度是常量O(1)。32.Java集合類(lèi)框架的最佳實(shí)踐有哪些?根據(jù)應(yīng)用的需要正確選擇要使用的集合的類(lèi)型對(duì)性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我們就應(yīng)該用Array而不是ArrayList。元素的數(shù)目,我們可以設(shè)置初始容量來(lái)避免重新計(jì)算hash值或者是擴(kuò)容。為了類(lèi)型安全,可讀性和健壯性的原因總是要使用泛型。同時(shí),使用泛型還可以避免運(yùn)行時(shí)的ClassCastException。使用JDK提供的不變類(lèi)(immutableclass)作為Map的鍵可以避免為我們自己的類(lèi)實(shí)現(xiàn)hashCode()和equals()方法。編程的時(shí)候接口優(yōu)于實(shí)現(xiàn)。0的集合或者是數(shù)組,不要返回null。33.Enumeration接口和Iterator接口的區(qū)別有哪些?Enumeration速度是Iterator的2倍,同時(shí)占用更少的內(nèi)存。但是,Iterator遠(yuǎn)遠(yuǎn)比Enumeration安全,因?yàn)槠渌€(xiàn)程不能夠修改正在被iterator允許調(diào)用者刪除底層集合里面的元素,這對(duì)Enumeration來(lái)說(shuō)是不可能的。34.HashSet和TreeSet有什么區(qū)別?-13-HashSet是由一個(gè)hashadd(),remove(),contains()方法的時(shí)間復(fù)雜度是O(1)。是由一個(gè)樹(shù)形的結(jié)構(gòu)來(lái)實(shí)現(xiàn)的,它里面的元素是有序的。因此,add(),remove(),contains()方法的時(shí)間復(fù)雜度是O(logn)。垃
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 碎石糾紛協(xié)議書(shū)
- 綠苗補(bǔ)償協(xié)議書(shū)
- 美國(guó)合并協(xié)議書(shū)
- 家禽類(lèi)買(mǎi)賣(mài)合同協(xié)議書(shū)
- 美容風(fēng)險(xiǎn)協(xié)議書(shū)
- 用工告知協(xié)議書(shū)
- 打架后雙方責(zé)任協(xié)議書(shū)
- 服裝加工類(lèi)合作協(xié)議書(shū)
- 投資修公路合同協(xié)議書(shū)
- 未成年紋身賠償協(xié)議書(shū)
- amforiBSCI行為守則(文檔版)
- 《病理檢驗(yàn)技術(shù)》課程標(biāo)準(zhǔn)
- 服務(wù)中心及辦公室裝修設(shè)計(jì)方案
- 閥門(mén)系數(shù)Cv和KV值計(jì)算表格(帶公式)
- 體質(zhì)測(cè)量與評(píng)價(jià)期末考試試題及答案
- 行業(yè)標(biāo)準(zhǔn):GB∕T 9254.2-2021 信息技術(shù)設(shè)備、多媒體設(shè)備和接收機(jī) 電磁兼容 第2部分:抗擾度要求
- 氫能無(wú)人機(jī)項(xiàng)目可研報(bào)告范文參考
- 簧片落料彎曲級(jí)進(jìn)模設(shè)計(jì)畢業(yè)設(shè)計(jì)(論文)
- 完整版8D改善報(bào)告
- MSA測(cè)量系統(tǒng)分析軟件(第三版A級(jí)實(shí)例)
- 工業(yè)硅技術(shù)安全操作規(guī)程
評(píng)論
0/150
提交評(píng)論