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