Java工程師面試題之三大框架_第1頁
Java工程師面試題之三大框架_第2頁
Java工程師面試題之三大框架_第3頁
Java工程師面試題之三大框架_第4頁
Java工程師面試題之三大框架_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java工程師(程序員)面即

Struts.Spring.Hibernate三大框架

1.Hibernate工作原理及為什么要用?

原理:1.讀取并解析配置文件2.讀取并解析映射信息,創(chuàng)建SessionFactory3.打開Session4.

創(chuàng)建事務Transation5.許久化操作6.提交事務7.關閉Session8.關閉SesstionFactory

為什么要用:1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復

性代碼。2.Hibernate是一個基于JDBC的主流許久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他

很大程度的簡化DAO層的編碼工作3.hibernate運用Java反射機制,而不是字節(jié)碼增加程

序來實現(xiàn)透亮性。4.hibernate的性能特殊好,因為它是個輕量級框架。映射的靈敏性很精

彩。它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種困難關系。

2.Hibernate是如何延遲加載?

1.Hibernate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)

2.Hibernate3供應了屬性的延遲加載功能當Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在

與內存中,當程序真正對數(shù)據(jù)的操作時,對象才存在與內存中,就實現(xiàn)了延遲加載,他節(jié)約

了服務器的內存開銷,從而提高了服務器的性能。

3.Hibernate中怎樣實現(xiàn)類之間的關系?(如:一對多、多對多的關系)

類與類之間的關系主要體現(xiàn)在表與表之間的關系進行操作,它們都是對對象進行操作,我們

程序中把全部的表與類都映射在一起,它們通過配置文件中的many-to-one>one-to-many,

many-to-many

4.Strutsl流程:

I、客戶端閱讀器發(fā)出請求。2、依據(jù)web.xml配置,該請求被AciionServlet接收。3、

依據(jù)struts-config.xml配置,ActionServlet先將請求中的參數(shù)填充到ActionForm中,然后

ActionServlet再將請求發(fā)送到Action進行處理。4^是否驗證,須要驗證則調用AclionForm

的validate方法,驗證失敗則跳轉到input,成功則接著。5、Action從ActionForm獲得數(shù)據(jù),

調用javabean中的業(yè)務方法處理數(shù)據(jù)。6、Action返回ActionForward對象,跳轉到相應JSP

頁面或Action。7、返回響應到客戶端閱讀器。

MVC設計模式:modal:“模型”也稱業(yè)務邏輯,是正真完成任務的代碼,相當與

JavaBeanview:視圖,其實就是顯示界面,相當于JSPcontroller:限制器,他限制模型和視

圖的交互過程,相當于se:vlelstrutsl是基于MVC設計模式hibernate是基于ORM對象關系

映射

5.struls是什么?

struts1是基于JSP和servlet的?個開源的Web應用框架,運用的是MVC的設計模式struts2

是基于webwork技術的框架,是sun和webwork公司聯(lián)手開發(fā)的一個功能特殊齊全的框架,

struts2和strutsl沒有任何關系,是?個全新的框架

6.spring是什么?

spring是一個集成了許多第三方框架的大雜及會,其核心技術是IOC(限制反轉,也稱依靠注

入)和AOP(面對切面編程)

7.hibernate是什么?

hibernate是基于ORM對象關系映射(完成對象數(shù)據(jù)到關系數(shù)據(jù)映射的機制)實現(xiàn)的,做數(shù)據(jù)

許久化的工具

8.JSF是什么?

JavaServerFace是基于組件的web開發(fā)框架,跟sturts差不多的框架

9.數(shù)據(jù)庫里面的索引和約束是什么?

索引是為了提高數(shù)據(jù)的檢索速度,索引是建立在數(shù)據(jù)表上,依據(jù)一個或多個字段建立的約束

是為了保持數(shù)據(jù)的完整性,約束有非空約束,主鍵約束,外鍵約束等等。

lO.spring是什么

這個問題,往往可以通過我們?yōu)槭裁匆\用spring這個,可題來切入:AOP讓開發(fā)人員可以

創(chuàng)建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。運用AOP后,

公共服務(比如日志、訂久性、事務等)就可以分解成方面并應用到域對象上,同時不會

增加域對象的對象模型的困難性。IOC允許創(chuàng)建?個可以構造對象的應用環(huán)境,然后向這

些對象傳遞它們的協(xié)作對象。正如單詞倒置所表明的,IOC就像反過來的JNDI。沒有

運用一堆抽象工廠、服務定位器、單元素(singleton)和干脆構造(straightconstruction),

每一個對象都是用其協(xié)作對象構造的。因此是由容器管理協(xié)作對象(collaborator)oSpring

即使一個AOP框架,也是一IOC容器。Spring最好的地方是它有助于您替換對象。有了

