Java面試寶典-流行的框架與新技術(shù)_第1頁
Java面試寶典-流行的框架與新技術(shù)_第2頁
Java面試寶典-流行的框架與新技術(shù)_第3頁
Java面試寶典-流行的框架與新技術(shù)_第4頁
Java面試寶典-流行的框架與新技術(shù)_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、java面試寶典2012版七. 流行的框架與新技術(shù)11、談?wù)勀銓truts的理解。12、談?wù)勀銓ibernate的理解。23、aop的作用。34你對spring的理解。35、談?wù)?struts 中 的 action servlet 0 46、struts優(yōu)缺點 優(yōu)點:1.實現(xiàn)mvc模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實現(xiàn)47、struts的應(yīng)用(如struts架構(gòu))58、說說 struts 1 與 struts2 的區(qū)別。59、hibernate 中的 update。和 saveorupdate()的區(qū)別,session 的 load()和 get()的區(qū)別。 610簡述hiberna

2、te和jdbc的優(yōu)缺點?如何書寫一個one to many配置文件.611 ibatis 與 hibernate 冇什么不同?612寫hibernate的一對多和多對一雙向關(guān)聯(lián)的orm配置?69、 hibernate 的 inverse 屬性h勺作用?613、在dao中如何體現(xiàn)dao設(shè)計模式?714、spring+hibernate屮委托方案怎么配置?715、spring+hibernate中委托方案怎么配置?716、hibernate進行多表查詢每個表中各取幾個字段,也就是說查詢出來的結(jié)果集沒有一個實體類與之對應(yīng)如何解決;717、介紹一下hibernate的二級緩存718、spring的依賴

3、注入是什么意思?給_個bean的message屬性,字符串類型,注入值為“hello"的xml配置文件該怎么寫?919、jdo是什么?920、什么是 spring fl勺 ioc aop1021、struts的工作流程! 1022、spring 與 ejb 的區(qū)別! 10七.流行的框架與新技術(shù)1、談?wù)勀銓truts的理解。答:1. struts是一個按mvc模式設(shè)計的web層框架,其實它就是一個人大的servlet,這個servlet 名為actionservlet,或是actionservlet的子類。我們m以在web.xml文件中將符合某種特征 的所冇請求交給這個servlet

4、處理,這個servlet再參照一個配置文件(通常為/web-inf/struts-config.xml)將各個請求分別分配給不同的action去處理。一個擴展知識點:struts的配置文件可以有多個,可以按模塊配置各白的配置文件,這樣可 以防止配置文件的過度膨脹;2. actionservlet把請求交給action去處理之前,會將請求參數(shù)封裝成一個formbean對象(就 是一個java類,這個類中的每個屬性對應(yīng)一個請求參數(shù)),封裝成一個什么樣的fonnbean 對象呢?看配置文件。3. 要說明的是,actionservlet把formbean對象傳遞給action的execute方法之前,

5、可能會調(diào) 用formbean的validate方法進行校驗,只有校驗通過后才將這個formbean對象傳遞給action 的execute方法,否則,它將返回一個錯誤頁而,這個錯誤頁面由inpu(屬性指定,(看配置 文件)作者為什么將這里命名為input屬性,而不是eiro!屬性,我們后面結(jié)合實際的運行效 果進行分析。4. action執(zhí)彳亍完后要返冋顯示的結(jié)果視圖,這個結(jié)果視圖是用-個actionforward對象來表 示的,actionforward対象通過struts-config.xml配置文件中的配置關(guān)聯(lián)到某個jsp頁血,因為 程序屮使用的是在struts-config.xml配遙文

6、件為jsp頁面設(shè)iff的邏輯名,這樣町以實現(xiàn)action 程序代碼與返回的jsp頁面名稱的解耦。你對stmts可能還有自己的應(yīng)用方面的經(jīng)驗,那也耍一并說出來。2、談?wù)勀銓ibernate的理解。答:1. 面向?qū)﹀柙O(shè)計的軟件內(nèi)部運行過程可以理解成就是在不斷創(chuàng)建各種新對象、建立對象z 間的關(guān)系,調(diào)用對象的方法來改變各個對象的狀態(tài)和對象消亡的過程,不管程序運行的過程 和操作怎么樣,木質(zhì)上都是要得到一個結(jié)果,程序上一個時刻和下一個時刻的運行結(jié)果的差 界就表現(xiàn)在內(nèi)存中的對彖狀態(tài)發(fā)生了變化。2. 為了在關(guān)機和內(nèi)存空間不夠的狀況下,保持程序的運行狀態(tài),需要將內(nèi)存中的對象狀態(tài)保 存到持久化設(shè)備和從持久化設(shè)備

