筆試題之框架與新技術(shù)部分_第1頁
筆試題之框架與新技術(shù)部分_第2頁
筆試題之框架與新技術(shù)部分_第3頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、筆試題之框架與新技術(shù)部分答 :1. struts 是一個按 MVC 模式設(shè)計的 Web 層框架,其實它就是一個大大的 servlet ,這個 Servlet 名為 ActionServlet ,或是ActionServlet 的子類。我們可以在 web.xml 文件中將符合某種特征的所有請求交給這個 Servlet 處理,這個 Servlet 再參照一個配置文件(通常為 /WEB-INF/struts-config.xml)將各個請求分別分配給不同的 action去處理。一個擴展知識點: struts 的配置文件可以有多個, 可以按模塊配置各自的配置文件,這樣可以防止配置文件的過度膨脹;2.

2、ActionServlet 把請求交給 action 去處理之前,會將請求參數(shù)封裝成一個 formbean 對象(就是一個 java 類,這個類中的每個屬性對應(yīng)一個請求參數(shù)),封裝成一個什么樣的 formbean 對象呢 看配置文件。3. 要說明的是, ActionServlet把 formbean對象傳遞給 action的 execute 方法之前,可能會調(diào)用formbean的 validate方法進行校驗,只有校驗通過后才將這個 formbean 對象傳遞給 action 的 execute 方法,否則,它將返回一個錯誤頁面, 這個錯誤頁面由 input 屬性指定,(看配置文件)作者為什么

3、將這里命名為 input 屬性,而不是 error 屬性,我們后面結(jié)合實際的運行效果進行分析。14.action執(zhí)行完后要返回顯示的結(jié)果視圖, 這個結(jié)果視圖是用一個ActionForward對象 來 表 示 的, actionforward對 象通 過struts-config.xml配置文件中的配置關(guān)聯(lián)到某個jsp 頁面,因為程序中使用的是在struts-config.xml配置文件為 jsp 頁面設(shè)置的邏輯名,這樣可以實現(xiàn)action程序代碼與返回的jsp 頁面名稱的解耦。你對 struts可能還有自己的應(yīng)用方面的經(jīng)驗,那也要一并說出來。談?wù)勀銓?Hibernate的理解。答 :1. 面向

4、對象設(shè)計的軟件內(nèi)部運行過程可以理解成就是在不斷創(chuàng)建各種新對象、 建立對象之間的關(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è)備中恢復(fù)出對象的狀態(tài), 通常都是保存到關(guān)系數(shù)據(jù)庫來保存大量對象信息。從Java 程序的運行功能上來講,保存對象狀態(tài)的功能相比系統(tǒng)運行的其他功能來說,應(yīng)該是一個很不起眼的附屬功能,java 采用 jdbc 來實現(xiàn)

5、這個功能, 這個不起眼的功能卻要編寫大量的代碼,而做的事情僅僅是保存對象和恢復(fù)對象,并且那些大量的jdbc 代碼并沒有什么技術(shù)含量,基本上是采用一套例行公事的標(biāo)準(zhǔn)代碼模板來編寫,是一2種苦活和重復(fù)性的工作。3. 通過數(shù)據(jù)庫保存 java 程序運行時產(chǎn)生的對象和恢復(fù)對象,其實就是實現(xiàn)了 java 對象與關(guān)系數(shù)據(jù)庫記錄的映射關(guān)系,稱為 ORM(即 Object Relation Mapping),人們可以通過封裝JDBC 代碼來實現(xiàn)了這種功能, 封裝出來的產(chǎn)品稱之為ORM 框架,Hibernate就是其中的一種流行ORM 框架。使用 Hibernate框架,不用寫 JDBC代碼,僅僅是調(diào)用一個sa

6、ve 方法,就可以將對象保存到關(guān)系數(shù)據(jù)庫中,僅僅是調(diào)用一個get 方法,就可以從數(shù)據(jù)庫中加載出一個對象。4. 使用 Hibernate的基本流程是:配置Configuration對象、產(chǎn)生 SessionFactory 、創(chuàng)建 session 對象,啟動事務(wù),完成CRUD操作,提交事務(wù),關(guān)閉session 。5. 使用 Hibernate時,先要配置 文件,其中配置數(shù)據(jù)庫連接信息和方言等,還要為每個實體配置相應(yīng)的hbm.xml文件,文件中需要登記每個hbm.xml文件。6. 在應(yīng)用 Hibernate 時,重點要了解 Session 的緩存原理,級聯(lián),延遲加載和 hql 查詢。AOP 的作用。

