ssh框架面試題(卷)_第1頁(yè)
ssh框架面試題(卷)_第2頁(yè)
ssh框架面試題(卷)_第3頁(yè)
ssh框架面試題(卷)_第4頁(yè)
ssh框架面試題(卷)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余4頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、 9/9 Hibernate工作原理及為什么要用? 原理: 1.讀取并解析配置文件 2.讀取并解析映射信息,創(chuàng)建SessionFactory 3.打開(kāi)Sesssion 4.創(chuàng)建事務(wù)Transation 5.持久化操作 6.提交事務(wù) 7.關(guān)閉Session 8.關(guān)閉SesstionFactory 為什么要用: 1. 對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼。 2. Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化DAO層的編碼工作 3. hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。 4.

2、hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。 2 Hibernate是如何延遲加載? 1. Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對(duì)象 b)集合(Collection) 2. Hibernate3 提供了屬性的延遲加載功能 當(dāng)Hibernate在查詢(xún)數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒(méi)有存在與內(nèi)存中,當(dāng)程序真正對(duì)數(shù)據(jù)的操作時(shí),對(duì)象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開(kāi)銷(xiāo),從而提高了服務(wù)器的性能。 3Hibernate中怎樣實(shí)現(xiàn)類(lèi)之間的關(guān)系?(如:一對(duì)多、多對(duì)多的關(guān)系) 類(lèi)與類(lèi)之間的關(guān)系主要體現(xiàn)在表與表之間

3、的關(guān)系進(jìn)行操作,它們都市對(duì)對(duì)象進(jìn)行操作,我們程序中把所有的表與類(lèi)都映射在一起,它們通過(guò)配置文件中的many-to-one、one-to-many、many-to-many、 4 說(shuō)下Hibernate的緩存機(jī)制 1. 內(nèi)部緩存存在Hibernate中又叫一級(jí)緩存,屬于應(yīng)用事物級(jí)緩存 2. 二級(jí)緩存: a) 應(yīng)用及緩存 b) 分布式緩存 條件:數(shù)據(jù)不會(huì)被第三方修改、數(shù)據(jù)大小在可接受X圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非 關(guān)鍵數(shù)據(jù) c) 第三方緩存的實(shí)現(xiàn) 5 Hibernate的查詢(xún)方式 Sql、Criteria,object ptosition Hql: 1、 屬性查詢(xún) 2、 參數(shù)查詢(xún)

4、、命名參數(shù)查詢(xún) 3、 關(guān)聯(lián)查詢(xún) 4、 分頁(yè)查詢(xún) 5、 統(tǒng)計(jì)函數(shù) 6 如何優(yōu)化Hibernate? 1.使用雙向一對(duì)多關(guān)聯(lián),不使用單向一對(duì)多 2.靈活使用單向一對(duì)多關(guān)聯(lián) 3.不用一對(duì)一,用多對(duì)一取代 4.配置對(duì)象緩存,不使用集合緩存 5.一對(duì)多集合使用Bag,多對(duì)多集合使用Set 6. 繼承類(lèi)使用顯式多態(tài) 7. 表字段要少,表關(guān)聯(lián)不要怕多,有二級(jí)緩存撐腰 7 Struts工作機(jī)制?為什么要使用Struts? 工作機(jī)制: Struts的工作流程: 在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從 struts-config.xml文件中讀取配置信息,把它們存

5、放到各種配置對(duì)象 當(dāng)ActionServlet接收到一個(gè)客戶(hù)請(qǐng)求時(shí),將執(zhí)行如下流程. -(1)檢索和用戶(hù)請(qǐng)求匹配的ActionMapping實(shí)例,如果不存在,就返回請(qǐng)求路徑無(wú)效信息; -(2)如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對(duì)象,把客戶(hù)提交的表單數(shù)據(jù)保存到ActionForm對(duì)象中; -(3)根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法; -(4)如果ActionForm的validate()方法返回null或返回一個(gè)不包含ActionMessage的ActuibErrors對(duì)象, 就表示表單驗(yàn)證成功;

6、-(5)ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的 Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法; -(6)Action的execute()方法返回一個(gè)ActionForward對(duì)象,ActionServlet在把客戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給 ActionForward對(duì)象指向的JSP組件; -(7)ActionForward對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè),返回給客戶(hù); 為什么要用: JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能。但用這些技術(shù)構(gòu)建的系