7、屮恢復(fù)出對象的狀態(tài),通常都是保存到關(guān)系數(shù)據(jù)庫來保存人 最對象信息。從java程序的運行功能上來講,保存對象狀態(tài)的功能相比系統(tǒng)運行的其他功 能來說,應(yīng)該是一個很不起眼的附屬功能,java采jij jdbc來實現(xiàn)這個功能,這個不起眼的 功能卻要編寫大量的代碼,而做的事情僅僅是保存對彖和恢復(fù)對彖,并幾那些大量的jdbc 代碼并沒有什么技術(shù)含量,基本上是采用一套例行公事的標準代碼模板來編寫,是一種苦活 和重復(fù)性的工作。3. 通過數(shù)據(jù)庫保存java程序運行時產(chǎn)牛的對象和恢復(fù)対象,其實就是實現(xiàn)了 java対象與關(guān) 系數(shù)據(jù)庫記錄的映射關(guān)系,稱為orm(即object relation mapping),人們

8、可以通過封裝jdbc 代碼來實現(xiàn)了這種功能,封裝出來的產(chǎn)品稱之為orm框架,hibernate就是其屮的一種流行 orm框架。使用hibernate 架,不用寫jdbc代碼,僅僅是調(diào)用一個save方法,就可以 將對象保存到關(guān)系數(shù)據(jù)庫中,僅僅是調(diào)用一個get方法,就可以從數(shù)據(jù)庫小加載出一個對象。4. 使用hibernate的基本流程思配置configuration對象、產(chǎn)生sessionfactory創(chuàng)建session 對彖,啟動事務(wù),完成crud操作,提交事務(wù),關(guān)閉sessiono5. 使用hibernate時,先要配置hibemate.cfg.xml文件,其中配置數(shù)據(jù)席連接信息和方言等, 還

9、要為每個實體配置相應(yīng)的hbm.xml文件,hibemate.cfg.xml文件中需要登記每個hbm.xml 文件。6在應(yīng)用hibernate時,重點要了解session的緩存原理,級聯(lián),延遲加載和hql查詢。3、aop的作用。4、你對spring的理解。1 .spring實現(xiàn)了工廠模式的工廠類(在這里有必要解釋清楚什么是工廠模式),這個類名為 beanfactoiy (實際上是一個接 口),在程序中通常 beanfactory 的子類 applicationcontexto spring相當于一個人的工廠類,在其配置文件屮通過<bean>元素配置用于創(chuàng)建實例對象的類 名和實例對彖的

10、屬性。2. spring提供了對ioc良好支持,ioc是一種編程思想,是一種架構(gòu)藝術(shù),利用這種思想 可以很好地實現(xiàn)模塊之間的解耦。ioc也稱為di (depency injection),什么叫依賴注入呢? 讐如,class programmercomputer computer = null;public void code()/computer computer = new ibmcomputer();/computer computer = bcanfacotry.gctcomputcr();computer.write();public void setcomputer(compute

11、r computer)puter = computer;另外兩種方式都山依賴,第一個直接依賴于目標類,第二個把依賴轉(zhuǎn)移到工廠上,第三個徹 底與目標和工廠解耦了。在spring的配置文件中配査片段如下:<bean id二'computer" class二"erview.computer'、</bean><bean id=,programmef, erview.programmef<property name=computer ref=computerx/property&

12、gt;</bean>3. spring捉供了對aop技術(shù)的良好封裝,aop稱為面向切面編程,就是系統(tǒng)中冇很多各 不相干的類的方法,在這些眾多方法中耍加入某種系統(tǒng)功能的代碼,例如,加入日志,加入 權(quán)限判斷,加入界常處理,這種應(yīng)用稱為aopo實現(xiàn)aop功能采用的是代理技術(shù),客八端 程序不再調(diào)用目標,而調(diào)用代理類,代理類與目標類對外具有相同的方法聲明,有兩種方式 可以實現(xiàn)相同的方法聲明,一是實現(xiàn)相同的接口,二是作為目標的子類在,jdk屮采用proxy 類產(chǎn)生動態(tài)代理的方式為某個接口生成實現(xiàn)類,如果要為某個類生成了類,則町以用cgli bo在生成的代理類的方法屮加入系統(tǒng)功能和調(diào)用目標類的相