7、你對 Spring 的理解。1.Spring實現(xiàn)了工廠模式的工廠類(在這里有必要解釋清楚什么是工廠模式),這個類名為 BeanFactory (實際上是一個接口),在程序中通常BeanFactory的子類 ApplicationContext。Spring相3當(dāng)于一個大的工廠類, 在其配置文件中通過元素配置用于創(chuàng)建實例對象的類名和實例對象的屬性。2. Spring 提供了對 IOC 良好支持, IOC 是一種編程思想,是一種架構(gòu)藝術(shù),利用這種思想可以很好地實現(xiàn)模塊之間的解耦。 IOC 也稱為 DI(Depency Injection),什么叫依賴注入呢譬如, Class ProgrammerC

8、omputer computer = null;public void code()/Computer computer = new IBMComputer(); /Computer computer = beanfacotry.getComputer(); computer.write();public void setComputer(Computer computer)puter = computer;另外兩種方式都由依賴, 第一個直接依賴于目標(biāo)類, 第二個把依賴轉(zhuǎn)移到工廠上,第三個徹底與目標(biāo)和工廠解耦了。在spring的配置文件中配置片段如下:43. Spring 提供了對 AOP 技

9、術(shù)的良好封裝, AOP 稱為面向切面編程,就是系統(tǒng)中有很多各不相干的類的方法, 在這些眾多方法中要加入某種系統(tǒng)功能的代碼,例如,加入日志,加入權(quán)限判斷,加入異常處理,這種應(yīng)用稱為 AOP 。實現(xiàn) AOP 功能采用的是代理技術(shù),客戶端程序不再調(diào)用目標(biāo), 而調(diào)用代理類, 代理類與目標(biāo)類對外具有相同的方法聲明, 有兩種方式可以實現(xiàn)相同的方法聲明, 一是實現(xiàn)相同的接口,二是作為目標(biāo)的子類在, JDK 中采用 Proxy 類產(chǎn)生動態(tài)代理的方式為某個接口生成實現(xiàn)類, 如果要為某個類生成子類, 則可以用 CGLI B。在生成的代理類的方法中加入系統(tǒng)功能和調(diào)用目標(biāo)類的相應(yīng)方法,系統(tǒng)功能的代理以 Advice

10、對象進行提供,顯然要創(chuàng)建出代理對象,至少需要目標(biāo)類和 Advice 類。 spring 提供了這種支持,只需要在 spring 配置文件中配置這兩個元素即可實現(xiàn)代理和 aop 功能,例如,談?wù)?Struts 中的 Action servlet。Struts 優(yōu)缺點優(yōu)點:1. 實現(xiàn) MVC 模式,結(jié)構(gòu)清晰 ,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實現(xiàn) . 2 有豐富的 tag 可以用 ,Struts 的標(biāo)記庫 (Taglib) ,如能靈活動用,則能大大提高開發(fā)效率3. 頁面導(dǎo)航使系統(tǒng)的脈絡(luò)更加清晰。 通過一個配置文件, 即可把握整個系統(tǒng)各部分之間的聯(lián)系, 這對于后期的維護有著莫大的好處。尤其是當(dāng)另5一批開發(fā)者

11、接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。4. 提供 Exception 處理機制 .5. 數(shù)據(jù)庫鏈接池管理6. 支持 I18N缺點一、轉(zhuǎn)到展示層時,需要配置 forward ,如果有十個展示層的jsp ,需要配置十次 struts ,而且還不包括有時候目錄、文件變更,需要重新修改 forward ,注意,每次修改配置之后, 要求重新部署整個項目,而 tomcate這樣的服務(wù)器,還必須重新啟動服務(wù)器二、二、 Struts的 Action必需是 thread safe 方式,它僅僅允許一個實例去處理所有的請求。所以action用到的所有的資源都必需統(tǒng)一同步,這個就引起了線程安全的問題。三、 測試不

12、方便 . Struts 的每個 Action都同 Web 層耦合在一起,這樣它的測試依賴于Web 容器,單元測試也很難實現(xiàn)。不過有一個 Junit 的擴展工具 Struts TestCase可以實現(xiàn)它的單元測試。四、 類型的轉(zhuǎn)換 . Struts 的 FormBean 把所有的數(shù)據(jù)都作為 String 類型,它可以使用工具 Commons-Beanutils 進行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在 Class 級別,而且轉(zhuǎn)化的類型是不可配置的。 類型轉(zhuǎn)化時的錯誤信息返回給用戶也是非常困難的。五、對 Servlet 的依賴性過強 . Struts 處理 Action 時必需要依賴 ServletRequ