Spring,只要用JavaBcan屬性和配置文件加入依靠性(協(xié)作對象)。然后可以很簡潔地在須

要時替換具有類似接口的協(xié)作對象。

11.用自己的話簡要闡述struts?的執(zhí)行流程。

Struts2框架本身大致可以分為3個部分:核心限制器FilterDispatcher,業(yè)務限制器Action

和用戶實現(xiàn)的企業(yè)業(yè)務邏輯組件。核心限制器向16而$沖<^「是的g2框架的基礎,包含

了框架內部的限制流程和處理機制。業(yè)務限制器Action和業(yè)務邏輯組件是須要用戶來自己

實現(xiàn)的。用戶在開發(fā)Action和業(yè)務邏輯組件的同時,還須要編寫相關的配置文件,供核心

限制器FilterDispatcher來運用。

Struts2的工作流程相對于StrutsI要簡潔,與WebWork框架基本相同,所以說Struts2是

WebWork的升級版本?;竞喴鞒倘缦拢?、客戶端閱讀器發(fā)出請求。2、依據(jù)web.xml

配置,該請求被FilterDispatcher接收。3、依據(jù)struts.xml配置.,找到須要調用的Action類

和方法,并通過IoC方式,將值注入給Acitono4、Action調用業(yè)務邏輯組件處理業(yè)務邏輯,

這一步包含表單驗證。5、Action執(zhí)行完畢,依據(jù)struts.xml中的配置找到對應的返回結果

result,并跳轉到相應頁面。6、返回響應到客戶端閱讀器。

1Action是不是線程平安的?假如不是有什么方式可以保證Action的線程平安?假如是,

說明緣由

不是

聲明局部變量,或者擴展RequestProcessor,讓每次都創(chuàng)建一個Aclion,或者在spring中用

scope="prototype”來管理

2.MVC,分析一下struts是如何實現(xiàn)MVC的

m:JavaBcan或結合EJB組件或者pojo構成

c:Action來實現(xiàn)

v:一組JSP文件及其標簽構成。

3.struts中的幾個關鍵對象的作用(說說幾個關鍵對象的作用)

Action:限制器類,ActionFonn:表單對象,DynaValidatorFonn:動態(tài)form,ActonMapping:

配置文件中action節(jié)點的信息

4.說說AOP和IOC的概念以及在spring中是如何應用的

AOP:面對方面編程,ioc:依靠注入;聲明式事務和編程式事務主動一些通用部分

5.Hibernate有哪幾種查詢數(shù)據(jù)的方式

hql查詢,sql查詢,條件查詢

6』oad()和get。的區(qū)分

hibernate對于load方法認為該數(shù)據(jù)在數(shù)據(jù)庫中確定存在,可以放心的運用代理來延遲加載,

load默認支持延遲加載,在用到對象中的其他屬性數(shù)據(jù)時才查詢數(shù)據(jù)庫,但是萬?數(shù)據(jù)庫

中不存在該記錄,只能拋異樣ObjectNotFoundEcceplion:所說的load方法拋異樣是指在運

用該對象的數(shù)據(jù)時,數(shù)據(jù)庫中不存在該數(shù)據(jù)時拋異樣,而不是在創(chuàng)建這個對象時。由于

session中的緩存對于hibernate來說是個相當廉價的資源,所以在load時會先查一下session

緩存看看該id對應的對象是否存在,不存在則創(chuàng)建代理(load時候之查詢一級緩存,不存

在則創(chuàng)建代理)。gct()現(xiàn)在一級緩存找,沒有就去二級線存找,沒有就去數(shù)據(jù)庫找,沒有就

返回null;而對于get方法,hibernate確定要獲得到真實的數(shù)據(jù),否則返回nuH。

7.談談hibernate的延遲加我和openSessionlnView

延遲加載要在session范圍內,用到的時候再加載;opensessioninview是在web層寫了一個

filter來打開和關閉session,這樣就表示在一次request過程中session始終開著,保證了延

加載在session中的這個前提。

8.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。

聲明事務和編程事務

隔離級別:

-DEFAULT運用數(shù)據(jù)庫默認的隔離級別

-READ_UNCOMMITTED會出現(xiàn)臟讀,不行重復讀和幻影讀問題

-READ_COMMITTED會出現(xiàn)重復讀和幻影讀

-REPEATABLE_READ會出現(xiàn)幺J影讀

-SERIALIZABLE最平安,但是代價最大,性能影響極其嚴峻

和傳播行:

.REQUIRED存在事務就融入該事務,不存在就創(chuàng)建事務

-SUPPORTS存在事務就融入事務,不存在則不創(chuàng)建事務

-MANDATORY存在事務則融入該事務,不存在,拋異樣

1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重兔性代碼。

2.Hibernate是一個基于JDBC的主流許久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程

度的簡化DAO層的編碼工作