7、統(tǒng)非常的繁亂,所以在此之上,我們需要一個(gè)規(guī)則、一個(gè)把這些技術(shù)組織起來(lái)的規(guī)則,這就是框架,Struts便應(yīng)運(yùn)而生。 基于Struts開(kāi)發(fā)的應(yīng)用由3類(lèi)組件構(gòu)成:控制器組件、模型組件、視圖組件 8 Struts的validate框架是如何驗(yàn)證的? 在struts配置文件中配置具體的錯(cuò)誤提示,再在FormBean中的validate()方法具體調(diào)用。 9 說(shuō)下Struts的設(shè)計(jì)模式 MVC模式: web應(yīng)用程序啟動(dòng)時(shí)就會(huì)加載并初始化ActionServler。用戶(hù)提交表單時(shí),一個(gè)配置好的ActionForm對(duì)象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù),ActionServler根據(jù)Struts-config.x

8、ml文件配置好的設(shè)置決定是否需要表單驗(yàn)證,如果需要就調(diào)用ActionForm的Validate()驗(yàn)證后選擇將請(qǐng)求發(fā)送到哪個(gè)Action,如果Action不存在,ActionServlet會(huì)先創(chuàng)建這個(gè)對(duì)象,然后調(diào)用Action的execute()方法。Execute()從ActionForm對(duì)象中獲取數(shù)據(jù),完成業(yè)務(wù)邏輯,返回一個(gè)ActionForward對(duì)象,ActionServlet再把客戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指定的jsp組件,ActionForward對(duì)象指定的jsp生成動(dòng)態(tài)的網(wǎng)頁(yè),返回給客戶(hù)。 10 spring工作機(jī)制及為什么要用? 1.spring mvc請(qǐng)所有的

9、請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的處理工作。 2.DispatcherServlet查詢(xún)一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller. 3.DispatcherServlet請(qǐng)請(qǐng)求提交到目標(biāo)Controller 4.Controller進(jìn)行業(yè)務(wù)邏輯處理后,會(huì)返回一個(gè)ModelAndView 5.Dispathcher查詢(xún)一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象 6.視圖對(duì)象負(fù)責(zé)渲染返回給客戶(hù)端。 為什么用: AOP 讓開(kāi)發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn),稱(chēng)

10、為橫切關(guān)注點(diǎn),并將它們插入到應(yīng)用程序代碼中。使用 AOP 后,公共服務(wù) (比 如日志、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊?,同時(shí)不會(huì)增加域?qū)ο蟮膶?duì)象模型的復(fù)雜性。 IOC 允許創(chuàng)建一個(gè)可以構(gòu)造對(duì)象的應(yīng)用環(huán)境,然后向這些對(duì)象傳遞它們的協(xié)作對(duì)象。正如單詞倒置所表明的,IOC 就像反過(guò)來(lái)的 JNDI。沒(méi)有使用一堆抽象工廠、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straight construction),每一個(gè)對(duì)象都是用其協(xié)作對(duì)象構(gòu)造的。因此是由容器管理協(xié)作對(duì)象(collaborator)。 Spring即使一個(gè)AOP框架,也是一IOC容器。 Spring 最好的地方是它有

11、助于您替換對(duì)象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴(lài)性(協(xié)作對(duì)象)。然后可以很容易地在需要時(shí)替換具有類(lèi)似接口的協(xié)作對(duì)象。其它知識(shí)點(diǎn):不會(huì)涉及到2級(jí)緩存以及hql 1. Configuration 讀取hibernate.cfg.xml.并把.hbm.xml文件交給HbmBinder做第一次處理, HbmBinder根據(jù).hbm.xml解析出PersistentClass, Collection,然后在創(chuàng)建SessionFactory的時(shí)候,會(huì)對(duì)Collection做第2次處理塞入關(guān)聯(lián) 2 PersistentClass 根據(jù).hbm.xml產(chǎn)生的描述要持久化的類(lèi)

12、的信息的類(lèi).主要的實(shí)例變量包括List properties Property對(duì)象里的有個(gè)Value屬性value,通過(guò)value來(lái)描述該property和 數(shù)據(jù)庫(kù)里的哪些列對(duì)應(yīng)以及獲得該property對(duì)應(yīng)的type 3 Value 主要分為 SimpleValue,Collection,ponent,ToOne SimpleValue主要包括Table和Columns屬性,用于描述簡(jiǎn)單屬性或單主鍵 Collection主要屬性包括 collectionTable表示Collection里面element對(duì)象所對(duì)應(yīng)的Table key表示CollectionTable里的哪幾列和Collec