13、est 和 ServletResponse ,所有它擺脫不了 Servlet 容器。6六、 前端表達式語言方面 .Struts 集成了 JSTL,所以它主要使用 JSTL 的表達式語言來獲取數(shù)據(jù)。可是 JSTL 的表達式語言在 Collection 和索引屬性方面處理顯得很弱。七、 對 Action 執(zhí)行的控制困難 . Struts 創(chuàng)建一個 Action ,如果想控制它的執(zhí)行順序?qū)浅@щy。 甚至你要重新去寫 Servlet 來實現(xiàn)你的這個功能需求。八、 對 Action執(zhí)行前和后的處理 . Struts 處理 Action的時候是基于 class 的 hierarchies ,很難在 a

14、ction處理前和后進行操作。九、 對事件支持不夠 . 在 struts 中,實際是一個表單Form 對應(yīng)一個 Action類(或 DispatchAction),換一句話說:在 Struts 中實際是 一個表單只能對應(yīng)一個事件, struts這種事件方式稱 為application event,application event和 component event相比是一種粗粒度的事件STRUTS 的應(yīng)用 (如 STRUTS 架構(gòu) )Struts 是采用 Java Servlet/JavaServer Pages技術(shù),開發(fā) Web應(yīng)用程序的開放源碼的framework。 采用Struts能開發(fā)

15、出基于MVC(Model-View-Controller)設(shè)計模式的應(yīng)用構(gòu)架。 Struts 有如下的主要功能: 一.包含一個 controller servlet,能將用戶的請求發(fā)送到相應(yīng)的 Action 對象。二.JSP 自由 tag庫,并且在 controllerservlet 中提供關(guān)聯(lián)支持,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。三 .提供了一系列實用對象: XML處理、通過 Java reflection APIs自動處理 JavaBeans 屬性、國際化的提示和消息。7說說 struts1 與 struts2 的區(qū)別。1. 都是 MVC 的 WEB 框架 ,2 struts1 的老牌框架,

16、應(yīng)用很廣泛,有很好的群眾基礎(chǔ),使用它開發(fā)風(fēng)險很小,成本更低! struts2 雖然基于這個框架,但是應(yīng)用群眾并多,相對不成熟,未知的風(fēng)險和變化很多,開發(fā)人員相對不好招,使用它開發(fā)項目的風(fēng)險系數(shù)更大,用人成本更高!3.struts2 畢竟是站在前輩的基礎(chǔ)設(shè)計出來,它會改善和完善 struts1 中的一些缺陷, struts1 中一些懸而未決問題在 struts2 得到了解決。4.struts1的前端控制器是一個Servlet ,名稱為 ActionServlet,struts2的 前 端 控 制 器 是 一 個filter, 在struts2.0中 叫FilterDispatcher,在stru

17、ts2.1中叫StrutsPrepareAndExecuteFilter。5.struts1的 action需要繼承 Action類, struts2的 action可以不繼承任何類; struts1對同一個路徑的所有請求共享一個Action實例, struts2對同一個路徑的每個請求分別使用一個獨立Action實例對象,所有對于struts2的 Action不用考慮線程安全問題。6. 在 struts1 中使用 formbean 封裝請求參數(shù),在 struts2 中直接使用 action 的屬性來封裝請求參數(shù)。7.struts1中的多個業(yè)務(wù)方法放在一個Action中時(即繼承Dispatch

18、Action時),要么都校驗,要么都不校驗;對于struts2 ,可 以 指 定 只 對 某 個 方 法 進 行 校 驗 , 當(dāng) 一 個Action繼 承 了8ActionSupport且在這個類中只編寫了validateXxx() 方法,那么則只對 Xxx() 方法進行校驗。(一個請求來了的執(zhí)行流程進行分析,struts2是自動支持分模塊開發(fā),并可以不同模塊設(shè)置不同的url 前綴,這是通過package的 namespace 來實現(xiàn)的; struts2 是支持多種類型的視圖; struts2的視圖地址可以是動態(tài)的,即視圖的名稱是支持變量方式的,舉例,論壇發(fā)帖失敗后回來還要傳遞boardid

19、。視圖內(nèi)容顯示方面: 它的標(biāo)簽用 ognl ,要 el 強大很多,在國際化方面支持分模塊管理,兩個模塊用到同樣的 key ,對應(yīng)不同的消息;)與 Struts1 不同, Struts2 對用戶的每一次請求都會創(chuàng)建一個 Action ,所以 Struts2 中的 Action 是線程安全的。給我印象最深刻的是:struts 配置文件中的redirect視圖的 url不能接受參數(shù),而 struts2 配置文件中的 redirect視圖可以接受參數(shù)。hibernate中的 update() 和 saveOrUpdate()的區(qū)別, session的 load() 和 get() 的區(qū)別。簡述Hibe

