国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

ssh 常見面試題

2019-11-14 10:03:28
字體:
供稿:網(wǎ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反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。 
4. hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持
各種關(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ù)器的性能。 
 
3.Hibernate中怎樣實現(xiàn)類之間的關(guān)系?(如:一對多、多對多的關(guān)系) 
類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進行操作,它們都市對對象進行操作
,我們程序中把所有的表與類都映射在一起,它們通過配置文件中的many-to-one、
one-to-many、many-to-many
 
4.Struts1流程:1、客戶端瀏覽器發(fā)出HTTP請求。2、根據(jù)web.xml配置,該請求被ActionServlet接收。3、根據(jù)struts-config.xml配置, ActionServlet先將請求中的參數(shù)填充到
ActionForm中,然后ActionServlet再將請求發(fā)送到Action 進行處理。4、是否驗證,需要驗證則調(diào)用ActionForm的validate方法,驗證失敗則跳轉(zhuǎn)到input
,成功則繼續(xù)。5、Action從ActionForm獲得數(shù)據(jù),調(diào)用javabean 中的業(yè)務(wù)方法處理數(shù)據(jù)。6、Action返回ActionForward對象,跳轉(zhuǎn)到相應(yīng)jsp頁面或Action。7、返回HTTP響應(yīng)到客戶端瀏覽器。
MVC設(shè)計模式:modal:“模型” 也稱業(yè)務(wù)邏輯,是正真完成任務(wù)的代碼,相當(dāng)與JavaBeanview:視圖,其實就是顯示界面,相當(dāng)于JSPcontroller:控制器,他控制模型和視圖的交互過程,相當(dāng)于servlet
struts1是基于MVC設(shè)計模式hibernate是基于ORM對象關(guān)系映射
 
5.struts是什么?struts1是基于JSP和servlet的一個開源的Web應(yīng)用框架,使用的是MVC的設(shè)計模式struts2是基于webwork技術(shù)的框架,是sun和webwork公司聯(lián)手開發(fā)的一個功能非常齊
全的框架,struts2和struts1沒有任何關(guān)系,是一個全新的框架
 
6.sPRing是什么?spring是一個集成了許多第三方框架的大雜燴,其核心技術(shù)是IOC(控制反轉(zhuǎn),也稱依
注入)和AOP(面向切面編程)
 
7.hibernate是什么?hibernate是基于ORM對象關(guān)系映射(完成對象數(shù)據(jù)到關(guān)系數(shù)據(jù)映射的機制)實現(xiàn)的,做
數(shù)據(jù)持久化的工具
 
8.JSF是什么?JavaServer Face是基于組件的web開發(fā)框架,跟sturts差不多的框架
 
9.數(shù)據(jù)庫里面的索引和約束是什么?索引是為了提高數(shù)據(jù)的檢索速度,索引是建立在數(shù)據(jù)表上,根據(jù)一個或多個字段建立
的約束是為了保持?jǐn)?shù)據(jù)的完整性,約束有非空約束,主鍵約束,外鍵約束等等。
10.spring是什么這個問題,往往可以通過我們?yōu)槭裁匆褂胹pring這個問題來切入:AOP 讓開發(fā)人員可以創(chuàng)建非行為性的關(guān)注點,稱為橫切關(guān)注點,并將它們插入到應(yīng)用
程序代碼中。使用 AOP 后,公共服務(wù) (比 如日志、持久性、事務(wù)等)就可以分解成
方面并應(yīng)用到域?qū)ο笊希瑫r不會增加域?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 最好的地方是它有助于您替換對
象。有了 Spring,只要用 JavaBean 屬性和配置文件加入依賴性(協(xié)作對象)。然后
可以很容易地在需要時替換具有類似接口的協(xié)作對象。
 
