![Java程序員面試分類真題8_第1頁](http://file4.renrendoc.com/view12/M07/29/3C/wKhkGWchz6qAPKc7AAHE1ZCzuSw060.jpg)
![Java程序員面試分類真題8_第2頁](http://file4.renrendoc.com/view12/M07/29/3C/wKhkGWchz6qAPKc7AAHE1ZCzuSw0602.jpg)
![Java程序員面試分類真題8_第3頁](http://file4.renrendoc.com/view12/M07/29/3C/wKhkGWchz6qAPKc7AAHE1ZCzuSw0603.jpg)
![Java程序員面試分類真題8_第4頁](http://file4.renrendoc.com/view12/M07/29/3C/wKhkGWchz6qAPKc7AAHE1ZCzuSw0604.jpg)
![Java程序員面試分類真題8_第5頁](http://file4.renrendoc.com/view12/M07/29/3C/wKhkGWchz6qAPKc7AAHE1ZCzuSw0605.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java程序員面試分類真題8(總分:100.00,做題時(shí)間:120分鐘)一、單項(xiàng)選擇題(總題數(shù):18,分?jǐn)?shù):0.00)1.
以下是編寫Servlet必須導(dǎo)入的包的是______。
(分?jǐn)?shù):2.00)
A.java.sql.*
B.java.servlet.*
√
C.java.util.*
D.java.io.*解析:對(duì)于選項(xiàng)A,java.sql.*包中主要包含一些訪問數(shù)據(jù)庫相關(guān)的接口,不是編寫Servlet必須導(dǎo)入的包。所以,選項(xiàng)A錯(cuò)誤。
對(duì)于選項(xiàng)B,java.servlet.*包中主要包含與Servlet相關(guān)的接口,是編寫Servlet必須導(dǎo)入的包。所以,選項(xiàng)B正確。
對(duì)于選項(xiàng)C,java.util.*包中主要包含容器相關(guān)的接口,不是編寫Servlet必須導(dǎo)入的包。所以,選項(xiàng)C錯(cuò)誤。
對(duì)于選項(xiàng)D,java.io.*主要包含IO流讀取相關(guān)的類庫。所以,選項(xiàng)D錯(cuò)誤。2.
關(guān)于下面這段代碼的描述正確的是______。
publicclassCard{
privateStringcardid;
publicStringgetCardid(){
returncardid;
}
publicvoidsetCardid(Stringcardid){
this.cardid=cardid;
}
}
(分?jǐn)?shù):2.00)
A.這個(gè)類不符合JavaBean的定義規(guī)則,因?yàn)闆]有無參數(shù)的構(gòu)造方法
B.這個(gè)類不符合JavaBean的定義規(guī)則,方法名setCardid應(yīng)該改為setcardid
C.這個(gè)類符合JavaBean的定義規(guī)則
D.這個(gè)類不符合JavaBean定義的規(guī)則,因?yàn)闆]有實(shí)現(xiàn)序列化接口
√解析:JavaBean是一種由Java語言編寫的可重用組件,也就是Java類。定義一個(gè)JavaBean必須滿足以下幾個(gè)條件:
1)需要有一個(gè)公共的、無參數(shù)的構(gòu)造方法。
2)定義實(shí)例變量為prirate,同時(shí)提供一組public存取方法(getXXX和setXXX)。例如屬性name,get方法就要寫成publicstringgetName(){},N大寫。
3)類必須要能序列化,也就是說必須實(shí)現(xiàn)Serializable接口。
從上面分析可知,選項(xiàng)D正確。
對(duì)于選項(xiàng)A,當(dāng)一個(gè)類沒有構(gòu)造方法的時(shí)候,編譯器會(huì)提供一個(gè)默認(rèn)的無參數(shù)的構(gòu)造方法。所以,選項(xiàng)A錯(cuò)誤。
對(duì)于選項(xiàng)B,對(duì)于屬性的存取方法(getXXX和setXXX),get與set后面第一個(gè)字母為大寫,因此,題目中的寫法是正確的。所以,選項(xiàng)B錯(cuò)誤。3.
在J2EE中,屬于Web層的組件有______。
(分?jǐn)?shù):2.00)
A.Servlet
√
B.HTML
C.Applet
D.EJB解析:J2EE(Java2PlatformEnterpriseEdition)是Java平臺(tái)企業(yè)版的簡(jiǎn)稱,是用來開發(fā)與部署企業(yè)級(jí)應(yīng)用的一個(gè)架構(gòu),它提供了一種統(tǒng)一的、開放標(biāo)準(zhǔn)的多層平臺(tái),該平臺(tái)主要由構(gòu)件、服務(wù)和通信三個(gè)模塊構(gòu)成。
構(gòu)件包含客戶端構(gòu)件和服務(wù)端構(gòu)件兩種類型,其中客戶端構(gòu)件主要包含兩類:Applets和ApplicationClients,服務(wù)端構(gòu)件分為兩類:Web構(gòu)件(Servlet與JSP)和EJBs(EnterpriseJavaBeans)。服務(wù)由J2EE平臺(tái)提供商實(shí)現(xiàn),分為ServiceAPI(開發(fā)時(shí)使用)和運(yùn)行時(shí)服務(wù)。通信為由容器提供的支持協(xié)作構(gòu)件之間的通信。
從本質(zhì)上來講,J2EE只是一個(gè)行業(yè)標(biāo)準(zhǔn),主要用來通過Java開發(fā)服務(wù)端應(yīng)用提供一個(gè)獨(dú)立的、可移植的、多用戶的企業(yè)級(jí)平臺(tái),從而能夠簡(jiǎn)化應(yīng)用程序的開發(fā)和部署。正是由于J2EE只是一個(gè)標(biāo)準(zhǔn)而不是一個(gè)成熟的產(chǎn)品,因此,目前有很多不同類型的J2EE服務(wù)器。只要開發(fā)的應(yīng)用程序符合J2EE的標(biāo)準(zhǔn),就都可以部署在遵循了J2EE的開發(fā)標(biāo)準(zhǔn)的J2EE服務(wù)器上。這種標(biāo)準(zhǔn),使得開發(fā)人員只需要專注于各種應(yīng)用系統(tǒng)的商業(yè)邏輯與架構(gòu)設(shè)計(jì),而不用過多地考慮底層繁瑣的程序編寫工作,系統(tǒng)的開發(fā)與部署效率大幅提升。所以,選項(xiàng)A正確。4.
以下可以替換URL中的sessionID的方法是______。
(分?jǐn)?shù):2.00)
A.HttpServletRequest接口的encodeURL方法
B.HttpServletResponse接口的encodeURL方法
√
C.HttpServletRequest接口的rewriteURL方法
D.HttpServletResponse接口的rewriteURL方法解析:session譯為會(huì)話,指的是有始有終的一系列動(dòng)作/消息,例如在打電話時(shí),從拿起電話撥號(hào)到掛斷電話這中間的一系列過程可以稱為一個(gè)session。當(dāng)程序需要為某個(gè)客戶端的請(qǐng)求創(chuàng)建一個(gè)session時(shí),服務(wù)器會(huì)首先檢查這個(gè)客戶端的請(qǐng)求里是否已經(jīng)包含了一個(gè)session標(biāo)識(shí),這個(gè)標(biāo)識(shí)被稱為sessionID。如果已經(jīng)包含一個(gè)sessionID,則說明以前已經(jīng)為此客戶端創(chuàng)建過session,此時(shí)服務(wù)器就按照sessionID把這個(gè)session檢索出來使用(如果檢索不到,可能會(huì)新建一個(gè));如果客戶端請(qǐng)求不包含sessionID,則為此客戶端創(chuàng)建一個(gè)session,并且生成一個(gè)與此session相關(guān)聯(lián)的sessionID。
HttpServletResponse接口提供了重寫URL的方法,如下所示:
publicjava.lang.StringencodeURL(java.lang.Stringurl);
該方法的實(shí)現(xiàn)機(jī)制如下:先判斷當(dāng)前的Web組件是否啟用session,如果沒有啟用session,則直接返回參數(shù)url,再判斷客戶端瀏覽器是否支持cookie,如果支持cookie,則直接返回參數(shù)url;如果不支持cookie,就在參數(shù)url中加入sessionID信息,然后返回修改后的url。因此,這個(gè)方法可以用來把sessionID加入到URL中。所以,選項(xiàng)B正確。5.
敏捷軟件開發(fā)方法是一種______。
(分?jǐn)?shù):2.00)
A.數(shù)學(xué)觀
B.建模觀
C.工程觀
D.協(xié)作觀
√解析:敏捷軟件開發(fā)方法是一種應(yīng)對(duì)快速變化的需求的軟件開發(fā)能力。它們的具體名稱、理念、過程和術(shù)語都不盡相同,相對(duì)于“非敏捷”,敏捷更強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密仂、作、面對(duì)面的溝通(認(rèn)為比書面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團(tuán)隊(duì)、能夠很好地適應(yīng)需求變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重作為軟件開發(fā)中人的作用。所以,敏捷軟件開發(fā)方法是一種創(chuàng)作與交流的協(xié)作觀。所以,選項(xiàng)D正確。6.
極限編程XP的核心思想是______。
(分?jǐn)?shù):2.00)
A.強(qiáng)調(diào)文檔和以敏捷性應(yīng)對(duì)變化
B.強(qiáng)調(diào)建模和以敏捷性應(yīng)對(duì)變化
C.強(qiáng)調(diào)設(shè)計(jì)和以敏捷性應(yīng)對(duì)變化
D.強(qiáng)調(diào)人和人之間的合作因素和以敏捷性應(yīng)對(duì)變化
√解析:極限編程(ExtremeProgramming,XP)是一種輕量級(jí)的、靈巧的軟件開發(fā)方法,同時(shí),它也是一種非常嚴(yán)謹(jǐn)和周密的方法。它的基礎(chǔ)和價(jià)值觀是交流、樸素、反饋和勇氣,即任何一個(gè)軟件項(xiàng)目都可以從四個(gè)方面入手進(jìn)行改善:加強(qiáng)交流;從簡(jiǎn)單做起;尋求反饋;勇于實(shí)事求是。它是敏捷開發(fā)的典型代表,其核心思想是強(qiáng)調(diào)人和人之間的合作因素和以敏捷性應(yīng)對(duì)變化。所以,選項(xiàng)D正確。7.
凈室軟件工程(Cleanroom)是軟件開發(fā)的一種形式化方法,可以開發(fā)較高質(zhì)量的軟件,它發(fā)現(xiàn)和排除錯(cuò)誤的主要機(jī)制是______。
(分?jǐn)?shù):2.00)
A.正確性驗(yàn)證
√
B.黑白盒測(cè)試
C.集成測(cè)試
D.基本路徑測(cè)試解析:凈室軟件工程是一種應(yīng)用數(shù)學(xué)與統(tǒng)計(jì)學(xué)理論以經(jīng)濟(jì)的方式生產(chǎn)高質(zhì)量軟件的工程技術(shù),力圖通過嚴(yán)格的工程化的軟件過程達(dá)到開發(fā)中的零缺陷或接近零缺陷。它提倡開發(fā)者不需要進(jìn)行單元測(cè)試,而是進(jìn)行正確性驗(yàn)證和統(tǒng)計(jì)質(zhì)量控制。所以,選項(xiàng)A正確。8.
軟件復(fù)用是使用已有的軟件產(chǎn)品(例如設(shè)計(jì)、代碼和文檔等)來開發(fā)新的軟件系統(tǒng)的過程。為了提高構(gòu)件(Component)的復(fù)用率,通常要求構(gòu)件具有較好的______。
(分?jǐn)?shù):2.00)
A.專用性和不變性
B.專用性和可變性
C.通用性和不變性
√
D.通用性和可變性解析:軟件復(fù)用(SoftwareReuse)是將已有軟件的各種有關(guān)知識(shí)用于建立新的軟件,以縮減軟件開發(fā)和維護(hù)的花費(fèi)。為了提高構(gòu)件的復(fù)用率,通常要求構(gòu)件具有較好的通用性與不變性。所以,選項(xiàng)C正確。9.
逆向工程可用于維護(hù)已有的軟件,逆向工程能夠______。
(分?jǐn)?shù):2.00)
A.分析源程序,決定需要修改的部分以及其影響的程度
B.能夠使用數(shù)學(xué)方法證明軟件功能的正確性
C.分析源程序,從源程序?qū)С龀绦蚪Y(jié)構(gòu)
√
D.將源程序改寫成易于理解的、結(jié)構(gòu)清晰的程序解析:逆向工程(ReverseEngineering)也叫反求工程,是根據(jù)已有的東西和結(jié)果,通過分析來推導(dǎo)出具體的實(shí)現(xiàn)方法。比如通過某個(gè)exe程序能夠做出某種漂亮的動(dòng)畫效果,通過反匯編、反編譯和動(dòng)態(tài)跟蹤等方法,分析出其動(dòng)畫效果的實(shí)現(xiàn)過程,這種行為就是逆向工程。不僅僅是反編譯,而且還要推導(dǎo)出設(shè)計(jì),并且文檔化,逆向工程的目的是使軟件得以維護(hù)。所以,選項(xiàng)C正確。10.
UML類圖中類與類之間的關(guān)系有5種:依賴、關(guān)聯(lián)、聚合、組合與繼承。若A類需要使用標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)類庫中提供的功能,那么類A與標(biāo)準(zhǔn)類庫提供的類之間存在(Ⅰ)關(guān)系;若A類中包含了其他類的實(shí)例,且當(dāng)類A的實(shí)例消失時(shí),其包含的其他類的實(shí)例也消失,則類A和它所包含的類之間存在(Ⅱ)關(guān)系;若類A的實(shí)例消失時(shí),其他類的實(shí)例仍然存在并繼續(xù)工作,那么類A和它所包含的類之間存在(Ⅲ)關(guān)系;在下面選項(xiàng)中,正確的是______。
(分?jǐn)?shù):2.00)
A.Ⅰ:依賴、Ⅱ:組合、Ⅲ:聚合
√
B.Ⅰ:關(guān)聯(lián)、Ⅱ:依賴、Ⅲ:組合
C.Ⅰ:關(guān)聯(lián)、Ⅱ:聚合、Ⅲ:組合
D.Ⅰ:關(guān)聯(lián)、Ⅱ:聚合、Ⅲ:依賴解析:依賴、關(guān)聯(lián)、聚合、組合與繼承是UML中類之間的幾種常見關(guān)系,以下將分別對(duì)這幾種關(guān)系進(jìn)行解釋說明。
(1)依賴
一個(gè)類A使用到了另一個(gè)類B,而這種使用關(guān)系是偶然性的、臨時(shí)性的、非常弱的,但是類B的變化會(huì)影響到類A。例如某人要過河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴。
(2)關(guān)聯(lián)
關(guān)聯(lián)體現(xiàn)的是兩個(gè)類或者類與接口之間語義級(jí)別的一種強(qiáng)依賴關(guān)系,例如你是我的朋友,我也是你的朋友。這種關(guān)系比依賴更強(qiáng),不存在依賴關(guān)系的偶然性,關(guān)系也不是臨時(shí)性的,一般是長期性的,而且雙方的關(guān)系一般是平等的,關(guān)聯(lián)可以是單向、雙向的。
(3)聚合
聚合是關(guān)聯(lián)關(guān)系的一種特例,體現(xiàn)的是整體與部分、擁有的關(guān)系,即has-a的關(guān)系,例如公司與員工、計(jì)算機(jī)與CPU就是聚合關(guān)系。
(4)組合
組合是關(guān)聯(lián)關(guān)系的一種特例,體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱為強(qiáng)聚合。它體現(xiàn)整體與部分問的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束,例如人與心臟。
(5)繼承
繼承指的是一個(gè)類(稱為子類、子接口)繼承另外的一個(gè)類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力。
本題中,依賴是幾種關(guān)系中最弱的一種關(guān)系,通常,使用類庫就是其中的一種關(guān)系。聚合與組合都表示了整體和部分的關(guān)系。組合的程度比聚合高,當(dāng)整體對(duì)象消失時(shí),部分對(duì)象也隨之消失,則屬于組合關(guān)系,當(dāng)整體對(duì)象消失而部分對(duì)象依然可以存在并繼續(xù)被使用時(shí),則屬于聚合關(guān)系。所以,選項(xiàng)A正確。11.
有一段年代久遠(yuǎn)的C++代碼,內(nèi)部邏輯復(fù)雜,現(xiàn)在需要利用其實(shí)現(xiàn)一個(gè)新的需求,假定有以下可行的方案,應(yīng)當(dāng)優(yōu)先選擇______。
(分?jǐn)?shù):2.00)
A.修改老代碼的接口,滿足新的需求
B.將老代碼拋棄,自己重新實(shí)現(xiàn)類似的邏輯
C.修改老代碼的內(nèi)部邏輯,滿足新的需求
D.在這段代碼之外寫一段代碼,調(diào)用該代碼的一些模塊,完成新功能需求
√解析:對(duì)于老代碼的處理措施,既不是將其拋棄,自己重新實(shí)現(xiàn),因?yàn)檫@樣做的代價(jià)太高昂,也不是去修改其內(nèi)部邏輯或者代碼接口,因?yàn)檫@種修改很有可能會(huì)引入更多新的問題,最好的方法是采用封裝的思想,將這些已有的老代碼當(dāng)作一個(gè)黑盒,重新編寫一段新代碼完成新的功能,只在需要調(diào)用老代碼的時(shí)候,用到老代碼的某些模塊即可。所以,選項(xiàng)A、選項(xiàng)B與選項(xiàng)C錯(cuò)誤,選項(xiàng)D正確。12.
以下不屬于數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個(gè)基本要素的是______。
(分?jǐn)?shù):2.00)
A.隔離性
B.持久性
C.強(qiáng)制性
√
D.一致性解析:本題中,強(qiáng)制性不屬于這四種特性。所以,選項(xiàng)C正確。13.
當(dāng)執(zhí)行Mysql查詢時(shí),只有滿足連接條件的記錄才包含在查詢結(jié)果中,這種連接是______。
(分?jǐn)?shù):2.00)
A.左連接
B.右連接
C.內(nèi)連接
√
D.全連接解析:在SQL中,內(nèi)連接也稱為自然連接,只有兩個(gè)表相匹配的行才能在結(jié)果集中出現(xiàn),返回的結(jié)果集是兩個(gè)表中所有相匹配的數(shù)據(jù),而舍棄不匹配的數(shù)據(jù)。由于內(nèi)連接是從結(jié)果表中刪除與其他連接表中沒有匹配行的所有行,所以,內(nèi)連接可能會(huì)造成信息的丟失。內(nèi)連接的語法如下:
selectfieldlistfromtablel[inner]jointable2ontable1.column=table2.column
內(nèi)連接是保證兩個(gè)表中所有的行都要滿足連接條件。與內(nèi)連接不同的是,外連接不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)連接表(全外連接)中的所有數(shù)據(jù)行。SQL的外連接共有3種類型:左外連接(關(guān)鍵字為LEFTOUTERJOIN)、右外連接(關(guān)鍵字為RIGHTOUTERJOIN)、全外連接(關(guān)鍵字為FULLOUTERJOIN)。外連接的用法和內(nèi)連接一樣,只是將INNERJOIN關(guān)鍵字替換為相應(yīng)的外連接關(guān)鍵字即可。
內(nèi)連接只顯示符合連接條件的記錄,外連接除了顯示符合連接條件的記錄外,例如若用左外連接,還顯示左表中記錄。所以,本題的答案為C。14.
下列關(guān)于視圖與基本表的對(duì)比描述中,正確的是______。
(分?jǐn)?shù):2.00)
A.視圖的定義功能強(qiáng)于基本表
√
B.視圖的操作功能強(qiáng)于基本表
C.視圖的數(shù)據(jù)控制功能弱于基本表
D.上面提到的三種功能二者均相當(dāng)解析:視圖是由從數(shù)據(jù)庫的基本表中選取出來的數(shù)據(jù)組成的邏輯窗口,不同于基本表,它是一個(gè)虛表。在數(shù)據(jù)庫中,存放的只是視圖的定義而已,而不存放數(shù)據(jù),這些數(shù)據(jù)仍然存放在原來的基本表結(jié)構(gòu)中。只有在使用視圖的時(shí)候才會(huì)執(zhí)行視圖的定義,從基本表中查詢數(shù)據(jù)。
視圖的作用非常多,主要有以下幾點(diǎn):首先,它可以簡(jiǎn)化數(shù)據(jù)查詢語句;其次,它可以使用戶從多角度看待同一數(shù)據(jù);再次,它可以提高數(shù)據(jù)的安全性;最后,它提供了一定程度的邏輯獨(dú)立性等。
通過引入視圖機(jī)制,用戶可以將注意力集中在其關(guān)心的數(shù)據(jù)上而非全部數(shù)據(jù),這樣就大大提高了用戶效率與用戶滿意度,而且如果這些數(shù)據(jù)來源于多個(gè)基本表結(jié)構(gòu),或者數(shù)據(jù)不僅來自于基本表結(jié)構(gòu),還有一部分?jǐn)?shù)據(jù)來源于其他視圖,并且搜索條件又比較復(fù)雜時(shí),需要編寫的查詢語句就會(huì)比較繁瑣,此時(shí)定義視圖就可以使數(shù)據(jù)的查詢語句變得簡(jiǎn)單可行。定義視圖可以將表與表之間的復(fù)雜的操作連接和搜索條件對(duì)用戶不可見,用戶只需要簡(jiǎn)單地對(duì)一個(gè)視圖進(jìn)行查詢即可,所以,增加了數(shù)據(jù)的安全性,但是不能提高查詢的效率。
對(duì)于選項(xiàng)A,視圖可以被定義為多個(gè)表的連接,也可以被定義為只有部分列可見,或滿足條件的部分行可見,因此,有更強(qiáng)的定義功能。所以,選項(xiàng)A正確。
對(duì)于選項(xiàng)B,視圖有的操作,表都有,視圖一般被用來查找而使用。所以,選項(xiàng)B錯(cuò)誤。
對(duì)于選項(xiàng)C,視圖的數(shù)據(jù)控制能力要強(qiáng)于表,視圖可以被定義為多個(gè)表的連接,也可以被定義為只有部分列可見,或滿足條件的部分行可見,通過定義不同的存儲(chǔ)過程,并授予不同的權(quán)限,可以很靈活地對(duì)數(shù)據(jù)進(jìn)行控制。所以,選項(xiàng)C錯(cuò)誤。
對(duì)于選項(xiàng)D,自然也就錯(cuò)了。15.
一個(gè)關(guān)系模式為Y(X1,X2,X3,X4),假定該關(guān)系存在著如下函數(shù)依賴:
(X1,X2)→X3,X2→X4,則該關(guān)系屬于______。
(分?jǐn)?shù):2.00)
A.第一范式
√
B.第二范式
C.第三范式
D.第四范式解析:范化是在識(shí)別數(shù)據(jù)庫中的數(shù)據(jù)元素、關(guān)系,以及定義所需的表和各表中的項(xiàng)目這些初始工作之后的一個(gè)細(xì)化的過程。常見的范式有1NF、2NF、3NF、BCNF以及4NF。以下將分別對(duì)這幾種范式進(jìn)行介紹。
1NF,即第一范式,是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項(xiàng),同一列中不能有多個(gè)值,即實(shí)體中的某個(gè)屬性不能有多個(gè)值或者不能有重復(fù)的屬性。如果出現(xiàn)重復(fù)的屬性,就可能需要定義一個(gè)新的實(shí)體,新的實(shí)體由重復(fù)的屬性構(gòu)成,新實(shí)體與原實(shí)體之間為一對(duì)多關(guān)系。第一范式的模式要求屬性值不可再分裂成更小部分,即屬性項(xiàng)不能是屬性組合或由組屬性組成。簡(jiǎn)而言之,第一范式就是無重復(fù)的列。例如,由“職工號(hào)”“姓名”“電話號(hào)碼”組成的表(一個(gè)人可能有一個(gè)辦公電話和一個(gè)移動(dòng)電話),這時(shí)將其規(guī)范化為1NF可以將電話號(hào)碼分為“辦公電話”和“移動(dòng)電話”兩個(gè)屬性,即職工(職工號(hào),姓名,辦公電話,移動(dòng)電話)。
2NF,即第二范式,是在第一范式(1NF)的基礎(chǔ)上建立起來的,即滿足第二范式(2NF)必須先滿足第一范式(1NF)。第二范式(2NF)要求數(shù)據(jù)庫表中的每個(gè)實(shí)例或行必須可以被唯一地區(qū)分。為實(shí)現(xiàn)區(qū)分通常需要為表加上一個(gè)列,以存儲(chǔ)各個(gè)實(shí)例的唯一標(biāo)識(shí)。如果關(guān)系模式R為第一范式,并且R中每一個(gè)非主屬性完全函數(shù)依賴于R的某個(gè)候選鍵,則稱R為第二范式模式。
(如果A是關(guān)系模式R的候選鍵的一個(gè)屬性,則稱A是R的主屬性,否則稱A是R的非主屬性。)例如,在選課關(guān)系表(學(xué)號(hào),課程號(hào),成績(jī),學(xué)分),關(guān)鍵字為組合關(guān)鍵字(學(xué)號(hào),課程號(hào)),但由于非主屬性學(xué)分僅依賴于課程號(hào),對(duì)關(guān)鍵字(學(xué)號(hào),課程號(hào))只是部分依賴,而不是完全依賴,所以,此種方式會(huì)導(dǎo)致數(shù)據(jù)冗余以及更新異常等問題,解決辦法是將其分為兩個(gè)關(guān)系模式:學(xué)生表(學(xué)號(hào),課程號(hào),分?jǐn)?shù))和課程表(課程號(hào),學(xué)分),新關(guān)系通過學(xué)生表中的外鍵字課程號(hào)聯(lián)系,在需要時(shí)通過兩個(gè)表的連接來取出數(shù)據(jù)。
3NF,即第三范式,如果關(guān)系模式R是第二范式,且每個(gè)非主屬性都不傳遞依賴于R的候選鍵,則稱R是第三范式的模式。例如學(xué)生表(學(xué)號(hào),姓名,課程號(hào),成績(jī)),其中學(xué)生姓名無重名,所以,該表有兩個(gè)候選碼(學(xué)號(hào),課程號(hào))和(姓名,課程號(hào)),則存在函數(shù)依賴:學(xué)號(hào)→姓名,
(學(xué)號(hào),課程號(hào))→成績(jī),(姓名,課程號(hào))→成績(jī),唯一的非主屬性成績(jī)對(duì)碼不存在部分依賴,也不存在傳遞依賴,所以,屬于第三范式。
BCNF構(gòu)建在第三范式的基礎(chǔ)上,如果關(guān)系模式R是第一范式,且每個(gè)屬性都不傳遞依賴于R的候選鍵,那么稱R為BCNF的模式。假設(shè)倉庫管理關(guān)系表(倉庫號(hào),存儲(chǔ)物品號(hào),管理員號(hào),數(shù)量),滿足一個(gè)管理員只在一個(gè)倉庫工作;一個(gè)倉庫可以存儲(chǔ)多種物品。則存在如下關(guān)系:
(倉庫號(hào),存儲(chǔ)物品號(hào))→(管理員號(hào),數(shù)量)
(管理員號(hào),存儲(chǔ)物品號(hào))→(倉庫號(hào),數(shù)量)
所以,(倉庫號(hào),存儲(chǔ)物品號(hào))和(管理員號(hào),存儲(chǔ)物品號(hào))都是倉庫管理關(guān)系表的候選碼,表中的唯一非關(guān)鍵字段為數(shù)量,它是符合第三范式的。但是,由于存在如下決定關(guān)系:
(倉庫號(hào))→(管理員號(hào))
(管理員號(hào))→(倉庫號(hào))
即存在關(guān)鍵字段決定關(guān)鍵字段的情況,所以,其不符合BCNF范式。把倉庫管理關(guān)系表分解為二個(gè)關(guān)系表:倉庫管理表(倉庫號(hào),管理員號(hào))和倉庫表(倉庫號(hào),存儲(chǔ)物品號(hào),數(shù)量),這樣的數(shù)據(jù)庫表是符合BCNF范式的,消除了刪除異常、插入異常和更新異常。
4NF,即第四范式,設(shè)R是一個(gè)關(guān)系模式,D是R上的多值依賴集合。如果D中成立非平凡多值依賴X→Y時(shí),X必是R的超鍵,那么稱R是第四范式的模式。例如,職工表(職工編號(hào),職工孩子姓名,職工選修課程),在這個(gè)表中同一個(gè)職工也可能會(huì)有多個(gè)職工孩子姓名,同樣,同一個(gè)職工也可能會(huì)有多個(gè)職工選修課程,即這里存在著多值事實(shí),不符合第四范式。如果要符合第四范式,只需要將上表分為兩個(gè)表,使它們只有一個(gè)多值事實(shí),例如職工表一(職工編號(hào),職工孩子姓名),職工表二(職工編號(hào),職工選修課程),兩個(gè)表都只有一個(gè)多值事實(shí),所以,符合第四范式。
對(duì)于本題而言,這個(gè)關(guān)系模式的候選鍵為{X1,X2},因?yàn)閄2→X4,說明有非主屬性X4部分依賴于候選鍵{X1,X2},所以,這個(gè)關(guān)系模式不為第二范式。
所以,本題的答案為A。16.
如果關(guān)系模式R所有屬性的值域中每一個(gè)值都不可再分解,并且R中每一個(gè)非主屬性完全函數(shù)依賴于R的某個(gè)候選鍵,則R屬于______。
(分?jǐn)?shù):2.00)
A.第一范式(INF)
B.第二范式(2NF)
√
C.第三范式(3NF)
D.BCNF范式解析:17.
下面哪一選項(xiàng)能提高查詢效率______。
(分?jǐn)?shù):2.00)
A.在Name字段上添加主鍵
B.在Name字段上添加索引
√
C.在Age字段上添加主鍵
D.在Age字段上添加索引解析:主關(guān)鍵字(主鍵,PrimaryKey)是表中的一個(gè)或多個(gè)字段,它的值用于唯一地標(biāo)識(shí)表中的某一條記錄。在兩個(gè)表的關(guān)系中,外鍵用來在一個(gè)表中引用來自于另一個(gè)表中的特定記錄。主關(guān)鍵字是一種唯一關(guān)鍵字,表定義的一部分。一個(gè)表不能有多個(gè)主關(guān)鍵字,并且主關(guān)鍵字的列不能包含空值。
索引是一種提高數(shù)據(jù)庫查詢速度的機(jī)制,它是一個(gè)在數(shù)據(jù)庫的表或視圖上按照某個(gè)關(guān)鍵字段的值,升序或降序排序創(chuàng)建的對(duì)象。當(dāng)用戶查詢索引字段時(shí),它可以快速地執(zhí)行檢索操作,借助索引,在執(zhí)行查詢的時(shí)候不需要掃描整個(gè)表就可以快速地找到所需要的數(shù)據(jù)。一條索引記錄包含鍵值和邏輯指針。創(chuàng)建索引時(shí),系統(tǒng)分配一個(gè)索引頁。在表中插入一行數(shù)據(jù),同時(shí)也向該索引頁中插入一行索引記錄。由此可以看出,索引在提高查詢效率的同時(shí)也增加了插入操作的時(shí)間,由此適合在以查詢?yōu)橹鞯膱?chǎng)景使用。
索引的類型有聚簇索引和非聚簇索引。聚集索引是表中的行的物理順序與鍵值的邏輯順序一樣,一個(gè)表只能有一個(gè)聚簇索引。非聚簇索引是數(shù)據(jù)存儲(chǔ)與索引存儲(chǔ)不在同一個(gè)地方。與非聚簇索引相比,聚簇索引一般情況下可以獲得更快的數(shù)據(jù)訪問速度。
創(chuàng)建索引可以大大提高系統(tǒng)的性能,主要表現(xiàn)為以下幾個(gè)方面:首先,通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性;其次,通過索引,可以大大加快數(shù)據(jù)的檢索速度;再次,通過索引可以加速表和表之間的連接,從而有效實(shí)現(xiàn)數(shù)據(jù)的完整性;然后,在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以顯著減少查詢中分組和排序的時(shí)間;最后,通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
索引可以有效地提高查詢效率,那么為什么不因此而將所有的列都建立索引呢?其實(shí)索引盡管可以帶來方便,但并非越多越好,過多的索引也會(huì)帶來許多不利的問題。首先,創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間、空間,當(dāng)數(shù)據(jù)量比較小時(shí),這種問題還不夠突出,而當(dāng)數(shù)據(jù)量比較大時(shí),這種缺陷會(huì)比較明顯,效率會(huì)非常低下;其次,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個(gè)索引還需要占用一定的物理空間,如果要建立聚簇索引,那么需要的空間就會(huì)更大,從而造成不必要的空間浪費(fèi);最后,當(dāng)對(duì)表中的數(shù)據(jù)進(jìn)行增加、刪除和修改的時(shí)候,索引也要?jiǎng)討B(tài)地維護(hù),從而降低了數(shù)據(jù)的維護(hù)速度。
通過以上分析發(fā)現(xiàn),如果需要提高查詢速度,可以在經(jīng)常被查詢的字段上創(chuàng)建索引來提高查詢效率。對(duì)于Name(姓名)和Age(年齡),通常而言,姓名是經(jīng)常被查詢的字段,因此,通過增加索引可以提高查詢效率。所以,選項(xiàng)B正確。18.
設(shè)有一個(gè)關(guān)系:DEPT(DNO,DNAME),如果要找出倒數(shù)第三個(gè)字母為W,并且至少包含4個(gè)字母的DNAME,則查詢條件子句應(yīng)寫成WHEREDNAMELIKE______
(分?jǐn)?shù):2.00)
A.'__W_%'
B.'_%W__'
√
C.'_W__'
D.'_W_%'解析:在SQL語言中,%和表示的是通配符(通配符指的是一種特殊語句,用來進(jìn)行模糊查詢的,在匹配字符串時(shí),可以使用它來代替一個(gè)或多個(gè)真正字符,當(dāng)不知道真正字符或者懶得輸入完整名字時(shí),常常使用通配符代替一個(gè)或多個(gè)真正的字符),其中“%”表示的是0個(gè)或多個(gè)字符,而“_”表示的是一個(gè)字符。
在本題的查找條件中,要求倒數(shù)第三個(gè)字母為‘W’,所以,字符‘W’后面有兩個(gè)其他字符,可以表示成“W__”,并且還要求至少包含4個(gè)字母,而當(dāng)以“%”開頭時(shí),它表示的字符可以不存在,所以,開頭應(yīng)加一個(gè)“_”,那么查詢條件子句應(yīng)寫成WHEREDNAMELIKE'_%W__'。
所以,本題的答案為B。
需要注意的是,除了以上介紹的兩種通配符以外,SQL語言中還有兩個(gè)通配符,[charlist]表示字符列中的任何單一字符,[^charlist]或者[!charlist]表示不在字符列中的任何一個(gè)字符。例如,要求從名為“Persons”的表中選取居住的城市以“A”或“L”或“N”開頭的人,可以使用下面的SELECT語句:SELECT*FROMPersonsWHERECityLIKE'[ALN]%'。要求從名為“Persons”的表中選取居住的城市不以“A”或“L”或“N”開頭的人,可以使用下面的SELECT語句:SELECT*FROMPersonsWHERECityLIKE'[!ALN]%'。二、多項(xiàng)選擇題(總題數(shù):12,分?jǐn)?shù):0.00)1.
下列屬于JSP中注釋的有______。
(分?jǐn)?shù):2.00)
A.<!--與-->
√
B./
C./**與**/
D.<%--與--%>
√解析:JSP有兩種注釋方式:
1)顯式注釋:“<!--注釋內(nèi)容-->”。因?yàn)轱@式注釋會(huì)被JSP引擎解釋,在客戶端HTML文件的源代碼中生成同樣的注釋信息,但不會(huì)在HTML頁面上顯示。所以,選項(xiàng)A正確。
2)隱式注釋:可以使用Java語言中的“//”、“/**/”,以及JSP中自己的注釋:
“<%--注釋內(nèi)容--%>”。隱式注釋和顯式注釋一樣不能在JSP頁面顯示,但是隱式注釋不能在客戶端HTML文件的源代碼中生成同樣的注釋信息。所以,選項(xiàng)D正確。2.
下列是JSP作用域的通信對(duì)象的有______。
(分?jǐn)?shù):2.00)
A.application
√
B.Session
√
C.pageContext
√
D.cookie解析:對(duì)于選項(xiàng)A,application代表與整個(gè)Web應(yīng)用程序相關(guān)的對(duì)象和屬性,這實(shí)質(zhì)上是跨越多個(gè)Web應(yīng)用程序,包括多個(gè)頁面、請(qǐng)求和會(huì)話的一個(gè)全局作用域,因此,可以用作JSP之間進(jìn)行通信。所以,選項(xiàng)A正確。
對(duì)于選項(xiàng)B,session代表與用于某個(gè)Web客戶端的一個(gè)用戶體驗(yàn)相關(guān)的對(duì)象和屬性,一個(gè)Web會(huì)話經(jīng)常會(huì)跨越多個(gè)客戶端請(qǐng)求,因此,可以用作JSP之間進(jìn)行通信。所以,選項(xiàng)B正確。
對(duì)于選項(xiàng)C,pageContext對(duì)象代表該JSP頁面上下文,使用該對(duì)象可以訪問頁面中的共享數(shù)據(jù),因此,可以用作JSP之間進(jìn)行通信。所以,選項(xiàng)C正確。
對(duì)于選項(xiàng)D,cookie是在HTTP協(xié)議下,服務(wù)器或腳本可以維護(hù)客戶工作站上信息的一種方式。它是由Web服務(wù)器保存在用戶瀏覽器上的小文件,可以包含有關(guān)用戶的信息(如身份識(shí)別號(hào)碼、密碼等信息),不能用作JSP之間的通信。所以,選項(xiàng)D錯(cuò)誤。3.
在javax.Servlet的包中,屬于類的是______。
(分?jǐn)?shù):2.00)
A.Servlet
B.ServletException
√
C.GenericServlet
√
D.ServletContext解析:Servlet和ServletContext是接口,只有GenericServlet和ServletException是類。所以,選項(xiàng)B與選項(xiàng)C正確。4.
以下哪兩個(gè)是等價(jià)的?______。
(分?jǐn)?shù):2.00)
A.<%=YoshiBean.size%>
B.<%=YoshiBean.getSize()%>
√
C.<%=YoshiBean.getProperty("size")%
D.<JSP:getPropertyid="YoshiBean"param="size"/>
E.<jsp:getPropertyid="YoshiBean"property="size"/>
F.<jsp:getPropertyname="YoshiBean"param="size"/>
G.<jsp:getPropertyname="YoshiBean"property="size"/>
√解析:jsp:getProperty標(biāo)簽用于獲取被加載到當(dāng)前頁面中的JavaBean中某個(gè)屬性的值,它的格式為:
<jsp:getPropertyname=?property=?/>
其中,name:JavaBean的對(duì)象名,用于指定從哪個(gè)JavaBean中獲取屬性值;property:JavaBean中的屬性名,用于指定獲取JavaBean中的哪個(gè)屬性值。當(dāng)JavaBean中的屬性名為abc時(shí),獲取該屬性值的方法名為getAbc()。
對(duì)于本題而言,在選項(xiàng)D、選項(xiàng)E、選項(xiàng)F與選項(xiàng)G中,只有選項(xiàng)G的寫法是合理的,它的功能是獲取對(duì)象YoshiBean的size屬性。
對(duì)于選項(xiàng)A,一般不推薦直接訪問對(duì)象的屬性,都是把屬性定義為私有的,然后用公有的方法訪問。如果size被定義為私有的,那么無法用這種方式來訪問。
對(duì)于選項(xiàng)B,在JSP中直接調(diào)用Java代碼,調(diào)用對(duì)象YoshiBean的getSize方法獲取size屬性,因此,選項(xiàng)B和選項(xiàng)G是等價(jià)的。
對(duì)于選項(xiàng)C,一般而言,對(duì)象獲取屬性的方法都是類似getXXX()的寫法。getProperty只能被理解為另外一個(gè)方法,與獲取size屬性無關(guān)。5.
在Servlet的生命周期中,容器只調(diào)用一次的方法是______。
(分?jǐn)?shù):2.00)
A.getServletConfig
B.service
C.init
√
D.destroy
√解析:由于Servlet運(yùn)行在容器中,沒有main()方法,因此,整個(gè)生命周期都是由容器來控制的。簡(jiǎn)單而言,Servlet的生命周期只有兩個(gè)狀態(tài):未創(chuàng)建狀態(tài)與初始化狀態(tài)。這兩種狀態(tài)的轉(zhuǎn)換主要是由三個(gè)重要的方法來進(jìn)行控制:init()、service()和destroy()。其中,init()方法是Servlet生命的起點(diǎn),用于創(chuàng)建或打開任何與Servlet相關(guān)的資源以及執(zhí)行初始化工作。service()方法是Servlet中真正處理客戶端傳過來的請(qǐng)求的方法,它根據(jù)HTTP請(qǐng)求方法(GET、POST等)將請(qǐng)求分發(fā)到doGet()、doPost()等方法。destory()方法釋放任何在init()方法中打開的與Servlet相關(guān)的資源。
Servlet的狀態(tài)變化如圖所示。
Servlet狀態(tài)變化
具體而言,SerMet的生命周期可以分為加載、創(chuàng)建、初始化、處理客戶請(qǐng)求和卸載五個(gè)階段。
1)加載:容器通過類加載器使用Servlet類對(duì)應(yīng)的文件來加載Servlet。
2)創(chuàng)建:通過調(diào)用Servlet的構(gòu)造方法來創(chuàng)建一個(gè)Servlet實(shí)例。
3)初始化:通過調(diào)用Servlet的init()方法來完成初始化工作,這個(gè)方法是在Servlet已被創(chuàng)建但向客戶端提供服務(wù)之前調(diào)用的,需要注意的是,init()方法只會(huì)被調(diào)用一次。
4)處理客戶請(qǐng)求:Servlet一旦被創(chuàng)建后,它就可以為客戶端提供服務(wù)了。每當(dāng)有新的客戶請(qǐng)求到來時(shí),容器都會(huì)創(chuàng)建一個(gè)新的線程來處理該請(qǐng)求,接著會(huì)調(diào)用Servlet的service()方法來完成客戶端的請(qǐng)求,當(dāng)然,service()方法會(huì)根據(jù)請(qǐng)求的method屬性值的不同決定是調(diào)用doGet()方法還是調(diào)用doPost()方法來完成具體的響應(yīng)。
5)卸載:容器在卸載Servlet之前需要調(diào)用destroy()方法,讓Servlet自己釋放其占用的系統(tǒng)資源,一旦destroy()方法被調(diào)用,容器就不會(huì)再向這個(gè)Servlet發(fā)送任何請(qǐng)求消息了。如果容器需要這個(gè)Servlet,那么就必須重新創(chuàng)建并初始化一個(gè)實(shí)例。需要注意的是,destroy()方法只會(huì)被調(diào)用一次。
本題中,init()方法和destroy()方法只調(diào)用一次。所以,選項(xiàng)C與選項(xiàng)D正確。6.
下面有關(guān)forward和redirect的描述中,正確的是______。
(分?jǐn)?shù):2.00)
A.forward是內(nèi)部重定向,redirect是外部重定向
√
B.forward是服務(wù)器將控制權(quán)轉(zhuǎn)交給另外一個(gè)內(nèi)部服務(wù)器對(duì)象,由新的對(duì)象來全權(quán)負(fù)責(zé)響應(yīng)用戶的請(qǐng)求
√
C.執(zhí)行forward時(shí),瀏覽器不知道服務(wù)器發(fā)送的內(nèi)容是從何處來,瀏覽器地址欄中還是原來的地址
√
D.執(zhí)行redirect時(shí),服務(wù)器端告訴瀏覽器重新去請(qǐng)求地址
√解析:7.
以下關(guān)于Spring框架的描述中,正確的是______。
(分?jǐn)?shù):2.00)
A.Spring是“依賴注入”模式的實(shí)現(xiàn)
√
B.Spring是一個(gè)輕量級(jí)JAVAEE的框架集合
√
C.使用Spring可以實(shí)現(xiàn)聲明事務(wù)
√
D.Spring提供了AOP方式的日志系統(tǒng)解析:Spring是一個(gè)J2EE的框架,這個(gè)框架提供了對(duì)輕量級(jí)的IoC(InverseofControl,控制反轉(zhuǎn),有時(shí)候也叫作依賴注入)良好的支持,同時(shí)也提供了對(duì)AOP(AspectOrientedProgrammjng,面向切面編程)技術(shù)非常好的封裝。相比其他框架,spring框架的設(shè)計(jì)更加模塊化,框架內(nèi)的每個(gè)模塊都能完成特定的工作,而且各個(gè)模塊都可以獨(dú)立地運(yùn)行,不會(huì)相互牽制。因此,在使用Spring框架的時(shí)候,開發(fā)人員可以使用整個(gè)框架,也可以只使用框架內(nèi)的一部分模塊,例如可以只使用springAOP模塊來實(shí)現(xiàn)日志管理功能,而不需要使用其他模塊。
具體而言,Spring框架主要由7個(gè)模塊組成,它們分別是SpringAOP、SpringORM、SpringDAO、springweb、SpringContext、SpingWebMVC和springCore等。具體如圖所示。
Spring框架
下表詳細(xì)介紹了各個(gè)模塊的作用。Spring模塊模塊描述SpringAOP采用了面向切面編程的思想,使Spring框架管理的對(duì)象支持AOP,同時(shí)這個(gè)模塊也提供了事務(wù)管理,可以不依
賴具體的EJB組件,就可以將事務(wù)管理集成到應(yīng)用程序中SpringORM提供了對(duì)現(xiàn)有的ORM框架的支持,例如Hibemate、JDO等SpringDAO提供了對(duì)DAO(DataAccessObject,數(shù)據(jù)訪問對(duì)象)模式和JDBC的支持。DAO可以實(shí)現(xiàn)把業(yè)務(wù)邏輯與數(shù)據(jù)
庫訪問的代碼實(shí)現(xiàn)分離,從而降低代碼的耥合度。通過對(duì)JDBC的抽象,簡(jiǎn)化了開發(fā)工作,同時(shí)簡(jiǎn)化了對(duì)異常的
處理(可以很好地處理不同數(shù)據(jù)庫廠商拋出的異常)SpringWeb提供了Servlet監(jiān)聽器的Context和Wet)應(yīng)用的上下文。同時(shí)還集成了一些現(xiàn)有的Web框架,例如StrutsSpringContext擴(kuò)展核心容器,提供了Spring上下文環(huán)境,給開發(fā)人員提供了很多非常有用的服務(wù),例如國際化、Email和JNDI
訪問等SpringWebMVC提供了一個(gè)構(gòu)建Web應(yīng)用程序的MVC的實(shí)現(xiàn)SpringCoreSpring框架的核心容器,提供了spring框架的基本功能。這個(gè)模塊中最主要的一個(gè)組件為BeanFactory,它使用
工廠模式來創(chuàng)建所需的對(duì)象。同時(shí)BeanFactory使用IOC思想,通過讀取XML文件的方式來實(shí)例化對(duì)象,可以
說BeanFactory提供了組件生命周期的管理,組件的創(chuàng)建、裝配和銷毀等功能
通過以上分析可以看出,選項(xiàng)A、選項(xiàng)B、選項(xiàng)C的描述都是正確的。對(duì)于選項(xiàng)D,Spring并沒有提供日志系統(tǒng),需要根據(jù)需求使用AOP的方式,借助Spring與日志系統(tǒng)log4j實(shí)現(xiàn)自己的日志功能。因此,選項(xiàng)D錯(cuò)誤。8.
下列關(guān)于依賴注入的描述中,正確的是______。
(分?jǐn)?shù):2.00)
A.依賴注入提供使用接口編程
√
B.依賴注入使組件之間相互依賴,相互制約
C.依賴注入能夠獨(dú)立開發(fā)各組件,然后根據(jù)組件間關(guān)系進(jìn)行組裝
√
D.依賴注入指對(duì)象在使用時(shí)動(dòng)態(tài)注入
√解析:IoC(InverseofControl,控制反轉(zhuǎn))有時(shí)候也被叫作依賴注入,是一種降低對(duì)象之間耦合關(guān)系的設(shè)計(jì)思想。一般而言,在分層體系結(jié)構(gòu)中,都是上層調(diào)用下層的接口,上層依賴于下層的執(zhí)行,即調(diào)用者依賴于被調(diào)用者。而通過IoC方式,使得上層不再依賴于下層的接口,即通過采用一定的機(jī)制來選擇不同的下層實(shí)現(xiàn),完成控制反轉(zhuǎn),使得由調(diào)用者來決定被調(diào)用者。IoC通過注入一個(gè)實(shí)例化的對(duì)象來達(dá)到解耦和的目的。使用這種方法后,對(duì)象不會(huì)被顯式地調(diào)用,而是根據(jù)需求通過IoC容器(例如Spring)來提供。
采用IoC機(jī)制能夠提高系統(tǒng)的可擴(kuò)展性,如果對(duì)象之間通過顯式地調(diào)用進(jìn)行交互,那么會(huì)導(dǎo)致調(diào)用者與被調(diào)用者存在著非常緊密的聯(lián)系,其中一方的改動(dòng)將會(huì)導(dǎo)致程序出現(xiàn)很大的改動(dòng)。例如,要為一家賣茶的商店提供一套管理系統(tǒng),在這家商店剛開業(yè)的時(shí)候只賣綠茶(GreenTea),隨著規(guī)模的擴(kuò)大或者根據(jù)具體銷售量,未來可能會(huì)隨時(shí)改變茶的類型,例如紅茶(BlackTea)等,傳統(tǒng)的實(shí)現(xiàn)方法會(huì)針對(duì)茶抽象化一個(gè)基類,綠茶類只需要繼承自該基類即可。如圖1所示。
圖1
實(shí)現(xiàn)方法1
采用該實(shí)現(xiàn)方法后,在需要使用GreenTea的時(shí)候,只需要執(zhí)行以下代碼即可:AbstractTeat=newGreenTea(),當(dāng)然,這種方法是可以滿足當(dāng)前設(shè)計(jì)要求的。但是該方法的可擴(kuò)展性不好,存在著不恰當(dāng)?shù)牡胤?,例如,?dāng)商家發(fā)現(xiàn)綠茶的銷售并不好,決定開始銷售紅茶時(shí),那么只需要實(shí)現(xiàn)一個(gè)BlackTea類,并且讓這個(gè)類繼承自AbstractTea即可。但是,在系統(tǒng)中所有用到AbstractTeat=newGreenTea()的地方,都需要被改為AbstractTeat=new.BlackTea(),而這種創(chuàng)建對(duì)象實(shí)例的方法往往會(huì)導(dǎo)致程序的改動(dòng)量非常大。
那么怎樣才能增強(qiáng)系統(tǒng)的可擴(kuò)展性呢?此時(shí)可以使用設(shè)計(jì)模式中的工廠模式來把創(chuàng)建對(duì)象的行為包裝起來,實(shí)現(xiàn)方法如圖2所示。
圖2
實(shí)現(xiàn)方法2
通過以上方法,可以把創(chuàng)建對(duì)象的過程委托給TeaFatory來完成,在需要使用Tea對(duì)象的時(shí)候,只需要調(diào)用Factory類的getTea方法即可,具體創(chuàng)建對(duì)象的邏輯在TeaFactory中來實(shí)現(xiàn),那么當(dāng)商家需要把綠茶替換為紅茶的時(shí)候,系統(tǒng)中只需要改動(dòng)TeaFactory中創(chuàng)建對(duì)象的邏輯即可。當(dāng)采用了工廠模式后,只需要在一個(gè)地方做改動(dòng)就可以滿足要求,從而增強(qiáng)了系統(tǒng)的可擴(kuò)展性。
雖然說采用工廠設(shè)計(jì)模式后增強(qiáng)了系統(tǒng)的可擴(kuò)展性,但是從本質(zhì)上來講,工廠模式只不過是把程序中會(huì)變動(dòng)的邏輯移動(dòng)到工廠類里面了,當(dāng)系統(tǒng)中的類較多的時(shí)候,在系統(tǒng)擴(kuò)展的時(shí)候需要經(jīng)常改動(dòng)工廠類中的代碼。而采用IoC設(shè)計(jì)思想后,程序?qū)?huì)有更好的可擴(kuò)展性,下面主要介紹Spring框架在采用IoC后的實(shí)現(xiàn)方法,如圖3所示。
圖3
實(shí)現(xiàn)方法3
Spring容器將會(huì)根據(jù)配置文件來創(chuàng)建調(diào)用者對(duì)象(Sale),同時(shí)把被調(diào)用的對(duì)象(AbstractTea的子類)的實(shí)例化對(duì)象通過構(gòu)造方法或set方法的形式注入到調(diào)用者對(duì)象中。
首先,創(chuàng)建名為SpringConfig.xml的文件。
<beans>
<beanid="sale"class="Sale"singleton="false">
<constrctor-arg>
<refbean="tea"/>
</constrctor-arg>
</bean>
<beanid="tea"class="BlueTea"singleton="false">
</beans>
在實(shí)現(xiàn)Sale類的時(shí)候,需要按照如下方式實(shí)現(xiàn):
classSale{
privateAbstractTeat;
publicSale(AbstractTeat){
this.t=t;
}
//其他方法就可以使用t了
}
當(dāng)Spring容器在創(chuàng)建Sale對(duì)象的時(shí)候,根據(jù)配置文件SpringConfig.xml會(huì)創(chuàng)建一個(gè)BlueTea的對(duì)象,作為Sale構(gòu)造方法的參數(shù)。當(dāng)需要把BlueTea改為BlackTea時(shí)只需要修改上述配置文件即可,而不需要修改代碼。
在需要Sale的時(shí)候,可以通過如下方式來創(chuàng)建Sale對(duì)象:
ApplicationContextxtx=newFileSystemXmlApplicationContext("SpringConfig.xml");
Sales=(Sale)ctx.getBean("sale");
上例中,Spring采用IoC的方式來實(shí)現(xiàn)把實(shí)例化的對(duì)象注入到開發(fā)人員自定義的對(duì)象中,具有較強(qiáng)的可擴(kuò)展性。
具體而言,IoC主要有以下幾個(gè)方面的優(yōu)點(diǎn):
1)通過IoC容器,開發(fā)人員不需要關(guān)注對(duì)象是如何被創(chuàng)建的,同時(shí),增加新類也非常方便,只需要修改配置文件即可實(shí)現(xiàn)對(duì)象的熱插拔。
2)IoC容器可以通過配置文件來確定需要注入的實(shí)例化對(duì)象,因此,非常便于進(jìn)行單元測(cè)試。
盡管如此,IoC也有自身的缺點(diǎn),具體表現(xiàn)為如下兩點(diǎn):①對(duì)象是通過反射機(jī)制實(shí)例化出來的,因此,會(huì)對(duì)系統(tǒng)的性能有一定的影響;②創(chuàng)建對(duì)象的流程變得比較復(fù)雜。
通過以上分析可知,只有選項(xiàng)B描述錯(cuò)誤,注入降低了組件之間的耦合性,而不是使組件之間相互依賴。
所以,本題的答案為ACD。9.
軟件工程里面常用的生命周期模型包括______。
(分?jǐn)?shù):2.00)
A.瀑布模型
√
B.迭代模型
√
C.原型模型
√
D.增量模型
√解析:軟件工程里面常用的生命周期模型包括瀑布模型、迭代模型、快速原型模型和增量模型等。所以,選項(xiàng)A、選項(xiàng)B、選項(xiàng)C、選項(xiàng)D正確。10.
典型的瀑布模型的四個(gè)階段是______。
(分?jǐn)?shù):2.00)
A.分析
√
B.設(shè)計(jì)
√
C.編碼
√
D.測(cè)試
√
E.需求調(diào)研
F.實(shí)施解析:瀑布模型的核心思想是按工序?qū)栴}化簡(jiǎn),將功能的實(shí)現(xiàn)與設(shè)計(jì)分開,便于分工協(xié)作,即采用結(jié)構(gòu)化的分析與設(shè)計(jì)方法將邏輯實(shí)現(xiàn)與物理實(shí)現(xiàn)分開。將軟件生命周期劃分為制定計(jì)劃、需求分析、軟件設(shè)計(jì)、程序編寫、軟件測(cè)試和運(yùn)行維護(hù)等六個(gè)基本活動(dòng),并且規(guī)定了它們白上而下、相互銜接的固定次序,如同瀑布流水,逐級(jí)下落。
本題強(qiáng)調(diào)的是瀑布模型的四個(gè)典型階段,通常是分析、設(shè)計(jì)、編碼和測(cè)試。所以,選項(xiàng)A、選項(xiàng)B、選項(xiàng)C、選項(xiàng)D正確。11.
軟件的六大質(zhì)量特性不包括______。
(分?jǐn)?shù):2.00)
A.功能性
B.可靠性
C.兼容性
√
D.穩(wěn)定性
√解析:軟件的六大質(zhì)量特性包括功能性、可靠性、可用性、效率、可維護(hù)性和可移植性。很顯然,兼容性與穩(wěn)定性不屬于軟件的六大質(zhì)量特性。所以,選項(xiàng)C與選項(xiàng)D正確。12.
以下有關(guān)聚集索引的描述中,正確的是______。
(分?jǐn)?shù):2.00)
A.有存儲(chǔ)實(shí)際數(shù)據(jù)
√
B.沒有存儲(chǔ)實(shí)際數(shù)據(jù)
C.物理上連續(xù)
√
D.邏輯上連續(xù)
√
E.可以用B樹實(shí)現(xiàn)
F.可以用二叉排序樹實(shí)現(xiàn)解析:索引是對(duì)數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu),使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。數(shù)據(jù)庫中索引可以分為兩種類型:聚簇(聚集索引)索引和非聚簇索引(非聚集索引)。
聚集索引:表數(shù)據(jù)按照索引的順序來存儲(chǔ),也就是說,索引項(xiàng)的順序與表中記錄的物理順序一致。對(duì)于聚集索引,葉子結(jié)點(diǎn)即存儲(chǔ)了真實(shí)的數(shù)據(jù)行,不再有另外單獨(dú)的數(shù)據(jù)頁。正因?yàn)樗饕臄?shù)據(jù)需與數(shù)據(jù)物理存儲(chǔ)的順序一致,在一張表上最多只能創(chuàng)建一個(gè)聚集索引。聚簇索引一般使用B樹來實(shí)現(xiàn)。
非聚集索引:表數(shù)據(jù)存儲(chǔ)順序與索引順序無關(guān)。對(duì)于非聚集索引,葉結(jié)點(diǎn)包含索引字段值及指向數(shù)據(jù)頁、數(shù)據(jù)行的邏輯指針。為了提高索引的性能,一般采用B樹來實(shí)現(xiàn)。
所以,本題的答案為ACD。三、論述題(總題數(shù):19,分?jǐn)?shù):0.00)1.
JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn)?它們之間的聯(lián)系是什么?
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(相同點(diǎn):JSP可以被看作是一個(gè)特殊的Servlet,它只不過是對(duì)Servlet的擴(kuò)展,只要是JSP可以完成的工作,使用Servlet都可以完成,例如,生成動(dòng)態(tài)頁面。由于JSP頁面最終要被轉(zhuǎn)換成Servlet來運(yùn)行,因此,處理請(qǐng)求實(shí)際上是編譯后的Servlet。
不同點(diǎn):①Servlet的實(shí)現(xiàn)方式是在Java語言中嵌入HTML代碼,編寫和修改HTML非常不方便,所以,它比較適合做流程控制、業(yè)務(wù)處理,而JSP的實(shí)現(xiàn)方式為在HTML中嵌入Java代碼,比較適合頁面的顯示。例如在Struts框架中,SerMet位于MVC設(shè)計(jì)模式的控制層,而JSP位于視圖層。②Servlet中沒有內(nèi)置對(duì)象,JSP中的內(nèi)置對(duì)象都必須通過HttpServletRequest對(duì)象、HttpServletResponse對(duì)象以及HttpServlet對(duì)象得到。)解析:2.
HTML的Form和xForm的區(qū)別是什么?
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(HTML的Form(表單)是一個(gè)包含表單元素的區(qū)域。表單元素是允許用戶在表單中(比如文本域、下拉列表、單選框和復(fù)選框等)輸入信息的元素。表單使用表單標(biāo)簽(<form>)定義,例如<form><input/></form>。
而XForm是下一代HTML表單標(biāo)準(zhǔn),它比HTML提供更加靈活和豐富的表單控件,同時(shí),它要比HTML更加規(guī)范、有更高的可用性。它使用XML來定義數(shù)據(jù),同時(shí)也使用XML來存儲(chǔ)及傳遞數(shù)據(jù)。它最特殊的一點(diǎn)是分隔表單的數(shù)據(jù)模型、視圖和控制器,數(shù)據(jù)與表單表示的分離,使得代碼更加清晰,維護(hù)更加容易。數(shù)據(jù)模型可以使用靜態(tài)的XML數(shù)據(jù),也可以是后端的WebService或URL提供。)解析:3.
Servlet和CGI的區(qū)別是什么?
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(HTML只能用來保存靜態(tài)內(nèi)容,而通常情況下,靜態(tài)頁面很難滿足實(shí)際應(yīng)用的需要,鑒于此,提出了動(dòng)態(tài)頁面的概念。所謂動(dòng)態(tài)頁面,指的是能夠根據(jù)不同時(shí)間、不同用戶而顯示不同內(nèi)容的頁面,例如常見的論壇、留言板、電子商務(wù)網(wǎng)站等都是通過動(dòng)態(tài)頁面來實(shí)現(xiàn)的。那么如何才能生成動(dòng)態(tài)頁面呢?其中一種方法是采用CGI(CommonGatewayInterface,公共網(wǎng)關(guān)接口)。CGI是一種用Perl腳本、Shell腳本或C語言編寫的程序,它可以用來生成動(dòng)態(tài)頁面,即每次客戶端瀏覽器訪問某一頁面時(shí),可以看到不同的內(nèi)容。CGI應(yīng)用開發(fā)比較困難,一般會(huì)要求程序員有處理參數(shù)傳遞知識(shí)的能力,而且,CGI不可移植,為某一特定平臺(tái)編寫的CGI應(yīng)用只能運(yùn)行于這一環(huán)境中。每一個(gè)CGI應(yīng)用存在于一個(gè)由客戶端請(qǐng)求激活的進(jìn)程中,并且在請(qǐng)求被服務(wù)后被卸載。而另外一種方式則是采用Servlet技術(shù)。
Servlet是采用Java語言編寫的服務(wù)器端程序,它運(yùn)行于Web服務(wù)器的Servlet容器中,其主要功能是提供請(qǐng)求/口向應(yīng)的Web服務(wù)模式,可以生成動(dòng)態(tài)的Web內(nèi)容,而這正是HTML所不具備的功能。
與其他生成動(dòng)態(tài)頁面的技術(shù)相比,Servlet有諸多優(yōu)點(diǎn),具體而言,主要表現(xiàn)在如下幾個(gè)方面:
1)較好的可移植性:由于Java語言具有跨平臺(tái)和可移植性強(qiáng)的特點(diǎn),使得Servlet也有較好的可移植性,即無須修改代碼就可以部署到多種不同類型的Web服務(wù)器上。
2)執(zhí)行效率高:由于CGI針對(duì)每個(gè)請(qǐng)求都會(huì)創(chuàng)建一個(gè)進(jìn)程來處理,而Servlet針對(duì)每個(gè)請(qǐng)求創(chuàng)建一個(gè)線程來執(zhí)行,而創(chuàng)建線程比創(chuàng)建進(jìn)程的開銷要小,所以,與CGI相比,Servlet在交互過程中有更短的響應(yīng)時(shí)間,響應(yīng)效率更高。
3)功能強(qiáng)大:Servlet可以與Web服務(wù)器進(jìn)行交互,而CGI卻無法與Web服務(wù)器直接交互。
4)使用方便:Servlet提供了許多非常有用的接口用來讀取或設(shè)置HTTP頭消息、處理Cookie和跟蹤會(huì)話狀態(tài)等。
5)可擴(kuò)展性強(qiáng)。由于Servlet是由Java語言編寫的,所以,它具備了Java語言的所有優(yōu)點(diǎn)。Java語言是健壯的、面向?qū)ο蟮木幊陶Z言,很容易擴(kuò)展,Servlet自然也具備這樣的優(yōu)點(diǎn)。)解析:4.
四種會(huì)話跟蹤技術(shù)是什么?
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(在開發(fā)Web應(yīng)用程序的時(shí)候,經(jīng)常需要能夠做到數(shù)據(jù)共享或者在不同頁面之間可以傳遞參數(shù),而且,一個(gè)會(huì)話中的數(shù)據(jù)可能會(huì)在不同的地方使用,因此,就需要有專用的機(jī)制來傳遞和保存這些數(shù)據(jù)。
所謂會(huì)話,指的是從客戶端打開與服務(wù)器的連接并發(fā)出請(qǐng)求到服務(wù)器響應(yīng)客戶端請(qǐng)求的全過程。會(huì)話跟蹤則是對(duì)同一個(gè)用戶對(duì)服務(wù)器的連續(xù)的請(qǐng)求和接受響應(yīng)的監(jiān)視,由于客戶端與服務(wù)器端之間是通過HTTP協(xié)議進(jìn)行通信的,而HTTP協(xié)議本身是無狀態(tài)協(xié)議,它不能保存客戶的信息,即一次響應(yīng)完成之后連接就斷開了,在下一次的請(qǐng)求時(shí),需要重新建立連接,等到建立完連接后還需要判斷是否是同一個(gè)用戶,所以,要想對(duì)會(huì)話的過程進(jìn)行監(jiān)控,最好的方法就是通過會(huì)話跟蹤技術(shù)。
具體而言,會(huì)話跟蹤技術(shù)主要有如下四種:
1)page代表與一個(gè)頁面相關(guān)的對(duì)象和屬性。一個(gè)頁面由一個(gè)編譯好的JavaServlet類(可以帶有任何的include指令,但是沒有include動(dòng)作)表示。這既包括Servlet又包括被編譯成Servlet的JSP頁面。
2)request代表與Web客戶端發(fā)送的一個(gè)請(qǐng)求相關(guān)的對(duì)象和屬性。一個(gè)請(qǐng)求可能跨越多個(gè)頁面,涉及多個(gè)Web組件。
3)session代表與用于某個(gè)Web客戶端的一個(gè)用戶體驗(yàn)相關(guān)的對(duì)象和屬性,一個(gè)Web會(huì)話經(jīng)常會(huì)跨越多個(gè)客戶端請(qǐng)求。
4)application代表與整個(gè)Web應(yīng)用程序相關(guān)的對(duì)象和屬性,這實(shí)質(zhì)上是跨越多個(gè)Web應(yīng)用程序,包括多個(gè)頁面、請(qǐng)求和會(huì)話的一個(gè)全局作用域。)解析:5.
JSP有哪些內(nèi)置對(duì)象和動(dòng)作?
(分?jǐn)?shù):4.00)__________________________________________________________________________________________
正確答案:((1)內(nèi)置對(duì)象
在JSP中,內(nèi)置對(duì)象又稱為隱含對(duì)象,是指在不聲明和創(chuàng)建的情況下就可以被使用的一些成員變量。JSP一共提供有9個(gè)內(nèi)置對(duì)象,分別是request(請(qǐng)求對(duì)象)、response(響應(yīng)對(duì)象)、pageContext(頁面上下文對(duì)象)、session(會(huì)話對(duì)象)、application(應(yīng)用程序?qū)ο?、out(輸出對(duì)象)、config(配置對(duì)象)、page(頁面對(duì)象)與exception(例外對(duì)象)。其具體的描述見下表。內(nèi)置對(duì)象名稱描述request客戶端請(qǐng)求,此請(qǐng)求包含來自GET/POST請(qǐng)求的參數(shù)??蛻舳说恼?qǐng)求信息被封裝在request對(duì)象中,通過它才能了
解到客戶的需求,然后做出響應(yīng),因此,request對(duì)象是用來獲取請(qǐng)求參數(shù)的:作常重要途徑。它是HttpServletRequest
類的實(shí)例response用來表示服務(wù)器端對(duì)客戶端的響應(yīng),將Web服務(wù)器處理后的結(jié)果返回給客戶端。但在JSP中很少直接使用到它。它
是HttpServletResponse類的實(shí)例pageContext提供了對(duì)JSP頁面所有的對(duì)象及命名空間的訪問,也就是說,用它可以訪問到本頁面中所有其他的對(duì)象,例如前面
已經(jīng)描述的request、response,以及后面要介紹的session和application對(duì)象等。它的本類名也叫pageContextSeSSlon用來表示客戶端與服務(wù)器的一次會(huì)話。從客戶端與Web服務(wù)器建立連接的時(shí)候會(huì)話開始,直到關(guān)閉瀏覽器時(shí)結(jié)束會(huì)
話。它是HttpSession類的實(shí)例application代表JSP所屬的Web應(yīng)用本身。application對(duì)象可以存放全局變量,因此,可以實(shí)現(xiàn)用戶間的數(shù)據(jù)共享。它的生命
周期與服務(wù)器的生命周期一致,也就是說,當(dāng)服務(wù)器啟動(dòng)后,這個(gè)對(duì)象被創(chuàng)建出來,直到服務(wù)器停止后這個(gè)對(duì)象的生
命周期才結(jié)束。在任何地方對(duì)此對(duì)象屬性的操作,都將影響到其他用戶對(duì)此的訪問。它是ServletContext類的實(shí)例out用于在客戶端瀏覽器內(nèi)輸出信息。它是JspWriter類的實(shí)例config主要作用是取得服務(wù)器的配置信息。當(dāng)一個(gè)Servlet初始化時(shí),容器把某些信息通過config對(duì)象傳遞給這個(gè)Servlet,
Servlet可以使用這個(gè)對(duì)象獲取所需的配置信息page表示當(dāng)前JSP頁面,類似于Java語言中的this指針。它是java.lang.Object類的實(shí)例exceptmn用來表示異常。當(dāng)一個(gè)頁面在運(yùn)行過程中發(fā)生了例外,就會(huì)產(chǎn)生這個(gè)對(duì)象。如果JSP需要使用這個(gè)對(duì)象就必須把
isErrorPage設(shè)為true,否則無法編譯。它是java.lang.Throwable的對(duì)象
根據(jù)它們作用的不同,可以將以上九個(gè)內(nèi)置對(duì)象分為四類:第一類,與Servlet有關(guān)的page和config;第二類,與Input/Output有關(guān)的out、request和response;第三類,與Context有關(guān)的application、session和pageContext;第四類,與Error有關(guān)的exception。
(2)內(nèi)置動(dòng)作
JSP使用動(dòng)作來實(shí)現(xiàn)動(dòng)態(tài)地插入文件、實(shí)現(xiàn)重定向和對(duì)JavaBean的引用等功能。它一共有6個(gè)基本動(dòng)作:jsp:include、jsp:useBean、jsp:setProperty、jsp:getProperty、jsp:forward與jsp:plugin。以下將分別對(duì)這些動(dòng)作進(jìn)行具體介紹。
jsp:include:用來在頁面被請(qǐng)求的時(shí)候引入一個(gè)文件。include指令是在JSP文件被轉(zhuǎn)換成Servlet的時(shí)候引入文件,而jsp:include插入文件的時(shí)間是在頁面被請(qǐng)求的時(shí)候,而且被引用文件不能包含某些JSP代碼(例如不能設(shè)置HTTP頭)。使用示例如下:
<jsp:includepage="test.jsp"flush="true">
<jsp:paramname="name"value="value"/>
</jsp:include>
以上代碼表示在當(dāng)前文件中可以引入test.jsp文件。
jsp:useBean:用來尋找或者實(shí)例化一個(gè)JavaBean。它使得開發(fā)人員既可以發(fā)揮Java組件重用的優(yōu)勢(shì),同時(shí)也避免了損失JSP區(qū)別于Servlet的方便性。使用示例如下:
<jsp:useBeanid="car"scope="session"class="com.Car">
以上代碼表示實(shí)例化了一個(gè)com.Car類的實(shí)例。
jsp:setProperty:用來設(shè)置已經(jīng)實(shí)例化的Bean對(duì)象的屬性。使用示例如下:
<jsp:setPropertyname="car"property="colour"value="red"/>
以上代碼用來設(shè)置名字為car的實(shí)例的colour屬性為red。
jsp:getProperty:用來獲取某個(gè)JavaBean的屬性。使用示例如下:
colour=<jsp:getPropertyname="car"property="colour"></jsp:getProperty>
以上代碼用來獲取名字為car的實(shí)例的colour屬性。
jsp:foward:用來把請(qǐng)求轉(zhuǎn)到一個(gè)新頁面。使用示例如下:
<jsp:forwardpage="/Servlet/login"/>
以上代碼把當(dāng)前頁面重定向到/Servlet/login來處理。
jsp:plugin:用于在瀏覽器中播放或顯示一個(gè)對(duì)象。使用這個(gè)動(dòng)作能插入所需的特定瀏覽器的OBJECT或EMBED元素來指定瀏覽器運(yùn)行一個(gè)JAVAApplet所需的插件。使用示例如下:
<jsp:plugintype="applet"codebase="/ch5"code="Hello.class"height="40"width="320">
以上代碼用來在瀏覽器中運(yùn)行一個(gè)applet插件。)解析:6.
forward和redirect的區(qū)別是什么?
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(在設(shè)計(jì)Web應(yīng)用程序的時(shí)候,經(jīng)常需要把一個(gè)系統(tǒng)進(jìn)行結(jié)構(gòu)化設(shè)計(jì),即按照模塊進(jìn)行劃分,讓不同的Servlet來實(shí)現(xiàn)不同的功能,例如可以讓其中一個(gè)Servlel接收用戶的請(qǐng)求,另外一個(gè)Servlet來處理用戶的請(qǐng)求。為了實(shí)現(xiàn)這種程序的模塊化,就需要保證在不同的Servlet之間可以相互跳轉(zhuǎn),而Servlet中主要有兩種實(shí)現(xiàn)跳轉(zhuǎn)的方式:forward方式與redirect方式。
forward是服務(wù)器內(nèi)部的重定向,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,而客戶端并不知道,因此,在客戶端瀏覽器的地址欄中不會(huì)顯示轉(zhuǎn)向后的地址,還是原來的地址。由于在整個(gè)定向的過程中用的是同一個(gè)request,因此,forward會(huì)將request的信息帶到被定向的JSP或Servlet中使用。
redirect則是客戶端重定向,是完全的跳轉(zhuǎn),即客戶端瀏覽器會(huì)獲取到跳轉(zhuǎn)后的地址,然后重新發(fā)送請(qǐng)求,因此,瀏覽器中會(huì)顯示跳轉(zhuǎn)后的地址。同時(shí)由于這種方式比forward方式多了一次網(wǎng)絡(luò)請(qǐng)求,所以,forward效率更高。需要注意的是,客戶端重定向可以通過設(shè)置特定的HTTP頭或者寫JavaScript腳本實(shí)現(xiàn)。下圖可以更好地說明它們的區(qū)別。
forward和redirect區(qū)別
鑒于以上區(qū)別,一般當(dāng)forward方式可以滿足需求時(shí),盡可能地使用forward方式。但在有些情況下,例如,需要跳轉(zhuǎn)到一個(gè)其他服務(wù)器上的資源,則必須使用redirect方式。
引申:filter的作用是什么?主要實(shí)現(xiàn)什么方法?
filter使用戶可以改變一個(gè)request并且修改一個(gè)response。filter不是一個(gè)Servlet,不能產(chǎn)生一個(gè)response,而能夠在一個(gè)request到達(dá)Servlet之前預(yù)處理request,也可以在離開Servlet時(shí)處理response。filter其實(shí)是一個(gè)“servletchaining”(servlet鏈)。
一個(gè)filter包括:
1)在Servlet被調(diào)用之前截獲。
2)在Servlet被調(diào)用之前檢查ServletRequest。
3)根據(jù)需要修改Request頭和Request數(shù)據(jù)。
4)根據(jù)需要修改Response頭和Response數(shù)據(jù)。
5)在Servlet被調(diào)用之后截獲。)解析:7.
Web服務(wù)器與Web應(yīng)用服務(wù)器有什么區(qū)別?
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(Web服務(wù)器指的是提供Web功能的服務(wù)器,主要就是HTTP服務(wù)器,包括圖片的下載等一系列和文本相關(guān)的內(nèi)容。Web服務(wù)器支持以HTTP協(xié)議的方式來訪問,當(dāng)Web服務(wù)器接收到一個(gè)HTTP請(qǐng)求時(shí),它同樣會(huì)以HTTP協(xié)議格式返回一個(gè)響應(yīng),這個(gè)響應(yīng)可以是一個(gè)靜態(tài)的HTML頁面,也可以是經(jīng)過處理的一個(gè)動(dòng)態(tài)的頁面,還可以是音頻、視頻等信息。為了處理一個(gè)請(qǐng)求,Web服務(wù)器可以做出一個(gè)響應(yīng),并進(jìn)行頁面跳轉(zhuǎn),或者把動(dòng)態(tài)響應(yīng)的產(chǎn)生委托給一些其他的程序,例如CGI腳本、JSP、Servlet或者一些其他的服務(wù)器端程序。Web服務(wù)器一般都使用了一些特有的機(jī)制(例如容錯(cuò)機(jī)制)來保證Web服務(wù)器有較好的擴(kuò)展性和不間斷地提供服務(wù)。常見的Web服務(wù)器有IIS和Apache。
應(yīng)用服務(wù)器提供訪問業(yè)務(wù)邏輯的途徑以供客戶端應(yīng)用程序使用。具體而言,它通過HTTP、TCP/IP、IIOP(InteRNetInter-ORBProtocol,互聯(lián)網(wǎng)內(nèi)部對(duì)象請(qǐng)求代理協(xié)議)或JRMP(JavaRemoteMethodProtocol,Java遠(yuǎn)程方法協(xié)議)等協(xié)議來提供業(yè)務(wù)邏輯接口。為了系統(tǒng)的可靠性,同樣使用了一些可擴(kuò)展性和容錯(cuò)機(jī)制。除此之外,它還為應(yīng)用的開發(fā)提供了許多服務(wù),例如事務(wù)管理、安全管理和對(duì)象生命周期管理等。常見的應(yīng)用服務(wù)器有BEAWebLogicServer、IBMWebSphereApplicationServer、IPlanetApplicationServer、Oracle9iApplicationServer、JBoss和Tomcat等。
Web服務(wù)器一般是通用的,而應(yīng)用服務(wù)器一般是專用的,例如Tomcat只能處理Java應(yīng)用程序而不能處理ASPX或PHP。需要注意的是,Web服務(wù)器與應(yīng)用服務(wù)器是并列關(guān)系,二者不存在相互包容關(guān)系。在使用的時(shí)候,如果訪問的頁面只有HTML,用Web服務(wù)器就足夠了,但是如果是JSP,此時(shí)就需要應(yīng)用服務(wù)器,因?yàn)橹挥袘?yīng)用服務(wù)器才能解析JSP里的Java代碼,并將解析結(jié)果以HTML的格式返回給用戶。)解析:8.
請(qǐng)簡(jiǎn)要介紹SpringMVC和AOP。
(分?jǐn)?shù):2.00)__________________________________________________________________________________________
正確答案:(以下將分別對(duì)SpringMVC、IoC、AOP進(jìn)行解釋說明。
(1)SpringMVC
SpringMVC是在Spring框架上發(fā)展起來的框架,它提供了構(gòu)建Web應(yīng)用程序的全功能MVC模塊,使用了Spring可插入的MVC架構(gòu),可以自由地選擇各個(gè)模塊所使用的架構(gòu),非常靈活。例如可以選擇使用內(nèi)置的SpringWeb框架,也可以選擇使用Struts的Web框架。通過策略接口,Spring框架是高度可配置的。它包含多種視圖技術(shù),例如JavaServerPages(JSP)技術(shù)和Velocity模板引擎等。對(duì)于SpringMVC框架而言,它并不知道具體使用了哪個(gè)視圖。SpringMVC把控制器、模型、分派器以及處理程序?qū)ο蟮慕巧M(jìn)行了分離,因此,SpringMVC有更好的可定制性。
(2)AOP
AOP(AspectOrientedProgramming,面向切面編程)是對(duì)面向?qū)ο箝_發(fā)的一種補(bǔ)充,它允許開發(fā)人員在不改變?cè)瓉砟P偷幕A(chǔ)上動(dòng)態(tài)地修改模型從而滿足新的需求。例如,在不改變?cè)瓉順I(yè)務(wù)邏輯模型的基礎(chǔ)上,可以動(dòng)態(tài)地增加日志、安全或異常處理的功能。
下面介紹一個(gè)在Spring中使用AOP編程的簡(jiǎn)單例子。
1)創(chuàng)建一個(gè)接口以及實(shí)現(xiàn)這個(gè)接口的類。TestAOPIn.java內(nèi)容如下:
publicinterfaceTestAOPIn{
publicvoiddoSomething();
TestAOPImpl.java內(nèi)容如下:
publicclassTestAOPImplimplementsTestAOPIn{
publ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級(jí)讀書日活動(dòng)方案6篇
- 2024-2025學(xué)年四川省江油市太白中學(xué)高一上學(xué)期12月月考?xì)v史試卷
- 2025年工程項(xiàng)目策劃安全生產(chǎn)合作協(xié)議書
- 2025年自動(dòng)抄表系統(tǒng)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 2025年工程機(jī)械部件項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 2025年眾籌平臺(tái)項(xiàng)目融資合同
- 2025年養(yǎng)殖園區(qū)合作經(jīng)營合作協(xié)議書
- 2025年農(nóng)村郵政服務(wù)合同樣本
- 2025年不銹鋼產(chǎn)品質(zhì)量保證合同
- 2025年麥田房產(chǎn)策劃交易保證金協(xié)議書
- 數(shù)字孿生水利工程建設(shè)技術(shù)導(dǎo)則(試行)
- 2024年山東化工職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫及答案解析
- 方案偏離處理措施
- (2024年)剪映入門教程課件
- 《寵物飼養(yǎng)》課程標(biāo)準(zhǔn)
- 快餐品牌全案推廣方案
- IT總監(jiān)年終述職報(bào)告
- 環(huán)境衛(wèi)生整治推進(jìn)行動(dòng)實(shí)施方案
- 口腔醫(yī)院感染預(yù)防與控制1
- 2024年同等學(xué)力英語真題解析
- 2023年中考英語二輪復(fù)習(xí):動(dòng)詞的時(shí)態(tài)(附答案解析)
評(píng)論
0/150
提交評(píng)論