20、rnate和 JDBC 的優(yōu)缺點如何書寫一個onetomany配置文件 .iBatis 與 Hibernate有什么不同相同點:屏蔽jdbc api的底層訪問細節(jié),使用我們不用與jdbcapi 打交道,就可以訪問數(shù)據(jù)。jdbcapi 編程流程固定,還將sql 語句與 java 代碼混雜在了一起,經(jīng)常需要拼湊sql 語句,細節(jié)很繁瑣。9ibatis 的好處:屏蔽 jdbc api的底層訪問細節(jié);將 sql 語句與 java代碼進行分離 ;提供了將結(jié)果集自動封裝稱為實體對象和對象的集合的功能, queryForList返回對象集合,用queryForObject返回單個對象;提供了自動將實體對象的

21、屬性傳遞給sql 語句的參數(shù)。Hibernate 是一個全自動的 orm 映射工具,它可以自動生成 sql 語句 ,ibatis 需要我們自己在 xml 配置文件中寫 sql 語句, hibernate 要比 ibatis 功能負(fù)責(zé)和強大很多。因為 hibernate 自動生成 sql 語句,我們無法控制該語句,我們就無法去寫特定的高效率的sql 。對于一些不太復(fù)雜的 sql 查詢, hibernate 可以很好幫我們完成,但是,對于特別復(fù)雜的查詢, hibernate 就很難適應(yīng)了,這時候用 ibatis 就是不錯的選擇,因為 ibatis 還是由我們自己寫 sql 語句。寫 Hiberna

22、te的一對多和多對一雙向關(guān)聯(lián)的orm 配置hibernate的 inverse 屬性的作用解決方案一,按照 Object 數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean 解決方案二,對每個表的 bean 寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1filed1,type2field2),然后在 hql 里面就可以直接生成這個bean 了。在 DAO 中如何體現(xiàn) DAO 設(shè)計模式解決方案一,按照 Object 數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean 解決方案二,對每個表的 bean 寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一

23、個構(gòu)造函數(shù)就是Bean(type110filed1,type2field2),然后在 hql 里面就可以直接生成這個bean 了。spring+Hibernate中委托方案怎么配置解決方案一,按照 Object 數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean 解決方案二,對每個表的 bean 寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1filed1,type2field2),然后在 hql 里面就可以直接生成這個bean 了。spring+Hibernate中委托方案怎么配置解決方案一,按照 Object 數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean 解決

24、方案二,對每個表的 bean 寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1filed1,type2field2) ,然后在 hql 里面就可以直接生成這個 bean 了。 hibernate 進行多表查詢每個表中各取幾個字段, 也就是說查詢出來的結(jié)果集沒有一個實體類與之對應(yīng)如何解決;解決方案一,按照 Object 數(shù)據(jù)取出數(shù)據(jù),然后自己組 bean 解決方案二,對每個表的 bean 寫構(gòu)造函數(shù),比如表一要查出field1,field2兩個字段,那么有一個構(gòu)造函數(shù)就是Bean(type1filed1,type2field2),然后在 h

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

26、緩存的偽代碼:引出 hibernate 的第二級緩存,用下面的偽代碼分析了 Cache的實現(xiàn)原理Daohashmap map = new map();User getUser(integer id)User user = map.get(id)if(user = null)user = session.get(id);map.put(id,user);return user;12DaoCache cache = nullsetCache(Cache cache)this.cache = cacheUser getUser(int id)if(cache!=null)User user = ca

27、che.get(id);if(user =null)user = session.get(id);cache.put(id,user);return user;return session.get(id);13( 2)Hibernate 的 Session 就是一種緩存,我們通常將之稱為Hibernate 的一級緩存,當(dāng)想使用 session 從數(shù)據(jù)庫中查詢出一個對象時, Session 也是先從自己內(nèi)部查看是否存在這個對象,存在則直接返回,不存在才去訪問數(shù)據(jù)庫,并將查詢的結(jié)果保存在自己內(nèi)部。由于 Session 代表一次會話過程,一個 Session 與一個數(shù)據(jù)庫連接相關(guān)連,所以 Session 最好不要長時間保持打開, 通常僅用于一個事務(wù)當(dāng)中,在事務(wù)結(jié)束時就應(yīng)關(guān)閉。 并且 Session 是線程不安全的, 被多個線程共享時容易出現(xiàn)問題。 通常只有那種全局意義上的緩存才是真正的緩存應(yīng)用,才有較大的緩存價值, 因此,Hibernate 的 Session 這一級緩存

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論