11.用自己的話簡要闡述struts2的執(zhí)行流程。
Struts 2框架本身大致可以分為3個部分:核心控制器FilterDispatcher、業(yè)務(wù)控制器
Action和用戶實現(xiàn)的企業(yè)業(yè)務(wù)邏輯組件。核心控制器FilterDispatcher是Struts 2框
架的基礎(chǔ),包含了框架內(nèi)部的控制流程和處理機制。業(yè)務(wù)控制器Action和業(yè)務(wù)邏輯組
件是需要用戶來自己實現(xiàn)的。用戶在開發(fā)Action和業(yè)務(wù)邏輯組件的同時,還需要編寫
相關(guān)的配置文件,供核心控制器FilterDispatcher來使用。 
Struts 2的工作流程相對于Struts 1要簡單,與WebWork框架基本相同,所以說Struts 
2是WebWork的升級版本。基本簡要流程如下:
1、客戶端瀏覽器發(fā)出HTTP請求。2、根據(jù)web.xml配置,該請求被FilterDispatcher接收。3、根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法, 并通過IoC方式,將值注
入給Aciton。
4、Action調(diào)用業(yè)務(wù)邏輯組件處理業(yè)務(wù)邏輯,這一步包含表單驗證。
5、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果result,并跳轉(zhuǎn)到
相應(yīng)頁面。

6、返回HTTP響應(yīng)到客戶端瀏覽器。

1、寫出你熟悉的開源框架以及各自的作用(項目中為什么使用SSH)

答:框架:hibernate,spring,struts1/struts2.Hibernate主要用于數(shù)據(jù)持久化;封裝了JDBC操作;還提供了一個易用的、高效率的對象關(guān)系映射框架;Spring 的控制反轉(zhuǎn)能起到解耦合的作用;Struts 主要用于請求處理的流程控制;struts是基于MVC模式的,很好的將應(yīng)用程序進行了分層,使開發(fā)者更關(guān)注于業(yè)務(wù)邏輯的實現(xiàn);struts有著豐富的taglib,如能靈活運用,則能大大提高開發(fā)效率。

 Struts(表示層)+Spring(業(yè)務(wù)層)+Hibernate(持久層)

 

struts相關(guān)

2、簡述STRUTS架構(gòu)(說下Struts的工作流程、struts的工作原理)

簡述:

Struts是采用Java Servlet/JavaServer Pages技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的framework。 采用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處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。

流程:

在web應(yīng)用啟動時就會加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象當(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對象, 就表示表單驗證成功;(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)頁,返回給客戶;

 

3、Struts對MVC的體現(xiàn)M: 在Struts中,模型由JavaBean和EJB組件組成,用來實現(xiàn)程序的業(yè)務(wù)邏輯部分.C: ActionServlet,RequestProcessor和Struts輔助類來實現(xiàn)控制器。ActionServlet是Struts中的核心控制器ActionServlet會根據(jù)在Struts配置文件中的配置將控制權(quán)轉(zhuǎn)交給相應(yīng)的Action類。Action 類是業(yè)務(wù)的代理,在Action類中可以調(diào)用模型組件或者編寫其他業(yè)務(wù)邏輯代碼來完成一項具體的業(yè)務(wù)。V: Struts框架中的視圖主要由JSP文件構(gòu)成,在JSP文件中可應(yīng)用Struts標(biāo)簽和自定義標(biāo)簽來表現(xiàn)模型組件中的數(shù)據(jù)進行簡單的處理。ActionForm Bean實際上是一個遵循了特殊約定的JavaBean,在Struts中ActionForm Bean可看作為一個中間存儲器在視圖與控制器之間進行數(shù)據(jù)傳遞。

 

4、struts1.2和struts2.0的區(qū)別?a、Action類:struts1.2要求Action類繼承一個基類。struts2.0 Action可以是簡單的JOPO對象或者(都會)繼承ActionSupport基類b、線程模式struts1.2 Action是單例模式的并且必須是線程安全的,因為僅有一個Action的實例來處理所有的請求。單例策略限制了Struts1.2 Action能做的事情,并且開發(fā)時特別小心。Action資源必須是線程安全的或同步的。struts2.0 Action為每一個請求產(chǎn)生一個實例,因此沒有線程安全問題。c、Servlet依賴struts1.2 Action依賴于Servlet API,因為當(dāng)一個Action被調(diào)用時HttpServletRequest和HttpServletResponse被傳遞給execut方法。struts2.0 Action不依賴于容器,允許Action脫離容器單獨測試。如果需要,Struts2 Action仍然可以訪問初始的Request和Response。但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性。d、可測性測試struts1.2 Action的一個主要問題是execute方法暴露了Servlet API(這使得測試要依賴于容器)。一個第三方擴展:struts TestCase提供了一套struts1.2的模擬對象來進行測試。Struts2.0 Action可以通過初始化、設(shè)置屬性、調(diào)用方法來測試,“依賴注入”也使得測試更容易。

 

5、struts如何實現(xiàn)國際化

以下以兩國語言(中文,英文)為例:1. 在工程中加入Struts支持2. 編輯applicationResource.properties文件,在其中加入要使用國際化的信息, 例如: lable.welcome.china=Welcome!!!3. 創(chuàng)建英文資源文件ApplicationResource_en.properites4. 創(chuàng)建臨時中文資源文件ApplicationResource_temp.properites 例如:lable.welcom.china=中國歡迎您!5. 對臨時中文資源文件進行編碼轉(zhuǎn)換。可以使用myeclipse的插件,也可以在dos下執(zhí)行:native2ascii -encoding gb2312 ApplicationResource_temp.properties ApplicationResource_zh_CN.properties6. 在jsp中加入struts的bean標(biāo)記庫

 

6、 Struts框架的數(shù)據(jù)驗證可分為幾種類型?

表單驗證(由ActionForm Bean處理):如果用戶沒有在表單中輸入姓名,就提交表單,將生成表單驗證錯誤

業(yè)務(wù)邏輯驗證(由Action處理):如果用戶在表單中輸入的姓名為“Monster”,按照本應(yīng)用的業(yè)務(wù)規(guī)則,不允許向“Monster”打招呼,因此將生成業(yè)務(wù)邏輯錯誤。

 

7、簡述Form Bean的表單驗證流程。

1、當(dāng)用戶提交了HTML表單,Struts框架自動把表單數(shù)據(jù)組裝到ActionForm Bean中。

2、接下來Struts框架會調(diào)用ActionForm Bean的validate()方法進行表單驗證。

3、如果validate()方法返回的ActionErrors 對象為null,或者不包含任何ActionMessage對象,就表示沒有錯誤,數(shù)據(jù)驗證通過。

4、如果ActionErrors中包含ActionMessage對象,就表示發(fā)生了驗證錯誤,Struts框架會把ActionErrors對象保存到request范圍內(nèi),然后把請求轉(zhuǎn)發(fā)到恰當(dāng)?shù)囊晥D組件,視圖組件通過<html:errors>標(biāo)簽把request范圍內(nèi)的ActionErrors對象中包含的錯誤消息顯示出來,提示用戶修改錯誤。

 

8、簡單敘述ActionForm Bean的作用

1、ActionForm Bean也是一種JavaBean,除了具有一些JavaBean的常規(guī)方法,還包含一些特殊的方法,用于驗證HTML表單數(shù)據(jù)以及將其屬性重新設(shè)置為默認(rèn)值。

2、Struts框架利用ActionForm Bean來進行View組件和Controller組件之間表單數(shù)據(jù)的傳遞。

3、Struts框架把View組件接受到的用戶輸入的表單數(shù)據(jù)保存在ActionForm Bean中,把它傳遞給Controller組件,Controller組件可以對ActionForm Bean中的數(shù)據(jù)進行修改JSP文件使用Struts標(biāo)簽讀取修改后的ActionForm Bean的信息,重新設(shè)置HTML表單。

9、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)另一批開發(fā)者接手這個項目時,這種優(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)一同步,這個就引起了線程安全的問題。三、 測試不方便. 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時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。六、 前端表達(dá)式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表達(dá)式語言來獲取數(shù)據(jù)。可是JSTL的表達(dá)式語言在Collection和索引屬性方面處理顯得很弱。七、 對Action執(zhí)行的控制困難. Struts創(chuàng)建一個Action,如果想控制它的執(zhí)行順序?qū)浅@щy。甚至你要重新去寫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 event相比是一種粗粒度的事件

 

Hibernate相關(guān)

1、Hibernate框架的認(rèn)識(工作原理)

