ssh框架面試題_第1頁
ssh框架面試題_第2頁
ssh框架面試題_第3頁
ssh框架面試題_第4頁
ssh框架面試題_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

18、tityPersister 8 StatefulPersistenceContext StatefulPersistenceContext和SessionImpl是一一對應(yīng)的,會緩存通過 SessionImpl操作過的對象,包括entity和collection.主要屬性有 EntitiesByKey key=EntityKey, value=entity. (EntityKey=id+EntityPersister+EntityMode entityMode) entityEntries key=entity, value=EntityEntry. EntityEntry用于描述一個對象的持

19、久化狀態(tài),如DELETED,MANAGED等等 CollectionsByKey key=CollectionKey, value=PersistentCollection CollectionKey=CollectionPersister+key+EntityMode,這個 Key是通過Collection.value.getType.nullSafeGet()得到的 PersistentCollection是hibernate對于Collection的封裝, 主要用于實現(xiàn)延遲加載 collectionEntries key=PersistentCollection,value=Collec

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

21、對象有外鍵 約束的關(guān)聯(lián)對象時候會通過ForeignKeyDirection來判斷是應(yīng)該在保存該對象 之前要保存關(guān)聯(lián)對象還是在保存該對象之后再保存關(guān)聯(lián)對象 10 Loader,CriteriaQueryTranslator,Criteria,QueryParameters, CriteriaJoinWalker 用于Criteria api對實體的查詢 Criteria 是一個查詢entity的api。可以設(shè)置類似where條件的表達(dá)式, Select字段,order等等 當(dāng)使用Criteria查詢時,首先會創(chuàng)建CriteriaLoader,CriteriaLoader會 通過CriteriaQ

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

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

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

溫馨提示

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

評論

0/150

提交評論