3.hibernate運用Java反射機制,而不是字節(jié)碼增加程序來實現(xiàn)透亮性。

4.hibernate的性能特殊好,因為它是個輕量級框架。映射的靈敏性很精彩。它支持各種

關系數(shù)據(jù)庫,從一對一到多對多的各種困難關系。

2.Hibernate是如何延遲加教?

1.Hibernate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)

2.Hibernate3供應了屬性的延遲加載功能

當Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內存中,當程序真正對數(shù)據(jù)的操作時,

對象才存在與內存中,就實現(xiàn)了延遲加載,他節(jié)約了服務器的內存開銷,從而提高了服務器

的性能。

3.Hibernate中怎樣實現(xiàn)類之間的關系?(如:一對多、多對多的關系)

類與類之間的關系主要體現(xiàn)在表與表之間的關系進行操作,它們都市對對象進行操作,我們

程序中把全部的表與類都映射在一起,它們通過配置文件中的many-to-one^one-to-many

many-lo-many、

4.說下Hibernate的緩存機制

1.內部緩存存在Hibcmalc中又叫一級緩存,屬于應用事物級緩存

2.二級緩存:

a)應用及緩存

b)分布式緩存

條件:數(shù)據(jù)不會被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)

頻繁運用、非關鍵數(shù)據(jù)

c)第三方線存的實現(xiàn)

5.Hibernate的查詢方式

Sql、Criteria,objectcomptosition

Hql:

1、屬性查詢

2、參數(shù)查詢、命名參數(shù)查詢

3、關聯(lián)查詢

4、分頁查詢

5、統(tǒng)計函數(shù)

6.如何優(yōu)化Hibernate?

I.運用雙向一對多關聯(lián),不運用單向一對多

2.靈敏運用單向一對多關聯(lián)

3.不用一對一,用多對一取代

4.配置對象緩存,不運用集合緩存

5.一對多集合運用Bag,多對多集合運用Set

6.繼承類運用顯式多態(tài)

7.表字段要少,表關聯(lián)不要怕多,有二級緩存撐腰

7.Struts工作機制?為什么要運用Struts?

工作機制:

Struts的工作流程:

在web應用啟動時就會加載初始化ActionScrvlct,ActionScrvlct從

struts-config.xml文件中讀取配置信息,把它們存放到各種配置對象

當ActionScndct接收到一個客戶請求時,將執(zhí)行如下流程.

-⑴檢索和用戶請求匹配的ActionMapping實例,假如不存在,就返I可請求路徑無效信息、;

?(2)假如ActionForm實例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)保

存至ljActionForm對象中;

-(3)依據(jù)配置信息確定是否須要表單驗證.假如須要驗證,就調用ActionForm的validate()

方法;

-(4)假如ActionForm的validate。方法返回null或返回一個不包含ActionMessage的

ActuibErrors對象,就表示表單驗證成功;

-(5)ActionServlel依據(jù)AclionM叩ping所包含的映射信息確定將請求轉發(fā)給哪個Action,

假如相應的Action實例不存在,就先創(chuàng)建這個實例,然后調用Action

的execute。方法;

-⑹Action的execute。方法返回一個ActionFonvard對象,ActionServlet在把客戶請求轉

發(fā)給ActionForward對象指向的JSP組件;

-(7)ActionForward對象指向JSP組件牛.成動態(tài)網(wǎng)頁,返回給客戶;

為什么要用:

JSP、Servlet、JavaDcan技術的出現(xiàn)給我們構建強大的企業(yè)應用系統(tǒng)供應了可能。但用這些

技術構建的系統(tǒng)特殊的繁亂,所以在此之匕我們須要?個規(guī)則、?個把這些技術組織起來

的規(guī)則,這就是框架,Struls便應運而生。

基于Struts開發(fā)的應用由3類組件構成:限制器組件、模型組件、視圖組件

8.Struts的validate框架是如何驗證的?

在struts配置文件中配置具體的錯誤提示,再在ForniBean中的validate。方法具體調用。

9.說下Struts的設計模式

MVC模式:web應用程序啟動時就會加載并初始化AclionServler。用戶提交表單時,一個配

置好的ActionForm對象被創(chuàng)建,并被填入表單相應的數(shù)據(jù),ActionServler依據(jù)

Struis-config.xml文件配置好的設置確定是否須要表單驗證,假如須要就遍用ActionForm的

Validate()驗證后選擇將請求發(fā)送到哪個Action,假如Action不存在,ActionServlet會先

創(chuàng)建這個對象,然后調用Action的execute()方法。Execute()從ActionForm對象中獲

得數(shù)據(jù),完成業(yè)務邏輯,返回一個ActionForward對象,ActionServlet再把客戶請求轉發(fā)給

ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網(wǎng)頁,返回

給客戶。

10.spring工作機制及為什么要用?