Hibernate是一個輕量級的持久層開源框架,它是連接Java應(yīng)用程序和關(guān)系數(shù)據(jù)庫的中間件,負(fù)責(zé)Java對象和關(guān)系數(shù)據(jù)之間的映射.Hibernate內(nèi)部對JDBC API進行了封裝,負(fù)責(zé)Java對象的持久化.因為它封裝了所有的數(shù)據(jù)訪問細(xì)節(jié),使得業(yè)務(wù)邏輯層可以專注于實現(xiàn)業(yè)務(wù)邏輯.它是一種優(yōu)秀的ORM映射工具,提供了完善的對象-關(guān)系映射服務(wù),開發(fā)過程不依賴容器,靈活性非常大,可以無縫集成到任何一個java系統(tǒng)中

 

2、 為什么要用Hibernate

1. 封裝了jdbc,簡化了很多重復(fù)性代碼。2. 簡化了DAO層編碼工作,使開發(fā)更對象化了。3. 移植性好,支持各種數(shù)據(jù)庫,如果換個數(shù)據(jù)庫只要在配置文件中變換配置就可以了,不用改變hibernate代碼。4. 支持透明持久化,因為hibernate操作的是純粹的(pojo)java類,沒有實現(xiàn)任何接口,沒有侵入性。所以說它是一個輕量級框架。

 

3、緩存:

session緩存:被稱為Hibernate的第一級緩存.它存放被單前工作單元加載的對象.sessionFactory緩存:被稱為Hibernate的第二級緩存.一個實例對應(yīng)一個數(shù)據(jù)存儲源.它是線程安全的,是重量級的.它需要一個很大的緩存,用來存放預(yù)定義的SQL語句以及映射元數(shù)據(jù)等.

 

4、對象的3個狀態(tài)

瞬時:一個實體通過new操作符創(chuàng)建后,沒有和Hibernate的Session建立關(guān)系,也沒有手動賦值過該實體的持久化標(biāo)識(持久化標(biāo)識可以認(rèn)為映射表的主鍵)。此時該實體中的任何屬性的更新都不會反映到數(shù)據(jù)庫表中。持久化:當(dāng)一個實體和Hibernate的Session創(chuàng)建了關(guān)系,并獲取了持久化標(biāo)識,而且在Hibernate的Session生命周期內(nèi)存在。此時針對該實體任何屬性的更改都會直接影響到數(shù)據(jù)庫表中一條記錄對應(yīng)字段的更新,也即與對應(yīng)數(shù)據(jù)庫表保持同步。脫管:當(dāng)一個實體和Hibernate的Session創(chuàng)建了關(guān)系,并獲取了持久化標(biāo)識,而此時Hibernate的Session的生命周期結(jié)束,實體的持久化標(biāo)識沒有被改動過。針對該實體的任何屬性的修改都不會及時反映到數(shù)據(jù)庫表中。

 

5、性能問題在批操作性能和cache之間存在不可調(diào)和的矛盾,你要熟悉hibernate一級和二級緩存機制才能寫出合理批操作代碼,否則不但性能低下,還可能導(dǎo)致out memory。hibernate reference文檔中的Best practise也提到,Use hand-coded JDBC in bottlenecks,也就是說在某些性能瓶頸的地方考慮使用硬編碼jdbc。

6、JDBC,Hibernate,EJB三者的區(qū)別?

EJB:我們必須遵守復(fù)雜的J2EE規(guī)范,Hibernate不強迫必須滿足特定的規(guī)范.EJB只能運行在EJB容器中,Hibernate可以運行在任何java環(huán)境中.目前,對于復(fù)雜的域模型,EJB容器提供的對象-關(guān)系映射能力有限.相比之下,Hibernate提供了完善的對象-關(guān)系映射服務(wù).EJB雖然是一種可以移植的組件,但是實際上卻受到很大的限制,因為各個產(chǎn)商生產(chǎn)CMP引擎差異,它們使用的對象-關(guān)系映射元數(shù)據(jù)各不相同,使得EJB不能順利的從一個EJB容器移植到另一個EJB容器當(dāng)中.而Hibernate可以無縫集成到任何一個Java系統(tǒng)中.