13、tion owner所對(duì)應(yīng)的表的主鍵做關(guān)聯(lián) element,描述了主表(referencingTable),從表的EnityName,以及從表對(duì)應(yīng)的PersistentClass ponent可以用來(lái)描述多主鍵,通過(guò)屬性properties來(lái)表示 ToOne包括被引用的屬性名,被引用的實(shí)體名,columns,(被引用的屬性名不能 和columns同時(shí)設(shè)置),用于OneToOne,ManyToOne 4 SessionFactory 在創(chuàng)建SessionFactory的時(shí)候,會(huì)根據(jù)Configuration里Classes和 Collections,創(chuàng)建EntityPersister和Colle

14、ctionPersister. SessionFactory會(huì)緩存這些persisters. EnityPersistenter的key是EntityName, CollectionPersister的key是entityName+propertyName 5 EntityPersister 分為 SingleTableEntityPersister(一個(gè)實(shí)體一個(gè)表/一個(gè)類(lèi)繼承結(jié)構(gòu)一個(gè)表) 通過(guò)一個(gè)字段做標(biāo)識(shí) JoinedSubclassEntityPersister(每個(gè)子類(lèi)一個(gè)表) UnionSubclassEntityPersister(每個(gè)具體類(lèi)一個(gè)表) 6 CollectionPer

15、sister 封裝對(duì)一個(gè)Collection的crud操作. 不過(guò)做insert,update,delete,recreate的時(shí)候,會(huì)判Inverse是否為false.如果為false才會(huì)執(zhí)行相應(yīng)的操作,表示是由Collection維護(hù)關(guān)系. 如果Inverse=true,表示關(guān)聯(lián)關(guān)系是由多端來(lái)維護(hù)(即直接通過(guò)操作Collection里的element來(lái)維護(hù),而不是通過(guò)操作Collection來(lái)維護(hù)) 則該CollectionPersister不會(huì)做任何操作 7 Type 主要包括對(duì)SqlTypes的封裝,以及CollectionType,EntityType (ManyToOneType,

16、OneToOneType),主要接口有nullSafeGet( 從ResultSet拼裝出對(duì)象),nullSafeSet(給PreparedStatement setParameter). 可以通過(guò)Value.getType()獲得Type 對(duì)于EntityType,CollectionType,就是通過(guò)resolve方法從 ResultSet中拼裝出對(duì)象 EntityType的nullSafeSet,就是獲取One端對(duì)象的主鍵所對(duì)應(yīng) 的Type進(jìn)行nullSafeSet CollectionType沒(méi)有實(shí)現(xiàn)nullSafeSet,通過(guò)保存時(shí)的 Cascade或者CollectionPersi

17、ster,將Collection的 Element一個(gè)一個(gè)的set 也可以自定義Type,實(shí)現(xiàn)UserType接口 具體見(jiàn) docs.huihoo./framework/hibernate/reference-v3_zh-/inheritance.html 封裝對(duì)一個(gè)entity的crud操作,在創(chuàng)建EntityPersister實(shí)例過(guò)程中,會(huì)產(chǎn) 生crud的sql,可以在以后的操作提高效率。不過(guò)如果是DynamicInsert, DynamicUpdate,則會(huì)根據(jù)對(duì)象修改的屬性動(dòng)態(tài)的生成sql DAS不支持類(lèi)繼承的映射,因此只會(huì)用到SingleTableEntityPersister 8

18、StatefulPersistenceContext StatefulPersistenceContext和SessionImpl是一一對(duì)應(yīng)的,會(huì)緩存通過(guò) SessionImpl操作過(guò)的對(duì)象,包括entity和collection.主要屬性有 EntitiesByKey key=EntityKey, value=entity. (EntityKey=id+EntityPersister+EntityMode entityMode) entityEntries key=entity, value=EntityEntry. EntityEntry用于描述一個(gè)對(duì)象的持久化狀態(tài),如DELETED,MA

19、NAGED等等 CollectionsByKey key=CollectionKey, value=PersistentCollection CollectionKey=CollectionPersister+key+EntityMode,這個(gè) Key是通過(guò)Collection.value.getType.nullSafeGet()得到的 PersistentCollection是hibernate對(duì)于Collection的封裝, 主要用于實(shí)現(xiàn)延遲加載 collectionEntries key=PersistentCollection,value=CollectionEntry Statef