13、應(yīng)方法,系統(tǒng)功能的代理以 advice對象進行提供,顯然要創(chuàng)建出代理對象,至少需要目標類和advice類。spring捉供 了這種支持,只需耍在spring配置文件中配置這兩個元素即可實現(xiàn)代理和aop功能,例如, <bean id=,'poxy" type=org.spring.framework.aop.proxybeanfactory><property name=targetm ref=*></property><property name=advisof ref="、v/propeily></bcan&g

14、t;5、談?wù)?struts 中的 action servlet o6、struts優(yōu)缺點優(yōu)點:1. 實現(xiàn)mvc模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實現(xiàn).2. 有豐富的陀可以用,struts的標記庫(taglib),如能靈活動用,則能人人提高開發(fā)效率3. 頁面導(dǎo)航使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分z間的聯(lián)系,這 對于后期的維護冇著莫大的好處。尤其是當另一批開發(fā)者接手這個項冃時,這種優(yōu)勢體現(xiàn)得 更加明顯。4. 提供exception處理機制.5. 數(shù)據(jù)庫鏈接池管理6. 支持i18n缺點一、轉(zhuǎn)到展示層時,需要配s forward,如果有十個展示層的jsp,需要配置十次

15、stmts,而 且還不包括有時候目錄、文件變更,需要重新修改forward,注意,每次修改配置之后, 要求重新部署整個項忖,而tomcatc這樣的服務(wù)器,還必須重新啟動服務(wù)器二、二、struts的action必需是threadsafe方式,它僅僅允許一個實例去處理所有-的請 求。所以action用到的所有的資源都必需統(tǒng)一同步,這個就引起了線程安全的問題。三、測試不方便.struts的每個action都同web層耦合在一起,這樣它的測試依賴于web 容器,單元測試也很難實現(xiàn)。不過有一個junii的擴展工具struts testcase可以實現(xiàn)它 的單元測試。四、類型的轉(zhuǎn)換.struts的form

16、bean把所有的數(shù)據(jù)都作為string類型,它可以便用工具 commons-beanutils進行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在class級別,而轉(zhuǎn)化的類型是 不可配置的。類型轉(zhuǎn)化時的錯謀信息返回給用戶也是非常怵i難的。五、對servlet的依賴性過強.struts處理action時必需要依賴servletrequest和 scrvlctrcsponsc,所冇它擺脫不 f servlet 容器。六、前端表達式語言方面.struts集成了 jstl,所以它主要使用jstl的表達式語言來獲取 數(shù)據(jù)。町是jstl的表達式語言在collection和索引屬性方面處理顯得很弱。七、對action執(zhí)行的控制困

17、難.struts創(chuàng)建一個action,如果想控制它的執(zhí)行順序?qū)?常閑難。甚至你要重新去寫servlet來實現(xiàn)你的這個功能需求。八、對action執(zhí)行前和后的處理.struts處理action的時候是慕于class的hierarchies,很 難在action處理前和后進行操作。九、對事件支持不夠.在struts中,實際是一個表單form對應(yīng)一個action類(或 dispatchaction),換一句話說:在struts中實際是一個表單只能 對應(yīng)一個事件,struts 這種事件方式稱為 application event, application event 和 component eve

18、nt 相比是一種粗粒度的爭件7、struts的應(yīng)用(女口 struts架構(gòu))struts是采用java servlet/javaserver pages技術(shù),開發(fā)web應(yīng)用程序的開放源碼的 frameworko采用struts能開發(fā)岀基于mvc(model-view-controller)設(shè)計模式的應(yīng)用構(gòu) 架。struts冇如下的主要功能:一.包含一個controller servlet,能將川戶的請求發(fā)送 到相應(yīng)的action對彖。一.jsp 口由tag庫,并在controller servlet中提供關(guān)聯(lián)支持, 幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。三.捉供了一系列實用對象:xml處理、通過jav