JDBC:實現(xiàn)業(yè)務(wù)邏輯的代碼和訪問數(shù)據(jù)庫的代碼混雜在一起,使程序結(jié)構(gòu)不清晰,可讀性差

 

7、get和load的區(qū)別

1>不存在對應(yīng)記錄時表現(xiàn)不一樣2>load返回的是代理對象(javassist.jar生成二進制碼),等到真正用到對象的內(nèi)容才會發(fā)出SQL語句3>get直接從數(shù)據(jù)庫加載,不會延遲無論是get還是load,都會首先查找緩存(一級緩存),如果沒有,才會去數(shù)據(jù)庫查找,調(diào)用clear()方法,可以強制清除

 

8、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ù)器的性能。

 

9、如何對hibernate進行優(yōu)化?

1. 使用雙向一對多關(guān)聯(lián),不使用單向一對多2. 靈活使用單向一對多關(guān)聯(lián)3. 不用一對一,用多對一取代4. 配置對象緩存,不使用集合緩存5. 一對多集合使用Bag,多對多集合使用Set6. 繼承類使用顯式多態(tài)7. 表字段要少,表關(guān)聯(lián)不要怕多,有二級緩存

 

10、 hibernate的核心類是什么,它們的相互關(guān)系是什么?重要的方法是什么?

Configuration 接口:配置Hibernate,根據(jù)其啟動hibernate,創(chuàng)建SessionFactory 對象;SessionFactory 接口:初始化Hibernate,充當(dāng)數(shù)據(jù)存儲源的代理,創(chuàng)建session 對象,sessionFactory 是線程安全的,意味著它的同一個實例可以被應(yīng)用的多個線程共享,是重量級、二級緩存;Session 接口:負(fù)責(zé)保存、更新、刪除、加載和查詢對象,是線程不安全的,避免多個線程共享同一個session,是輕量級、一級緩存;Session如下方法: save,load,update,delete,Query q=CreateQuery(“from Customer where customerName=:customerName”)beginTransaction, close, transaction, commitTransaction 接口:管理事務(wù);Query 和Criteria 接口:執(zhí)行數(shù)據(jù)庫的查詢。

 

Spring相關(guān)

1、Spring的理解

Spring是一個輕量級的容器,非侵入性的框架.最重要的核心概念是IOC,并提供AOP概念的實現(xiàn)方式,提供對持久層,事務(wù)的支持,對當(dāng)前流行的一些框架(Struts,Hibernate,MVC),Sping也提供了與它們的相整合的方案.使用Spring,我們能夠減少類之間的依賴性和程序之間的耦合度,最大程度的實現(xiàn)松耦合,使程序更加靈活,可擴展性更強.

IOC,中文翻譯為"反轉(zhuǎn)控制,".DI->;"依賴注入"指的是:我們不必自己在程序代碼中維護對象的依賴關(guān)系,而是通過一個xml配置文件,將類的屬性和實例悄悄的注入到類里面.實現(xiàn)類的動態(tài)加載,使得類和類之間可以方便的切換(通過接口).

這種設(shè)計方式的思想表現(xiàn)為:高層模塊不應(yīng)該依賴低層模塊,而是模塊都必須依賴于抽象.程序不應(yīng)改依賴于實現(xiàn),而是依賴于抽象接口.應(yīng)用程序不要去找容器,而是容器給我們所有想要的對象.

Spring的另一個重要的方面是支持AOP的實現(xiàn):AOP的中文翻譯是:面向切面編程,也稱為面向問題編程.面向切面編程(aop)是對面向?qū)ο缶幊蹋╫op)的補充,面向?qū)ο缶幊虒⒊绦蚍纸獬筛鱾€層次的對象,面向切面編程將程序運行過程分解成各個切面。AOP從程序運行角度考慮程序的結(jié)構(gòu),提取業(yè)務(wù)處理過程的切面,oop是靜態(tài)的抽象,aop是動態(tài)的抽象,是對應(yīng)用執(zhí)行過程中的步驟進行抽象,從而獲得步驟之間的邏輯劃分。

aop框架具有的兩個特征:1.各個步驟之間的良好隔離性2.源代碼無關(guān)性

 

2、Spring 注解

