9. 流行的框架與新技術(shù) 1、談?wù)勀銓?duì)Struts的理解,。 答: 1. struts是一個(gè)按MVC模式設(shè)計(jì)的Web層框架,,其實(shí)它就是一個(gè)大大的servlet,這個(gè)Servlet名為ActionServlet,,或是 ActionServlet的子類,。我們可以在web.xml文件中將符合某種特征的所有請(qǐng)求交給這個(gè)Servlet處理,這個(gè)Servlet再參照一個(gè) 配置文件(通常為/WEB-INF/struts-config.xml)將各個(gè)請(qǐng)求分別分配給不同的action去處理,。 一個(gè)擴(kuò)展知識(shí)點(diǎn):struts的配置文件可以有多個(gè),,可以按模塊配置各自的配置文件,這樣可以防止配置文件的過度膨脹,; 2. ActionServlet把請(qǐng)求交給action去處理之前,,會(huì)將請(qǐng)求參數(shù)封裝成一個(gè)formbean對(duì)象(就是一個(gè)java類,這個(gè)類中的每個(gè)屬性對(duì)應(yīng)一個(gè)請(qǐng)求參數(shù)),,封裝成一個(gè)什么樣的formbean對(duì)象呢,?看配置文件。 3.要說明的是,, ActionServlet把formbean對(duì)象傳遞給action的execute方法之前,,可能會(huì)調(diào)用formbean的validate方法進(jìn)行 校驗(yàn),只有校驗(yàn)通過后才將這個(gè)formbean對(duì)象傳遞給action的execute方法,,否則,,它將返回一個(gè)錯(cuò)誤頁面,這個(gè)錯(cuò)誤頁面由input屬性 指定,,(看配置文件)作者為什么將這里命名為input屬性,,而不是error屬性,我們后面結(jié)合實(shí)際的運(yùn)行效果進(jìn)行分析,。 4.action執(zhí)行完后要返回顯示的結(jié)果視圖,,這個(gè)結(jié)果視圖是用一個(gè)ActionForward對(duì)象來表示的,actionforward對(duì)象通過 struts-config.xml配置文件中的配置關(guān)聯(lián)到某個(gè)jsp頁面,,因?yàn)槌绦蛑惺褂玫氖窃趕truts-config.xml配置文件為jsp頁 面設(shè)置的邏輯名,,這樣可以實(shí)現(xiàn)action程序代碼與返回的jsp頁面名稱的解耦。 你對(duì)struts可能還有自己的應(yīng)用方面的經(jīng)驗(yàn),那也要一并說出來,。 2,、談?wù)勀銓?duì)Hibernate的理解。 答: 1. 面向?qū)ο笤O(shè)計(jì)的軟件內(nèi)部運(yùn)行過程可以理解成就是在不斷創(chuàng)建各種新對(duì)象,、建立對(duì)象之間的關(guān)系,,調(diào)用對(duì)象的方法來改變各個(gè)對(duì)象的狀態(tài)和對(duì)象消亡的過程,不管程 序運(yùn)行的過程和操作怎么樣,,本質(zhì)上都是要得到一個(gè)結(jié)果,,程序上一個(gè)時(shí)刻和下一個(gè)時(shí)刻的運(yùn)行結(jié)果的差異就表現(xiàn)在內(nèi)存中的對(duì)象狀態(tài)發(fā)生了變化。 2.為了在關(guān)機(jī)和內(nèi)存空間不夠的狀況下,,保持程序的運(yùn)行狀態(tài),,需要將內(nèi)存中的對(duì)象狀態(tài)保存到持久化設(shè)備和從持久化設(shè)備中恢復(fù)出對(duì)象的狀態(tài),通常都是保存到 關(guān)系數(shù)據(jù)庫來保存大量對(duì)象信息,。從Java程序的運(yùn)行功能上來講,,保存對(duì)象狀態(tài)的功能相比系統(tǒng)運(yùn)行的其他功能來說,應(yīng)該是一個(gè)很不起眼的附屬功 能,,java采用jdbc來實(shí)現(xiàn)這個(gè)功能,,這個(gè)不起眼的功能卻要編寫大量的代碼,而做的事情僅僅是保存對(duì)象和恢復(fù)對(duì)象,,并且那些大量的jdbc代碼并沒有 什么技術(shù)含量,,基本上是采用一套例行公事的標(biāo)準(zhǔn)代碼模板來編寫,是一種苦活和重復(fù)性的工作,。 3.通過數(shù)據(jù)庫保存java程序運(yùn)行時(shí)產(chǎn)生的對(duì)象和恢復(fù)對(duì)象,,其實(shí)就是實(shí)現(xiàn)了java對(duì)象與關(guān)系數(shù)據(jù)庫記錄的映射關(guān)系,稱為ORM(即Object Relation Mapping),,人們可以通過封裝JDBC代碼來實(shí)現(xiàn)了這種功能,,封裝出來的產(chǎn)品稱之為ORM框架,Hibernate就是其中的一種流行ORM框架,。 使用Hibernate框架,,不用寫JDBC代碼,,僅僅是調(diào)用一個(gè)save方法,,就可以將對(duì)象保存到關(guān)系數(shù)據(jù)庫中,,僅僅是調(diào)用一個(gè)get方法,,就可以從數(shù) 據(jù)庫中加載出一個(gè)對(duì)象,。 4.使用Hibernate的基本流程是:配置Configuration對(duì)象、產(chǎn)生SessionFactory,、創(chuàng)建session對(duì)象,,啟動(dòng)事務(wù),完成CRUD操作,提交事務(wù),,關(guān)閉session,。 5.使用Hibernate時(shí),先要配置hibernate.cfg.xml文件,,其中配置數(shù)據(jù)庫連接信息和方言等,,還要為每個(gè)實(shí)體配置相應(yīng)的hbm.xml文件,hibernate.cfg.xml文件中需要登記每個(gè)hbm.xml文件,。 6.在應(yīng)用Hibernate時(shí),,重點(diǎn)要了解Session的緩存原理,級(jí)聯(lián),,延遲加載和hql查詢,。 3、AOP的作用,。
1.Spring實(shí)現(xiàn)了工廠模式的工廠類(在這里有必要解釋清楚什么是工廠模式),,這個(gè)類名為BeanFactory(實(shí)際上是一個(gè)接口),,在程序中通常 BeanFactory的子類ApplicationContext。Spring相當(dāng)于一個(gè)大的工廠類,,在其配置文件中通過<bean>元 素配置用于創(chuàng)建實(shí)例對(duì)象的類名和實(shí)例對(duì)象的屬性,。 2. Spring提供了對(duì)IOC良好支持,IOC是一種編程思想,,是一種架構(gòu)藝術(shù),,利用這種思想可以很好地實(shí)現(xiàn)模塊之間的解耦。IOC也稱為DI(Depency Injection),,什么叫依賴注入呢,? 譬如,Class Programmer { Computer computer = null; public void code() { //Computer computer = new IBMComputer(); //Computer computer = beanfacotry.getComputer(); computer.write(); } public void setComputer(Computer computer) { this.computer = computer; } } 另外兩種方式都由依賴,,第一個(gè)直接依賴于目標(biāo)類,,第二個(gè)把依賴轉(zhuǎn)移到工廠上,第三個(gè)徹底與目標(biāo)和工廠解耦了,。在spring的配置文件中配置片段如下: <bean id="computer" class="cn.itcast.interview.Computer"> </bean> <bean id="programmer" class="cn.itcast.interview.Programmer"> <property name="computer" ref="computer"></property> </bean> 3. Spring提供了對(duì)AOP技術(shù)的良好封裝,, AOP稱為面向切面編程,就是系統(tǒng)中有很多各不相干的類的方法,,在這些眾多方法中要加入某種系統(tǒng)功能的代碼,,例如,加入日志,,加入權(quán)限判斷,,加入異常處 理,,這種應(yīng)用稱為AOP。實(shí)現(xiàn)AOP功能采用的是代理技術(shù),,客戶端程序不再調(diào)用目標(biāo),,而調(diào)用代理類,代理類與目標(biāo)類對(duì)外具有相同的方法聲明,,有兩種方式可 以實(shí)現(xiàn)相同的方法聲明,,一是實(shí)現(xiàn)相同的接口,二是作為目標(biāo)的子類在,,JDK中采用Proxy類產(chǎn)生動(dòng)態(tài)代理的方式為某個(gè)接口生成實(shí)現(xiàn)類,,如果要為某個(gè)類生 成子類,則可以用CGLI B,。在生成的代理類的方法中加入系統(tǒng)功能和調(diào)用目標(biāo)類的相應(yīng)方法,,系統(tǒng)功能的代理以Advice對(duì)象進(jìn)行提供,顯然要?jiǎng)?chuàng)建出代理對(duì)象,,至少需要目標(biāo)類和 Advice類,。spring提供了這種支持,只需要在spring配置文件中配置這兩個(gè)元素即可實(shí)現(xiàn)代理和aop功能,,例如,, <bean id="proxy" type="org.spring.framework.aop.ProxyBeanFactory"> <property name="target" ref=""></property> <property name="advisor" ref=""></property> </bean> 11、談?wù)凷truts中的Action servlet,。 12,、Struts優(yōu)缺點(diǎn) 優(yōu)點(diǎn): 1. 實(shí)現(xiàn)MVC模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實(shí)現(xiàn). 2.有豐富的tag可以用 ,Struts的標(biāo)記庫(Taglib),,如能靈活動(dòng)用,,則能大大提高開發(fā)效率 3. 頁面導(dǎo)航 使系統(tǒng)的脈絡(luò)更加清晰。通過一個(gè)配置文件,,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,,這對(duì)于后期的維護(hù)有著莫大的好處。尤其是當(dāng)另一批開發(fā)者接手這個(gè)項(xiàng)目時(shí),,這種優(yōu)勢(shì)體現(xiàn)得更加明顯,。 4. 提供Exception處理機(jī)制 . 5. 數(shù)據(jù)庫鏈接池管理 6. 支持I18N 缺點(diǎn) 一、 轉(zhuǎn)到展示層時(shí),,需要配置forward,,如果有十個(gè)展示層的jsp,需要配置十次struts,,而且還不包括有時(shí)候目錄,、文件變更,需要重新修改forward,,注意,,每次修改配置之后,要求重新部署整個(gè)項(xiàng)目,,而tomcate這樣的服務(wù)器,,還必須重新啟動(dòng)服務(wù)器 二、 二,、 Struts 的Action必需是thread-safe方式,,它僅僅允許一個(gè)實(shí)例去處理所有的請(qǐng)求。所以action用到的所有的資源都必需統(tǒng)一同步,,這個(gè)就引起了線程安全的問題,。 三、 測(cè)試不方便. Struts的每個(gè)Action都同Web層耦合在一起,,這樣它的測(cè)試依賴于Web容器,,單元測(cè)試也很難實(shí)現(xiàn)。不過有一個(gè)Junit的擴(kuò)展工具Struts TestCase可以實(shí)現(xiàn)它的單元測(cè)試,。 四,、 類型的轉(zhuǎn)換. Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具Commons-Beanutils進(jìn)行類型轉(zhuǎn)化,。但它的轉(zhuǎn)化都是在Class級(jí)別,,而且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時(shí)的錯(cuò)誤信息返回給用戶也是非常困難的,。 五,、 對(duì)Servlet的依賴性過強(qiáng). Struts處理Action時(shí)必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器,。 六,、 前端表達(dá)式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表達(dá)式語言來獲取數(shù)據(jù),??墒荍STL的表達(dá)式語言在Collection和索引屬性方面處理顯得很弱。 七,、 對(duì)Action執(zhí)行的控制困難. Struts創(chuàng)建一個(gè)Action,,如果想控制它的執(zhí)行順序?qū)?huì)非常困難。甚至你要重新去寫Servlet來實(shí)現(xiàn)你的這個(gè)功能需求,。 八,、 對(duì)Action 執(zhí)行前和后的處理. Struts處理Action的時(shí)候是基于class的hierarchies,很難在action處理前和后進(jìn)行操作,。 九,、 對(duì)事件支持不夠. 在struts中,實(shí)際是一個(gè)表單Form對(duì)應(yīng)一個(gè)Action類(或DispatchAction),,換一句話說:在Struts中實(shí)際是一個(gè)表單只能 對(duì)應(yīng)一個(gè)事件,,struts這種事件方式稱為application event,,application event和component event相比是一種粗粒度的事件 119、STRUTS的應(yīng)用(如STRUTS架構(gòu)) Struts是采用Java Servlet/JavaServer Pages技術(shù),,開發(fā)Web應(yīng)用程序的開放源碼的framework,。 采用Struts能開發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。 Struts有如下的主要功能: 一.包含一個(gè)controller servlet,,能將用戶的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象,。 二.JSP自由tag庫,并且在controller servlet中提供關(guān)聯(lián)支持,,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用,。 三.提供了一系列實(shí)用對(duì)象:XML處理、通過Java reflection APIs自動(dòng)處理JavaBeans屬性,、國(guó)際化的提示和消息,。 110、說說struts1與struts2的區(qū)別,。 1.都是MVC的WEB框架, 2 struts1的老牌框架,,應(yīng)用很廣泛,有很好的群眾基礎(chǔ),,使用它開發(fā)風(fēng)險(xiǎn)很小,,成本更低!struts2雖然基于這個(gè)框架,,但是應(yīng)用群眾并多,,相對(duì)不成熟,未知的風(fēng)險(xiǎn)和變化很多,,開發(fā)人員相對(duì)不好招,,使用它開發(fā)項(xiàng)目的風(fēng)險(xiǎn)系數(shù)更大,用人成本更高,! 3.struts2畢竟是站在前輩的基礎(chǔ)設(shè)計(jì)出來,,它會(huì)改善和完善struts1中的一些缺陷,struts1中一些懸而未決問題在struts2得到了解決,。 4.struts1的前端控制器是一個(gè)Servlet,,名稱為ActionServlet,struts2的前端控制器是一個(gè)filter,,在 struts2.0中叫FilterDispatcher,,在struts2.1中叫StrutsPrepareAndExecuteFilter。 5.struts1的action需要繼承Action類,,struts2的action可以不繼承任何類,;struts1對(duì)同一個(gè)路徑的所有請(qǐng)求共享一 個(gè)Action實(shí)例,struts2對(duì)同一個(gè)路徑的每個(gè)請(qǐng)求分別使用一個(gè)獨(dú)立Action實(shí)例對(duì)象,,所有對(duì)于struts2的Action不用考慮線程安 全問題,。 6.在struts1中使用formbean封裝請(qǐng)求參數(shù),,在struts2中直接使用action的屬性來封裝請(qǐng)求參數(shù)。 7.struts1中的多個(gè)業(yè)務(wù)方法放在一個(gè)Action中時(shí)(即繼承DispatchAction時(shí)),,要么都校驗(yàn),,要么都不校驗(yàn);對(duì)于 struts2,,可以指定只對(duì)某個(gè)方法進(jìn)行校驗(yàn),當(dāng)一個(gè)Action繼承了ActionSupport且在這個(gè)類中只編寫了validateXxx()方 法,,那么則只對(duì)Xxx()方法進(jìn)行校驗(yàn),。 (一個(gè)請(qǐng)求來了的執(zhí)行流程進(jìn)行分析,struts2是自動(dòng)支持分模塊開發(fā),,并可以不同模塊設(shè)置不同的url前綴,,這是通過package的 namespace來實(shí)現(xiàn)的;struts2是支持多種類型的視圖,;struts2的視圖地址可以是動(dòng)態(tài)的,,即視圖的名稱是支持變量方式的,舉例,,論壇發(fā) 帖失敗后回來還要傳遞boardid,。視圖內(nèi)容顯示方面:它的標(biāo)簽用ognl,要el強(qiáng)大很多,,在國(guó)際化方面支持分模塊管理,,兩個(gè)模塊用到同樣的key, 對(duì)應(yīng)不同的消息,;) 與Struts1不同,,Struts2對(duì)用戶的每一次請(qǐng)求都會(huì)創(chuàng)建一個(gè)Action,所以Struts2中的Action是線程安全的,。 給我印象最深刻的是:struts配置文件中的redirect視圖的url不能接受參數(shù),,而struts2配置文件中的redirect視圖可以接受參數(shù)。 110,、hibernate中的update()和saveOrUpdate()的區(qū)別,,session的load()和get()的區(qū)別。 110,、簡(jiǎn)述 Hibernate 和 JDBC 的優(yōu)缺點(diǎn)? 如何書寫一個(gè) one to many 配置文件. 7,、iBatis與Hibernate有什么不同? 相同點(diǎn):屏蔽jdbc api的底層訪問細(xì)節(jié),使用我們不用與jdbc api打交道,,就可以訪問數(shù)據(jù),。 jdbc api編程流程固定,還將sql語句與java代碼混雜在了一起,,經(jīng)常需要拼湊sql語句,,細(xì)節(jié)很繁瑣,。 ibatis的好處:屏蔽jdbc api的底層訪問細(xì)節(jié);將sql語句與java代碼進(jìn)行分離;提供了將結(jié)果集自動(dòng)封裝稱為實(shí)體對(duì)象和對(duì)象的集合的功能,,queryForList返回對(duì)象 集合,,用queryForObject返回單個(gè)對(duì)象;提供了自動(dòng)將實(shí)體對(duì)象的屬性傳遞給sql語句的參數(shù),。 Hibernate是一個(gè)全自動(dòng)的orm映射工具,,它可以自動(dòng)生成sql語句,ibatis需要我們自己在xml配置文件中寫sql語 句,hibernate要比ibatis功能負(fù)責(zé)和強(qiáng)大很多,。因?yàn)閔ibernate自動(dòng)生成sql語句,,我們無法控制該語句,我們就無法去寫特定的高效 率的sql,。對(duì)于一些不太復(fù)雜的sql查詢,,hibernate可以很好幫我們完成,但是,,對(duì)于特別復(fù)雜的查詢,,hibernate就很難適應(yīng)了,這時(shí)候 用ibatis就是不錯(cuò)的選擇,,因?yàn)閕batis還是由我們自己寫sql語句,。 7、寫Hibernate的一對(duì)多和多對(duì)一雙向關(guān)聯(lián)的orm配置? 9,、hibernate的inverse屬性的作用? 解決方案一,,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean 解決方案二,,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),,比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2 field2) ,,然后在hql里面就可以直接生成這個(gè)bean了,。 10、在DAO中如何體現(xiàn)DAO設(shè)計(jì)模式? 解決方案一,,按照Object[]數(shù)據(jù)取出數(shù)據(jù),,然后自己組bean 解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),,比如表一要查出field1,field2兩個(gè)字段,,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2 field2) ,然后在hql里面就可以直接生成這個(gè)bean了,。 10,、spring+Hibernate中委托方案怎么配置? 解決方案一,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean 解決方案二,,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),,比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2 field2) ,,然后在hql里面就可以直接生成這個(gè)bean了,。 10、spring+Hibernate中委托方案怎么配置? 解決方案一,,按照Object[]數(shù)據(jù)取出數(shù)據(jù),,然后自己組bean 解決方案二,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),,比如表一要查出field1,field2兩個(gè)字段,,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2 field2) ,然后在hql里面就可以直接生成這個(gè)bean了,。 8. hibernate進(jìn)行多表查詢每個(gè)表中各取幾個(gè)字段,,也就是說查詢出來的結(jié)果集沒有一個(gè)實(shí)體類與之對(duì)應(yīng)如何解決,;??? 解決方案一,,按照Object[]數(shù)據(jù)取出數(shù)據(jù),然后自己組bean 解決方案二,,對(duì)每個(gè)表的bean寫構(gòu)造函數(shù),,比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2 field2) ,,然后在hql里面就可以直接生成這個(gè)bean了,。
8.介紹一下Hibernate的二級(jí)緩存
(2)Hibernate的Session就是一種緩存,,我們通常將之稱為Hibernate的一級(jí)緩存,當(dāng)想使用session從數(shù)據(jù)庫中查詢出一個(gè)對(duì) 象時(shí),Session也是先從自己內(nèi)部查看是否存在這個(gè)對(duì)象,,存在則直接返回,,不存在才去訪問數(shù)據(jù)庫,并將查詢的結(jié)果保存在自己內(nèi)部,。由于Session 代表一次會(huì)話過程,,一個(gè)Session與一個(gè)數(shù)據(jù)庫連接相關(guān)連,所以Session最好不要長(zhǎng)時(shí)間保持打開,,通常僅用于一個(gè)事務(wù)當(dāng)中,,在事務(wù)結(jié)束時(shí)就應(yīng)關(guān) 閉。并且Session是線程不安全的,,被多個(gè)線程共享時(shí)容易出現(xiàn)問題,。通常只有那種全局意義上的緩存才是真正的緩存應(yīng)用,才有較大的緩存價(jià)值,,因 此,,Hibernate的Session這一級(jí)緩存的緩存作用并不明顯,應(yīng)用價(jià)值不大,。Hibernate的二級(jí)緩存就是要為Hibernate配置一種 全局緩存,,讓多個(gè)線程和多個(gè)事務(wù)都可以共享這個(gè)緩存。我們希望的是一個(gè)人使用過,,其他人也可以使用,,session沒有這種效果。 (3)二級(jí)緩存是獨(dú)立于Hibernate的軟件部件,,屬于第三方的產(chǎn)品,,多個(gè)廠商和組織都提供有緩存產(chǎn)品,例如,,EHCache和OSCache等等,。 在Hibernate中使用二級(jí)緩存,首先就要在hibernate.cfg.xml配置文件中配置使用哪個(gè)廠家的緩存產(chǎn)品,,接著需要配置該緩存產(chǎn)品自己 的配置文件,,最后要配置Hibernate中的哪些實(shí)體對(duì)象要納入到二級(jí)緩存的管理中。明白了二級(jí)緩存原理和有了這個(gè)思路后,,很容易配置起 Hibernate的二級(jí)緩存,。擴(kuò)展知識(shí):一個(gè)SessionFactory可以關(guān)聯(lián)一個(gè)二級(jí)緩存,也即一個(gè)二級(jí)緩存只能負(fù)責(zé)緩存一個(gè)數(shù)據(jù)庫中的數(shù)據(jù),,當(dāng) 使用Hibernate 的二級(jí)緩存后,,注意不要有其他的應(yīng)用或SessionFactory來更改當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù),這樣緩存的數(shù)據(jù)就會(huì)與數(shù)據(jù)庫中的實(shí)際數(shù)據(jù)不一致,。 111,、Spring 的依賴注入是什么意思? 給一個(gè) Bean 的 message 屬性, 字符串類型, 注入值為 "Hello" 的 XML 配置文件該怎么寫? 120、Jdo是什么? JDO是Java對(duì)象持久化的新的規(guī)范,為java data object的簡(jiǎn)稱,也是一個(gè)用于存取某種數(shù)據(jù)倉庫中的對(duì)象的標(biāo)準(zhǔn)化API,。JDO提供了透明的對(duì)象存儲(chǔ),,因此對(duì)開發(fā)人員來說,存儲(chǔ)數(shù)據(jù)對(duì)象完全不需要額 外的代碼(如JDBC API的使用),。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移到JDO產(chǎn)品提供商身上,,使開發(fā)人員解脫出來,從而集中時(shí)間和精力在業(yè)務(wù)邏輯上,。另外,,JDO很靈活,因?yàn)樗?可以在任何數(shù)據(jù)底層上運(yùn)行,。JDBC只是面向關(guān)系數(shù)據(jù)庫(RDBMS)JDO更通用,,提供到任何數(shù)據(jù)底層的存儲(chǔ)功能,比如關(guān)系數(shù)據(jù)庫,、文件,、XML以及對(duì) 象數(shù)據(jù)庫(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng),。 什么是spring的IOC AOP STRUTS的工作流程,! spring 與EJB的區(qū)別!,! 10. 軟件工程與設(shè)計(jì)模式 111,、UML方面 標(biāo)準(zhǔn)建模語言UML,。用例圖,靜態(tài)圖(包括類圖,、對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖。 112. 軟件開發(fā)的 92,、j2ee常用的設(shè)計(jì)模式,?說明工廠模式。 總共23種,,分為三大類:創(chuàng)建型,,結(jié)構(gòu)型,行為型 我只記得其中常用的6,、7種,,分別是: 創(chuàng)建型(工廠、工廠方法,、抽象工廠,、單例) 結(jié)構(gòu)型(包裝、適配器,,組合,,代理) 行為(觀察者,模版,策略) 然后再針對(duì)你熟悉的模式談?wù)勀愕睦斫饧纯伞?/span> Java中的23種設(shè)計(jì)模式: Factory(工廠模式),, Builder(建造模式),, Factory Method(工廠方法模式), Prototype(原始模型模式),,Singleton(單例模式),, Facade(門面模式), Adapter(適配器模式),, Bridge(橋梁模式),, Composite(合成模式), Decorator(裝飾模式),, Flyweight(享元模式),, Proxy(代理模式), Command(命令模式),, Interpreter(解釋器模式),, Visitor(訪問者模式), Iterator(迭代子模式),, Mediator(調(diào)停者模式),, Memento(備忘錄模式), Observer(觀察者模式),, State(狀態(tài)模式),, Strategy(策略模式), Template Method(模板方法模式),, Chain Of Responsibleity(責(zé)任鏈模式) 工廠模式:工廠模式是一種經(jīng)常被使用到的模式,,根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個(gè)類的實(shí)例,通常這一組類有一個(gè)公共的抽象父類并 且實(shí)現(xiàn)了相同的方法,,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的操作,。首先需要定義一個(gè)基類,該類的子類通過不同的方法實(shí)現(xiàn)了基類中的方法,。然后需要定義一 個(gè)工廠類,,工廠類可以根據(jù)條件生成不同的子類實(shí)例。當(dāng)?shù)玫阶宇惖膶?shí)例后,,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個(gè)子類的實(shí)例,。 113、開發(fā)中都用到了那些設(shè)計(jì)模式?用在什么場(chǎng)合? 每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問題,,然后描述了該問題的解決方案的核心,。通過這種方式,你可以無數(shù)次地使用那些已有的解決方案,,無需在重 復(fù)相同的工作,。主要用到了MVC的設(shè)計(jì)模式,。用來開發(fā)JSP/Servlet或者J2EE的相關(guān)應(yīng)用。簡(jiǎn)單工廠模式等,。 11. j2ee部分 117,、BS與CS的聯(lián)系與區(qū)別。 C/S是Client/Server的縮寫,。服務(wù)器通常采用高性能的PC,、工作站或小型機(jī),并采用大型數(shù)據(jù)庫系統(tǒng),,如Oracle,、Sybase、InFORMix或 SQL Server,??蛻舳诵枰惭b專用的客戶端軟件。 B/S是Brower/Server的縮寫,,客戶機(jī)上只要安裝一個(gè)瀏覽器(Browser),,如Netscape Navigator或Internet Explorer,服務(wù)器安裝Oracle,、Sybase,、InFORMix或 SQL Server等數(shù)據(jù)庫。在這種結(jié)構(gòu)下,,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),,一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),。瀏覽器通過Web Server 同數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互,。 C/S 與 B/S 區(qū)別: 1.硬件環(huán)境不同: C/S 一般建立在專用的網(wǎng)絡(luò)上, 小范圍里的網(wǎng)絡(luò)環(huán)境, 局域網(wǎng)之間再通過專門服務(wù)器提供連接和數(shù)據(jù)交換服務(wù). B/S 建立在廣域網(wǎng)之上的, 不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng), 租用設(shè)備. 信息自己管理. 有比C/S更強(qiáng)的適應(yīng)范圍, 一般只要有操作系統(tǒng)和瀏覽器就行 2.對(duì)安全要求不同 C/S 一般面向相對(duì)固定的用戶群, 對(duì)信息安全的控制能力很強(qiáng). 一般高度機(jī)密的信息系統(tǒng)采用C/S 結(jié)構(gòu)適宜. 可以通過B/S發(fā)布部分可公開信息. B/S 建立在廣域網(wǎng)之上, 對(duì)安全的控制能力相對(duì)弱, 可能面向不可知的用戶。 3.對(duì)程序架構(gòu)不同 C/S 程序可以更加注重流程, 可以對(duì)權(quán)限多層次校驗(yàn), 對(duì)系統(tǒng)運(yùn)行速度可以較少考慮. B/S 對(duì)安全以及訪問速度的多重的考慮, 建立在需要更加優(yōu)化的基礎(chǔ)之上. 比C/S有更高的要求 B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢(shì), 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng). SUN 和IBM推的JavaBean 構(gòu)件技術(shù)等,使 B/S更加成熟. 4.軟件重用不同 C/S 程序可以不可避免的整體性考慮, 構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好. B/S 對(duì)的多重結(jié)構(gòu),要求構(gòu)件相對(duì)獨(dú)立的功能. 能夠相對(duì)較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子 5.系統(tǒng)維護(hù)不同 C/S 程序由于整體性, 必須整體考察, 處理出現(xiàn)的問題以及系統(tǒng)升級(jí). 升級(jí)難. 可能是再做一個(gè)全新的系統(tǒng) B/S 構(gòu)件組成,方面構(gòu)件個(gè)別的更換,實(shí)現(xiàn)系統(tǒng)的無縫升級(jí). 系統(tǒng)維護(hù)開銷減到最小.用戶從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級(jí). 6.處理問題不同 C/S 程序可以處理用戶面固定, 并且在相同區(qū)域, 安全要求高需求, 與操作系統(tǒng)相關(guān). 應(yīng)該都是相同的系統(tǒng) B/S 建立在廣域網(wǎng)上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統(tǒng)平臺(tái)關(guān)系最小. 7.用戶接口不同 C/S 多是建立的Window平臺(tái)上,表現(xiàn)方法有限,對(duì)程序員普遍要求較高 B/S 建立在瀏覽器上, 有更加豐富和生動(dòng)的表現(xiàn)方式與用戶交流. 并且大部分難度減低,減低開發(fā)成本. 8.信息流不同 C/S 程序一般是典型的中央集權(quán)的機(jī)械式處理, 交互性相對(duì)低 B/S 信息流向可變化, B-B B-C B-G等信息,、流向的變化, 更像交易中心,。 2,、應(yīng)用服務(wù)器與WEB SERVER的區(qū)別,? 應(yīng)用服務(wù)器:Weblogic、Tomcat,、Jboss WEB SERVER:IIS,、 Apache 32、應(yīng)用服務(wù)器有那些,? BEA WebLogic Server,,IBM WebSphere Application Server,Oracle9i Application Server,,jBoss,,Tomcat 3,、J2EE是什么? 答:Je22是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)層,。 一個(gè)另類的回答:j2ee就是增刪改查。 67,、J2EE是技術(shù)還是平臺(tái)還是框架,? 什么是J2EE J2EE本身是一個(gè)標(biāo)準(zhǔn),一個(gè)為企業(yè)分布式應(yīng)用的開發(fā)提供的標(biāo)準(zhǔn)平臺(tái),。 J2EE也是一個(gè)框架,,包括JDBC、JNDI,、RMI,、JMS、EJB,、JTA等技術(shù),。
|
|