Java面試題總結之OOA/D,UML,和XML

来源:https://www.cnblogs.com/yangxianyang/archive/2019/05/18/10886503.html
-Advertisement-
Play Games

全文字數: 2732 閱讀時間: 大約9 分鐘 1、UML 是什麼?常用的幾種UML圖? 統一建模語言(Unified Modeling Language,UML)又稱標準建模語言;常用圖包括:用例圖,靜態圖(包括類圖、對象圖和包圖),行為圖,交互圖(順序圖, 協作圖),實現圖。 2、編程題: 寫一 ...


全文字數:   2732

閱讀時間:   大約9 分鐘

1UML 是什麼?常用的幾種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;

   }

}

3Java 中常用的設計模式?簡述工廠模式?

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、你對軟體開發中迭代的含義的理解。

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

6XML 文檔定義有幾種形式?它們之間有何本質區別?解析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());

      }

   }

}

 文件效果:

 

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 要正確理解this,首先得理解執行上下文,這裡推薦湯姆大叔的 "執行上下文" ,因為 是在運行代碼時確認具體指向誰,箭頭函數除外。 全局作用域中的this : 每個 文件都是一個模塊, 指向空對象( ) 當然也有些意外,比如下麵這種情況: 瀏覽器端 : 指向 。 函數作用域中的this 這裡分 ...
  • 這個問題是解決基於 vue 和 electron 的開發中使用 vuex 的 dispatch 無效的問題,即解決了 Please, don't use direct commit's, use dispatch instead of this. 問題。先允許我梳理一下目錄結構,以便閱讀的時候不會一 ...
  • 經過前面幾次的學習,已經可以做下小功能,今天要實現的事用戶註冊路由。 一、users_model.js 功能:定義用戶對象模型 二、users_controller.js 功能:為Express伺服器實現用戶註冊的路由 三、signup.html 用戶註冊頁面 四、routes.js 功能:為Exp ...
  • es7 async和await ,作為genertor函數語法糖,在使用上比generator函數方便的,Generator 函數就是一個封裝的非同步任務,或者說是非同步任務的容器。非同步操作需要暫停的地方,都用yield語句註明. generator將非同步的流程標記的很簡潔,但是流程執行卻並不方便,所有 ...
  • Bootstrap表格插件bootstrap-table配置與應用小結 by:授客 QQ:1033553122 win7 JQuery-3.2.1.min.js 下載地址: https://gitee.com/ishouke/front_end_plugin/blob/master/jquery-3 ...
  • 介紹 vee-validate 在子組件內使用過程中,如何通過父組件校驗子組件,並獲取校驗信息。 ...
  • 摘要: 總有一款合適的通信方式。 作者: "浪里行舟" "Fundebug" 經授權轉載,版權歸原作者所有。 前言 組件是 vue.js 最強大的功能之一,而組件實例的作用域是相互獨立的,這就意味著不同組件之間的數據無法相互引用。一般來說,組件可以有以下幾種關係: 如上圖所示,A 和 B、B 和 C ...
  • Step1:Vue.extend()創建組件 Step2:Vue.component()註冊組件,註冊的標簽一定要用小寫 Step3:掛載點使用組件 全局註冊和局部註冊 全局註冊: 局部註冊: 我們需要在聲明掛載點的地方註入組件即可: 這樣只能在掛載點為 app1地方使用my component組件 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...