I.springmvc請全部的請求都提交給DispatcherServlet,它會托付應用系統(tǒng)的其他模塊負責負

責對請求進行真正的處理工作。

2.DispatcherServlet查詢一個或多個HandlerMapping,找到處理請求的Controller.

3.DispatcherServlet請請求提交到目標Controller

4.Controller進行業(yè)務邏輯處理后,會返回一個ModelAndView

5,Dispathcher查詢一個或多個ViewResoIver視圖解析器,找到ModelAndView對象指定的視

圖對象

6.視圖對象負責渲染返I可給客戶端。

為什么用:

{AOP讓開發(fā)人員可以創(chuàng)建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序

代碼中。運用AOP后,公共服務(比如日志、許久性、事務等)就可以分解成方面并應

用到域對象上,同時不會增加域對象的對■象模型的困難性。

IOC允許創(chuàng)建一個可以構造對象的應用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。

正如單詞倒置所表明的,IOC就像反過來的JNDI。沒有運用一堆抽象工廠、服務定位

器、單元素(singleton)和干脆構造(straightconstruction),每一個對象都是用其協(xié)作對象

構造的。因此是由容器管理協(xié)作對象(collaborator)。

Spring即使一個AOP框架,也是一IOC容器。Spring最好的地方是它有助于您替換對象。

有了Spring,只要用JavaBean屬性和配置文件加入依靠性(協(xié)作對象)。然后可以很簡潔

地在須要時替換具有類似接口的協(xié)作對象。}

Struts.Spring.Hibernate優(yōu)缺點

Struts跟Tomcat、Turbine等諸多Apache項目一樣,是開源軟件,這是它的一大優(yōu)點。使

開發(fā)者能更深化的了解其內部實現(xiàn)機制。Struts開放源碼框架的創(chuàng)建是為了使開發(fā)者在構

建基于JavaServlet和JavaSen?erPages(JSP)技術的Web應用時更加簡潔。Struts框架為開

放者供應了一個統(tǒng)一的標桂框架,通過運用Struts作為基礎,開發(fā)者能夠更專注于應用程

序的商業(yè)邏輯。Struts框架本身是運用JavaSen-let和JavaServerPages技術的一種

Model-View-Controller(MVC)實現(xiàn).

具體來講,

Struts的優(yōu)點有:

1.實現(xiàn)MVC模式,結構清楚,使開發(fā)者只美注業(yè)務邏輯的實現(xiàn).

2.有豐富的tag可以用,Struts的標記庫(Taglib),如能靈敏動用,則能大大提高開發(fā)效率。

另外,就目前國內的JSP開發(fā)者而言,除了運用JSP自帶的常用標記外,很少開發(fā)自己的標

記,或許Struts是一個很好的起點。

3.頁面導航.頁面導航將是今后的一個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡更加清楚。

通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好

處。尤其是當另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。

4.供應Exception處理機制.

5.數(shù)據(jù)庫鏈接池管理

6.支持U8N

缺點:

一、轉到展示層時,須要配置forward,每一次轉到展示層,信任大多數(shù)都是干脆轉到jsp,

而涉及到轉向,須要配置forward,假如有十個展示層的jsp,須要配置十次struts,而且還

不包括有時候書目、文件變更,須要重新修改forward,留意,每次修改配置之后,要求重

新部署整個項目,而lomcale這樣的服務器,還必需重新啟動服務器,假如業(yè)務變更困難常

見的系統(tǒng),這樣的操作簡潔不行想象?,F(xiàn)在就是這樣,幾十上百個人同時在線運用我們的

系統(tǒng),大家可以想象一下,我的苦惱有多大。

二、Struts的Action必需是thread—safe方式,它僅僅允許一個實例去處理全部的請求。

所以action用到的全部的資源都必需統(tǒng)一同步,這個就引起了線程平安的問題。

三、測試不便利.Struts的每個Action都同Web層耦合在一起,這樣它的測試依靠于Web

容器,單元測試也很難實現(xiàn)。不過有一個Junit的擴展工具StrutsTestCase可以實現(xiàn)它的單

元測試。

四、類型的轉換.Struts的FormBean把全部的數(shù)據(jù)都作為String類型,它可以運用工具

Commons-Beanutils進行類型轉化。但它的轉化都是在Class級別,而且轉化的類型是不行

配置的。類型轉化時的錯誤信息返回給用戶也是特殊困難的。

五、對Servlet的依靠性過強.Struts處理Action時必需要依靠ServletRequest和

SenletResponse,全部它擺脫不TServlet容器。

六、前端表達式語言方面Struts集成了JSTL,所以它主要運用JSTL的表達式語言來獲得數(shù)

據(jù)。可是JSTL的表達式語言在Collection和索引屬性方面處理顯得很弱。

七、對Action執(zhí)行的限制困難.Struts創(chuàng)建一個Action,假如想限制它的執(zhí)行:依次將會特殊