19、a reflection apis白動處理javabeans屬性、國際化的提示和消息。8、說說strutsl與struts2的區(qū)別。1.都是mvc的web框架,2 strutsl的老牌框架,應(yīng)用很廣泛,冇很好的群眾基礎(chǔ),使用它開發(fā)風險很小,成本更 低! struts2雖然基于這個框架,但是應(yīng)用群眾并多,相對不成熟,未知的風險和變化 很多,開發(fā)人員相対不好招,使用它開發(fā)項目的風險系數(shù)更大,用人成本更高!3. struts2畢竟是站在前輩的棊礎(chǔ)設(shè)計出來,它會改善和完善strutsl中的一些缺陷,struts 1 屮一些懸而未決問題在struts2得到了解決。4. strutsl的前端控制器是一個s

20、ervlet,名稱為actionservlet, struts2的前端控制器是一 個 filter ,在 struts2.0 中叫 filterdispatcher ,在 struts2.1 中叫 stmtsprepareandexecutefiltero5. strutsl的action需要繼承action類,struts2的action可以不繼承任何類;struts 1對同 一個路徑的所有請求共享一個action實例,struts2對同一個路徑的每個詰求分別使用 一個獨立action實例對象,所冇對于struts2的action不用考慮線程安全問題。6. 在strutsl中使用formbe

21、an封裝請求參數(shù),在struts2中直接使用action的屬性來封裝 請求參數(shù)。7. strutsl 'i1的多個業(yè)務(wù)方法放在一個action ll時(即繼承dispatchaction時),要么都校 驗,耍么都不校驗;對于struts2,可以指定只對某個方法進行校驗,當一個action繼 承actionsupport fl.在這個類中只編寫了 validatcxxx()方法,那么則只對xxx()方法 進行校驗。(一個請求來了的執(zhí)行流程進行分析,struts2是自動支持分模塊開發(fā),并可以不同模塊 設(shè)置不同的url前綴,這是通過package的namespace來實現(xiàn)的;struts2是

22、支持多種類 型的視圖;struts2的視圖地址可以是動態(tài)的,即視圖的名稱是支持變量方式的,舉例, 論壇發(fā)帖失敗后冋來還要傳遞boardid。視圖內(nèi)容顯示方而:它的標簽用。即1,要el 強大很多,在國際化方面支持分模塊管理,兩個模塊用到同樣的key, xj-應(yīng)不同的消 息;)與struts 1不同,struts2對用戶的每一次請求都會創(chuàng)建一個action,所以struts2中的action 是線程安全的。給我印彖最深刻的是:struts配置文件中的redirect視圖的url不能接受參數(shù),而struts2 配置文件屮的redirect視圖可以接受參數(shù)。9>hibernate 中的 upda

23、te()和 saveorupdate()的區(qū)另lj, session 的load()和get()的區(qū)別。10、簡述hibernate和jdbc的優(yōu)缺點?如何書寫一個 one to many配置文件.11、ibatis 與 hibernate 有什么不同?相同點:屏蔽jdbc api的底層訪問細節(jié),使用我們不用與jdbc api打交道,就可以訪問數(shù)據(jù)。 jdbc api編程流程固定,還將sql語句與java代碼混雜在了一起,經(jīng)常需要拼湊sql語句,細 節(jié)很繁瑣。ibatis的好處:屏蔽jdbc api的底層訪問細節(jié);將sql語句與java代碼進行分離;提供了將結(jié) 果集h動封裝稱為實體對象和對象的

