


版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1.你對(duì)面向?qū)ο蟮睦斫猓课业乃悸肥牵夯卮饡r(shí)從面向?qū)ο蟮娜筇卣骰卮?。包括三個(gè)特征:繼承、封裝、多態(tài)。類(lèi)的繼承性是指從已有的一個(gè)類(lèi)來(lái) extends子類(lèi),子類(lèi)具有了父類(lèi)的所有特征,同時(shí),子類(lèi)也可以有 新的特性。比如:人是一個(gè)類(lèi),男人具有了人類(lèi)的所有的特性,比如思考,比如勞動(dòng)。同時(shí),男人也 有新的特性,比如男人會(huì)長(zhǎng)胡子。類(lèi)的封裝是指類(lèi)把所有的操作都封閉起來(lái),僅僅提供接口岀來(lái)讓其他人使用,使用的人沒(méi)有必要懂得 類(lèi)里面的操作,只需要懂得操作接口就可以了。比如開(kāi)汽車(chē),我們只需要懂得方向盤(pán)、剎車(chē)、油門(mén)等等的使用就可以了,沒(méi)有必要知道剎車(chē)是如何構(gòu)成的封閉好的操作。同時(shí),封裝也提高了程序的可 替換性。比如兩個(gè)
2、汽車(chē)公司實(shí)現(xiàn)剎車(chē)的方式不一樣,但是,只要我們學(xué)會(huì)了使用剎車(chē),那么,開(kāi)兩個(gè)汽車(chē)公司的車(chē)就都沒(méi)有問(wèn)題了,我們不需要考慮他們?cè)鯓訉?shí)現(xiàn)剎車(chē)這門(mén)技術(shù)的。類(lèi)的多態(tài)性是一個(gè)對(duì)象的某項(xiàng)功能可以處理不同類(lèi)型的問(wèn)題,或者一個(gè)子類(lèi)可以將父類(lèi)的某個(gè)功能替換成新的功能,具體到編程的方面來(lái)說(shuō)實(shí)現(xiàn)類(lèi)的多態(tài)有 override和overload ,也就是重寫(xiě)和重載。同時(shí)面向?qū)ο筮€有一個(gè)很重要的概念:抽象。抽象就是一個(gè)事物的本質(zhì)。當(dāng)然對(duì)于本質(zhì),不同的角度卻會(huì)有不同的理解。男人,在和女人一起的時(shí)候,它的本質(zhì)是人。在和所有的生物一起的時(shí)候,它的 本質(zhì)是動(dòng)物。(雖然哲學(xué)家都說(shuō)事物的本質(zhì)只有一個(gè),但是,我仍然堅(jiān)持我的觀(guān)點(diǎn))4. jav
3、a中String類(lèi)為什么要設(shè)計(jì)成 final 呢?不允許其他類(lèi)繼承。這個(gè)應(yīng)該不是最終原因,但這里權(quán)且也當(dāng)成是一個(gè)原因。String類(lèi)中的成員屬性也幾乎都設(shè)計(jì)成了 private final 的,這樣String就被設(shè)計(jì)成一個(gè)不變類(lèi),這樣有助于共享,提高性能??梢詫⒆址畬?duì)象保存在字符串常量池中以供與字面值相同字符串對(duì)象 共 享。如果String對(duì)象是可變的,那就不能這樣共享,因?yàn)橐坏?duì)某一個(gè)String類(lèi)型變量引用的對(duì)象值改變,將同時(shí)改變一起共享字符串對(duì)象的其他String類(lèi)型變量所引用的對(duì)象的值。String被設(shè)計(jì)為不變類(lèi),其中的 offset ,value都被設(shè)計(jì)成private fina
4、l的,這樣在多線(xiàn)程時(shí),對(duì)String對(duì)象的訪(fǎng)問(wèn)是可以保證安全的。java程序語(yǔ)言的許多特性依賴(lài)于不可變的String對(duì)象5. 說(shuō)說(shuō)Hashpmap的原理HashMap概述HashMap是基于哈希表的 Map接口的非同步實(shí)現(xiàn)。此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵。此類(lèi)不保證映射的順序,特別是它不保證該順序恒久不變。HashMap的數(shù)據(jù)結(jié)構(gòu)在java編程語(yǔ)言中,最基本的結(jié)構(gòu)就是兩種,一個(gè)是數(shù)組,另外一個(gè)是模擬指針(引用),所有的 數(shù)據(jù)結(jié)構(gòu)都可以用這兩個(gè)基本結(jié)構(gòu)來(lái)構(gòu)造的,HashMap也不例外。HashMap實(shí)際上是一個(gè)“鏈表散列”的數(shù)據(jù)結(jié)構(gòu),即數(shù)組和鏈表的結(jié)合體。Hash
5、Map底層就是一個(gè)數(shù)組結(jié)構(gòu),數(shù)組中的每一項(xiàng)又是一個(gè)鏈表。當(dāng)新建一個(gè) HashMap的時(shí)候,就會(huì)初始化一個(gè)數(shù)組。6. 什么是AOP1. 概念介紹:所謂 AOP即Aspect orientied program,就是面向方面的編程,2. 什么是方面:所謂“方面”,簡(jiǎn)單地說(shuō),就是將那些與業(yè)務(wù)無(wú)關(guān),卻為業(yè)務(wù)模塊所共同調(diào) 用的邏輯或責(zé)任封裝起來(lái),便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于未 來(lái)的可操作性和可維護(hù)性。3. Aop的原理:面向切面編程,將程序中的交叉業(yè)務(wù)邏輯(比如安全,日志,事務(wù)等),封裝成一個(gè) 切面,然后注入到目標(biāo)對(duì)象(具體業(yè)務(wù)邏輯)中去。4. 實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類(lèi):
6、一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行; 二是采用靜態(tài)織入的方式,引入特定的語(yǔ)法創(chuàng)建 方面”,從而使得編譯器可以在編譯期間織入有關(guān)方面”的代碼7. IOC控制反轉(zhuǎn)也叫依賴(lài)注入。利用了工廠(chǎng)模式將對(duì)象交給容器管理,你只需要在spring配置文件中配置相應(yīng)的bean,以及設(shè)置相關(guān)的屬性,讓 spring容器來(lái)生成類(lèi)的實(shí)例對(duì)象以及管理對(duì)象。8. 數(shù)據(jù)庫(kù)觸發(fā)器的優(yōu)缺點(diǎn)以及用法觸發(fā)器本質(zhì)上講就是事件監(jiān)控器,可以定義在數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行某一個(gè)操作的前后。當(dāng)數(shù)據(jù)庫(kù)系統(tǒng)在進(jìn)行特定的操作時(shí),發(fā)現(xiàn)有觸發(fā)器定義,就去執(zhí)行觸發(fā)器定義的功能,從而滿(mǎn)足某些特定的需要。(觸發(fā)器就是你
7、在做某個(gè)操作的時(shí)候觸發(fā)另外一個(gè)操作)例如,在更新某些數(shù)據(jù)后,再去更新特定的數(shù)據(jù)。這就可以定義一個(gè)觸發(fā)器完成這樣的需要。觸發(fā)器的優(yōu)點(diǎn):以事件方式來(lái)處理.當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,自動(dòng)作處理。缺點(diǎn):當(dāng)數(shù)據(jù)庫(kù)之間 導(dǎo)岀導(dǎo)入的時(shí)候,可能會(huì)引起不必要的觸發(fā)邏輯。9. oracle,mysql,SqlServer三種數(shù)據(jù)庫(kù)的分頁(yè)查詢(xún)的實(shí)例MySql:MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)分頁(yè)比較簡(jiǎn)單,提供了LIMIT函數(shù)。一般只需要直接寫(xiě)到 sql語(yǔ)句后面就行了LIMIT子句可以用來(lái)限制由SELECT語(yǔ)句返回過(guò)來(lái)的數(shù)據(jù)數(shù)量,它有一個(gè)或兩個(gè)參數(shù),如果給出兩個(gè)參數(shù),第一個(gè)參數(shù)指定返回的第一行在所有數(shù)據(jù)中的位置,從0開(kāi)始(注意不是1
8、),第二個(gè)參數(shù)指定最多返回行數(shù)。例如:select * from table WHERELI MIT 10; #返回前10行select * from table WHERE- LIMIT 0,10; # 返回前 10 行select * from table WHERELI MIT 10,20; # 返回第 10-20行數(shù)據(jù)Oracle :考慮mySql中的實(shí)現(xiàn)分頁(yè),select * from表名 limit 開(kāi)始記錄數(shù),顯示多少條;就可以實(shí)現(xiàn)我們的分頁(yè) 效果。但是在oracle中沒(méi)有l(wèi)imit 關(guān)鍵字,但是有rownum字段rownum是一個(gè)偽列,是oracle系統(tǒng)自動(dòng)為查詢(xún)返回結(jié)果的每行
9、分配的編號(hào),第一行為1,第二行為2,以此類(lèi)推。第一種: 代碼如下:SELECT * FROM (SELECT A.*, ROWNUM RNFROM (SELECT * FROM TABLE_NAME) AWHERE ROWNUM = 21其中最內(nèi)層的查詢(xún) SELECT * FROM TABLE_NAME示不進(jìn)行翻頁(yè)的原始查詢(xún)語(yǔ)句。ROWNUM = 21控制分頁(yè)查詢(xún)的每頁(yè)的范圍。上面給岀的這個(gè)分頁(yè)查詢(xún)語(yǔ)句,在大多數(shù)情況擁有較高的效率。分頁(yè)的目的就是控制輸岀結(jié)果集大小,將 結(jié)果盡快的返回。在上面的分頁(yè)查詢(xún)語(yǔ)句中,這種考慮主要體現(xiàn)在WHERE ROWNUM 21 and e1.r(SELECT MA
10、X(id)FROM (SELECT TOP 20 idFROM TestTableORDER BY id) AS T)ORDER BY IDSELECT TOF頁(yè)大小 *FROM TestTableWHERE (ID (SELECT MAX(id)FROM (SELECT TOP頁(yè)大小 * 頁(yè)數(shù) idFROM 表ORDER BY id) AS T)ORDER BY ID分頁(yè)方案三:(利用SQL的游標(biāo)存儲(chǔ)過(guò)程分頁(yè))代碼如下:create procedure XiaoZhe ngGesqlstr nvarchar(4000),-查詢(xún)字符串currentpage int,- 第 N 頁(yè)pagesiz
11、e int -每頁(yè)行數(shù)asset no cou nt ondeclare P1 int, -P1 是游標(biāo)的 idrowcou nt intexec sp_cursorope n P1 output,sqlstr,scrollopt=1,ccopt=1,rowcou nt=rowcou nt outputselect ceil in g(1.0*rowcou nt/pagesize) as總頁(yè)數(shù)-,rowcou nt as 總行數(shù),curre ntpage as 當(dāng)前頁(yè)set curre ntpage=(curre ntpage-1)*pagesize+1exec sp_cursorfetch
12、P1,16,curre ntpage,pagesizeexec sp_cursorclose P1set no cou nt off其它的方案:如果沒(méi)有主鍵,可以用臨時(shí)表,也可以用方案三做,但是效率會(huì)低。建議優(yōu)化的時(shí)候,加上主鍵和索引,查詢(xún)效率會(huì)提高。通過(guò)SQL查詢(xún)分析器,顯示比較:結(jié)論是 :分頁(yè)方案二:(利用ID大于多少和SELECT TOP分頁(yè))效率最高,需要拼接SQL語(yǔ)句分頁(yè)方案一:(利用Not In和SELECT TOP分頁(yè))效率次之,需要拼接 SQL語(yǔ)句分頁(yè)方案三:(利用SQL的游標(biāo)存儲(chǔ)過(guò)程分頁(yè))效率最差,但是最為通用在實(shí)際情況中,要具體分析。10. 靜態(tài)變量和實(shí)例變量的區(qū)別?在語(yǔ)法
13、定義上的區(qū)別:靜態(tài)變量前要加static關(guān)鍵字,而實(shí)例變量前則不加 在程序運(yùn)行時(shí)的區(qū)別:實(shí)例變量屬于某個(gè)對(duì)象的屬性,必須創(chuàng)建了實(shí)例對(duì)象,其中的實(shí)例變量才會(huì)被分配 空間,才能使用這個(gè)實(shí)例變量。靜態(tài)變量不屬于某個(gè)實(shí)例對(duì)象,而是屬于類(lèi),所以也稱(chēng)為類(lèi)變量,只要程 序加載了類(lèi)的字節(jié)碼,不用創(chuàng)建任何實(shí)例對(duì)象,靜態(tài)變量就會(huì)被分配空間,靜態(tài)變量就可以被使用了???之,實(shí)例變量必須創(chuàng)建對(duì)象后才可以通過(guò)這個(gè)對(duì)象來(lái)使用,靜態(tài)變量則可以直接使用類(lèi)名來(lái)引用。11. abstract class 和 in terface有什么區(qū)別?含有abstract修飾符的class即為抽象類(lèi),abstract類(lèi)不能創(chuàng)建的實(shí)例對(duì)象。含
14、有abstract方法的類(lèi)必須定義為abstract class, abstract class類(lèi)中的方法不必是抽象的。abstract class類(lèi)中定義抽象方法必須在具體(Concrete)子類(lèi)中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類(lèi)沒(méi)有實(shí)現(xiàn)抽象父類(lèi)中的 所有抽象方法,那么子類(lèi)也必須定義為abstract類(lèi)型。接口 ( interface)可以說(shuō)成是抽象類(lèi)的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract類(lèi)型,接口中的成員變量類(lèi)型默認(rèn)為public static final。下面比較一下兩者的語(yǔ)法區(qū)別:1. 抽象類(lèi)可以有構(gòu)造方
15、法,接口中不能有構(gòu)造方法。2. 抽象類(lèi)中可以有普通成員變量,接口中沒(méi)有普通成員變量3抽象類(lèi)中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方 法。4. 抽象類(lèi)中的抽象方法的訪(fǎng)問(wèn)類(lèi)型可以是public,protected。但接口中的抽象方法只能是public類(lèi)型的,并且默認(rèn)即為 public abstract類(lèi)型。5. 抽象類(lèi)中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法6. 抽象類(lèi)和接口中都可以包含靜態(tài)成員變量,抽象類(lèi)中的靜態(tài)成員變量的訪(fǎng)問(wèn)類(lèi)型可以任意,但接口中定義的變量只能是 public static final類(lèi)型,并且默認(rèn)即為public static fin
16、al類(lèi)型。7. 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。下面接著再說(shuō)說(shuō)兩者在應(yīng)用上的區(qū)別:接口更多的是在系統(tǒng)架構(gòu)設(shè)計(jì)方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類(lèi)在代碼實(shí) 現(xiàn)方面發(fā)揮作用,可以實(shí)現(xiàn)代碼的重用。12. abstract 的method是否可同時(shí)是 static, 是否可同時(shí)是 native,是否可同時(shí)是 synchroni zed?都不是。理由如下:abstract的method不可以是static的,因?yàn)槌橄蟮姆椒ㄊ且蛔宇?lèi)實(shí)現(xiàn)的,而static與子類(lèi)扯不上關(guān)系!native方法表示該方法要用另外一種依賴(lài)平臺(tái)的編程語(yǔ)言實(shí)現(xiàn)的,不存在著被子類(lèi)實(shí)現(xiàn)的問(wèn)題,所以, 它也
17、不能是抽象的,不能與abstract混用。13. synchronized應(yīng)該是作用在一個(gè)具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖對(duì)象是this,而抽象方法上無(wú)法確定this是什么。14. Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。異常是指java程序運(yùn)行時(shí)(非編譯)所發(fā)生的非正常情況或錯(cuò)誤,與現(xiàn)實(shí)生活中的事件很相似,現(xiàn)實(shí)生活 中的事件可以包含事件發(fā)生的時(shí)間、地點(diǎn)、人物、情節(jié)等信息,可以用一個(gè)對(duì)象來(lái)表示,Java使用面向?qū)ο蟮姆绞絹?lái)處理異常,它把程序中發(fā)生的每個(gè)異常也都分別封裝到一個(gè)對(duì)象來(lái)表示的,該對(duì)象中包含有異 常的信息。Java對(duì)異常進(jìn)行了分類(lèi),不同類(lèi)
18、型的異常分別用不同的Java類(lèi)表示,所有異常的根類(lèi)為java.Iang.Throwable,Throwable下面又派生了兩個(gè)子類(lèi):Error和Exception,Error表示應(yīng)用程序本身無(wú)法克服和恢復(fù)的一種嚴(yán)重問(wèn)題,程序只有死的份了,例如,說(shuō)內(nèi)存溢岀和線(xiàn)程死鎖等系統(tǒng)問(wèn)題。Exception表示程序還能夠克服和恢復(fù)的問(wèn)題,其中又分為系統(tǒng)異常和普通異常,系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問(wèn)題,也就是軟件開(kāi)發(fā) 人員考慮不周所導(dǎo)致的問(wèn)題,軟件使用者無(wú)法克服和恢復(fù)這種問(wèn)題,但在這種問(wèn)題下還可以讓軟件系統(tǒng)繼 續(xù)運(yùn)行或者讓軟件死掉,例如,數(shù)組腳本越界(ArraylndexOutOfBoundsExcepti
19、on ),空指針異常(NullPointerException )、類(lèi)轉(zhuǎn)換異常(ClassCastExceptior);普通異常是運(yùn)行環(huán)境的變化或異常所導(dǎo)致的 問(wèn)題,是用戶(hù)能夠克服的問(wèn)題,例如,網(wǎng)絡(luò)斷線(xiàn),硬盤(pán)空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。java為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強(qiáng)制普通異常必須try.catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱(chēng)為checked異常,而系統(tǒng)異??梢蕴幚硪部梢圆惶幚?,所以,編譯器不強(qiáng)制用try.catch處理或用throws聲明,所以系統(tǒng)異常也稱(chēng)為unchecked異常。15. 當(dāng)一個(gè)線(xiàn)程進(jìn)入一個(gè)對(duì)象的
20、一個(gè)synchronized方法后,其它線(xiàn)程是否可進(jìn)入此對(duì)象的其它方法?分幾種情況:1. 其他方法前是否加了 synchronized關(guān)鍵字,如果沒(méi)加,則能。2. 如果這個(gè)方法內(nèi)部調(diào)用了wait,則可以進(jìn)入其他 synchronized方法。3. 如果其他個(gè)方法都加了 synchronized關(guān)鍵字,并且內(nèi)部沒(méi)有調(diào)用wait,則不能。4. 如果其他方法是static,它用的同步鎖是當(dāng)前類(lèi)的字節(jié)碼,與非靜態(tài)的方法不能同步,因?yàn)榉庆o態(tài)的 方法用的是this。16. List 和 Map 區(qū)別?List是存儲(chǔ)單列數(shù)據(jù)的集合,Map是存儲(chǔ)鍵和值這樣的雙列數(shù)據(jù)的集合,List中存儲(chǔ)的數(shù)據(jù)是有順序,并且允
21、許重復(fù);Map中存儲(chǔ)的數(shù)據(jù)是沒(méi)有順序的,其鍵是不能重復(fù)的,它的值是可以有重復(fù)的。17. List、Map Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?首先,List與Set具有相似性,它們都是單列元素的集合,所以,它們有一個(gè)功共同的父接口,叫Collection。Set里面不允許有重復(fù)的元素,所謂重復(fù),即不能有兩個(gè)相等(注意,不是僅僅是相同)的對(duì)象。 Set取元素時(shí),沒(méi)法說(shuō)取第幾個(gè),只能以 Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素。List表示有先后順序的集合,注意,不是那種按年齡、按大小、按價(jià)格之類(lèi)的排序。當(dāng)我們多次調(diào)用add(Obj e)方法時(shí),每次加入的對(duì)象就像火車(chē)站買(mǎi)票有排
22、隊(duì)順序一樣,按先來(lái)后到的順序排序。有時(shí)候,也 可以插隊(duì),即調(diào)用add(int index,Obj e)方法,就可以指定當(dāng)前對(duì)象在集合中的存放位置。一個(gè)對(duì)象可以被反 復(fù)存儲(chǔ)進(jìn)List中,每調(diào)用一次add方法,這個(gè)對(duì)象就被插入進(jìn)集合中一次,其實(shí),并不是把這個(gè)對(duì)象本身 存儲(chǔ)進(jìn)了集合中,而是在集合中用一個(gè)索引變量指向這個(gè)對(duì)象,當(dāng)這個(gè)對(duì)象被add多次時(shí),即相當(dāng)于集合中有多個(gè)索引指向了這個(gè)對(duì)象,如圖x所示。List除了可以以Iterator接口取得所有的元素,再逐一遍歷各個(gè)元素之外,還可以調(diào)用 get(index i)來(lái)明確說(shuō)明取第幾個(gè)。Map與List和Set不同,它是雙列的集合,其中有 put方法,定
23、義如下:put(obj key,obj value),每次 存儲(chǔ)時(shí),要存儲(chǔ)一對(duì) key/value,不能存儲(chǔ)重復(fù)的key,這個(gè)重復(fù)的規(guī)則也是按equals比較相等。取則可以根據(jù)key獲得相應(yīng)的value,即get(Object key)返回值為key所對(duì)應(yīng)的value。另外,也可以獲得所有的key的結(jié)合,還可以獲得所有的value的結(jié)合,還可以獲得 key和value組合成的Map.Entry對(duì)象的集合。List以特定次序來(lái)持有元素,可有重復(fù)元素。Set無(wú)法擁有重復(fù)元素,內(nèi)部排序。Map保存key-value值,value可多值。18. 說(shuō)出一些常用的類(lèi),包,接口,請(qǐng)各舉 5個(gè)要讓人家感覺(jué)你對(duì)
24、java ee開(kāi)發(fā)很熟,所以,不能僅僅只列core java中的那些東西,要多列你在做 ssh項(xiàng)目中涉及的那些東西。就寫(xiě)你最近寫(xiě)的那些程序中涉及的那些類(lèi)。常用的類(lèi):BufferedReader BufferedWriter FileReader FileWirter String Integerjava.util.Date, System, Class, List,HashMap常用的包:java .l angjava.io java.util java.sql ,javax.servlet,org.apache.strtuts.action,org.hibernate常用的接口: Remot
25、e List Map DocumentNodeList ,Servlet,HttpServletRequest,HttpServletResponse,Transaction(Hibernate)、 Session(Hibernate),HttpSession19. JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?JSP是 Servlet技術(shù)的擴(kuò)展,本質(zhì)上是 Servlet的簡(jiǎn)易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是類(lèi)servlet。 Servlet和JSP最主要的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的 HTML里分離開(kāi)來(lái)。而JSP的
26、情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件。JSP則重于視圖, Servlet主要用于控制邏輯。20. 你們的項(xiàng)目總金額多少,多少人開(kāi)發(fā),總共花了多少個(gè)月?像巴巴運(yùn)動(dòng)網(wǎng)這種規(guī)模的項(xiàng)目,可以說(shuō)是4、5個(gè)人、開(kāi)發(fā)了 4、5個(gè)月,費(fèi)用則是4、50萬(wàn)。按每人每月兩萬(wàn)收入去計(jì)算,就差不多了。21. 你們公司使用的代碼配置管理工具是什么?除了說(shuō)以前使用cvs,現(xiàn)在新項(xiàng)目使用svn 了,還簡(jiǎn)要說(shuō)一下使用的過(guò)程,如果有可能,還說(shuō)說(shuō)倉(cāng)庫(kù)的 概念和如何使用鎖之類(lèi)的細(xì)節(jié)。22. Struts2 的工作流程1、 客戶(hù)端瀏覽器發(fā)出HTTP請(qǐng)求。2、根據(jù) web.xml配置,該請(qǐng)求被 FilterDis
27、patcher接收。3、 根據(jù)struts.xml配置,找到需要調(diào)用的 Action類(lèi)和方法,并通過(guò)loC方式,將值注入給 Aciton。4、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗(yàn)證。5、 Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到對(duì)應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到相應(yīng)頁(yè)面。6、返回HTTP響應(yīng)到客戶(hù)端瀏覽器。SpringMVC與 Struts2的比較:機(jī)制:spring mvc的入口是servlet ,而struts2 是filter,這樣就導(dǎo)致了二者的機(jī)制不同,這里就牽涉到servlet 和 filter的區(qū)別了。性能:spring 會(huì)稍微比strut
28、s 快。spring mvc是基于方法的設(shè)計(jì),而 sturts 是基于類(lèi),每次發(fā)一次請(qǐng)求 都會(huì)實(shí)例一個(gè)action,每個(gè)action都會(huì)被注入屬性,而 spring基于方法,粒度更細(xì),但要小心把握像在servlet控制數(shù)據(jù)一樣。spring3 mvc是方法級(jí)別的攔截,攔截到方法后根據(jù)參數(shù)上的注解,把request數(shù)據(jù)注入進(jìn)去,在spring3 mvc中,一個(gè)方法對(duì)應(yīng)一個(gè) request上下文。而struts2 框架是類(lèi)級(jí)別的攔截, 每次來(lái)了請(qǐng)求就創(chuàng)建一個(gè) Action,然后調(diào)用setter getter 方法把request中的數(shù)據(jù)注入;struts2 實(shí)際 上是通過(guò)setter getter
29、 方法與request打交道的;struts2 中,一個(gè) Action 對(duì)象對(duì)應(yīng)一個(gè) request 上下 文。參數(shù)傳遞:struts是在接受參數(shù)的時(shí)候,可以用屬性來(lái)接受參數(shù),這就說(shuō)明參數(shù)是讓多個(gè)方法共享的。設(shè)計(jì)思想上:struts更加符合oop的編程思想,spring 就比較謹(jǐn)慎,在servlet上擴(kuò)展。intercepter的實(shí)現(xiàn)機(jī)制:有 以自己的interceptor 機(jī)制,spring mvc用的是獨(dú)立的AOF方式。這樣導(dǎo)致 struts的配置文件量 還是比spring mvc大,雖然struts的配置能繼承,所以我覺(jué)得論使用上來(lái)講,spring mvc使用更加簡(jiǎn)潔,開(kāi)發(fā)效率Sprin
30、g MVC確實(shí)比struts2 高。spring mvc 是方法級(jí)別的攔截,一個(gè)方法對(duì)應(yīng)一個(gè)request上下文,而方法同時(shí)又跟一個(gè) url對(duì)應(yīng),所以說(shuō)從架構(gòu)本身上 spring3 mvc就容易實(shí)現(xiàn)restful url。struts2 是類(lèi)級(jí)別的攔截,一個(gè)類(lèi)對(duì)應(yīng)一個(gè)request上下文;實(shí)現(xiàn)restful url要費(fèi)勁,因?yàn)閟truts2 action的一個(gè)方法可以對(duì)應(yīng)一個(gè)url ;而其類(lèi)屬性卻被所有方法共享,這也就無(wú)法用注解或其他方式標(biāo)識(shí)其所屬方法 了。spring3mvc的方法之間 基本上獨(dú)立的,獨(dú)享 request response 數(shù)據(jù),請(qǐng)求數(shù)據(jù)通過(guò)參數(shù)獲取,處理 結(jié)果通過(guò)Model
31、Map交回給框架方法之間不共享變量,而struts2搞的就比較亂,雖然方法之間也是獨(dú)立的,但其所有Action變量是共享的,這不會(huì)影響程序運(yùn)行,卻給我們編碼,讀程序時(shí)帶來(lái)麻煩??偨Y(jié):Strutl目前已經(jīng)很少再用,個(gè)人感覺(jué) springMVC在易用性上要優(yōu)于 struts2.struts2 和springMVC在 性能方面是不分伯仲,每個(gè)陣營(yíng)都有自己的測(cè)試數(shù)據(jù),很難說(shuō)哪一個(gè)更優(yōu)秀。以上資料部分摘自網(wǎng)絡(luò),尊 重原作者版權(quán),分享給更多的讀者。Hibernate 與 MyBatis 的比較第一章 Hibernate 與 MyBatisHibernate是當(dāng)前最流行的 0/R mapping框架,它出身
32、于,現(xiàn)在已經(jīng)成為Jboss的一部分。Mybatis 是另外一種優(yōu)秀的 0/R mapping框架。目前屬于apache的一個(gè)子項(xiàng)目。1.1 Hibernate 簡(jiǎn)介Hibernate對(duì)數(shù)據(jù)庫(kù)結(jié)構(gòu)提供了較為完整的封裝,Hibernate的0/R Mapping實(shí)現(xiàn)了 POJO和數(shù)據(jù)庫(kù)表之間的映射,以及SQL的自動(dòng)生成和執(zhí)行。程序員往往只需定義好了 POJC到數(shù)據(jù)庫(kù)表的映射關(guān)系,即可通 過(guò)Hibernate提供的方法完成持久層操作。程序員甚至不需要對(duì)SQL的熟練掌握,Hibernate/OJB會(huì)根據(jù)制定的存儲(chǔ)邏輯,自動(dòng)生成對(duì)應(yīng)的 SQL并調(diào)用JDBC接口加以執(zhí)行。1.2 MyBatis 簡(jiǎn)介iBA
33、TIS的著力點(diǎn),則在于 POJC與 SQL之間的映射關(guān)系。然后通過(guò)映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定POJO相對(duì)Hibernate “0/R”而言,iBATIS是一種“ Sql Mapping的ORM實(shí)現(xiàn)。第二章開(kāi)發(fā)對(duì)比開(kāi)發(fā)速度Hibernate的真正掌握要比Mybatis來(lái)得難些。Mybatis框架相對(duì)簡(jiǎn)單很容易上手,但也相對(duì)簡(jiǎn)陋些。個(gè)人覺(jué)得要用好Mybatis還是首先要先理解好 Hibernate 。開(kāi)發(fā)社區(qū)Hibernate 與Mybatis都是流行的持久層開(kāi)發(fā)框架,但Hibernate開(kāi)發(fā)社區(qū)相對(duì)多熱鬧些,支持的工具也多,更新也快,當(dāng)前最高版本 4.1.8。
34、而Mybatis相對(duì)平靜,工具較少,當(dāng)前最高版本 3.2。開(kāi)發(fā)工作量Hibernate和MyBatis都有相應(yīng)的代碼生成工具。可以生成簡(jiǎn)單基本的DAO層方法。針對(duì)高級(jí)查詢(xún),Mybatis需要手動(dòng)編寫(xiě)SQL語(yǔ)句,以及 ResultMap。而Hibernate有良好的映射機(jī)制, 開(kāi)發(fā)者無(wú)需關(guān)心SQL的生成與結(jié)果映射,可以更專(zhuān)注于業(yè)務(wù)流程。第三章系統(tǒng)調(diào)優(yōu)對(duì)比Hibernate的調(diào)優(yōu)方案1. 制定合理的緩存策略;2. 盡量使用延遲加載特性;3. 采用合理的Session管理機(jī)制;4. 使用批量抓取,設(shè)定合理的批處理參數(shù)( batch_size );5. 進(jìn)行合理的0/R映射設(shè)計(jì)Mybatis調(diào)優(yōu)方案M
35、yBatis在Session方面和Hibernate 的Session生命周期是一致的,同樣需要合理的Session管理機(jī)制。MyBatis同樣具有二級(jí)緩存機(jī)制。MyBatis可以進(jìn)行詳細(xì)的 SQL優(yōu)化設(shè)計(jì)。SQL優(yōu)化方面Hibernate的查詢(xún)會(huì)將表中的所有字段查詢(xún)出來(lái),這一點(diǎn)會(huì)有性能消耗。Hibernate也可以自己寫(xiě)SQL來(lái)指定需要查詢(xún)的字段,但這樣就破壞了Hibernate開(kāi)發(fā)的簡(jiǎn)潔性。而 Mybatis的SQL是手動(dòng)編寫(xiě)的,所以可以按需求指定查詢(xún)的字段。Hibernate HQL語(yǔ)句的調(diào)優(yōu)需要將 SQL打印出來(lái),而Hibernate的SQL被很多人嫌棄因?yàn)樘罅恕?MyBatis 的
36、SQL是自己手動(dòng)寫(xiě)的所以調(diào)整方便。但Hibernate具有自己的日志統(tǒng)計(jì)。Mybatis本身不帶日志統(tǒng)計(jì),使用Log4j進(jìn)行日志記錄。擴(kuò)展性方面Hibernate與具體數(shù)據(jù)庫(kù)的關(guān)聯(lián)只需在XML文件中配置即可,所有的HQL語(yǔ)句與具體使用的數(shù)據(jù)庫(kù)無(wú)關(guān),移植性很好。MyBatis項(xiàng)目中所有的SQL語(yǔ)句都是依賴(lài)所用的數(shù)據(jù)庫(kù)的,所以不同數(shù)據(jù)庫(kù)類(lèi)型的支持 不好。第四章對(duì)象管理與抓取策略對(duì)象管理Hibernate 是完整的對(duì)象/關(guān)系映射解決方案,它提供了對(duì)象狀態(tài)管理( state management的功能, 使開(kāi)發(fā)者不再需要理會(huì)底層數(shù)據(jù)庫(kù)系統(tǒng)的細(xì)節(jié)。也就是說(shuō),相對(duì)于常見(jiàn)的JDBC/SQL持久層方案中需要管
37、理 SQL語(yǔ)句,Hibernate采用了更自然的面向?qū)ο蟮囊暯莵?lái)持久化Java 應(yīng)用中的數(shù)據(jù)。換句話(huà)說(shuō),使用Hibernate的開(kāi)發(fā)者應(yīng)該總是關(guān)注對(duì)象的狀態(tài)(state ),不必考慮 SQL語(yǔ)句的執(zhí)行。這部分細(xì)節(jié)已經(jīng)由Hibernate掌管妥當(dāng),只有開(kāi)發(fā)者在進(jìn)行系統(tǒng)性能調(diào)優(yōu)的時(shí)候才需要進(jìn)行了解。而MyBatis在這一塊沒(méi)有文檔說(shuō)明,用戶(hù)需要對(duì)對(duì)象自己進(jìn)行詳細(xì)的管理。抓取策略Hibernate對(duì)實(shí)體關(guān)聯(lián)對(duì)象的抓取有著良好的機(jī)制。對(duì)于每一個(gè)關(guān)聯(lián)關(guān)系都可以詳細(xì)地設(shè)置是否延遲加載,并且提供關(guān)聯(lián)抓取、查詢(xún)抓取、子查詢(xún)抓取、批量抓取四種模式。它是詳細(xì)配置和處理的。而Mybatis的延遲加載是全局配置的。第
38、五章緩存機(jī)制對(duì)比Hibernate 緩存Hibernate 一級(jí)緩存是Session緩存,利用好一級(jí)緩存就需要對(duì)Session的生命周期進(jìn)行管理好。建議在一個(gè)Action操作中使用一個(gè) Session。一級(jí)緩存需要對(duì) Session進(jìn)行嚴(yán)格管理。Hibernate二級(jí)緩存是SessionFactory 級(jí)的緩存。SessionFactory 的緩存分為內(nèi)置緩存和外置緩存。內(nèi)置緩存中存放的是 SessionFactory 對(duì)象的一些集合屬性包含的數(shù)據(jù)(映射元素?fù)?jù)及預(yù)定 SQL語(yǔ)句等),對(duì) 于應(yīng)用程序來(lái)說(shuō),它是只讀的。外置緩存中存放的是數(shù)據(jù)庫(kù)數(shù)據(jù)的副本,其作用和一級(jí)緩存類(lèi)似.二級(jí)緩存除了以?xún)?nèi)存作為
39、存儲(chǔ)介質(zhì)外,還可以選用硬盤(pán)等外部存儲(chǔ)設(shè)備。二級(jí)緩存稱(chēng)為進(jìn)程級(jí)緩存或SessionFactory級(jí)緩存,它可以被所有 session共享,它的生命周期伴隨著SessionFactory的生命周期存在和消亡。MyBatis 緩存MyBatis包含一個(gè)非常強(qiáng)大的查詢(xún)緩存特性,它可以非常方便地配置和定制。MyBatis 3中的緩存實(shí)現(xiàn)的很多改進(jìn)都已經(jīng)實(shí)現(xiàn)了,使得它更加強(qiáng)大而且易于配置。默認(rèn)情況下是沒(méi)有開(kāi)啟緩存的,除了局部的 session緩存,可以增強(qiáng)變現(xiàn)而且處理循環(huán)依賴(lài)也是必須的。要開(kāi)啟二級(jí)緩存,你需要在你的SQL映射文件中添加一行:字面上看就是這樣。這個(gè)簡(jiǎn)單語(yǔ)句的效果如下:1. 映射語(yǔ)句文件中的所
40、有 select語(yǔ)句將會(huì)被緩存。2. 映射語(yǔ)句文件中的所有 insert,update 和 delete語(yǔ)句會(huì)刷新緩存。3. 緩存會(huì)使用Least Recently Used(LRU,最近最少使用的)算法來(lái)收回。4. 根據(jù)時(shí)間表(比如 no Flush Interval, 沒(méi)有刷新間隔),緩存不會(huì)以任何時(shí)間順序來(lái)刷新。5. 緩存會(huì)存儲(chǔ)列表集合或?qū)ο螅o(wú)論查詢(xún)方法返回什么)的1024個(gè)引用。6. 緩存會(huì)被視為是read/write( 可讀/可寫(xiě))的緩存,意味著對(duì)象檢索不是共享的,而 且可以安全地被調(diào)用者修改,而不干擾其他調(diào)用者或線(xiàn)程所做的潛在修改。所有的這些屬性都可以通過(guò)緩存元素的屬性來(lái)修改。比
41、如:這個(gè)更高級(jí)的配置創(chuàng)建了一個(gè)FIFO 緩存,并每隔 60秒刷新,存數(shù)結(jié)果對(duì)象或列表的512個(gè)引用,而且返回的對(duì)象被認(rèn)為是只讀的,因此在不同線(xiàn)程中的調(diào)用者之間修改它們會(huì)導(dǎo)致沖突??捎玫氖栈夭呗杂?,默認(rèn)的是LRU:1. LRU - 最近最少使用的:移除最長(zhǎng)時(shí)間不被使用的對(duì)象。2. FIFO-先進(jìn)先岀:按對(duì)象進(jìn)入緩存的順序來(lái)移除它們。3. SOFT-軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對(duì)象。4. WEAK-弱引用:更積極地移除基于垃圾收集器狀態(tài)和弱引用規(guī)則的對(duì)象。flushlnterval(刷新間隔)可以被設(shè)置為任意的正整數(shù),而且它們代表一個(gè)合理的毫秒形式的時(shí)間段。默認(rèn)情況是不設(shè)置,也就是
42、沒(méi)有刷新間隔,緩存僅僅調(diào)用語(yǔ)句時(shí)刷新。size(引用數(shù)目)可以被設(shè)置為任意正整數(shù),要記住你緩存的對(duì)象數(shù)目和你運(yùn)行環(huán)境的可用內(nèi)存資源數(shù)目。默認(rèn)值是1024。readOnly(只讀)屬性可以被設(shè)置為true 或false。只讀的緩存會(huì)給所有調(diào)用者返回緩存對(duì)象的相同實(shí)例。因此這些對(duì)象不能被修改。這提供了很重要的性能優(yōu)勢(shì)。可讀寫(xiě)的緩存會(huì)返回緩存對(duì)象的拷貝 (通過(guò)序列化)。這會(huì)慢一些,但是安全,因此默認(rèn)是false。相同點(diǎn)Hibernate和Mybatis的二級(jí)緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過(guò)實(shí)現(xiàn)你自己的緩存或?yàn)槠渌谌骄彺娣桨?,?chuàng)建適配器來(lái)完全覆蓋緩存行為。不同點(diǎn)Hibernate的二級(jí)
43、緩存配置在SessionFactory 生成的配置文件中進(jìn)行詳細(xì)配置,然后再在具體的表-對(duì)象映射中配置是那種緩存。MyBatis的二級(jí)緩存配置都是在每個(gè)具體的表-對(duì)象映射中進(jìn)行詳細(xì)配置,這樣針對(duì)不同的表可以自定義不同的緩存機(jī)制。并且Mybatis可以在命名空間中共享相同的緩存配置和實(shí)例,通過(guò)Cache-ref來(lái)實(shí)現(xiàn)。兩者比較因?yàn)镠ibernate對(duì)查詢(xún)對(duì)象有著良好的管理機(jī)制,用戶(hù)無(wú)需關(guān)心SQL所以在使用二級(jí)緩存時(shí)如果出現(xiàn)臟數(shù)據(jù),系統(tǒng)會(huì)報(bào)岀錯(cuò)誤并提示。而MyBatis在這一方面,使用二級(jí)緩存時(shí)需要特別小心。如果不能完全確定數(shù)據(jù)更新操作的波及范圍, 避免Cache的盲目使用。否則,臟數(shù)據(jù)的出現(xiàn)會(huì)給
44、系統(tǒng)的正常運(yùn)行帶來(lái)很大的隱患。第六章 Hibernate與Mybatis對(duì)比總結(jié)兩者相同點(diǎn)Hibernate 與 MyBatis 都可以是通過(guò) SessionFactoryBuider 由 XML配置文件生成 SessionFactory , 然后由SessionFactory 生成Session,最后由Session來(lái)開(kāi)啟執(zhí)行事務(wù)和 SQL語(yǔ)句。其中 SessionFactoryBuider , SessionFactory , Session 的生命周期都是差不多的。Hibernate 和MyBatis都支持JDBC和JTA事務(wù)處理。Mybatis 優(yōu)勢(shì)MyBatis可以進(jìn)行更為細(xì)致的 SQL優(yōu)化,可以減少查詢(xún)字段MyBatis容易掌握,而 Hibernate 門(mén)檻較高。Hibernate 優(yōu)勢(shì)Hibernate的DAO層開(kāi)發(fā)比MyBatis簡(jiǎn)單,Mybatis需要維護(hù)SQL和結(jié)果映射。Hibernate對(duì)對(duì)象的維護(hù)和緩存要比MyBatis好,對(duì)增刪改查的對(duì)象的維護(hù)要方便。Hibernate數(shù)據(jù)庫(kù)移植性很好,MyBatis的數(shù)據(jù)庫(kù)移植性不好,不同的數(shù)據(jù)庫(kù)需要寫(xiě)不同SQLHibernate有更好的二級(jí)緩存機(jī)制,可以使用第三方緩存。MyBatis本身提供的緩存機(jī)制不佳。他人總結(jié)Hibernate功能強(qiáng)大,數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 下肢疾病患者的護(hù)理課件
- 在線(xiàn)教育平臺(tái)模式案例分析課件
- 《王悅婷教學(xué)設(shè)計(jì)》課件
- 《奇妙顯微攝影》課件
- 習(xí)作:縮寫(xiě)故事 教學(xué)設(shè)計(jì)-2024-2025學(xué)年統(tǒng)編版語(yǔ)文五年級(jí)上冊(cè)
- 《賽事組織與管理》課件
- Unit 3 Families celebrate together Lesson 16 教學(xué)設(shè)計(jì) 2024-2025學(xué)年冀教版英語(yǔ)八年級(jí)上冊(cè)
- 2024八年級(jí)科學(xué)上冊(cè)實(shí)驗(yàn)第二篇重要實(shí)驗(yàn)突破實(shí)驗(yàn)15研究串并聯(lián)電路的電流特點(diǎn)習(xí)題課件浙教版
- 星辰廣告推廣策略提案牌-房地產(chǎn)策劃文案課件
- 《講述神話(huà)的密林》課件
- 編紙條 市賽獲獎(jiǎng) 完整版課件
- 玩具公司職位說(shuō)明書(shū)匯編
- 平面設(shè)計(jì)創(chuàng)意與制作課件
- 化學(xué)專(zhuān)業(yè)英語(yǔ)元素周期表
- 新湘版小學(xué)科學(xué)四年級(jí)下冊(cè)教案(全冊(cè))
- Q∕SY 06349-2019 油氣輸送管道線(xiàn)路工程施工技術(shù)規(guī)范
- 腎內(nèi)科臨床診療規(guī)范(南方醫(yī)院)
- 實(shí)驗(yàn)心理學(xué)課件(周愛(ài)保博士版)
- 04 第三章 環(huán)境污染物的生物轉(zhuǎn)運(yùn)和生物轉(zhuǎn)化 -毒物動(dòng)力學(xué)
- 珍愛(ài)生命 安全第一 中小學(xué)主題教育班會(huì)
- 殺蟲(chóng)雙(單)合成反應(yīng)的研究及其工藝條件的優(yōu)化
評(píng)論
0/150
提交評(píng)論