部分面試題答案
一、你對(duì)MVC的理解,MVC有什么優(yōu)缺點(diǎn)?結(jié)合Struts,說(shuō)明在一個(gè)Web應(yīng)用如何去使用?
答:
MVC設(shè)計(jì)模式(應(yīng)用觀察者模式的框架模式)
M: Model(Business process layer),模型,操作數(shù)據(jù)的業(yè)務(wù)處理層,并獨(dú)立于表現(xiàn)層(Independent of presentation)。
V: View(Presentation layer),視圖,通過(guò)客戶端數(shù)據(jù)類型顯示數(shù)據(jù),并回顯模型層的執(zhí)行結(jié)果。 C: Controller(Control layer),控制器,也就是視圖層和模型層橋梁,控制數(shù)據(jù)的流向,接受視圖層發(fā)出的事件,并重繪視圖
MVC框架的一種實(shí)現(xiàn)模型
模型二(Servlet-centric):
JSP+Servlet+JavaBean,以控制為核心,JSP只負(fù)責(zé)顯示和收集數(shù)據(jù),Sevlet,連接視圖和模型,將視圖層數(shù)據(jù),發(fā)送給模型層,JavaBean,分為業(yè)務(wù)類和數(shù)據(jù)實(shí)體,業(yè)務(wù)類處理業(yè)務(wù)數(shù)據(jù),數(shù)據(jù)實(shí)體,承載數(shù)據(jù),基本上大多數(shù)的項(xiàng)目都是使用這種MVC的實(shí)現(xiàn)模式。
StrutsMVC框架(Web application frameworks)
Struts是使用MVC的實(shí)現(xiàn)模式二來(lái)實(shí)現(xiàn)的,也就是以控制器為核心。
Struts提供了一些組件使用MVC開(kāi)發(fā)應(yīng)用程序:
Model:Struts沒(méi)有提供model類。這個(gè)商業(yè)邏輯必須由Web應(yīng)用程序的開(kāi)發(fā)者以JavaBean或EJB的形式提供
View:Struts提供了action form創(chuàng)建form bean, 用于在controller和view間傳輸數(shù)據(jù)。此外,Struts提供了自定義JSP標(biāo)簽庫(kù),輔助開(kāi)發(fā)者用JSP創(chuàng)建交互式的以表單為基礎(chǔ)的應(yīng)用程序,應(yīng)用程序資源文件保留了一些文本常量和錯(cuò)誤消息,可轉(zhuǎn)變?yōu)槠渌Z(yǔ)言,可用于JSP中。
Controller:Struts提供了一個(gè)核心的控制器ActionServlet,通過(guò)這個(gè)核心的控制器來(lái)調(diào)用其他用戶注冊(cè)了的自定義的控制器Action,自定義Action需要符合Struts的自定義Action規(guī)范,還需要在struts-config.xml的特定配置文件中進(jìn)行配置,接收J(rèn)SP輸入字段形成Action form,然后調(diào)用一個(gè)Action控制器。Action控制器中提供了model的邏輯接口。
二、什么是WebService?
答:
WebService是一個(gè)SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語(yǔ)言,不依賴于平臺(tái),可以實(shí)現(xiàn)不同的語(yǔ)言間的相互調(diào)用,通過(guò)Internet進(jìn)行基于Http協(xié)議的網(wǎng)絡(luò)應(yīng)用間的交互。
WebService實(shí)現(xiàn)不同語(yǔ)言間的調(diào)用,是依托于一個(gè)標(biāo)準(zhǔn),webservice是需要遵守WSDL(web服務(wù)定義語(yǔ)言)/SOAP(簡(jiǎn)單請(qǐng)求協(xié)議)規(guī)范的。
WebService=WSDL+SOAP+UDDI(webservice的注冊(cè))
Soap是由Soap的part和0個(gè)或多個(gè)附件組成,一般只有part,在part中有Envelope和Body。
Web Service是通過(guò)提供標(biāo)準(zhǔn)的協(xié)議和接口,可以讓不同的程序集成的一種SOA架構(gòu)。
Web Service的優(yōu)點(diǎn)
(1) 可以讓異構(gòu)的程序相互訪問(wèn)(跨平臺(tái))
(2) 松耦合
(3) 基于標(biāo)準(zhǔn)協(xié)議(通用語(yǔ)言,允許其他程序訪問(wèn))
Web Service的基本原理
(1) Service Provider采用WSDL描述服務(wù)
(2) Service Provider 采用UDDI將服務(wù)的描述文件發(fā)布到UDDI服務(wù)器(Register server)
(3) Service Requestor在UDDI服務(wù)器上查詢并 獲取WSDL文件
(4) Service requestor將請(qǐng)求綁定到SOAP,并訪問(wèn)相應(yīng)的服務(wù)。
三、什么是中間件?
中間件就是程序中可織入的,可重用的,與業(yè)務(wù)邏輯無(wú)關(guān)的各種組件。
中間件(middleware)是基礎(chǔ)軟件的一大類,屬于可復(fù)用軟件的范疇。顧名思義,中間件處于操作系統(tǒng)軟件與用戶的應(yīng)用軟件的中間。中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)之上,應(yīng)用軟件的下層,總的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開(kāi)發(fā)的環(huán)境,幫助用戶靈活、高效地開(kāi)發(fā)和集成復(fù)雜的應(yīng)用軟件。
在眾多關(guān)于中間件的定義中,比較普遍被接受的是IDC表述的:中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。
分類:數(shù)據(jù)訪問(wèn)中間件,遠(yuǎn)程調(diào)用中間件,消息中間件,交易中間件,對(duì)象中間件。 舉例:
1,RMI(Remote Method Invocations, 遠(yuǎn)程調(diào)用)
2,Load Balancing(負(fù)載均衡,將訪問(wèn)負(fù)荷分散到各個(gè)服務(wù)器中)
3,Transparent Fail-over(透明的故障切換)
4,Clustering(集群,用多個(gè)小的服務(wù)器代替大型機(jī))
5,Back-end-Integration(后端集成,用現(xiàn)有的、新開(kāi)發(fā)的系統(tǒng)如何去集成遺留的系統(tǒng)) 6,Transaction事務(wù)(全局/局部)全局事務(wù)(分布式事務(wù))局部事務(wù)(在同一數(shù)據(jù)庫(kù)聯(lián)接內(nèi)的事務(wù))
7,Dynamic Redeployment(動(dòng)態(tài)重新部署,在不停止原系統(tǒng)的情況下,部署新的系統(tǒng)) 8,System Management(系統(tǒng)管理)
9,Threading(多線程處理)
10,Message-oriented Middleware面向消息的中間件(異步的調(diào)用編程)
11,Component Life Cycle(組件的生命周期管理)
12,Resource pooling(資源池)
13,Security(安全)
14,Caching(緩存)
四、什么是典型的軟件三層結(jié)構(gòu)?軟件設(shè)計(jì)為什么要分層?軟件分層有什么好處? 答:(1) Presentation layer(表示層)
(1) 表示邏輯(生成界面代碼)
(2) 接收請(qǐng)求
(3) 處理業(yè)務(wù)層拋出的異常
(4) 負(fù)責(zé)規(guī)則驗(yàn)證(數(shù)據(jù)格式,數(shù)據(jù)非空等)
(5) 流程控制
(2) Service layer(服務(wù)層/業(yè)務(wù)層)
(1) 封裝業(yè)務(wù)邏輯處理,并且對(duì)外暴露接口
(2) 負(fù)責(zé)事務(wù),安全等服務(wù)
(3) Persistence layer(持久層)
(1) 封裝數(shù)據(jù)訪問(wèn)的'邏輯,暴露接口
(2) 提供方便的數(shù)據(jù)訪問(wèn)的方案(查詢語(yǔ)言,API,映射機(jī)制等)
Domain layer(域?qū)樱?/p>
(1) 業(yè)務(wù)對(duì)象以及業(yè)務(wù)關(guān)系的表示
(2) 處理簡(jiǎn)單的業(yè)務(wù)邏輯
(3) 域?qū)拥膶?duì)象可以穿越表示層,業(yè)務(wù)層,持久層
軟件分層結(jié)構(gòu)使得代碼維護(hù)非常方便,設(shè)計(jì)明確,各層獨(dú)立,專注自己擅長(zhǎng)的領(lǐng)域。
五、什么是OOP?OOP相對(duì)于面向過(guò)程編程有哪些優(yōu)點(diǎn)?
OOP,Object-Oriented Programming,面向?qū)ο缶幊滩煌诿嫦蜻^(guò)程編程:
(1)OOP關(guān)注對(duì)象和角色,也就是事物的本質(zhì)
1)OOP把客觀世界中的對(duì)象抽象成對(duì)應(yīng)的類;
2)通過(guò)類構(gòu)造實(shí)例;
3)通過(guò)依賴、繼承、實(shí)現(xiàn)等形式建立對(duì)象間的通信關(guān)系
(2)OOP易于擴(kuò)展,增加或改變業(yè)務(wù)的功能,無(wú)需大幅改動(dòng)改變?cè)创a
(3)OOP易于建模,OOP就是軟件架構(gòu)師在計(jì)算機(jī)高級(jí)語(yǔ)言中對(duì)客觀世界的抽象和再現(xiàn),人們可以很好地理解和建立起計(jì)算機(jī)中的抽象模型
六、談?wù)凮verload和Override的區(qū)別。
答:
方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫(xiě)(Overriding)。子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被“屏蔽”了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
七、談?wù)凥ashMap和Hashtable的區(qū)別。
答: HashMap是輕量級(jí)的(線程不安全的,效率高的)集合,Hashtable是重量級(jí)的(線程安全的,效率低的)集合。
都屬于Map接口的類,實(shí)現(xiàn)了將惟一鍵映射到特定的值上。
HashMap 類沒(méi)有分類或者排序。它允許一個(gè) null 鍵和多個(gè) null 值。
Hashtable 類似于 HashMap,但是不允許 null 鍵和 null 值。它也比 HashMap 慢,因?yàn)樗峭降摹?/p>
八、請(qǐng)問(wèn)abstract class和interface有什么區(qū)別?
答:
1) 接口沒(méi)有任何的實(shí)現(xiàn),而抽象類它可以有部分的實(shí)現(xiàn)也可以沒(méi)有;
2) 如果需要復(fù)用或者共享部分代碼,應(yīng)該用抽象類而不是接口;
3) 繼承無(wú)法解決類型的轉(zhuǎn)換問(wèn)題,接口就是為了解決這一問(wèn)題而產(chǎn)生的(Java的單繼
承是接口產(chǎn)生的根本原因) 接口是一種抽象的第三方規(guī)范,跟對(duì)象沒(méi)什么直接關(guān)系。
九、請(qǐng)問(wèn)軟件開(kāi)發(fā)中的設(shè)計(jì)模式你會(huì)使用哪些?
答:我熟悉的設(shè)計(jì)模式有單例模式,DAO模式,模板方法,工廠模式,委托代理模式,MVC模式等。
Singleton模式主要作用是保證在Java應(yīng)用程序中,一個(gè)類Class只有一個(gè)實(shí)例存在。 Singleton模式一般形式:
定義一個(gè)類,它的構(gòu)造函數(shù)為private的,它有一個(gè)static的private的該類變量,在類初始化時(shí)實(shí)例話,通過(guò)一個(gè)public的getInstance方法獲取對(duì)它的引用,繼而調(diào)用其中的方法。
十、類的核心特性有哪些?
類具有封裝性、繼承性和多態(tài)性。
封裝性:
類的封裝性為類的成員提供公有、缺省、保護(hù)和私有等多級(jí)訪問(wèn)權(quán)限,目的是隱藏類中的私有變量和類中方法的實(shí)現(xiàn)細(xì)節(jié)。
繼承性:
類的繼承性提供從已存在的類創(chuàng)建新類的機(jī)制,繼承(inheritance)使一個(gè)新類自動(dòng)擁有被繼承類(父類)的全部成員。
多態(tài)性:
類的多態(tài)性提供類中方法執(zhí)行的多樣性,多態(tài)性有兩種表現(xiàn)形式:重載和覆蓋。
十一、請(qǐng)問(wèn)類與對(duì)象有什么區(qū)別?
類
類就是某一種事物的一般性的集合體,是相同或相似的各個(gè)事物共同特性的一種抽象。 對(duì)象
在面向?qū)ο蟾拍钪,?duì)象(Object)是類的實(shí)例(instance)。對(duì)象與類的關(guān)系就像變量與數(shù)據(jù)類型的關(guān)系一樣。
十二、寫(xiě)出生產(chǎn)者消費(fèi)者模型的實(shí)現(xiàn)
十三、用軟件工程和Java來(lái)敘述購(gòu)物車(shopping cart)系統(tǒng)實(shí)現(xiàn)
十四、文件系統(tǒng)的幾個(gè)類:FileInputStream、FileOutputStream、FileReader、FileWriter的區(qū)別 十五、請(qǐng)寫(xiě)出Java API中最常用的五個(gè)包,并且各舉兩個(gè)類加以說(shuō)明。
十六、請(qǐng)問(wèn)你在做過(guò)的項(xiàng)目中遇到了哪些問(wèn)題?你是怎么解決的?做這個(gè)項(xiàng)目你最大的收獲是什么?
十七、請(qǐng)說(shuō)出幾個(gè)常用的異常類
答:NullpointException(空指針異常)
ClassNotFoundException(類找不到異常)
ClassCastException(類型轉(zhuǎn)換異常)
IllegalArgumentException(非法參數(shù)異常)
ArithmeticException(算術(shù)異常)
NumberFormatException(數(shù)據(jù)格式異常)
IndexOutOfBoundsException(數(shù)組下標(biāo)越界異常)
IllegalStateException(非法語(yǔ)句異常)
十八、什么是進(jìn)程和線程??jī)烧叩膮^(qū)別是什么?
十九、請(qǐng)簡(jiǎn)要描述一下你做的ShoppingCart項(xiàng)目。
二十、請(qǐng)問(wèn)網(wǎng)絡(luò)7層協(xié)議,tcp/ip4 層協(xié)議是什么?
二十一、Java面向?qū)ο蟮乃拇筇攸c(diǎn)
二十二、public,private,protected,default訪問(wèn)權(quán)限(可見(jiàn)性)
答:
public:全局可見(jiàn)
protected:繼承體系結(jié)構(gòu)之間可見(jiàn)
default(或不寫(xiě)):同包可見(jiàn)
private:本類可見(jiàn)。
二十三、名詞解釋
CRM
[Customer Relationship Management, 客戶關(guān)系管理]
ERP
[Enterprise Resource Planning, 企業(yè)資源規(guī)劃]
OSS
[Operation Support System, 運(yùn)營(yíng)支撐系統(tǒng)]
BSS
[Business Support System, 數(shù)據(jù)定義語(yǔ)言]
BOSS
[Business Operation Support System, 數(shù)據(jù)定義語(yǔ)言]
OA
[Office Automatization, 辦公自動(dòng)化]
HTTP
OOP
SOA
GUI
DDL
[Data Definition Language, 數(shù)據(jù)定義語(yǔ)言]
DML
[Data Manipulation Language, 數(shù)據(jù)操作語(yǔ)言]
WYSIWYG
所見(jiàn)即所得 [What You See is What You Get]
CMP
CMT
B2B
C2C
B2C
IDE
DOM
Client/Server
CMM
ORM
MIS
MVC
MVC是Model-View-Controller的簡(jiǎn)寫(xiě)。"Model" 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過(guò)JavaBean,EJB組件實(shí)現(xiàn)), "View" 是應(yīng)用的表示面(由JSP頁(yè)面產(chǎn)生),"Controller" 是
提供應(yīng)用的處理過(guò)程控制(一般是一個(gè)Servlet),通過(guò)這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
OLE
CORBA
CORBA 標(biāo)準(zhǔn)是公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對(duì)象管理組織 (Object Management Group,縮寫(xiě)為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語(yǔ)言(IDL), 語(yǔ)言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。 其目的為:
用不同的程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)
在不同的進(jìn)程中運(yùn)行
為不同的操作系統(tǒng)開(kāi)發(fā)。
UML
UML,標(biāo)準(zhǔn)建模語(yǔ)言,包含用例圖,靜態(tài)圖(包括類圖、對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖等。
XML
CMMI
JRE
J2EE
J2EE是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用模型(enterpriese application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。
JDK
AOP
OO
Container
W3C
JMS
Domain
POJO
JVM
JNDI
JTA
SOAP
[Simple Object Access Protocol,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議]
WSDL
JDO
JDO是Java對(duì)象持久化的新的規(guī)范,為Java Data Object的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的對(duì)象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開(kāi)發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開(kāi)發(fā)人員解脫出來(lái),從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(kù)(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫(kù)、文件、XML以及對(duì)象數(shù)據(jù)庫(kù)(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。
TDD
DAO
IoC
[Inversion of Control, 控制反轉(zhuǎn)]
RMI
DNS
[Internet Domain Name System, 因特網(wǎng)域名系統(tǒng)]
URL
URI
二十四、數(shù)據(jù)庫(kù)連接池的工作機(jī)制
二十五、互聯(lián)網(wǎng)提供哪些服務(wù)?
二十六、請(qǐng)寫(xiě)出JSP的幾個(gè)隱含內(nèi)置對(duì)象
答:JSP中隱含內(nèi)置對(duì)象
名稱 類型 注釋和范圍
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 OutputStream
config javax.servlet.ServletConfig ServletConfig
JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對(duì)應(yīng)):
request 用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù)
response 網(wǎng)頁(yè)傳回用戶端的回應(yīng)
page JSP 網(wǎng)頁(yè)本身
exception 針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外
pageContext 網(wǎng)頁(yè)的屬性是在這里管理
session 與請(qǐng)求有關(guān)的會(huì)話期
application servlet 正在執(zhí)行的內(nèi)容
out 用來(lái)傳送回應(yīng)的輸出
config Servlet的構(gòu)架部件
二十七、請(qǐng)你談?wù)凷SH整合
答:SSH:
Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層)
Struts:
Struts是一個(gè)表示層框架,主要作用是界面展示,接收請(qǐng)求,分發(fā)請(qǐng)求。
在MVC框架中,Struts屬于VC層次,負(fù)責(zé)界面表現(xiàn),負(fù)責(zé)MVC關(guān)系的分發(fā)。(View:沿用JSP,HTTP,F(xiàn)orm,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)
Hibernate:
Hibernate是一個(gè)持久層框架,它只負(fù)責(zé)與關(guān)系數(shù)據(jù)庫(kù)的操作。
Spring:
Spring是一個(gè)業(yè)務(wù)層框架,是一個(gè)整合的框架,能夠很好地黏合表示層與持久層。 二十八、應(yīng)用服務(wù)器與Web Server的區(qū)別
二十九、Java Servlet API中forward() 與redirect()的區(qū)別
答:
前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。
三十、寫(xiě)一個(gè)簡(jiǎn)單的C/S結(jié)構(gòu)程序,Java 的通信編程,編程題(或問(wèn)答),用JAVA SOCKET編程,讀服務(wù)器幾個(gè)字符,再寫(xiě)入本地顯示?
答: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();
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");
}
}
public static void main(String[] args)
{
new Client();
}
};
九、請(qǐng)問(wèn)軟件開(kāi)發(fā)中的設(shè)計(jì)模式你會(huì)使用哪些?
答:我熟悉的設(shè)計(jì)模式有單例模式,DAO模式,模板方法,工廠模式,委托代理模式,MVC模式等。
Singleton模式主要作用是保證在Java應(yīng)用程序中,一個(gè)類Class只有一個(gè)實(shí)例存在。
Singleton模式一般形式:
定義一個(gè)類,它的構(gòu)造函數(shù)為private的,它有一個(gè)static的private的該類變量,在類初始化時(shí)實(shí)例話,通過(guò)一個(gè)public的getInstance方法獲取對(duì)它的引用,繼而調(diào)用其中的方法。
十、類的核心特性有哪些?
類具有封裝性、繼承性和多態(tài)性。
封裝性:
類的封裝性為類的成員提供公有、缺省、保護(hù)和私有等多級(jí)訪問(wèn)權(quán)限,目的是隱藏類中的私有變量和類中方法的實(shí)現(xiàn)細(xì)節(jié)。
繼承性:
類的繼承性提供從已存在的類創(chuàng)建新類的機(jī)制,
繼承(inheritance)使一個(gè)新類自動(dòng)擁有被繼承類(父類)的全部成員。
多態(tài)性:
類的多態(tài)性提供類中方法執(zhí)行的多樣性,多態(tài)性
有兩種表現(xiàn)形式:重載和覆蓋。
十一、請(qǐng)問(wèn)類與對(duì)象有什么區(qū)別?
類
類就是某一種事物的一般性的集合體,是相同或
相似的各個(gè)事物共同特性的一種抽象。
對(duì)象
在面向?qū)ο蟾拍钪校瑢?duì)象(Object)是類的實(shí)例
(instance)。對(duì)象與類的關(guān)系就像變量與數(shù)據(jù)類型的關(guān)系一樣。
十二、寫(xiě)出生產(chǎn)者消費(fèi)者模型的實(shí)現(xiàn)
十三、用軟件工程和Java來(lái)敘述購(gòu)物車(shopping cart)系統(tǒng)實(shí)現(xiàn)
十四、文件系統(tǒng)的幾個(gè)類:FileInputStream、
FileOutputStream、FileReader、FileWriter的區(qū)別
十五、請(qǐng)寫(xiě)出Java API中最常用的五個(gè)包,并且各舉兩個(gè)類加以說(shuō)明。
十六、請(qǐng)問(wèn)你在“電信運(yùn)營(yíng)支撐系統(tǒng)”中遇到了哪些問(wèn)題?你是怎么解決的?做這個(gè)項(xiàng)目你最大的收獲是什么?
十七、請(qǐng)說(shuō)出幾個(gè)常用的異常類
答:NullpointException(空指針異常)
ClassNotFoundException(類找不到異常) ClassCastException(類型轉(zhuǎn)換異常)
IllegalArgumentException(非法參數(shù)異常) ArithmeticException(算術(shù)異常)
NumberFormatException(數(shù)據(jù)格式異常) IndexOutOfBoundsException(數(shù)組下標(biāo)越界異常)
IllegalStateException(非法語(yǔ)句異常)
十八、什么是進(jìn)程和線程??jī)烧叩膮^(qū)別是什么?
十九、請(qǐng)簡(jiǎn)要描述一下你做的ShoppingCart項(xiàng)目。 二十、請(qǐng)問(wèn)網(wǎng)絡(luò)7層協(xié)議,tcp/ip4 層協(xié)議是什么? 二十一、Java面向?qū)ο蟮乃拇筇攸c(diǎn)
二十二、public,private,protected,default訪問(wèn)權(quán)限(可見(jiàn)性)
答:
public:全局可見(jiàn)
protected:繼承體系結(jié)構(gòu)之間可見(jiàn)
default(或不寫(xiě)):同包可見(jiàn)
private:本類可見(jiàn)。
二十三、名詞解釋
CRM
[Customer Relationship Management, 客戶關(guān)系管
理]
ERP
[Enterprise Resource Planning, 企業(yè)資源規(guī)劃]
OSS
[Operation Support System, 運(yùn)營(yíng)支撐系統(tǒng)]
BSS
[Business Support System, 數(shù)據(jù)定義語(yǔ)言]
BOSS
[Business Operation Support System, 數(shù)據(jù)定義語(yǔ)言] OA
[Office Automatization, 辦公自動(dòng)化]
HTTP
OOP
SOA
GUI
DDL
[Data Definition Language, 數(shù)據(jù)定義語(yǔ)言]
DML
[Data Manipulation Language, 數(shù)據(jù)操作語(yǔ)言]
WYSIWYG
所見(jiàn)即所得 [What You See is What You Get]
CMP
CMT
B2B
C2C
B2C
IDE
DOM
Client/Server
CMM
ORM
MIS
MVC
MVC是Model-View-Controller的簡(jiǎn)寫(xiě)。"Model" 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過(guò)JavaBean,EJB組件實(shí)現(xiàn)), "View" 是應(yīng)用的表示面(由JSP頁(yè)面產(chǎn)生),"Controller" 是提供應(yīng)用的處理過(guò)程控制(一般是一個(gè)Servlet),通過(guò)這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過(guò)程
和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
OLE
CORBA
CORBA 標(biāo)準(zhǔn)是公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對(duì)象管理組織 (Object Management Group,縮寫(xiě)為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語(yǔ)言(IDL), 語(yǔ)言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。 其目的為: 用不同的程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)
在不同的進(jìn)程中運(yùn)行
為不同的操作系統(tǒng)開(kāi)發(fā)。
UML
UML,標(biāo)準(zhǔn)建模語(yǔ)言,包含用例圖,靜態(tài)圖(包括類圖、對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖等。
XML
CMMI
JRE
J2EE
J2EE是Sun公司提出的多層(multi-diered),分布式
(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用
模型(enterpriese application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組
件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。
JDK
AOP
OO
Container
W3C
JMS
Domain
POJO
JVM
JNDI
JTA
SOAP
[Simple Object Access Protocol,簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議] WSDL
JDO
JDO是Java對(duì)象持久化的新的規(guī)范,為Java Data Object的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉(cāng)庫(kù)中的部分面試題答案對(duì)
象的標(biāo)準(zhǔn)化API。JDO提供了透明的對(duì)象存儲(chǔ),因此對(duì)開(kāi)發(fā)人員來(lái)說(shuō),存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,使開(kāi)發(fā)人員解脫出來(lái),從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(kù)(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫(kù)、文件、XML以及對(duì)象數(shù)據(jù)庫(kù)(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。
TDD
DAO
IoC
[Inversion of Control, 控制反轉(zhuǎn)]
RMI
DNS
[Internet Domain Name System, 因特網(wǎng)域名系統(tǒng)]
URL
URI
二十四、數(shù)據(jù)庫(kù)連接池的工作機(jī)制
二十五、互聯(lián)網(wǎng)提供哪些服務(wù)?
二十六、請(qǐng)寫(xiě)出JSP的幾個(gè)隱含內(nèi)置對(duì)象
答:JSP中隱含內(nèi)置對(duì)象
名稱 類型 注釋和范圍
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 OutputStream
config javax.servlet.ServletConfig ServletConfig
JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對(duì)應(yīng)):
request 用戶端請(qǐng)求,此請(qǐng)求會(huì)包含來(lái)自GET/POST請(qǐng)求的參數(shù)
response 網(wǎng)頁(yè)傳回用戶端的回應(yīng)
page JSP 網(wǎng)頁(yè)本身
exception 針對(duì)錯(cuò)誤網(wǎng)頁(yè),未捕捉的例外 pageContext 網(wǎng)頁(yè)的屬性是在這里管理
session 與請(qǐng)求有關(guān)的會(huì)話期
application servlet 正在執(zhí)行的內(nèi)容
out 用來(lái)傳送回應(yīng)的輸出
config Servlet的構(gòu)架部件
二十七、請(qǐng)你談?wù)凷SH整合
答:SSH:
Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層)
Struts:
Struts是一個(gè)表示層框架,主要作用是界面展示,接收請(qǐng)求,分發(fā)請(qǐng)求。
在MVC框架中,Struts屬于VC層次,負(fù)責(zé)界面表現(xiàn),負(fù)責(zé)MVC關(guān)系的分發(fā)。(View:沿用JSP,HTTP,
Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)
Hibernate:
Hibernate是一個(gè)持久層框架,它只負(fù)責(zé)與關(guān)系數(shù)據(jù)庫(kù)的操作。
Spring:
Spring是一個(gè)業(yè)務(wù)層框架,是一個(gè)整合的框架,能夠很好地黏合表示層與持久層。
二十八、應(yīng)用服務(wù)器與Web Server的區(qū)別
二十九、Java Servlet API中forward() 與redirect()的區(qū)別
答:
前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會(huì)顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會(huì)得到跳轉(zhuǎn)的地址,并重新發(fā)送請(qǐng)求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量使用forward()方法,并且,這樣也有助于隱藏實(shí)際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用sendRedirect()方法。
三十、寫(xiě)一個(gè)簡(jiǎn)單的C/S結(jié)構(gòu)程序,Java 的通信編程,編程題(或問(wèn)答),用JAVA SOCKET編程,讀服務(wù)器幾個(gè)字符,再寫(xiě)入本地顯示?
答: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();
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");
}
}
public static void main(String[] args) {
new Client();
}
};
【部分面試題答案】相關(guān)文章:
外企部分面試題01-01
YY產(chǎn)品經(jīng)理面試題(部分)02-08
寶潔核心部分面試題01-01
面試題:自我介紹部分01-01
android面試題及答案精選02-10
PHP面試題與答案02-10
美工面試題及答案01-17
競(jìng)聘面試題及答案01-15