24、集合的功能,queryforlist返回對象集合,用 queryforobject返回單個對象;提供了自動將實體対象的屬性傳遞給sql語句的參數(shù)。hibernate是一個全自動的orm映射匚具,它可以自動生成sql語彳ij,iba(is需要我們自己在xml 配置文件中寫sql語句,hibernate要比ibatis功能負責和強人很多。因為hibernate自動牛:成 sql語句,我們無法控制該語句,我們就無法丈寫特定的高效率的sql。對于一些不太復(fù)朵的 sql杳詢,hibernate可以很好幫我們完成,但是,對于特別復(fù)雜的杳詢,hibernate就很難適 應(yīng)了,這時候用ibatis就是不錯的選

25、擇,因為ibatis還是由我們自己寫sql語句。12>寫hibernate的一對多和多對一雙向關(guān)聯(lián)的orm配置?9、hibernate 的 inverse 屬性的作用?解決方案一,按照objcct數(shù)據(jù)取出數(shù)據(jù),然后自己組bean解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查'll fieldl,field2兩個字段,那么有 一個構(gòu)造函數(shù)就是 bean(typel filedl,type2fick!2),然后在hql里iflj就可以直接生成這個bcnn 了。13、在dao中如何體現(xiàn)dao設(shè)計模式?解決方案一,按照objcct數(shù)據(jù)取出數(shù)據(jù),然后自己組bean解決方案二,對每個

26、表的bean寫構(gòu)造函數(shù),比如表一要查'll fieldl,field2兩個字段,那么有 一個構(gòu)造函數(shù)就是 bean(typel filedl,type2field2),然后在hql里面就可以直接生成這個bean 了。14、sprin計hibernate中委托方案怎么配置?解決方案一,按照0映珂數(shù)據(jù)取出數(shù)據(jù),然后6己組bean解決方案二,對每個表的bean寫構(gòu)造函數(shù),比如表一要查出fieldl,field2兩個字段,那么有 一個構(gòu)造函數(shù)就是 bean(typel filedl,type2field2),然后在hql里曲就可以宜接生成這個bean t o15、spring+hibernat

27、e中委托方案怎么配置?解決方案一,按照object擻據(jù)取出數(shù)據(jù),然后ft bean解決方案二,對每個表的benn寫構(gòu)造函數(shù),比如表一要查出fieldl,field2兩個字段,那么有 一個構(gòu)造函數(shù)就是 bcan(typcl filedl,typc2field2),然后在hql里面就可以直接生成這個bean t o16. hibernate進行多表查詢每個表中各取幾個字段,也就是說查詢出來的結(jié)果集沒有一個實體類與之對應(yīng)如何解決;解決方案一,按照object數(shù)據(jù)取出數(shù)據(jù),然后口己組bean解決方案二,對每個表的benn寫構(gòu)造函數(shù),比如表一要查出fieldl,field2兩個字段,那么有 一個構(gòu)造函數(shù)

28、就是 bean(typel filedl,type2field2),然后在hql里面就可以直接生成這個bean t o17介紹一下hibernate的二級緩存按照以下思路來回答:(1)首先說清楚什么是緩存,(2)再說有t hibernate的session就是 一級緩存,即冇了一級緩存,為什么還要冇二級緩存,(3)最后再說如何配置hibernate的 二級緩存。(1) 緩存就是把以前從數(shù)據(jù)庫屮查詢出來和使用過的對象保存在內(nèi)存屮(一個數(shù)據(jù)結(jié)構(gòu)屮), 這個數(shù)據(jù)結(jié)構(gòu)通常是或類似hashmap,當以后要使用某個刈象時,先查詢緩存中是否有這個 對彖,如果有則使用緩存中的對彖,如果沒有則去查詢數(shù)據(jù)庫,并將

29、查詢出來的對彖保存在 緩存屮,以便下次使用。下面是緩存的偽代碼:引出hibernate的第二級緩存,用卞面的偽代碼分析了 cache的實現(xiàn)原理daohashmap map = new map();user getuser(integer id)user user = map.gct(id)if(user = null)user = session.get(id);map.put(id,user);return user;daocache cache = null setcache(cache cache)this.cachc = cacheuser getuser(int id)if(cach

30、c!=null)user user = cache.get(id); if(user =null)user = session.get(id); cache.put(id,user);return user;return session.get(id);(2)hibernate的session就是一種緩存,我們通常將之稱為hibernate的一級緩存,當想使 用session從數(shù)據(jù)庫中查詢出一個對象時,session也是先從自己內(nèi)部查看是否存在這個対象, 存在則直接返凹,不存在才去訪問數(shù)據(jù)庫,并將查詢的結(jié)果保存在口己內(nèi)部。由于session 代表一次會話過程,一個session與一個數(shù)據(jù)庫連接相關(guān)連,所以session最好不要長時間 保持打開,通常僅用于一個事務(wù)當中,在事務(wù)結(jié)束時就應(yīng)關(guān)閉。并r

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論