Java面試題總結之OOA/D,UML,和XML
軟件設計師,公眾號:AlbertYang
1、UML 是什么?常用的幾種UML圖?
答:統一建模語言(Unified Modeling Language,UML)又稱標準建模語言;常用圖包括:用例圖,靜態圖(包括類圖、對象圖和包圖),行為圖,交互圖(順序圖, 協作圖),實現圖。
2、編程題: 寫一個Singleton(單例模式) 出來。
答:Singleton 模式主要作用是保證在Java 應用程序中,一個類Class 只有一個實例存在。舉例:定義一個類,它的構造函數為private 的,它有一個static的private 的該類變量,在類初始化時實例話,通過一個public 的getInstance方法獲取對它的引用,繼而調用其中的方法。
第一種餓漢式:
//懶漢式
public class Singleton {
//私有化構造函數
private Singleton() {
}
//創建一個對象
private static Singleton instance = new Singleton();
//提供公有方法返回該對象
public static Singleton getInstance() {
return instance;
}
}
第二種懶漢式:
//懶漢式
public class Singleton {
//私有化構造函數
private Singleton(){}
//創建一個空對象
private static Singleton instance = null;
//創建公有方法調用,對象如果為空創建對象,否則直接返回當前對象
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
3、Java 中常用的設計模式?簡述工廠模式?
答:Java 中的23 種設計模式可以分為三類:
創建型模式(5種):
Factory( 工廠模式),Builder( 建造者模式), Factory Method(工廠方法模式),Prototype(原型模式),Singleton(單例模式)。
結構型模式(7種):
Facade(外觀模式),Adapter(適配器模式), Bridge(橋接模式), Composite(組合模式),Decorator(裝飾器模式), Flyweight(享元模式), Proxy(代理模式)。
行為型模式(11種):
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),Iterator(迭代子模式), Mediator(中介者模式), Memento(備忘錄模式),Observer(觀察者模式),State(狀態模式),Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(責任鏈模式)。
工廠模式:工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的數據生成一組類中某一個類的實例,通常這一組類有一個公共的抽象父類并且實現了相同的方法,但是這些方法針對不同的數據進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。然后需要定義一個工廠類,工廠類可以根據條件生成不同的子類實例。當得到子類的實例后,開發人員可以調用基類中的方法而不必考慮到底返回的是哪一個子類的實例。
23種模式簡單說明:
單例模式:某個類只能有一個實例,提供一個全局的訪問點。
簡單工廠:一個工廠類根據傳入的參量決定創建出那一種產品類的實例。
工廠方法:定義一個創建對象的接口,讓子類決定實例化那個類。
建造者模式:封裝一個復雜對象的構建過程,并可以按步驟構造。
原型模式:通過復制現有的實例來創建新的實例。
適配器模式:將一個類的方法接口轉換成客戶希望的另外一個接口。
組合模式:將對象組合成樹形結構以表示“”部分-整體“”的層次結構。
裝飾模式:動態的給對象添加新的功能。
代理模式:為其他對象提供一個代理以便控制這個對象的訪問。
亨元(蠅量)模式:通過共享技術來有效的支持大量細粒度的對象。
外觀模式:對外提供一個統一的方法,來訪問子系統中的一群接口。
橋接模式:將抽象部分和它的實現部分分離,使它們都可以獨立的變化。
模板模式:定義一個算法結構,而將一些步驟延遲到子類實現。
解釋器模式:給定一個語言,定義它的文法的一種表示,并定義一個解釋器。
策略模式:定義一系列算法,把他們封裝起來,并且使它們可以相互替換。
狀態模式:允許一個對象在其對象內部狀態改變時改變它的行為。
觀察者模式:對象間的一對多的依賴關系。
備忘錄模式:在不破壞封裝的前提下,保持對象的內部狀態。
中介者模式:用一個中介對象來封裝一系列的對象交互。
命令模式:將命令請求封裝為一個對象,使得可以用不同的請求來進行參數化。
訪問者模式:在不改變數據結構的前提下,增加作用于一組對象元素的新功能。
責任鏈模式:將請求的發送者和接收者解耦,使的多個對象都有處理這個請求的機會。
迭代器模式:一種遍歷訪問聚合對象中各個元素的方法,不暴露該對象的內部結構。
4、開發中都用到了那些設計模式?用在什么場合?
答:所謂設計模式,就是一套被反復使用的代碼設計經驗的總結(情境中一個問題經過證實的一個解決方案)。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設計模式使人們可以更加簡單方便的復用成功的設計和體系結構。每個模式都描述了一個在我們的環境中不斷出現的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數次地使用那些已有的解決方案,無需在重復相同的工作。
(1) MVC模式,在JavaEE項目開發中主要用在表示層框架中,很好解決視圖和流程控制。在項目中采用的Struts、SpringMVC等框架。
(2) DAO模式,在項目開發中主要用在數據層,封裝數據的訪問操作,為業務層提供數據服務。
(3) IoC模式,在項目開發中業務層有大量對象,他們之間存在依賴關系,可以使用IoC模式減少他們之間的代碼耦合,提高系統的可擴展性。實際項目中使用的Spring框架來實現業務組件的裝配。
(4) Observer模式,在Servlet的-中應用到了觀察者模式。
(5) singleton單例模式和Factory工廠模式結合使用在項目中無需使用者了解過多的細節就可獲取有關的對象實例。比如Hibernate項目中通過SessionFactory來獲取Session。
(6) bridge模式,在項目中使用JDBC驅動訪問數據庫。
5、你對軟件開發中迭代的含義的理解。
答:軟件開發中,各個開發階段不是順序執行的,各個階段都是并行執行也就是迭代的意思。這樣能更好的適應,開發中的需求變化,及人員的變動
6、XML 文檔定義有幾種形式?它們之間有何本質區別?解析XML 文檔有哪幾種方式?
答:1)兩種形式:dtd 以及schema;
2)本質區別:schema 本身是xml 的,可以被XML 解析器解析(這也是從DTD上發展schema 的根本目的);
3)解析方式:
1.DOM解析: DOM的全稱是Document Object Model,也即文檔對象模型。在應用程序中,基于DOM的XML分析器將一個XML文檔轉換成一個對象模型的集合(通常稱DOM樹),應用程序正是通過對這個對象模型的操作,來實現對XML文檔數據的操作。通過DOM接口,應用程序可以在任何時候訪問XML文檔中的任何一部分數據,因此,這種利用DOM接口的機制也被稱作隨機訪問機制。
2.SAX解析:SAX的全稱是Simple APIs for XML,也即XML簡單應用程序接口。與DOM不同,SAX提供的訪問模式是一種順序模式,這是一種快速讀寫XML數據的方式。當使用SAX分析器對XML文檔進行分析時,會觸發一系列事件,并激活相應的事件處理函數,應用程序通過這些事件處理函數實現對XML文檔的訪問,因而SAX接口也被稱作事件驅動接口。
3.JDOM解析:JDOM采用了Java中的Collection架構來封裝集合,是Java愛好者更加熟悉的模式
4.DOM4J解析:xml解析器一次性把整個xml文檔加載進內存,然后在內存中構建一顆Document的對象樹,通過Document對象,得到樹上的節點對象,通過節點對象訪問(操作)到xml文檔的內容
7、你在項目中用到了xml 技術的哪些方面?怎么實現的?
答:用到了數據存貯,信息配置兩方面。
1.在做數據交換平臺時,將不能數據源的數據組裝成XML 文件,然后將XML 文件壓縮打包加密后通過網絡傳送給接收者,接收解密與解壓縮后再同XML 文件中還原相關信息進行處理。
2.在做軟件配置時,利用XML 可以很方便的進行,軟件的各種配置參數都存貯在XML 文件中。
8、用jdom 解析xml 文件時如何解決中文問題?如何解析?
答:代碼如下,用編碼方式加以解決
public class DOMTest {
// 文件路徑
private String outFile = "F:\people.xml";
public static void main(String args[]) {
new DOMTest();
}
public DOMTest() {
try {
// 1、獲取DOM解析器工廠,以便產生解析器;2、獲取DOM解析器,以便解析DOM
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.newDocument();
// 3.創建元素
Element root = doc.createElement("老師");
Element wang = doc.createElement("許");
// 4.向指定元素節點中增加子元素節點或增加元素到子節點
wang.appendChild(doc.createTextNode("我是許老師"));
root.appendChild(wang);
doc.appendChild(root);
// 5.設置然后把DOM寫回XML文件
Transformer transformer = TransformerFactory.newInstance().newTransformer();
// 6.指定Transformer應該使用的首選字符編碼,將字符序列作為字節序列進行編碼
transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
// 7.指定Transformer是否可以添加額外的空白,同時輸出
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.transform(new DOMSource(doc),
new StreamResult(outFile));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
文件效果:
Java UML XML
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。