詳解後端Java面試——OOA/D,UML,和XML

點關注,不迷路;持續更新Java架構相關技術及資訊熱文!!!算法

一、UML 是什麼?經常使用的幾種UML圖?

統一建模語言(Unified Modeling Language,UML)又稱標準建模語言;經常使用圖包括:用例圖,靜態圖(包括類圖、對象圖和包圖),行爲圖,交互圖(順序圖, 協做圖),實現圖。sql

二、編程題: 寫一個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;
	}
}
複製代碼

三、Java 中經常使用的設計模式?簡述工廠模式?

Java 中的23 種設計模式能夠分爲三類:bash

建立型模式(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種模式簡單說明

  • 單例模式:某個類只能有一個實例,提供一個全局的訪問點。
  • 簡單工廠:一個工廠類根據傳入的參量決定建立出那一種產品類的實例。
  • 工廠方法:定義一個建立對象的接口,讓子類決定實例化那個類。
  • 建造者模式:封裝一個複雜對象的構建過程,並能夠按步驟構造。
  • 原型模式:經過複製現有的實例來建立新的實例。
  • 適配器模式:將一個類的方法接口轉換成客戶但願的另一個接口。
  • 組合模式:將對象組合成樹形結構以表示「」部分-總體「」的層次結構。
  • 裝飾模式:動態的給對象添加新的功能。
  • 代理模式:爲其餘對象提供一個代理以便控制這個對象的訪問。
  • 亨元(蠅量)模式:經過共享技術來有效的支持大量細粒度的對象。
  • 外觀模式:對外提供一個統一的方法,來訪問子系統中的一羣接口。
  • 橋接模式:將抽象部分和它的實現部分分離,使它們均可以獨立的變化。
  • 模板模式:定義一個算法結構,而將一些步驟延遲到子類實現。
  • 解釋器模式:給定一個語言,定義它的文法的一種表示,並定義一個解釋器。
  • 策略模式:定義一系列算法,把他們封裝起來,而且使它們能夠相互替換。
  • 狀態模式:容許一個對象在其對象內部狀態改變時改變它的行爲。
  • 觀察者模式:對象間的一對多的依賴關係。
  • 備忘錄模式:在不破壞封裝的前提下,保持對象的內部狀態。
  • 中介者模式:用一箇中介對象來封裝一系列的對象交互。
  • 命令模式:將命令請求封裝爲一個對象,使得能夠用不一樣的請求來進行參數化。
  • 訪問者模式:在不改變數據結構的前提下,增長做用於一組對象元素的新功能。
  • 責任鏈模式:將請求的發送者和接收者解耦,使的多個對象都有處理這個請求的機會。
  • 迭代器模式:一種遍歷訪問聚合對象中各個元素的方法,不暴露該對象的內部結構。

四、開發中都用到了那些設計模式?用在什麼場合?

所謂設計模式,就是一套被反覆使用的代碼設計經驗的總結(情境中一個問題通過證明的一個解決方案)。使用設計模式是爲了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設計模式令人們能夠更加簡單方便的複用成功的設計和體系結構。每一個模式都描述了一個在咱們的環境中不斷出現的問題,而後描述了該問題的解決方案的核心。經過這種方式,你能夠無數次地使用那些已有的解決方案,無需在重複相同的工做。

  • MVC模式,在JavaEE項目開發中主要用在表示層框架中,很好解決視圖和流程控制。在項目中採用的Struts、SpringMVC等框架。
  • DAO模式,在項目開發中主要用在數據層,封裝數據的訪問操做,爲業務層提供數據服務。
  • IoC模式,在項目開發中業務層有大量對象,他們之間存在依賴關係,可使用IoC模式減小他們之間的代碼耦合,提升系統的可擴展性。實際項目中使用的Spring框架來實現業務組件的裝配。
  • Observer模式,在Servlet的監聽器中應用到了觀察者模式。
  • singleton單例模式和Factory工廠模式結合使用在項目中無需使用者瞭解過多的細節就可獲取有關的對象實例。好比Hibernate項目中經過SessionFactory來獲取Session。
  • bridge模式,在項目中使用JDBC驅動訪問數據庫。

五、你對軟件開發中迭代的含義的理解。

軟件開發中,各個開發階段不是順序執行的,各個階段都是並行執行也就是迭代的意思。這樣能更好的適應,開發中的需求變化,及人員的變更

六、XML 文檔定義有幾種形式?它們之間有何本質區別?解析XML 文檔有哪幾種方式?

  • 兩種形式:dtd 以及schema;
  • 本質區別:schema 自己是xml 的,能夠被XML 解析器解析(這也是從DTD上發展schema 的根本目的);
  • 解析方式
    • DOM解析: DOM的全稱是Document Object Model,也即文檔對象模型。在應用程序中,基於DOM的XML分析器將一個XML文檔轉換成一個對象模型的集合(一般稱DOM樹),應用程序正是經過對這個對象模型的操做,來實現對XML文檔數據的操做。經過DOM接口,應用程序能夠在任什麼時候候訪問XML文檔中的任何一部分數據,所以,這種利用DOM接口的機制也被稱做隨機訪問機制。
    • SAX解析:SAX的全稱是Simple APIs for XML,也即XML簡單應用程序接口。與DOM不一樣,SAX提供的訪問模式是一種順序模式,這是一種快速讀寫XML數據的方式。當使用SAX分析器對XML文檔進行分析時,會觸發一系列事件,並激活相應的事件處理函數,應用程序經過這些事件處理函數實現對XML文檔的訪問,於是SAX接口也被稱做事件驅動接口。
    • JDOM解析:JDOM採用了Java中的Collection架構來封裝集合,是Java愛好者更加熟悉的模式
    • DOM4J解析:xml解析器一次性把整個xml文檔加載進內存,而後在內存中構建一顆Document的對象樹,經過Document對象,獲得樹上的節點對象,經過節點對象訪問(操做)到xml文檔的內容

七、你在項目中用到了xml 技術的哪些方面?怎麼實現的?

用到了數據存貯,信息配置兩方面

  • 在作數據交換平臺時,將不能數據源的數據組裝成XML 文件,而後將XML 文件壓縮打包加密後經過網絡傳送給接收者,接收解密與解壓縮後再同XML 文件中還原相關信息進行處理。

  • 在作軟件配置時,利用XML 能夠很方便的進行,軟件的各類配置參數都存貯在XML 文件中。

八、用jdom 解析xml 文件時如何解決中文問題?如何解析?

代碼以下,用編碼方式加以解決

public class DOMTest {
	// 文件路徑
	private String outFile = "F:\people.xml";
	public static void main(String args[]) {
		new DOMTest();
	}
	public DOMTest() {
		try {
			// 一、獲取DOM解析器工廠,以便產生解析器;二、獲取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的工程師朋友們加入Java高級架構進階Qqun:963944895

羣內有技術大咖指點難題,還提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)

比你優秀的對手在學習,你的仇人在磨刀,你的閨蜜在減肥,隔壁老王在練腰, 咱們必須不斷學習,不然咱們將被學習者超越!

趁年輕,使勁拼,給將來的本身一個交代!

相關文章
相關標籤/搜索