Spring 2.5 中除了提供 @Component 注釋外,還定義了幾個擁有特殊語義的注釋,它們分別是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,這 3 個注釋和 @Component 是等效的,但是從注釋類的命名上,很容易看出這 3 個注釋分別和持久層、業(yè)務(wù)層和控制層(Web 層)相對應(yīng)。雖然目前這 3 個注釋和 @Component 相比沒有什么新意,但 Spring 將在以后的版本中為它們添加特殊的功能。所以,如果 Web 應(yīng)用程序采用了經(jīng)典的三層分層結(jié)構(gòu)的話,最好在持久層、業(yè)務(wù)層和控制層分別采用 @Repository、@Service 和 @Controller 對分層中的類進行注釋,而用 @Component 對那些比較中立的類進行注釋。

在 一個稍大的項目中,通常會有上百個組件,如果這些組件采用xml的bean定義來配置,顯然會增加配置文件的體積,查找以及維護起來也不太方便。 Spring2.5為我們引入了組件自動掃描機制,他可以在類路徑底下尋找標(biāo)注了 @Component,@Service,@Controller,@Repository注解的類,并把這些類納入進spring容器中管理。它的作用 和在xml文件中使用bean節(jié)點配置組件時一樣的。

@Service用于標(biāo)注業(yè)務(wù)層組件,@Controller用于標(biāo)注控制層組件(如struts中的action),@Repository用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件,@Component泛指組件,當(dāng)組件不好歸類的時候,我們可以使用這個注解進行標(biāo)注。

 

3、spring 的優(yōu)點都有哪些?

1.降低了組件之間的耦合性 ,實現(xiàn)了軟件各層之間的解耦2.可以使用容易提供的眾多服務(wù),如事務(wù)管理,消息服務(wù)等3.容器提供單例模式支持4.容器提供了AOP技術(shù),利用它很容易實現(xiàn)如權(quán)限攔截,運行期監(jiān)控等功能5.容器提供了眾多的輔助類,能加快應(yīng)用的開發(fā)6.spring對于主流的應(yīng)用框架提供了集成支持,如hibernate,JPA,Struts等7.spring屬于低侵入式設(shè)計,代碼的污染極低8.獨立于各種應(yīng)用服務(wù)器9.spring的DI機制降低了業(yè)務(wù)對象替換的復(fù)雜性10.Spring的高度開放性,并不強制應(yīng)用完全依賴于Spring,開發(fā)者可以自由選擇spring的部分或全部

 

4、Spring里面如何配置數(shù)據(jù)庫驅(qū)動?

使用”org.springframework.jdbc.datasource.DriverManagerDataSource”數(shù)據(jù)源來配置數(shù)據(jù)庫驅(qū)動。

 

5、Spring里面applicationContext.xml文件能不能改成其他文件名?

ContextLoaderListener是一個ServletContextListener, 它在你的web應(yīng)用啟動的時候初始化。缺省情況下, 它會在WEB-INF/applicationContext.xml文件找Spring的配置。 你可以通過定義一個元素名字為”contextConfigLocation”來改變Spring配置文件的位置。示例如下:

org.springframework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/xyz.xml

 

6、AOP里面重要的幾個名詞概念解釋

切面(aspect): 一個關(guān)注點的模塊化,這個關(guān)注點可能會橫切多個對象。事務(wù)管理是J2EE應(yīng)用中一個關(guān)于橫切關(guān)注點的很好的例子。 在Spring AOP中,切面可以使用通用類(基于模式的風(fēng)格) 或者在普通類中以 @Aspect 注解(@AspectJ風(fēng)格)來實現(xiàn)。

連接點(Joinpoint): 在程序執(zhí)行過程中某個特定的點,比如某方法調(diào)用的時候或者處理異常的時候。 在Spring AOP中,一個連接點 總是 代表一個方法的執(zhí)行。 通過聲明一個org.aspectj.lang.JoinPoint類型的參數(shù)可以使通知(Advice)的主體部分獲得連接點信息。

通知(Advice): 在切面的某個特定的連接點(Joinpoint)上執(zhí)行的動作。通知有各種類型,其中包括“around”、“before”和“after”等通知。 通知的類型將在后面部分進行討論。許多AOP框架,包括Spring,都是以攔截器做通知模型, 并維護一個以連接點為中心的攔截器鏈。