困難。甚至你要重新去寫Servlet來實現(xiàn)你的這個功能需求。

八、對Action執(zhí)行前和后的處理.Struts處理Action的時候是基于class的hierarchies,很

難在action處理前和后進行操作。

九、對事務支持不夠.在struts中,實際是一個表單Form對應一個Action類(或

DispatchAction),換一句話說:在Struts中實際是一個表單只能對應一個事務,struts這種

事務方式稱為applicationevent,applicationevent和componentevent相比是一種粗粒度的事

務。

Struts重要的表單對象AciionFomi是一種對象,它代表了一種應用,這個對象中至少包含幾

個字段,這些字段是Jsp頁面表單中的input字段,因為一個表單對應一個事務,所以,當

我們須要將事務粒度細化到表單中這些字段時,也就是說,一個字段對應一個事務時,單

純運用Struts就不太可能,當然通過結合JavaScript也是可以轉彎實現(xiàn)的。

2.Hibernate

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了特殊輕量級的對象封

裝,使得Java程序員可以為所欲為的運用對象編程思維來操縱數(shù)據(jù)庫。

Hibernate可以應用在任何運用JDBC的場合,既可以在Java的客戶端程序好用,也可以在

Servlet/JSP的Web應用中運用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架

構中取代CMP,完成數(shù)據(jù)許久化的重任。

大多數(shù)開發(fā)機構經(jīng)常實行創(chuàng)建各自獨立的數(shù)據(jù)許久層。一旦底層的數(shù)據(jù)結構發(fā)生變更,那么

修改應用的其余部分使之適應這種變更的代價將是特殊巨大的。Hibernate適時的填補J'這

一空白,它為Java應用供應了一個易用的、高效率的對象關系映射框架。hibernate是個輕

量級的許久性框架,功能卻特殊豐富。

優(yōu)點:

a.Hibemate運用Java反射機制而不是字節(jié)碼增加程序來實現(xiàn)透亮性。

b.Hibernate的性能特殊好,因為它是個輕量級框架。映射的靈敏性很精彩。

c.它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種困難關系。

缺點:

它限制您所運用的對象模型。(例如,一個許久性類不能映射到多個表)其獨有的界面和可憐

的市場份額也讓人擔憂,盡管如此,Hibernate還是以其強大的發(fā)展動力減輕了這些風險。

其他的開源許久性框架也有一些,不過都沒有Hibernate這樣有市場沖擊力。

上面回貼心情有點激烈,希望諒解,我不是因為有人指責Hibernate而感到不快,而是因為

帖子里面的觀點實在讓我覺得荒謬。不管覺得Hibernate好也吧,不好也吧,我唯?覺得缺

憾的是,在中文論壇里面找不到一個對Hibernale的真正高水平的評價。在TSS上有一個關

于Hibernate的hotthread,跟了幾百貼,其中包括Hibernate作者Gavin和LiDOJDO的CTO,

對于JDO和Hibernate有過一些激烈的爭論,我曾經(jīng)耐性的看了一遍,照舊沒有發(fā)覺針對。

Hibernate真正有力的攻擊,那些所謂的攻擊無非針對Hibernate沒有一個GUI的配置工具,

沒有商業(yè)公司支持,沒有標準化等等這些站不住腳的理由。

補充幾點我的看法:

入Hibernate是JDBC的輕量級的對象封裝,它是?個獨立的對象許久層框架,和AppServer,

和EJB沒有什么必定的聯(lián)系。Hibernate可以用在任何JDBC可以運用的場合,例如Java應

用程序的數(shù)據(jù)庫訪問代碼,DAO接口的實現(xiàn)類,甚至可以是BMP里面的訪問數(shù)據(jù)庫的代

碼。從這個意義上來說,Hibernate和EB不是一個范疇的東西,也不存在非此即彼的關系。

二、Hibernale是一個和JDBC密切關聯(lián)的框架,所以Hibernate的兼容性和JDBC驅動,和

數(shù)據(jù)庫都有確定的關系,但是和運用它的Java程序,和AppServer沒有任何關系,也不存

在兼容性問題。

三、Hibernate不能用來干脆和EntityBean做對比,只有放在整個J2EE項目的框架中才能比

較。并且即使是放在軟件整體框架中來看,Hibernate也是做為JDBC的替代者出現(xiàn)的,而不

是EntityBean的替代者出現(xiàn)的,讓我再列一次我已經(jīng)列n次的框架結構:

傳統(tǒng)的架構:

1)SessionBeanv-、EntityBean<->DB

為了解決性能障礙的替代架構:

2)SessionBean<->DAO<->JDBC<->DB

運用Hibernate來提高上面架構的開發(fā)效率的架構:

3)SessionBean<->DAO<->Hibernale<->DB

就上面3個架構來分析:

I、內存消耗:接受JDBC的架構2無疑是最省內存的,Hibernate的架構3次之,EB的架

構1最差。

2、運行效率:假如JDBC的代碼寫的特殊優(yōu)化,那么JDBC架構運行效率最高,但是實際

項目中,這一點幾乎做不到,這須要程序員特殊精通JDDC,運用Batch語句,調整

PrcaprcdStatcmcnt的BatchSize和FetchSize等參數(shù),以及在必要的狀況下接受結果集cache

等等。而一般狀況下程序員是做不到這一點的。因此Hiben1ale架構表現(xiàn)出最快的運行效率。

EB的架構效率會差的很遠。

3、開發(fā)效率:在有JBuikkr的支持下以及簡潔的項目,EB架構開發(fā)效率最高,JDBC次之,

Hibernate最差。但是在大的項目,特殊是許久層關系映射很困難的狀況下,Hibernate效率

高的驚人,JDBC次之,而EB架構很可能會失敗。

4、分布式,平安檢查,集群,負載均衡的支持

由于有SB做為Facade,3個架構沒有區(qū)分。

四、EB和Hibernate學習睢度在哪里?

EB的難度在哪里?不在困難的XML配置文件上,而在于EB運用略微不慎,就有嚴峻的性

能障礙。所以難在你須要學習許多EJB設計模式來避開性能問題,需要學習AppServer和

EB的配置來優(yōu)化EB的運行效率。做EB的開發(fā)工作,程序員的大部分精力都被放到了EB

的性能問題上了,反而沒有更多的精力關注本身就主要投入精力去考慮的對象許久層的設

計上來。

Hibernate難在哪里?不在Hibernate本身的困難,事實上Hibernate特殊的簡潔,難在Hibernate

太靈敏了。

當你用EB來實現(xiàn)許久層的時候,你會發(fā)覺EB實在是太笨拙了,笨拙到你根本沒有H么可

以選擇的余地,所以你根本就不用花費精力去設計方案,去平衡方案的好壞,去費腦筋考慮

選擇哪個方案,因為只有唯一的方案擺在你面前,你只能這么做,沒得選擇。

Hibernate相反,它太靈敏了,相同的問題,你至少可以設計出十幾種方案來解決,所以特

殊的犯難,原委用這個,還是用那個呢?這些方案之間原委有什么區(qū)分呢?他們的運行原

理有什么不同?運行效率哪個比較好?光是主鍵生成,就有七八種方案供你選擇,你犯難不

犯難?集合屬性可以用Sei,可以用List,還可以用Bag,原委哪個效率高,你犯難不犯難?

查詢可以用iterator,可以用list,哪個好,有什么區(qū)分?你犯難不犯難?復合主鍵你可以

干脆在hbm里面配置,也可以自定義CuslomeiType,哪種比較好些?你犯難不犯難?對于

一個表,你可以選擇單一映射一個對象,也可以映射成父子對象,還可以映射成兩個1:1

的對象,在什么狀況下用哪種方案比較好,你犯難不犯難?

這個列表可以始終開列下去,直到你不想再看下去為止。當你面前擺著多數(shù)的紛繁蕪雜的方

案的時候,你會覺得華蜜呢?還是哀痛呢?假如你是一個負責的程序員,那么你確定會細

致探討每種方案的區(qū)分,每種方案的效率,每種方案的運用場合,你會覺得你己經(jīng)陷入進去

拔不出來了。假如是用EB,你第一秒種就已經(jīng)做出了決定,根本沒得選擇,比如說集合屬

性,你只能用Collection,假如是Hibernate,你會在Bag,List和Set之間來回遲疑不決,

甚至搞不清楚的話,程序都沒有方法寫。

3.Spring

它是一個開源的項目,而且目前特殊活躍:它基于目C(InversionofControl,反向限制)和

AOP的構架多層j2ee系統(tǒng)的框架,但它不強迫你必需在每一層中必需運用Spring,因為它

模塊化的很好,允許你依據(jù)自己的須要選擇運用它的某一個模塊;它實現(xiàn)了很優(yōu)雅的MVC,

對不同的數(shù)據(jù)訪問技術供應了統(tǒng)一的接口,接受IoC使得可以很簡潔的實現(xiàn)bean的裝配,

供應了簡潔的AOP并據(jù)此實現(xiàn)TranscationManagment,等等

優(yōu)點:

a.Spring能有效地組織你的中間層對象,不管你是否選擇運用了EJB。假如你僅僅運用了

Struts或其他為J2EE的API特制的framework,Spring致力于解決剩下的問題。

b.Spring能消退在許多工程中常見的對Singleton的過多運用。依據(jù)我的閱歷,這是一個很

大的問題,它降低了系統(tǒng)的可測試性和面對對象的程度0

c.通過?種在不同應用程序和項目間?樣的方法來處理配置文件,Spring能消退各種各樣

