【Java面試】Java設計模式面試題!

六星_研鑫發表於2020-07-28

Java精品資料,Java 實戰專案,內含多執行緒,結構,演算法,BATJ面試題等等大牛累積經驗~~

需要更多資料,可以加下我們Java交流群學習基地,免費獲取 +君羊: 925050116


1:什麼是設計模式?

就是經過實踐驗證的用來解決特定環境下特定問題的解決方案


2:設計模式用來幹什麼?

尋找合適的物件

決定物件的粒度 

指定物件的介面

描述物件的實現

運用複用機制

重複使用經過實踐驗證的正確的,用來解決某一類問題的解決方案來達到減少

工作量、提高正確率等目的。


3:什麼是物件粒度

    物件中方法的多少就是粒度


4:基本的Java程式設計設計應遵循的規則?

  面向介面程式設計,優先使用物件組合


5:設計模式的應用範圍

  所能解決的特定的一類問題中


6:簡述什麼是單例模式,以及他解決的問題,應用的環境,解決的方案,模式的本質?

在任何時間內只有一個類例項存在的模式。

需要有一個從中進行全域性訪問和維護某種型別資料的區域的環境下使用單例模式。

解決方案就是保證一個類只有一個類例項存在。

本質就是例項共用同一塊記憶體區域。


7:程式碼示例:單例模式的兩種實現方法,並說明優缺點

public class Test{
 
     public Test(){
 
    }
 
private static Test test = new Test();
 
     public static Test getInstance(){
 
     return test;
 
}
 
    }


public class Test{
 
     private static Test test = null;
 
    private Test(){
 
}
 
    public static Test getInstance(){
 
   if(test==null){
 
  test = new Test();
 
}
 
   return test;
 
}
 
}

第二種方式不需每次都建立一個類例項,而只是在第一次建立


8:簡述什麼是工廠模式,以及他解決的問題,應用的環境,解決的方案,模式的本質

利用工廠來解決介面選擇的問題的模式。

應用環境:當一個類無法預料要建立哪種類的物件或是一個類需要由子類來指定建立的物件時,就需要用到工廠模式。

解決方案:定義一個建立物件的介面,讓子類來決定具體例項化哪一個類。

本質就是根據不同的情況來選擇不同的介面。


9:程式碼示例:工廠模式的實現方法

public class Factory{
 
     public static Sample creator(int which){
 
     if (which==1){
 
     return new SampleA();
 
}else if (which==2)
 
       return new SampleB();
 
     }
 
    }
 
    }
 
     Public class MyFactory{
 
        Public static myFactory f = null;
 
        Public MyFactory(){
 
        }
 
        Public static MyFactory getInstance(){
 
           If(f==null){
 
              F=new MyFactory();
 
           }
 
        }
 
        Public DBDAO getDAO(){
 
            Return new DBDAOImpl();
 
        }  
 
    }



10:述什麼是值物件模式,以及他解決的問題,應用的環境,解決的方案,模式的本質

用來把一組資料封裝成一個物件的模式。

解決問題:在遠端方法的呼叫次數增加的時候,相關的應用程式效能將會有很大的下降。

解決方案:使用值物件的時候,可以透過僅僅一次方法呼叫來取得整個物件,而不是使用多次方法呼叫以得到物件中每個域的數值。

本質:就是把需要傳遞的多個值封裝成一個物件一次性傳過去。

11:程式碼示例:值物件模式的實現方法

public class UserModel{
 
     private String userId;
 
    private String userName;
 
public void setUserId(String id){
 
     this.userId = id;
 
    }
 
    public String getUserId(){
 
    return userId;
 
    }
 
    public void setUserName(String name){
 
   this.userName = name;
 
}
 
public String getUserName(){
 
      return userName;
 
    }
 
    }



12:簡述什麼是DAO模式,以及他解決的問題,應用的環境,解決的方案,模式的本質

DAO:資料訪問物件

解決問題:根據資料來源不同,資料訪問也不同。根據儲存的型別(關聯式資料庫、物件導向資料庫、純檔案等)和供應商實現不同,永續性儲存(如資料庫)的訪問差別也很大。如何對儲存層以外的模組遮蔽這些複雜性,以提供統一的呼叫儲存實現。程式的分散式問題。

解決方案:是將資料訪問邏輯抽象為特殊的資源,也就是說將系統資源的介面從其底層訪問機制中隔離出來;透過將資料訪問的呼叫打包,資料訪問物件可以促進對於不同資料庫型別和模式的資料訪問。

DAO的本質:就是一層遮蔽一種變化。

本質:分層,是系統元件和資料來源中間的介面卡。(一層遮蔽一種變化)


13:程式碼示例:DAO模式的實現方法

public interface CustomerDAO {
 
public int insertCustomer(...);
 
public Collection selectCustomersVO(...);
 
}



14:什麼是開放-封閉法則(OCP)

可擴充套件但是不可以更改已有的模組

   對擴充套件是開放的 對修改是封閉


15:什麼是替換法則(LSP)

使用指向基類(超類)的引用的函式,必須能夠在不知道具體派生類(子類)物件

型別的情況下使用


16:如何綜合使用我們學過的設計模式來構建合理的應用程式結構

是採用介面進行隔離,然後同時暴露值物件和工廠類,如果是需要資料儲存的功能,又會透過DAO 模式去與資料儲存層互動。


17:構建常用的合理的Java應用包結構

Ui(表現層)

business--factory,ebi,ebo

dao--factory,dao,impl


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977571/viewspace-2707614/,如需轉載,請註明出處,否則將追究法律責任。

相關文章