天天看點

java 工程師面試題

一、你對MVC的了解,MVC有什麼優缺點?結合Struts,說明在一個Web應用如何去使用?

答:

MVC設計模式(應用觀察者模式的架構模式)

M: Model(Business process layer),模型,操作資料的業務處理層,并獨立于表現層(Independent of presentation)。

V: View(Presentation layer),視圖,通過用戶端資料類型顯示資料,并回顯模型層的執行結果。

C: Controller(Control layer),控制器,也就是視圖層和模型層橋梁,控制資料的流向,接受視圖層發出的事件,并重繪視圖

MVC架構的一種實作模型

模型二(Servlet-centric):

JSP+Servlet+JavaBean,以控制為核心,JSP隻負責顯示和收集資料,Sevlet,連接配接視圖和模型,将視圖層資料,發送給模型層,JavaBean,分為業務類和資料實體,業務類處理業務資料,資料實體,承載資料,基本上大多數的項目都是使用這種MVC的實作模式。

StrutsMVC架構(Web application frameworks)

Struts是使用MVC的實作模式二來實作的,也就是以控制器為核心。

Struts提供了一些元件使用MVC開發應用程式:

Model:Struts沒有提供model類。這個商業邏輯必須由Web應用程式的開發者以JavaBean或EJB的形式提供

View:Struts提供了action form建立form bean, 用于在controller和view間傳輸資料。此外,Struts提供了自定義JSP标簽庫,輔助開發者用JSP建立互動式的以表單為基礎的應用程式,應用程式資源檔案保留了一些文本常量和錯誤消息,可轉變為其它語言,可用于JSP中。

Controller:Struts提供了一個核心的控制器ActionServlet,通過這個核心的控制器來調用其他使用者注冊了的自定義的控制器Action,自定義Action需要符合Struts的自定義Action規範,還需要在struts-config.xml的特定配置檔案中進行配置,接收JSP輸入字段形成Action form,然後調用一個Action控制器。Action控制器中提供了model的邏輯接口。

二、什麼是WebService?

WebService是一個SOA(面向服務的程式設計)的架構,它是不依賴于語言,不依賴于平台,可以實作不同的語言間的互相調用,通過Internet進行基于Http協定的網絡應用間的互動。

WebService實作不同語言間的調用,是依托于一個标準,webservice是需要遵守WSDL(web服務定義語言)/SOAP(簡單請求協定)規範的。

WebService=WSDL+SOAP+UDDI(webservice的注冊)

Soap是由Soap的part和0個或多個附件組成,一般隻有part,在part中有Envelope和Body。

Web Service是通過提供标準的協定和接口,可以讓不同的程式內建的一種SOA架構。

Web Service的優點

(1) 可以讓異構的程式互相通路(跨平台)

(2) 松耦合

(3) 基于标準協定(通用語言,允許其他程式通路)

Web Service的基本原理

(1) Service Provider采用WSDL描述服務

(2) Service Provider 采用UDDI将服務的描述檔案釋出到UDDI伺服器(Register server)

(3) Service Requestor在UDDI伺服器上查詢并 擷取WSDL檔案

(4) Service requestor将請求綁定到SOAP,并通路相應的服務。

三、什麼是中間件?

中間件就是程式中可織入的,可重用的,與業務邏輯無關的各種元件。

中間件(middleware)是基礎軟體的一大類,屬于可複用軟體的範疇。顧名思義,中間件處于作業系統軟體與使用者的應用軟體的中間。中間件在作業系統、網絡和資料庫之上,應用軟體的下層,總的作用是為處于自己上層的應用軟體提供運作與開發的環境,幫助使用者靈活、高效地開發和內建複雜的應用軟體。

  在衆多關于中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨立的系統軟體或服務程式,分布式應用軟體借助這種軟體在不同的技術之間共享資源,中間件位于客戶機伺服器的作業系統之上,管理計算資源和網絡通信。

分類:資料通路中間件,遠端調用中間件,消息中間件,交易中間件,對象中間件。

舉例:

1,RMI(Remote Method Invocations, 遠端調用)

2,Load Balancing(負載均衡,将通路負荷分散到各個伺服器中)

3,Transparent Fail-over(透明的故障切換)

4,Clustering(叢集,用多個小的伺服器代替大型機)

5,Back-end-Integration(後端內建,用現有的、新開發的系統如何去內建遺留的系統)