自定義格式的屬性文件的須要,曾經(jīng)對某個類要找尋的是哪個魔法般的屬性項或系統(tǒng)屬性

感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅須要看看類的JavaBean

屬性。InversionofControl的運用(在下面探討)幫助完成了這種簡化。

d.通過把對接口編程而不是對類編程的代價幾乎削減到?jīng)]有,Spring能夠促進養(yǎng)成好的編程

習慣。

e.Spring被設計為讓運用它創(chuàng)建的應用完可能少的依靠于他的APIs。在Spring應用中的大

多數(shù)業(yè)務對象沒有依靠于Springo

f.運用Spring構建的應用程序易于單元測試。

g.Spring能使EJB的運用成為一個實現(xiàn)選擇,而不是應用架構的必定選擇。你能選擇用POJOs

或localEJBs來實現(xiàn)業(yè)務接口,卻不會影響調用代碼。

h.Spring幫助你解決許多問題而無需運用EJB,Spring能供應一種EJB的替換物,它們適用

于許多web應用。例如,Spring能運用AOP供應聲明性事務管理而不通過EJB容器,假如

你僅僅須要與單個數(shù)據(jù)庫打交道,甚至不須要一個JTA實現(xiàn)。

i.Spring為數(shù)據(jù)存取供應了一個一樣的框架,不論是運用的是JDBC還是0/Rmapping產(chǎn)品

(如Hibernate)?

Spring的確使你能通過最簡潔可行的解決方法來解決你的問題。而這是有有很大價值的。

缺點:

運用人數(shù)不多、jsp中要寫許多代碼、限制器過于靈敏,缺少一個公用限制器。

6.Javaweb部分

1、Tomcat的優(yōu)化閱歷

答:去掉對web.xml的監(jiān)視,把jsp提前編輯成Servleto

有富余物理內存的狀況,加大tomcat運用的jvm的內存

1、請求的GET與POST方式的區(qū)分

(1)get是從服務器上獲得數(shù)據(jù),post是向服務器傳送數(shù)據(jù)。

在客戶端,Get方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)放

置在HTMLHEADER內提交。

(2)對于get方式,服務器端用Request.QueryString獲得變量的值,對于post方式,服務

器端用Request.Form獲得提交的數(shù)據(jù)。

(3)GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。

(4)平安性問題。正如在(I)中提到,運用Get的時候,參數(shù)會顯示在地址欄上,而Post

不會。所以,假如這些數(shù)況是中文數(shù)據(jù)而同是非敏感數(shù)據(jù),那么運用get:假如用戶輸入的

數(shù)據(jù)不是中文字符而且包含敏感數(shù)據(jù),那么還是運用post為好。

62、說明一下什么是servlel;

答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。

這個生存期由javax.servlel.Servlei接口的init,service和destroy方,法表達。

1、說一說Servlet的生命周期?

答:servlet有良好的生存期的定義,包括加載和實例化、初始化、處理請求以及服務結束。

這個生存期由javax.servlel.Servlet接口的init.senice和destroy方法表達。

Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其servis方法,service

方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器確定將實例俏

毀的時候調用其destroy方法。

web容器加載servlet,生命周期起先。通過調用servlet的init()方法進行servlet的初始化。

通過調用service。方法實現(xiàn),依據(jù)請求的不同調用不同的do***()方法。結束服務,web容

器調用servlet的destroy。方法。

4、Servlet的基本架構

publicclassServletNamcextendsServlet{

publicvoiddoPosl(ServletRequestrequest,ServleiResponseresponse)throws

SenletException,lOException{

)

publicvoiddoGet(ServletRequestrequest,Sen;letResponseresponse)throws

ServletException,lOException{

}

}

3、SERVLETAPI中forward。與redirect。的區(qū)分?

答:前者僅是容器中限制權的轉向,在客戶端閱讀器地址欄中不會顯示出轉向后的地址;后

者則是完全的跳轉,閱讀器將會得到跳轉的地址,并重新發(fā)送請求鏈接。這樣,從閱讀器的

地址欄中可以看到跳轉后的鏈接地址。所以,前者更加高效,在前者可以滿足須要時,盡量

運用forward。方法,并且,這樣也有助于隱藏實際的鏈接。在有些狀況下,比如,須要跳

轉到一個其它服務器上的資源,則必需運用

sendRedirect。方法。

60、什么狀況下調用doGet()fndoPostO?

Jsp頁面中的FORM標簽里的method屬性為get時調用doGel(),為post時調用doPosi()。

66、Request對?象的主要方法:

setAttribute(Stringname,Object):設置名字為name的request的參數(shù)值

getAttribute(Stringname):返回由name指定的屬性值

getAttributeNamesO:返|口1request對象全部屬性的名字集合,結果是一個枚舉的實例

