第 1 頁 共 10 頁
一、你對 MVC 的理解, MVC 有什么優缺點?結合 Struts ,說明在一個 Web 應用如何去使
用?
答:
MVC 設計模式(應用觀察者模式的框架模式)
M: Model(Business process layer) ,模型,操作數據的業務處理層 , 並獨立於表現層 (Independe nt
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 應用程序的開發者以 JavaBea n
或 EJB 的形式提供
View : Struts 提供了 action form 創建 form bean, 用於在 controlle r 和 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 是需要遵守 WSD L
( web 服務定義語言) /SOAP (簡單請求協議)規范的。
WebService=WSDL+SOAP+UDDI ( webservice 的注冊)
Soap 是由 Soap 的 part 和 0 個或多個附件組成,一般只有 part ,在 part 中有 Envelope 和
Body 。
Web Service 是通過提供標准的協議和接口,可以讓不同的程序集成的一種 SOA 架構。第 2 頁 共 10 頁
Web Service 的優點
(1) 可以讓異構的程序相互訪問(跨平台)
(2) 松耦合
(3) 基於標准協議(通用語言,允許其他程序訪問)
Web Service 的基本原理
(1) Service Provide r 采用 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 , T ransaction 事務(全局 / 局部)全局事務(分布式事務)局部事務(在同一數據庫聯 接
內的事務)
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) 流程控制第 3 頁 共 10 頁
(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) 。 O verloaded 的方法是可以改變返回值的類型。
七、談談 HashMap 和 Hashtable 的區別。
答: HashMap 是輕量級的(線程不安全的,效率高的)集合, Hashtable 是重量級的(線
程安全的,效率低的)集合。
都屬於 Map 接口的類,實現了將惟一鍵映射到特定的值上。
HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。
Hashtable 類似於 HashMap ,但是不允許 null 鍵和 null 值。它也比 HashMap 慢 ,
因為它是同步的。
八、請問 abstract class 和 interface 有什么區別?
答:
1) 接口沒有任何的實現 , 而抽象類它可以有部分的實現也可以沒有 ;
2) 如果需要復用或者共享部分代碼 , 應該用抽象類而不是接口 ;
3) 繼承無法解決類型的轉換問題 , 接口就是為了解決這一問題而產生的 (Java 的單繼第 4 頁 共 10 頁
承是接口產生的根本原因 ) 接口是一種抽象的第三方規范 , 跟對象沒什么直接關系。
九、請問軟件開發中的設計模式你會使用哪些?
答:我熟悉的設計模式有單例模式, DAO 模式,模板方法,工廠模式,委托代理模式, M VC
模式等。
Singleton 模式主要作用是保證在 Java 應用程序中,一個類 Class 只有一個實例存在。
Singleton 模式一般形式 :
定義一個類,它的構造函數為 private 的,它有一個 static 的 private 的該類變量,在 類
初始化時實例話,通過一個 public 的 getInstance 方法獲取對它的引用 , 繼而調用其中的方法 。
十、類的核心特性有哪些?
類具有封裝性、繼承性和多態性。
封裝性:
類的封裝性為類的成員提供公有、缺省、保護和私有等多級訪問權限,目的是隱藏類 中
的私有變量和類中方法的實現細節。
繼承性:
類的繼承性提供從已存在的類創建新類的機制,繼承( inher itance )使一個新類自動擁
有被繼承類(父類)的全部成員。
多態性:
類的多態性提供類中方法執行的多樣性,多態性有兩種表現形式:重載和覆蓋。
十一、請問類與對象有什么區別?
類
類就是某一種事物的一般性的集合體,是相同或相似的各個事物共同特性的一種抽象。
對象
在面向對象概念中,對象( Object )是類的實例( instance )。對象與類的關系就像變量
與數據類型的關系一樣。
十二、寫出生產者消費者模型的實現(參照 OOA/D 中老師的代碼)
十三、用軟件工程和 Java 來敘述購物車( shopping cart )系統實現
十四、文件系統的幾個類 :FileInputStream 、 FileOutputStream 、 FileReader 、 FileWriter 的區 別
十五、請寫出 Java API 中最常用的五個包,並且各舉兩個類加以說明。 ( 查閱 api)
十六、請問你在 “ 電信運營支撐系統 ” 中遇到了哪些問題?你是怎么解決的?做這個項目 你
最大的收獲是什么? ( 自己結合自己的項目 , 做一下總結 , 然后想想怎么去回答 )
十七、請說出幾個常用的異常類
答: NullpointException (空指針異常)
ClassNotFoundException (類找不到異常)
ClassCastException (類型轉換異常)
IllegalArgumentException (非法參數異常)
ArithmeticException (算術異常)
NumberFormatException (數據格式異常)
IndexOutOfBoundsException (數組下標越界異常)
IllegalStateException (非法語句異常)
十八、什么是進程和線程?兩者的區別是什么? ( 經常會被問道 , 查閱操作系統書 , 或問問陳 老
師 )
十九、請簡要描述一下你做的 ShoppingCar t 項目。 ( 自己結合自己的項目 , 做一下總結 , 然后 想第 5 頁 共 10 頁
想怎么去回答 )
二十、請問網絡 7 層協議, tcp/ip4 層協議是什么?
二十一、 Java 面向對象的四大特點
二十二、 public, private, protected , default 訪問權限(可見性)
答:
public :全局可見
protected :繼承體系結構之間可見
default (或不寫):同包可見
private :本類可見。
二十三、名詞解釋
CRM
[Customer Relationship Management, 客戶關系管理 ]
ERP
[Enterprise Resource Planning, 企業資源規划 ]
OSS
[Operation Support System, 運營支撐系統 ]
BSS
[Business Support System, 數據定義語言 ]
BOSS
[Business Operation Support System, 數據定義語言 ]
OA
[Office Automatizat ion, 辦公自動化 ]
HTTP
OOP
SOA
GUI
DDL
[Data Definit ion Language, 數據定義語言 ]
DML
[Data Manipulat ion Language, 數據操作語言 ]
WYSIWYG
所見即所得 [What You See is What You Get]
CMP
CMT
B2B
C2C
B2C
IDE
DOM
Client/Server
CMM
ORM
MIS
MVC第 6 頁 共 10 頁
MVC 是 Model - View - Controller 的簡寫。 "Model" 代表的是應用的業務邏輯(通過
JavaBean , EJB 組件實現), "View" 是應用的表示面(由 JSP 頁面產生), "Controller" 是
提供應用的處理過程控制(一般是一個 Servlet ),通過這種設計模型把應用邏輯,處理過 程
和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。
OLE
CORBA
CORBA 標准是公共對象請求代理結構 (Common Object Request Broker Architecture) ,由 對
象管理組織 (Object Management Group ,縮寫為 OMG) 標准化。它的組成是接口定義語言
(IDL), 語言綁定 (binding: 也譯為聯編 ) 和允許應用程序間互操作的協議。 其目的為:
用不同的程序設計語言書寫
在不同的進程中運行
為不同的操作系統開發。
UML
UML ,標准建模語言,包含用例圖 , 靜態圖 ( 包括類圖、對象圖和包圖 ), 行為圖 , 交互圖 ( 順 序
圖 , 合作圖 ), 實現圖等。
XML
CMMI
JRE
J2EE
J2EE 是 Sun 公司提出的多層 (multi-diered), 分布式 (distributed), 基於組件 (component-base )
的企業級應用模型 (enterpriese application model). 在這樣的一個應用系統中,可按照功能划 分
為不同的組件,這些組件又可在不同計算機上,並且處於相應的層次 (tier) 中。所屬層次包 括
客戶層 (clietn tier) 組件 ,web 層和組件 ,Business 層和組件 , 企業信息系統 (EIS) 層。
JDK
AOP
OO
Container
W3C
JMS
Domain
POJO
JVM
JNDI
JTA
SOAP
[Simple Object Access Protocol ,簡單對象訪問協議 ]
WSDL
JDO
JDO 是 Java 對象持久化的新的規范,為 Java Data Object 的簡稱 , 也是一個用於存取某種 數
據倉庫中的對象的標准化 API 。 JDO 提供了透明的對象存儲,因此對開發人員來說,存儲 數
據對象完全不需要額外的代碼(如 JDBC API 的使用)。這些繁瑣的例行工作已經轉移到 J DO
產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外, JDO
很靈活,因為它可以在任何數據底層上運行。 JDBC 只是面向關系數據庫( RDBMS)JDO 更
通用,提供到任何數據底層的存儲功能,比如關系數據庫、文件、 XM L 以及對象數據庫第 7 頁 共 10 頁
( ODBMS )等等,使得應用可移植性更強。
TDD
DAO
IoC
[Inversion of Control, 控制反轉 ]
RMI
DNS
[Internet Domain Name System, 因特網域名系統 ]
URL
URI
二十四、數據庫連接池的工作機制
二十五、互聯網提供哪些服務?
二十六、請寫出 JSP 的幾個隱含內置對象
答: JSP 中隱含內置對象
名稱 類型 注釋和范圍
request javax.servlet.http.HttpServletRequest request
response javax.servlet.http.HttpServletResponse response
page javax.lang.Object page
Exception java.lang.Throwable page
pageContext javax.servlet.jsp.PageContext page
session javax.servlet.http.HttpSession session
application javax.servlet.ServletContext ServletContext
out javax.servlet.jsp.JspWriter O utput S tream
config javax.servlet.ServletConf ig ServletConf ig
JSP 共有以下 9 種基本內置組件(可與 ASP 的 6 種內部組件相對應):
request 用戶端請求,此請求會包含來自 GET/POST 請求的參數
response 網頁傳回用戶端的回應
page JSP 網頁本身
exception 針對錯誤網頁,未捕捉的例外
pageContext 網頁的屬性是在這里管理
session 與請求有關的會話期
application servlet 正在執行的內容
out 用來傳送回應的輸出
config Servlet 的構架部件
二十七、請你談談 SSH 整合
答: SSH :
Struts (表示層) +Spring (業務層) +Hibernate (持久層)
Struts :
Struts 是一個表示層框架,主要作用是界面展示,接收請求,分發請求。
在 MVC 框架中, Struts 屬於 VC 層次,負責界面表現,負責 MVC 關系的分發。( Vie w :
沿用 JSP , HTTP , Form , Tag , Resourse ; Controller : ActionServlet , struts-config.xml , A ction )
Hibernate :第 8 頁 共 10 頁
Hibernate 是一個持久層框架,它只負責與關系數據庫的操作。
Spring :
Spring 是一個業務層框架,是一個整合的框架,能夠很好地黏合表示層與持久層。
二十八、 應用服務器與 Web Server 的區別
二十九、 Java Servlet API 中 forward() 與 redirect() 的區別
答:
前者僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址; 后
者則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器 的
地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時,盡 量
使用 forward() 方法,並且,這樣也有助於隱藏實際的鏈接。在有些情況下,比如,需要跳
轉到一個其它服務器上的資源,則必須使用 sendRedirect() 方法。
三十、寫一個簡單的 C/S 結構程序, Java 的通信編程,編程題 ( 或問答 ) ,用 JAVA SOCKET
編程,讀服務器幾個字符,再寫入本地顯示?
答 :Server 端程序 :
package test;
import java.net.*;
import java.io.*;
public class Server
{
private ServerSocket ss;
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public Server()
{
try
{
ss=new ServerSocket(10000);
while(true)
{
socket = ss.accept();
String RemoteIP = socket.getInetAddress().getHostAddress();
String RemotePort = ":"+socket.getLocalPort();
System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
String line = in.readLine();
System.out.println("Cleint send is :" + line);
out = new PrintWriter(socket.getOutputStream(),true);
out.println("Your Message Received!");
out.close();
in.close();第 9 頁 共 10 頁
socket.close();
}
}catch (IOException e)
{
out.println("wrong");
}
}
public static void main(String[] args)
{
new Server();
}
};
Client 端程序 :
package test;
import java.io.*;
import java.net.*;
public class Client
{
Socket socket;
BufferedReader in;
PrintWriter out;
public Client()
{
try
{
System.out.println("Try to Connect to 127.0.0.1:10000");
socket = new Socket("127.0.0.1",10000);
System.out.println("The Server Connected!");
System.out.println("Please enter some Character:");
BufferedReader line = new BufferedReader(new
InputStreamReader(System.in));
out = new PrintWriter(socket.getOutputStream(),true);
out.println(line.readLine());
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(in.readLine());
out.close();
in.close();
socket.close();
}catch(IOException e)
{
out.println("Wrong");
}
}第 10 頁 共 10 頁
public static void main(String[] args)
{
new Client();
}
};
三十一、請問軟件開發中的設計模式你會使用哪些?
答:我熟悉的設計模式有單例模式, DAO 模式,模板方法,工廠模式,委托代理模式, M VC
模式等。
Singleton 模式主要作用是保證在 Java 應用程序中,一個類 Class 只有一個實例存在。
Singleton 模式一般形式 :
定義一個類,它的構造函數為 private 的,它有一個 static 的 private 的該類變量,在 類
初始化時實例話,通過一個 public 的 getInstance 方法獲取對它的引用 , 繼而調用其中的方法 。
三十二、類的核心特性有哪些?
類具有封裝性、繼承性和多態性。
封裝性:
類的封裝性為類的成員提供公有、缺省、保護和私有等多級訪問權限,目的是隱藏類 中
的私有變量和類中方法的實現細節。
繼承性:
類的繼承性提供從已存在的類創建新類的機制,繼承( inher itance )使一個新類自動擁
有被繼承類(父類)的全部成員。
多態性:
類的多態性提供類中方法執行的多樣性,多態性有兩種表現形式:重載和覆蓋。
三十三、請問類與對象有什么區別?
類 : 類就是某一種事物的一般性的集合體,是相同或相似的各個事物共同特性的一種 抽
象。
對象 : 在面向對象概念中,對象( Object )是類的實例( instance )。對象與類的關系 就
像變量與數據類型的關系一樣。