6,Transaction事務(全局/局部)全局事務(分布式事務)局部事務(在同一資料庫聯接内的事務)

7,Dynamic Redeployment(動态重新部署,在不停止原系統的情況下,部署新的系統)

8,System Management(系統管理)

9,Threading(多線程處理)

10,Message-oriented Middleware面向消息的中間件(異步的調用程式設計)

11,Component Life Cycle(元件的生命周期管理)

12,Resource pooling(資源池)

13,Security(安全)

14,Caching(緩存)

四、什麼是典型的軟體三層結構?軟體設計為什麼要分層?軟體分層有什麼好處?

答:(1) Presentation layer(表示層)

(1) 表示邏輯(生成界面代碼)

(2) 接收請求

(3) 處理業務層抛出的異常

(4) 負責規則驗證(資料格式,資料非空等)

(5) 流程控制

(2) Service layer(服務層/業務層)

(1) 封裝業務邏輯處理,并且對外暴露接口

(2) 負責事務,安全等服務

(3) Persistence layer(持久層)

(1) 封裝資料通路的邏輯,暴露接口

(2) 提供友善的資料通路的方案(查詢語言,API,映射機制等)

Domain layer(域層)

(1) 業務對象以及業務關系的表示

(2) 處理簡單的業務邏輯

(3) 域層的對象可以穿越表示層,業務層,持久層

軟體分層結構使得代碼維護非常友善,設計明确,各層獨立,專注自己擅長的領域。

五、什麼是OOP?OOP相對于面向過程程式設計有哪些優點?

OOP,Object-Oriented Programming,面向對象程式設計不同于面向過程程式設計:

(1)OOP關注對象和角色,也就是事物的本質

1)OOP把客觀世界中的對象抽象成對應的類;

2)通過類構造執行個體;

3)通過依賴、繼承、實作等形式建立對象間的通信關系

(2)OOP易于擴充,增加或改變業務的功能,無需大幅改動改變源代碼

(3)OOP易于模組化,OOP就是軟體架構師在計算機進階語言中對客觀世界的抽象和再現,人們可以很好地了解和建立起計算機中的抽象模型

六、談談Overload和Override的差別。

方法的重寫Overriding和重載Overloading是Java多态性的不同表現。重寫Overriding是父類與子類之間多态性的一種表現,重載Overloading是一個類中多态性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫(Overriding)。子類的對象使用這個方法時,将調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變傳回值的類型。

七、談談HashMap和Hashtable的差別。

答: HashMap是輕量級的(線程不安全的,效率高的)集合,Hashtable是重量級的(線程安全的,效率低的)集合。

都屬于Map接口的類,實作了将惟一鍵映射到特定的值上。

HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。

Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因為它是同步的。

八、請問abstract class和interface有什麼差別?

1) 接口沒有任何的實作,而抽象類它可以有部分的實作也可以沒有;

2) 如果需要複用或者共享部分代碼,應該用抽象類而不是接口;

3) 繼承無法解決類型的轉換問題,接口就是為了解決這一問題而産生的(Java的單繼承是接口産生的根本原因) 接口是一種抽象的第三方規範,跟對象沒什麼直接關系。

九、請問軟體開發中的設計模式你會使用哪些?

答:我熟悉的設計模式有單例模式,DAO模式,模闆方法,工廠模式,委托代理模式,MVC模式等。

Singleton模式主要作用是保證在Java應用程式中,一個類Class隻有一個執行個體存在。

Singleton模式一般形式:

定義一個類,它的構造函數為private的,它有一個static的private的該類變量,在類初始化時執行個體話,通過一個public的getInstance方法擷取對它的引用,繼而調用其中的方法。

十、類的核心特性有哪些?

類具有封裝性、繼承性和多态性。

封裝性:

類的封裝性為類的成員提供公有、預設、保護和私有等多級通路權限,目的是隐藏類中的私有變量和類中方法的實作細節。

繼承性:

類的繼承性提供從已存在的類建立新類的機制,繼承(inheritance)使一個新類自動擁有被繼承類(父類)的全部成員。

多态性:

類的多态性提供類中方法執行的多樣性,多态性有兩種表現形式:重載和覆寫。

十一、請問類與對象有什麼差別?

類就是某一種事物的一般性的集合體,是相同或相似的各個事物共同特性的一種抽象。

對象

在面向對象概念中,對象(Object)是類的執行個體(instance)。對象與類的關系就像變量與資料類型的關系一樣。

繼續閱讀