getCookies():返回客戶端的全部Cookie對象,結果是一個Cookie數(shù)組

getCharacterEncodingO:返回請求中的字符編碼方式

getContentLength():返回請求的Body的長度

getHeader(Stringname):獲得協(xié)議定義的文件頭信息

getHeaders(Stringname):返回指定名字的requestHeader的全部值,結果是一個枚舉的實例

gctHcadcrNaincs():返回所以requestHeader的名字,結果是一個枚舉的實例

ge(InputStream():返回請求的輸入流,用于獲得請求中的數(shù)據(jù)

getMethod():獲得客戶端向服務器端傳送數(shù)據(jù)的方法

ge(Parameter(Stringname):獲得客戶端傳送給服務器端的有name指定的參數(shù)值

getParameterNamesO:獲得客戶端傳送給服務器端的全部參數(shù)的名字,結果是一個枚舉的實

getParametervalues(Stringname):獲得有name指定的參數(shù)的全部值

gctProtocolO:獲得客戶端向服務器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱

gctQucryStringO;獲得查詢字符串

getRcqucstURK):獲得發(fā)出請求字符串的客戶端地址

getRemoieAddr。:獲得客戶端的IP地址

getRenioteHost():獲得客戶端的名字

getSession([Booleancreate]):返回和請求相關Session

getServerNameO:獲得服務器的名字

gctServlctPath():獲得客戶端所請求的腳本文件的路徑

getServerPort():獲得服務器的端口號

removeAttribute(Stringname):刪除請求中的一個屬性

19、forward和redirect的區(qū)分

forward是服務器請求資源,服務器干脆訪問目標地址的URL,把那個URL的響應內容讀

取過來,然后把這些內容再發(fā)給閱讀器,閱讀器根本不知道服務器發(fā)送的內容是從哪兒來的,

所以它的地址欄中還是原來的地址。

redirect就是服務端依據(jù)邏輯,發(fā)送一個狀態(tài)碼,告知閱讀器重新去請求那個地址,一般來

說閱讀器會用剛才請求的全部參數(shù)重新請求,所以session.request參數(shù)都可以獲得。

4^request.getAttribute()和request.getParameler()有何區(qū)分?

1.getAttribute是取得jsp中JUsetAttribute^定的attribute

2.parameter得到的是string:attribute得到的是object

3.request.gelParameter()方法傳遞的數(shù)據(jù),會從Web客戶端傳到Web服務器端,代表請

求數(shù)據(jù);request.setAttribuie()和getAttribute。方法傳遞的數(shù)據(jù)只會存在于Web容器內部,在

具有轉發(fā)關系的Web組件之間共享。即requesi.geiAilribule。方法返【可request范圍內存在的

對象,而request.getParameter。方法是獲得提交過來的數(shù)據(jù)。

Ljsp有哪些內置對象?作用分別是什么?分別有什么方法?

答:JSP共有以下9個內置的對象:

request用戶端請求,此請求會包含來自GET/POST請求的參數(shù)

response網(wǎng)頁傳I可用戶端的回應

pageContext網(wǎng)頁的屬性是在這里管理

session與請求有關的會話期

applicationservlet正在執(zhí)行的內容

out用來傳送回應的輸出

configservlet的構架部件

pageJSP網(wǎng)頁本身

exception針對錯誤網(wǎng)頁,未捕獲的例外

request表示ServletRequesl對象。它包含了有關閱讀器請求的信息,并且供應了幾個用

于獲得cookie,header,和session數(shù)據(jù)的有用的方法。

response表示ServletResponse對象,并供應了幾個用于設置送回閱讀器的響應的方

法(如cookies,頭信息等)

out對象是javax.jsp.JspWritcr的一個實例,并供應了幾個方法使你能用于向閱讀器回送

輸出結果。

pageContext表示javax.senlet.jsp.PageContext對象。它是用于便利存取各種范圍的

名字空間、servlel相關的對象的API,并且包裝了通用的servlel相關功能的方法。

session表示一個請求的javax.servlet..Session對象。Session可以存貯用戶的狀

態(tài)信息

叩plicaton表示一個javax.servle.ServletContext對象。這有助于查找有關senlet引擎和

servlet環(huán)境的信息

config表示一個javax.servlel.ServlelConfig對象。該對象用于存取servlet實例的初始化參

數(shù)。

page表示從該頁面產(chǎn)J的一個servlet實例

2.jsp有哪些動作?作用分別是什么?

(這個問題似乎不重要,不明白為何有此題)

答:JSP共有以下6種基本動作

jsp:inckide:在頁面被請求的時候引入一個文件。

jsp:useBean:找尋或者實例化一個JavaBean。

jsp:setProperty:設置JavaBean的屬性。

jsp:getProperty:輸出某個JavaBean的屬性。

jsp:forward:把請求轉到一個新的頁面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論