題目:120 個(gè) Java 面試題和答案(上)
我是動(dòng)力節(jié)點(diǎn)的一名學(xué)員,就職于百度,在學(xué)習(xí)過程中整理了一些常見面試題,希望對(duì)大家有所幫助。上課期間老師告訴我們知識(shí)是需要分享的,只有分享了自己的知識(shí)才可以贏得和別人討論的機(jī)會(huì),這些機(jī)會(huì)非常重要,因?yàn)楹图夹g(shù)大牛們討論技術(shù)會(huì)讓自己對(duì)技術(shù)理解得更透徹。
我們將要討論 Java 面試中的各種不同類型的面試題(備注:有些題比較偏)。
下面的章節(jié)分為上下兩篇,第一篇將要討論面向?qū)ο缶幊毯退奶攸c(diǎn),關(guān)于 Java 和它的功能的常見問題,Java的集合類,垃圾收集器;第二篇主要討論異常處理,Java小應(yīng)用程序,Swing,JDBC,遠(yuǎn)程方法調(diào)用(RMI),Servlet和JSP 。
目錄
面向?qū)ο蠓?/span>析(OOA)
面向?qū)ο笤O(shè)計(jì)(OOD)
面向?qū)ο缶幊蹋∣OP)
常見的 Java 問題
Java 線程
Java 集合類
垃圾收集器
面向?qū)ο蠓治觯∣OA)
是在一個(gè)系統(tǒng)的開發(fā)過程中進(jìn)行了系統(tǒng)業(yè)務(wù)調(diào)查以后,按照面向?qū)ο蟮乃枷雭矸治鰡栴}。OOA 與結(jié)構(gòu)化分析有較大的區(qū)別。OOA 所強(qiáng)調(diào)的是在系統(tǒng)調(diào)查資料的基礎(chǔ)上,針對(duì) OO 方法所需要的素材進(jìn)行的歸類分析和整理,而不是對(duì)管理業(yè)務(wù)現(xiàn)狀和方法的分析。
【更多 Java 資料下載,可訪問動(dòng)力節(jié)點(diǎn)(中國區(qū))官網(wǎng) www.dabaquan.cn 下載區(qū)】
面向?qū)ο笤O(shè)計(jì)(OOD)
面向?qū)ο笤O(shè)計(jì)(Object-Oriented Design,OOD)方法是 OO 方法中一個(gè)中間過渡環(huán)節(jié)。其主要作用是對(duì) OOA分析的結(jié)果作進(jìn)一步的規(guī)范化整理,以便能夠被 OOP 直接接受。 面向?qū)ο笤O(shè)計(jì)(OOD)是一種軟件設(shè)計(jì)方法,是一種工程化規(guī)范。這是毫無疑問的。按照 Bjarne Stroustrup的說法,面向?qū)ο蟮木幊谭妒剑╬aradigm)是[Stroustrup, 97]:
1) 決定你要的類;
2) 給每個(gè)類提供完整的一組操作;
3) 明確地使用繼承來表現(xiàn)共同點(diǎn)。
由這個(gè)定義,我們可以看出:OOD 就是“根據(jù)需求決定所需的類、類的操作以及類之間關(guān)聯(lián)的過程”。
OOD 的目標(biāo)是管理程序內(nèi)部各部分的相互依賴。為了達(dá)到這個(gè)目標(biāo),OOD 要求將程序分成塊,每個(gè)塊的規(guī)模 應(yīng)該小到可以管理的程度,然后分別將各個(gè)塊隱藏在接口(interface)的后面,讓它們只通過接口相互交 流。比如說,如果用 OOD 的方法來設(shè)計(jì)一個(gè)服務(wù)器-客戶端(client-server)應(yīng)用,那么服務(wù)器和客戶端 之間不應(yīng)該有直接的依賴,而是應(yīng)該讓服務(wù)器的接口和客戶端的接口相互依賴。
這種依賴關(guān)系的轉(zhuǎn)換使得系統(tǒng)的各部分具有了可復(fù)用性。還是拿上面那個(gè)例子來說,客戶端就不必依 賴于特定的服務(wù)器,所以就可以復(fù)用到其他的環(huán)境下。如果要復(fù)用某一個(gè)程序塊,只要實(shí)現(xiàn)必須的接口就 行了。
OOD 是一種解決軟件問題的設(shè)計(jì)范式(paradigm),一種抽象的范式。使用 OOD 這種設(shè)計(jì)范式,我們可 以用對(duì)象(object)來表現(xiàn)問題領(lǐng)域(problem domain)的實(shí)體,每個(gè)對(duì)象都有相應(yīng)的狀態(tài)和行為。我們 剛才說到:OOD 是一種抽象的范式。抽象可以分成很多層次,從非常概括的到非常特殊的都有,而對(duì)象可能 處于任何一個(gè)抽象層次上。另外,彼此不同但又互有關(guān)聯(lián)的對(duì)象可以共同構(gòu)成抽象:只要這些對(duì)象之間有 相似性,就可以把它們當(dāng)成同一類的對(duì)象來處理。
面向?qū)ο缶幊蹋∣OP)
面向?qū)ο缶?/span>程(Object Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。
OOP 達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。面向?qū)ο缶幊逃泻芏嘀匾奶匦裕热纾悍庋b,繼承,多態(tài)和抽象。下面的章節(jié)我們會(huì)逐個(gè) 分析這些特性。
【更多 Java 資料下載,可訪問動(dòng)力節(jié)點(diǎn)(中國區(qū))官網(wǎng) www.dabaquan.cn 下載區(qū)】
封裝
封裝給對(duì)象提供了隱藏內(nèi)部特性和行為的能力。對(duì)象提供一些能被其他對(duì)象訪問的方法來改變它內(nèi)部的數(shù) 據(jù)。在 Java 當(dāng)中,有 4 種訪問權(quán)限 對(duì)應(yīng)著三個(gè)修飾符:public,private ,protected。每一種修飾符 給其他的位于同一個(gè)包或者不同包下面對(duì)象賦予了不同的訪問權(quán)限。
下面列出了使用封裝的一些好處:
通過隱藏對(duì)象的屬性來保護(hù)對(duì)象內(nèi)部的狀態(tài)。 提高了代碼的可用性和可維護(hù)性,因?yàn)閷?duì)象的行為可以被單獨(dú)的改變或者是擴(kuò)展。 禁止對(duì)象之間的不良交互提高模塊化。參考這個(gè)文檔獲取更多關(guān)于封裝的細(xì)節(jié)和示例。
多態(tài)
多態(tài)是編程語言給不同的底層數(shù)據(jù)類型做相同的接口展示的一種能力。一個(gè)多態(tài)類型上的操作可以應(yīng)用到其他類型的值上面。
繼承
繼承給對(duì)象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也可以在不修 改類的情況下 給現(xiàn)存的類添加新特性。
抽象
抽象是把想法從具體的實(shí)例中分離出來的步驟,因此,要根據(jù)他們的功能而不是實(shí)現(xiàn)細(xì)節(jié)來創(chuàng)建類。Java 支持創(chuàng)建只暴漏接口而不包含方法實(shí)現(xiàn)的抽象的類。這種抽象技術(shù)的主要目的 是把類的行 為和實(shí)現(xiàn)細(xì)節(jié)分離開。
抽象和封裝的不同點(diǎn)
抽象和封裝是互補(bǔ)的概念。一方面,抽象關(guān)注對(duì)象的行為。另一方面,封裝關(guān)注對(duì)象行為的 細(xì)節(jié)。一般是 通過隱藏對(duì)象內(nèi)部狀態(tài)信息做到封裝,因此,封裝可以看成是用來提供抽象的 一種策略。
常見的 Java 問題
更多 Java 資料下載,可訪問動(dòng)力節(jié)點(diǎn)(中國區(qū))官網(wǎng) www.dabaquan.cn 下載區(qū)】