20、ulPersistenceContext的主要用途可以實(shí)現(xiàn)對(duì)象之間的關(guān)聯(lián)關(guān)系 的設(shè)置,動(dòng)態(tài)的更新,以及對(duì)緩存的數(shù)據(jù)無(wú)需顯示調(diào)用save,update,delete的 方法就可以實(shí)現(xiàn)這些操作,是因?yàn)樵赥ransaction.mit()的時(shí)候會(huì)調(diào)用 session.flush(),會(huì)保證內(nèi)存對(duì)象狀態(tài)和數(shù)據(jù)庫(kù)的一致性 9 Cascade,CascadeStyle,CascadingAction 在Cascade執(zhí)行級(jí)聯(lián)操作的時(shí)候,會(huì)通過(guò)CascadeStyle.doCascade( CascadingAction)來(lái)判斷是否可以執(zhí)行cascade,并且當(dāng)要保存的對(duì)象有外鍵 約束的關(guān)聯(lián)對(duì)象時(shí)候會(huì)通過(guò)F

21、oreignKeyDirection來(lái)判斷是應(yīng)該在保存該對(duì)象 之前要保存關(guān)聯(lián)對(duì)象還是在保存該對(duì)象之后再保存關(guān)聯(lián)對(duì)象 10 Loader,CriteriaQueryTranslator,Criteria,QueryParameters, CriteriaJoinWalker 用于Criteria api對(duì)實(shí)體的查詢(xún) Criteria 是一個(gè)查詢(xún)entity的api??梢栽O(shè)置類(lèi)似where條件的表達(dá)式, Select字段,order等等 當(dāng)使用Criteria查詢(xún)時(shí),首先會(huì)創(chuàng)建CriteriaLoader,CriteriaLoader會(huì) 通過(guò)CriteriaQueryTranslator從Crit

22、eria中得到查詢(xún)參數(shù) QueryParameters,通過(guò)CriteriaJoinWalker把Criteria變成sql,然后 執(zhí)行查詢(xún) 11 ActionQueue 當(dāng)調(diào)用session對(duì)實(shí)體進(jìn)行insert,update,delete的時(shí)候,只是會(huì)創(chuàng)建相應(yīng) 的action放入ActionQueue,然后在session.flush()的時(shí)候才會(huì)真正操作 數(shù)據(jù)庫(kù) ActionQueue的執(zhí)行順序: executeActions( insertions );executeActions( updates );executeActions(collectionRemovals );execu

23、teActions( collectionUpdates );executeActions( collectionCreations );executeActions( deletions ); 12 Tuplizer 用于根據(jù)entityname實(shí)例化出對(duì)象,以及set/get property hibernate內(nèi)置的有PojoEntityTuplizer,Dom4jEntityTuplizer DAS是在hibernate基礎(chǔ)之上實(shí)現(xiàn)了DataObject的持久化,支持DataObject對(duì)象之間的關(guān)聯(lián),延遲加載,級(jí)聯(lián),控制反轉(zhuǎn),不支持DataObject的繼承 1.新實(shí)現(xiàn)了一個(gè)SDOE

24、ntityTuplizer 支持創(chuàng)建DataObject,以及set/get DataObject的屬性 SDOEntityTuplizer實(shí)現(xiàn)抽象類(lèi)中規(guī)定的如下方法 SDOEntityTuplizer類(lèi)的buildInstantiator方法用來(lái)根據(jù)mapping信息來(lái)為相應(yīng)的實(shí)體建立不同的構(gòu)造器,我們用SDOEntityInstantiator來(lái)實(shí)現(xiàn)SDO的構(gòu)造器: 2其中SDOponentInstantiator是用來(lái)當(dāng)實(shí)體有復(fù)合主鍵用于實(shí)例化表示主鍵的類(lèi) 3PropertyAccessor是Hibernate中定義的一個(gè)接口,用來(lái)表達(dá)在訪問(wèn)mapping的實(shí)體對(duì)象的屬性的時(shí)候使用的“屬性訪問(wèn)器”。它有兩個(gè)相關(guān)的接口:Getter接口和Setter接口。 DASPropertyAccessor的內(nèi)部結(jié)構(gòu)如下圖所示: 其中g(shù)etGetter方法和getSetter方法是PropertyAccessor接口定的規(guī)格。DASGetter實(shí)現(xiàn)Getter接口,DASSetter類(lèi)實(shí)現(xiàn)Set

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論