切入點(Pointcut): 匹配連接點(Joinpoint)的斷言。通知和一個切入點表達(dá)式關(guān)聯(lián),并在滿足這個切入點的連接點上運行(例如,當(dāng)執(zhí)行某個特定名稱的方法時)。 切入點表達(dá)式如何和連接點匹配是AOP的核心:Spring缺省使用AspectJ切入點語法。

引入(Introduction): (也被稱為內(nèi)部類型聲明(inter-type declaration))。聲明額外的方法或者某個類型的字段。 Spring允許引入新的接口(以及一個對應(yīng)的實現(xiàn))到任何被代理的對象。 例如,你可以使用一個引入來使bean實現(xiàn) IsModified 接口,以便簡化緩存機制。

目標(biāo)對象(Target Object): 被一個或者多個切面(aspect)所通知(advise)的對象。也有人把它叫做 被通知(advised) 對象。 既然Spring AOP是通過運行時代理實現(xiàn)的,這個對象永遠(yuǎn)是一個 被代理(proxied) 對象。

AOP代理(AOP Proxy): AOP框架創(chuàng)建的對象,用來實現(xiàn)切面契約(aspect contract)(包括通知方法執(zhí)行等功能)。 在Spring中,AOP代理可以是JDK動態(tài)代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)風(fēng)格和@AspectJ注解風(fēng)格的切面聲明,對于使用這些風(fēng)格的用戶來說,代理的創(chuàng)建是透明的。

織入(Weaving): 把切面(aspect)連接到其它的應(yīng)用程序類型或者對象上,并創(chuàng)建一個被通知(advised)的對象。 這些可以在編譯時(例如使用AspectJ編譯器),類加載時和運行時完成。 Spring和其他純Java AOP框架一樣,在運行時完成織入。

通知的類型:

前置通知(Before advice): 在某連接點(join point)之前執(zhí)行的通知,但這個通知不能阻止連接點前的執(zhí)行(除非它拋出一個異常)。

返回后通知(After returning advice): 在某連接點(join point)正常完成后執(zhí)行的通知:例如,一個方法沒有拋出任何異常,正常返回。

拋出異常后通知(After throwing advice): 在方法拋出異常退出時執(zhí)行的通知。

后通知(After (finally) advice): 當(dāng)某連接點退出的時候執(zhí)行的通知(不論是正常返回還是異常退出)。

環(huán)繞通知(Around Advice): 包圍一個連接點(join point)的通知,如方法調(diào)用。這是最強大的一種通知類型。 環(huán)繞通知可以在方法調(diào)用前后完成自定義的行為。它也會選擇是否繼續(xù)執(zhí)行連接點或直接返回它們自己的返回值或拋出異常來結(jié)束執(zhí)行。

環(huán)繞通知是最常用的一種通知類型。大部分基于攔截的AOP框架,例如Nanning和JBoss4,都只提供環(huán)繞通知。

切入點(pointcut)和連接點(join point)匹配的概念是AOP的關(guān)鍵,這使得AOP不同于其它僅僅提供攔截功能的舊技術(shù)。 切入點使得定位通知(advice)可獨立于OO層次。 例如,一個提供聲明式事務(wù)管理的around通知可以被應(yīng)用到一組橫跨多個對象中的方法上(例如服務(wù)層的所有業(yè)務(wù)操作)。

ssm的面試題

http://blog.csdn.net/my_name_nb/article/details/54881776


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建水县| 蓬莱市| 高陵县| 嘉荫县| 张家港市| 浮梁县| 元氏县| 雅江县| 东山县| 桂平市| 左权县| 梧州市| 道真| 安平县| 来宾市| 察哈| 门源| 洛扎县| 疏附县| 刚察县| 平罗县| 湟源县| 浠水县| 高淳县| 闻喜县| 元江| 泸州市| 大厂| 东宁县| 兴文县| 巴彦淖尔市| 榆林市| 当涂县| 云南省| 尚义县| 和硕县| 德庆县| 安溪县| 托克逊县| 西乌| 舞阳县|