Java面試100題參考答案_第1頁
Java面試100題參考答案_第2頁
Java面試100題參考答案_第3頁
Java面試100題參考答案_第4頁
Java面試100題參考答案_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Java面試100題參考答案

Strutsl的工作原理

6:HIES

.在web應(yīng)用程序啟動(dòng)就會(huì)加載ActionServlet,ActionServlet從配置文件struts-config.xml中讀取配置信

息,并把它們存放到各種配置對象中。用戶發(fā)起請求后,按如下步驟執(zhí)行:

(1)用戶的請求以HTTP方式傳輸?shù)椒?wù)器上,接受請求的是ActionServlet.

(2)ActionServlet接收到請求后,會(huì)查找Struts-config.xml文件來確定服務(wù)器上是否有用戶請求的操

作,此處用戶請求操作應(yīng)為登陸操作。如果沒有,則返回一個(gè)用戶請求無效的出錯(cuò)信息。

(3)當(dāng)ActionServlet請求找到用戶請求的Action后,首先將用戶輸入的表單參數(shù)打包成一個(gè)

ActionFrom對象。接著ActionServlet再根據(jù)struts-config.xml中的配置信息決定是否要執(zhí)行ActionFrom

對象中的Validate方法。若Validate方法執(zhí)行有錯(cuò),則返回。否則,繼續(xù)下一步。

(4)系統(tǒng)生成一個(gè)用戶所請求的Action的實(shí)例對象,將前面的ActionFrom對象傳遞給它,運(yùn)行它

的Execute。方法。

(5)execute。執(zhí)行結(jié)束前會(huì)生成以和ActionForward類型的對象并將之返回給ActionServlet,該對象

的作用是告訴ActionFroward就代表跳轉(zhuǎn)到一個(gè)登陸成功的頁面。ActionServlet將對之進(jìn)行分析,其

實(shí)就相當(dāng)于接收到一個(gè)新的請求,重復(fù)(2)~(5)的過程,直到將某個(gè)界面返會(huì)給用戶為止!

3^核心控制器被調(diào)用,詢問ActionMapper來決定請求是否需要調(diào)用某個(gè)Action

4、如果ActionMapper決定需要調(diào)用某個(gè)Action,核心控制器把控制權(quán)委派給ActionProxy(備

注:JSP請求無需調(diào)用Action)

5、Actionproxy通過ConfigurationManager詢問框架的配置.文件(struts.xml),找到需調(diào)用的

Action類

6、Actionproxy創(chuàng)建一個(gè)Actioninvocation的實(shí)例

7^Actioninvocation負(fù)責(zé)調(diào)用Action,在此之前會(huì)依次調(diào)用所有配置的攔截器

8、Action執(zhí)行完畢,Actioninvocation負(fù)責(zé)根據(jù)結(jié)果碼字符串在struts.xml的配置中找到對應(yīng)的

返回結(jié)果

9、攔截器被再次執(zhí)行

10、過濾器被再次執(zhí)行

3Strutsl與Struts2的區(qū)別

特性Strutsl.xStruts2

Struts2的Action類實(shí)現(xiàn)了一個(gè)Action接

Strutsl.x要求Action類要擴(kuò)展自一個(gè)抽象口oStruts2也提供ActionSupport基類來

Action類基類。Strutsl.x的一個(gè)共有的問題是面向?qū)崿F(xiàn)一般使用的接口。當(dāng)然,Action接口不

抽象類編程而不是面向接口編程。是必須的。任何使用execute方法的POJO

可以被當(dāng)作Struts2的Action對象來使用。

Struts2Action對象為每一個(gè)請求都實(shí)例

Strutsl.xAction類是單例類,因?yàn)橹挥幸?/p>

化對象,所以沒有線程安全的問題。(實(shí)踐

個(gè)實(shí)例來控制所有的請求。單例類策略造成

線程模型中,servlet容器給每一個(gè)請求產(chǎn)生許多丟

了一定的限制,并且給開發(fā)帶來了額外的煩

棄的對象,并且不會(huì)導(dǎo)致性能和垃圾回收問

惱。Action資源必須是線程安全或者同步的。

題)。

Strutsl.x的Action類依賴于servletAPI,Struts2的Action和容器無關(guān)。Servlet上

Servlet依

當(dāng)Action被調(diào)用時(shí),以Request和Response下文被表現(xiàn)為簡單的Maps,允許Action被

作為參數(shù)傳給execute方法。獨(dú)立的測試。

測試Strutsl.x的主要問題是execute方法

Struts2的Action可以通過初始化、設(shè)置屬

暴露了ServletAPI使得測試依賴于容器。

易測性性、調(diào)用方法來測試。依賴注入的支持也是

第三方擴(kuò)展,如StrutsTestCase,提供一

測試變得更簡單。

套Slrutsl的模擬對象(來進(jìn)行測試)。

Strutsl.x使用ActionForm對象來捕獲輸Struts2直接使用Action屬性作為輸入屬

入。象Action一樣,所有的ActionForm必性,消除了對第二個(gè)輸入對象的需求。輸入

須擴(kuò)展基類。因?yàn)槠渌腏avaBean不能作為屬性可能是有自己(子)屬性的rich對象類

ActionForm使用,開發(fā)者經(jīng)常創(chuàng)建多余的類型。Action屬性能夠通過web頁面上的

捕獲輸入

來捕獲輸入。DynaBeans可以被用來作為替taglibs訪問。Struts2也支持ActionForm

代ActionForm的類來創(chuàng)建。但是,開發(fā)者可模式。rich對象類型,包括業(yè)務(wù)對象,能夠

能是在重新描述(創(chuàng)建)已經(jīng)存在的JavaBean用作輸入/輸出對象。這種ModelDriven特

(仍然會(huì)導(dǎo)致有冗余的javabean)。性簡化了taglib對POJO輸入對象的引用。

Strutsl.x整合JSTL,所以它使用JSTL的表Struts2使用JSTL,但是也支持一個(gè)更強(qiáng)大

表達(dá)式語言達(dá)式語言。表達(dá)式語言有基本的圖形對象移和靈活的表達(dá)式語言"ObjectGraph

動(dòng),但是對集合和索引屬性的支持很弱。NotationLanguage77(OGNL)。

Struts2使用“ValueStack”技術(shù),使

taglib能夠訪問值而不需要把你的頁面

將值綁定到Strutsl.x使用標(biāo)準(zhǔn)JSP機(jī)制來綁定對象到

(view)和對象綁定起來。ValueStack策略

頁面頁面上下文。

允許通過一系列名稱相同但類型不同的屬

性重用頁面(view)o

Strutsl.x的ActionForm屬性經(jīng)常都是

StringoStruts1.x使用Commons-BeanutilsStruts2使用0GNL進(jìn)行類型轉(zhuǎn)換。提供基本

類型轉(zhuǎn)換

來進(jìn)行類型轉(zhuǎn)換。轉(zhuǎn)換每一個(gè)類,而不是為和常用對象的轉(zhuǎn)換器。

每一個(gè)實(shí)例配置。

Strutsl.x支持在ActionForm的validate

Struts2支持通過validate方法和XWork

驗(yàn)證方法中手動(dòng)校驗(yàn),或者通過Commons

校驗(yàn)框架來進(jìn)行校驗(yàn)。

Validator的擴(kuò)展來校驗(yàn)。

Strutsl.x支持每一個(gè)模塊有單獨(dú)的Struts2支持通過攔截器堆棧(Interceptor

Action執(zhí)行RequestProcessors(生命周期),但是模Stacks)為每一個(gè)Action創(chuàng)建不同的生命

控制塊中的所有Action必須共享相同的生命周周期。堆棧能夠根據(jù)需要和不同的Action

期。一起使用。

4Struts2中攔截器的主要作用、工作原理,如何自定義攔截器

1.攔截器的主要作用

早期MVC框架將一些通用操作寫死在核心控制器中,致使框架靈活性不足、可擴(kuò)展性降低;Struts

2將核心功能放到多個(gè)攔截器中實(shí)現(xiàn),攔截器可自由選擇和組合,增強(qiáng)了靈活性,有利于系統(tǒng)的解

耦。為Action提供附加功能時(shí),無需修改Action代碼,使用攔截器來提供。Struts2大多數(shù)核心功能

是通過攔截器實(shí)現(xiàn)的,比如表單組裝、表單驗(yàn)證、類型轉(zhuǎn)換、模型驅(qū)動(dòng)、Servlet對象注入、文件上

傳等,每個(gè)攔截器完成某項(xiàng)功能。

2.Struts2中攔截器的工作原理

攔截器與過濾器原理很相似。三階段執(zhí)行周期:1、做?些Action執(zhí)行前的預(yù)處理;2、將控制

交給后續(xù)攔截器或返回結(jié)果字符串;3、做一些Action執(zhí)行后的處理。多個(gè)攔截器可以組成攔截器棧

一起起作用。從結(jié)構(gòu)上看,攔截器棧相當(dāng)于多個(gè)攔截器的組合;在功能上看,攔截器棧也是攔截器

3.1自定義攔截器的方法

嘮實(shí)現(xiàn)Interceptor接口

簿voidinit():初始化攔截器所需資源

送voiddestroyf):釋放在init()中分配的資源

五Stringintercept(Actionlnvocationai)throwsException

■實(shí)現(xiàn)攔截器功能

■利用Actioninvocation參數(shù)獲取Action狀態(tài)

■返回結(jié)果碼(result)字符串

尊繼承Abstractlnterceptor類

,提供了init()和destroy。方法的空實(shí)現(xiàn),只需要實(shí)現(xiàn)intercept方法即可

解推薦使用

心繼承MethodFilterlnterceptor

④指定攔截的方法:indudeMethods

籍指定不攔截的方法:excludeMethods

3.2配置和引用攔截器

<interceptors>

配置攔截器一〉

<interceptorname="time"

class="erceptor.FirstInterceptor"/>

<!—配置攔截器棧一〉

<interceptor-stackname="myStack">

<interceptor-refname="time"/>

interceptor-refname="defaultStack"/>

</interceptor-stack>

</interceptors>

<!—配置默認(rèn)攔截器

<default-interceptor-refname="myStack,r/>

<actionname="loginu

class="com.aptech,struts2.action.LoginAction">

<result>/success.jsp</result>

<resultname="error">/error.jsp</result>

<!—為Action指定攔截器—>

<interceptor-refname="myStack"/>

</action>

5攔截器和過濾器的異同

1、過濾器是web項(xiàng)目的普遍概念,而攔截器是struts2中的特有概念

2、過濾器可以過濾所有請求,攔截器只攔截action請求

3、自定義過濾器需要實(shí)現(xiàn)Filter接口,而自定義攔截器可以實(shí)現(xiàn)Interceptor接口

4、在web.xml中配置過濾器,在struts.xml中配置攔截器

5、攔截器可以訪問ServletAPI、ActionContext>值棧,而過濾器只能訪問ServletAPI

6、使用通配符來定義過濾器的過濾路徑,過濾的是地址。通過為Action指定攔截器來調(diào)用攔截器,

攔截器可以細(xì)化到方法層次。

7、在Struts2項(xiàng)目中如果使用過濾器,一般應(yīng)該將過濾器置于Struts2總控制器之前

8、執(zhí)行順序:過濾器一攔截器一Action--攔截器一過濾器(過濾器靠前)

9、攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)(待確認(rèn))

6Hibernate相比JDBC的優(yōu)勢所在

二者的聯(lián)系:

JDBC是java應(yīng)用程序連接數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)存取的一種機(jī)制,是一組用java語言編寫的類和接口的

API,它和數(shù)據(jù)庫之間由各個(gè)廠商提供的數(shù)據(jù)庫驅(qū)動(dòng)進(jìn)行關(guān)聯(lián)。hibernate是一個(gè)開源的輕量級的ORM

框架,它在底層對jdbc進(jìn)行了封裝。Hibernate可以用在任何JDBC可以使用的場合

優(yōu)點(diǎn):

1、hibernate可以讓開發(fā)人員以面相對象的思想來操作數(shù)據(jù)庫。jdbc只能通過SQL語句將元數(shù)據(jù)傳

送給數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)操作。而hibernate可以在底層對元數(shù)據(jù)和對象進(jìn)行轉(zhuǎn)化,使得開發(fā)者只用面

向?qū)ο蟮姆绞絹泶嫒?shù)據(jù)即可。

2、使用的語言不同:JDBC使用基于關(guān)系型數(shù)據(jù)庫的標(biāo)準(zhǔn)SQL語言,Hibernate使用的是HQL語言

3,操作的對象不同:JDBC通過SQL語句直接傳送到數(shù)據(jù)庫中執(zhí)行,Hibernate操作的是持久化對象,

由底層持久化對象的數(shù)據(jù)更新到數(shù)據(jù)庫中。

4、hibernate開發(fā)的程序具有更好的移植性,hibernate使用xml或JPA的配置以及數(shù)據(jù)庫方言等等

的機(jī)制,使得hibernate具有更好的移植性,對于不同的數(shù)據(jù)庫,開發(fā)者只需要使用相同的數(shù)據(jù)操作

即可,無需關(guān)心數(shù)據(jù)庫之間的差異。而直接使用JDBC就不得不考慮數(shù)據(jù)庫差異的問題。

5、使用Hibernate極大的提高了開發(fā)者的開發(fā)效率。hibernate提供了大量的封裝(這也是它最大的

缺點(diǎn)),很多數(shù)據(jù)操作以及關(guān)聯(lián)關(guān)系等都被封裝的很好,開發(fā)者不需寫大量的sql語句,這就極大的

提高了開發(fā)者的開發(fā)效率。

6,Hibernate緩存機(jī)制對提升性能大有裨益。hibernate提供了緩存機(jī)制(session緩存,二級緩存,

查詢緩存),對于那些改動(dòng)不大且經(jīng)常使用的數(shù)據(jù),可以將它們放到緩存中,不必在每次使用時(shí)都去

查詢數(shù)據(jù)庫,緩存機(jī)制對提升性能大有裨益。

缺點(diǎn):

1、從理論上來說,ORM永遠(yuǎn)也不可能比JDBC好,就像任何高級語言的運(yùn)行性能永遠(yuǎn)也不會(huì)好過匯

編語言一個(gè)道理。但從這個(gè)角度講,精心編寫的JDBC無論如何都是最快的。

2、hibernate更消耗內(nèi)存。因?yàn)樗看蔚臄?shù)據(jù)庫操作都要做數(shù)據(jù)和對象的轉(zhuǎn)換/封裝,查詢出一條數(shù)

據(jù)就要?jiǎng)?chuàng)建一個(gè)或多個(gè)對象,這樣也太消耗內(nèi)存了。

3,對hibernate而言,它對JDBC封裝過于厲害,所以就失去了對SQL的控制(當(dāng)然hibernate也可

以使用nativesql既使用createSQLQuery等方法來調(diào)用與數(shù)據(jù)庫相關(guān)的sql,但這樣一來也就影響了

hibernate的可移植性),使得hibernate的在很多地方不夠靈活,難于優(yōu)化,尤其對于一些復(fù)雜的關(guān)

聯(lián)查詢時(shí),hibernate提供的功能遠(yuǎn)不及直接使用JDBC方便性能更高。

7Hibenate的基本原理(ORM)

Application

PersistentObjects|

Hibernate

-7產(chǎn)XM.Mgpp.ns

Database

Hibenate的核心是ORM映射。hibernate通過對jdbc進(jìn)行封裝,對java類和關(guān)系數(shù)據(jù)庫進(jìn)行mapping,

實(shí)現(xiàn)了對關(guān)系數(shù)據(jù)庫的面向?qū)ο蠓绞降牟僮?,改變了傳統(tǒng)的jdbc+sql操作數(shù)據(jù)的方式,從而使開發(fā)

人員可以花更多精力進(jìn)行對象方面的開發(fā)。

8cascade和inverse的區(qū)別

inverse和cascade兩者之間沒有任何關(guān)系。但是它們又都能影響對象關(guān)聯(lián)關(guān)系的維護(hù),所以將這兩

個(gè)屬性的作用區(qū)分開也不是很容易的。

inverse和cascade的區(qū)別主要表現(xiàn)在以下幾個(gè)方面:

>作用的范圍不同

inverse是設(shè)置在集合元素中的,而對于<many-to-one>和〈one-to-one〉則無此屬性。而cascade則

對于所有涉及到關(guān)聯(lián)的元素都是有效的,其中包括了集合元素以及<many-to-one:^n<one-to-one>

>執(zhí)行的策略不同

inverse會(huì)首先判斷集合的變化情況,然后針對變化執(zhí)行相應(yīng)的處理。而cascade則是直接對集合

的每個(gè)元素執(zhí)行相應(yīng)的處理。

>執(zhí)行的時(shí)機(jī)不同

inverse是在執(zhí)行SQL語句之前判斷是否要執(zhí)行該SQL語句,而cascade則是在主控方發(fā)生操作

時(shí)用來判斷是否進(jìn)行級聯(lián)操作。

>執(zhí)行的目標(biāo)不同

inverseX^JF<one-to-many>#<many-to-many>^d:?^':/?-ffi|S|<>對于<one-to-many>,inverse所處理

的是對被關(guān)聯(lián)表(的外鍵)進(jìn)行修改操作。對于<many-to-many>,inverse所處理則是中間關(guān)聯(lián)

表(增減記錄)。而cascade則不會(huì)區(qū)分這兩種關(guān)系的差別,所做的操作都是針對被關(guān)聯(lián)表的。

9HQL和SQL的區(qū)別

1.操作對象不同:HQL操作的類及其屬性,SQL操作的是數(shù)據(jù)庫表及其字段

2.相比SQL語句,HQL有所簡化

3.HQL結(jié)果直接返回List或其他對象,而不是像JDBC中使用SQL返回結(jié)果集,還要轉(zhuǎn)化成對象。

4.不同數(shù)據(jù)庫的SQL語句會(huì)有細(xì)微差別,HQL獨(dú)立于數(shù)據(jù)庫,根據(jù)方言設(shè)置轉(zhuǎn)換為對應(yīng)的SQL語句

10如何提高Hibernate的性能

1.配盤數(shù)據(jù)源

2.使用延遲加載

3.使用二級緩存、查詢緩存

4.對HQL語句的優(yōu)化:避免or、not、like^having>distinct等操作

5.映射文件配置參數(shù):fetch-size,fetch,batch-size

6.操作方法使用:比如load和get,list和iterate等

11Hibernate中持久化類的三種狀態(tài)及其特征

瞬時(shí)狀態(tài)特征:不在Session緩存中,不與任何Session實(shí)例相關(guān)聯(lián);在數(shù)據(jù)庫中沒有與之對應(yīng)數(shù)據(jù)。

持久化狀態(tài)特征:在Session緩存中,與Session實(shí)例相關(guān)聯(lián);在數(shù)據(jù)庫中有與之對應(yīng)的數(shù)據(jù)。

脫管狀態(tài)特征:不在Session緩存中,不與任何Session實(shí)例相關(guān)聯(lián);在數(shù)據(jù)庫中有與之對應(yīng)數(shù)據(jù)。

Hibernate會(huì)檢測到處于持久狀態(tài)的對象的任何改動(dòng),在當(dāng)前操作單元執(zhí)行完畢時(shí)將對象的狀態(tài)同步

到數(shù)據(jù)庫,開發(fā)者不需要手動(dòng)執(zhí)行update。語句。多次save。是多余的。

SpringloC的原理

Testjava

BeanFactoryfactory,new

ClassPathXmlAppiicationContext|"app1icationContext.xtt1"|;

CorkMorkiVorJc)fauctoryne二tBean(^woric*);

如酢天案化,

慘堀道文件胴

applicationContext

Personp=rtewMein();<heanid=,,man,Tclas3=*cbsY.apiing.dao.Xan"/>

WorkworJc=newDayTJor)c(p);

<bean1dss"gnaa"class=:n.bsY.spring.dao.YoXan"/>

<beanidB,*work"cla3s="cn.bsu.spring.tcgr.DayVork”>

(propertynaie?"person"ref?"?anV>

</bean>

<!—〈beanid,"gdt"c1assB"cn.bsv.spring.mjr.Hi^hWork":

Workwor)c=TYewNightWorlc(p);

〈propertytwuw'jierscn"re!*"v?wn"/:.</bean>—>

采用loC之前采用loC之后

采用loC之前,對象的創(chuàng)建以及對象關(guān)系的維護(hù)都要由程序員通過硬編碼的形式來維護(hù)。

采用loC后,對象的創(chuàng)建以及對象關(guān)系的維護(hù)將由loC容器來實(shí)現(xiàn),維護(hù)的依據(jù)是配置文件,程序員

直接從容器中取對象就可以了.

13SpringAOP的原理

采用AOP之前匕采用AOP之后

AOP,面向切面編程,是一種編程方法,它和面向?qū)ο缶幊滩捎玫捻樞颍v向)編程形成互補(bǔ),可

以解決一些在OOP中無法或很難解決的問題,例如事務(wù)、日志、權(quán)限等橫切性問題,使得OOP集

中精力于業(yè)務(wù)邏輯編程。

OOP實(shí)現(xiàn)橫切性關(guān)注點(diǎn)導(dǎo)致代碼混亂,開發(fā)者必須同時(shí)考慮業(yè)務(wù)邏輯、性能、日志、安全等問題。

代碼分散,橫切性代碼散布在各個(gè)模塊中。AOP將這些代碼模塊化,然后織入到需要的模塊中。

過濾器,攔截器都可以理解為一種AOP技術(shù)。

14AOP的基本概念:切面、通知、切入點(diǎn)、連接點(diǎn)、織入

1.切面(Aspect):從對象中抽取出來的橫切性功能模塊。類似與OOP中的一個(gè)類。由通知和切

入點(diǎn)兩部分組成。

2.通知(Adivice):切面的具體實(shí)現(xiàn),例如具體的日志操作代碼,一般是是切面中的某個(gè)方法。

3.連接點(diǎn)(Joinpoint):目標(biāo)對象中插入通知的地方。即advice的應(yīng)用位置。spring中只支持是方

4.切入點(diǎn)(Pointcut):切面的一部分,對應(yīng)一個(gè)表達(dá)式,定義了advice應(yīng)該被插入到什么樣的

Joinpoint點(diǎn)上,即advice的應(yīng)用范圍

5.目標(biāo)對象(TargetObject):被通知的對象。

6.代理(AOPProxy):由AOP框架創(chuàng)建的口標(biāo)對象的代理對象°是被插入了advice的TargetObject。

7.織入(Weaving):將通知與目標(biāo)對象結(jié)合在一起,生成新的對象的過程。新的對象就是AOP

ProxyoSpring是在運(yùn)行是完成織入工作的。

15SSH整合的基本步驟

1、Spring向下整合Hibernate(DAO層)

1.1使用Spring的loC容器創(chuàng)建sessionFactory

1.2使用Spring的loC容器創(chuàng)建DAO

2、Spring中間管理業(yè)務(wù)層

2.1使用Spring的loC容器創(chuàng)建BizBean

2.2使用Spring的AOP配置業(yè)務(wù)層事務(wù)

3、Spring向上整合Struts2(控制層)

3.1配置監(jiān)聽器和上下文參數(shù)

3.2使用Spring的loC容器來管理Action

4、其他

4.1使用Spring提供的過濾器解決中文亂碼問題

4.2使用Spring提供的OpenSessionlnViewFilter解決懶加載問題

4.3使用Spring的loC容器管理數(shù)據(jù)源

16并行操作下數(shù)據(jù)庫事務(wù)出現(xiàn)的問題及含義:事務(wù)的隔離級別和四大屬性

1、并行操作下數(shù)據(jù)庫事務(wù)出現(xiàn)的問題:

>臟讀(Dirtyread):臟讀發(fā)生在一個(gè)事務(wù)讀取了被另一個(gè)事務(wù)改寫但還未提交的數(shù)據(jù)時(shí).如果這些

改變在稍后被1日滾,那么第?個(gè)事務(wù)讀取的數(shù)據(jù)就是無效的.

>不可重復(fù)讀(Nonrepeatableread):不可重復(fù)讀發(fā)生在一個(gè)事務(wù)執(zhí)行相同的查詢兩次或兩次以上,

但每一次查詢結(jié)果都不相同.這通常是由于另一個(gè)并發(fā)事務(wù)在兩次查詢之間更新了數(shù)據(jù).

>幻讀(Phantomread):幻讀和不可重復(fù)讀相似.當(dāng)一個(gè)事務(wù)(T1)讀取幾行紀(jì)錄后,另一個(gè)并發(fā)事務(wù)

(T2)插入一些數(shù)據(jù),幻讀就發(fā)生了.在后來的查詢中,第一個(gè)事務(wù)(T1)就會(huì)發(fā)現(xiàn)一些原來沒有的額

外紀(jì)錄.

2、事務(wù)的隔離級別

>READ_UNCOMMITTED允許你讀取還未提交的改變了的數(shù)據(jù).可能導(dǎo)致臟讀,幻讀或不可重復(fù)讀.

>READ_COMMITTED允許在并發(fā)事務(wù)已經(jīng)提交后讀取,可防止臟讀,但幻讀和不可重復(fù)讀仍可能

發(fā)生.

>REPEATABLE_READ對相同字段的多次讀取結(jié)果是一致的,除非數(shù)據(jù)被事務(wù)本身改變.可防止臟

讀和不可重復(fù)讀,但幻讀仍可能發(fā)生.

>SERIALIZABLE完全服從ACID的隔離級別,確保不發(fā)生臟讀,不可重復(fù)讀和幻讀.這在所有隔離級

別中也是最慢的,因?yàn)樗峭ㄟ^完全鎖定在事務(wù)中涉及的數(shù)據(jù)表來完成的.

3,事務(wù)的四大屬性設(shè)置

>事務(wù)的傳播特性PROPAGATION:

?REQUIRED:如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù)。如果沒有事務(wù)則開啟。

?SUPPORTS:如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。

>只讀特性readonly="true"

?只讀事務(wù)。如果一個(gè)事務(wù)只對數(shù)據(jù)庫執(zhí)行讀操作,設(shè)為只讀事務(wù)可以提高效率

>隔離級別特性isolation="DEFAULT"

?事務(wù)的隔離級別。并行情況下保證事務(wù)的完整性。

>超時(shí)特性timeout="-l"

?事務(wù)的超時(shí)時(shí)間。超時(shí)則事務(wù)回滾。

17JSP的執(zhí)行過程

在JSP運(yùn)行過程中,首先由客戶端發(fā)出請求,Web服務(wù)器接收到請求后,如果是第一次訪問某個(gè)jsp

頁面,Web服務(wù)器對它進(jìn)行以下3個(gè)操作。

1.翻譯:由Jsp變?yōu)?java,由JSP引擎實(shí)現(xiàn)。

2.編譯:由.java變?yōu)?class,由Java編譯器實(shí)現(xiàn)。

3.執(zhí)行:由.class變?yōu)?html,用Java虛擬機(jī)執(zhí)行編譯文件,然后將執(zhí)行結(jié)果返回給Web服務(wù)器,并

最終返回給客戶端

如果不是第一次訪問某個(gè)JSP頁面,則只執(zhí)行第三步。

所以第一次訪問JSP較慢。

18JSP和Servlet的區(qū)別和聯(lián)系

區(qū)別

1.JSP是在HTML代碼里寫JAVA代碼,框架是HTML;而Servlet是在JAVA代碼中寫HTML代碼,本

身是個(gè)JAVA類。

2.JSP使人們把顯示和邏輯分隔成為可能,這意味著兩者的開發(fā)可并行進(jìn)行;而Servlet并沒有把

兩者分開。

3.Servlet獨(dú)立地處理靜態(tài)表示邏輯與動(dòng)態(tài)業(yè)務(wù)邏輯.這樣,任何文件的變動(dòng)都需要對此服務(wù)程序重

新編譯;JSP允許用特殊標(biāo)簽直接嵌入到HTML頁面,HTML內(nèi)容與JAVA內(nèi)容也可放在單獨(dú)文件

中,HTML內(nèi)容的任何變動(dòng)會(huì)自動(dòng)編譯裝入到服務(wù)程序.

4.Servlet需要在web.xml中配置,而JSP無需配置。

5.目前JSP主要用在視圖層,負(fù)責(zé)顯示,而Servlet主要用在控制層,負(fù)責(zé)調(diào)度

聯(lián)系:都是Sun公司推出的動(dòng)態(tài)網(wǎng)頁技術(shù),先有Servlet,針對Servlet缺點(diǎn)推出JSP。JSP是Servlet

的,一種特殊形式,每個(gè)JSP頁面就是一個(gè)Servlet實(shí)例JSP頁面由系統(tǒng)翻譯成Servlet,Servlet再負(fù)

責(zé)響應(yīng)用戶請求。

19JSP的9個(gè)內(nèi)置對象及其含義,分別寫出其常用方法三個(gè)

內(nèi)部對象所屬類型川途

煙U酶javax.servlet.httpServletRequest包含「請求方的信息

骨的n躁javax.servlet.httpServletResponse封裝了對客戶端的響應(yīng)

outjavax.servlet.jsp.JspWriter響應(yīng)信息流的標(biāo)準(zhǔn)輸出

在同?請求中所產(chǎn)牛:的session

法蹴然檄門javax.servlet.Http.HttpSession

資料,”前只對Http協(xié)議有定義

applicationjavax.servlet.ServletContext提供安全信息

configjavax.servlet.ServletConfig提供配置信息

pageContextjavax.servlet.jsp.PageContext提供當(dāng)前頁面屬性

pagejava.lang.Object|HJJjava的this

exceptionjava.Iang.Throwable異常處理

常用方法略

20page/request/session/application的范圍區(qū)別

page:當(dāng)前頁面范圍

request:當(dāng)前頁面范圍+轉(zhuǎn)發(fā)頁面(forward)+包含頁面(include)

session:當(dāng)前會(huì)話:session在以下幾種情況下失效

1.銷毀session:Session.invalidate));

2.超過最大非活動(dòng)間隔時(shí)間

3.手動(dòng)關(guān)閉瀏覽器(session并沒有立刻失效,因?yàn)榉?wù)器端session仍舊存在,超過最大非活動(dòng)

間隔時(shí)間后真正失效)

application:當(dāng)前應(yīng)用;服務(wù)器重新啟動(dòng)前一直有效

21get和post的區(qū)別

1.Get是不安全的,因?yàn)樵趥鬏斶^程,數(shù)據(jù)被放在請求的URL中;Post的所有操作對用戶來說都

是不可見的。

2.Get傳送的數(shù)據(jù)量較小,這主要是因?yàn)槭躑RL長度限制;Post傳送的數(shù)據(jù)量較大,一般被默認(rèn)

為不受限制。

3.Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符:而Post支持整個(gè)ISO10646字符集。

4.Get執(zhí)行效率卻比Post方法好。Get是form提交的默認(rèn)方法。

22Servlet的生命周期

1.加載:在下列時(shí)刻加載Servlet:(1)如果已配置自動(dòng)加載選項(xiàng),則在啟動(dòng)服務(wù)謂時(shí)自動(dòng)加載

(web.xml中設(shè)置<load-on-start>);(2)在服務(wù)器啟動(dòng)后,客戶機(jī)首次向Servlet發(fā)出請求時(shí);(3)

重新加載Servlet時(shí)(只執(zhí)行一次)

2.實(shí)例化:加載Servlet后,服務(wù)器創(chuàng)建一個(gè)Servlet實(shí)例。(只執(zhí)行一次)

3.初始化:調(diào)用Servlet的init()方法。在初始化階段,Servlet初始化參數(shù)被傳遞給Servlet配

置對象ServletConfig。(只執(zhí)行一次)

4.請求處理:對于到達(dá)服務(wù)器的客戶機(jī)請求,服務(wù)器創(chuàng)建針對此次請求的一個(gè)“請求”對象和一

個(gè)“響應(yīng)”對象。服務(wù)器調(diào)用Servlet的serviced方法,該方法用于傳遞“請求”和“響應(yīng)”

對象。service!)方法從“請求”對象獲得請求信息、處理該請求并用“響應(yīng)”對象的方法以將

響應(yīng)傳回客戶機(jī)。service。方法可以調(diào)用其它方法來處理請求,例如doGet()>doPost()或其

它的方法。(每次請求都執(zhí)行該步驟)

5.銷毀:當(dāng)服務(wù)器不再需要Servlet,或重新裝入Servlet的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用Servlet的

destroy()方法。(只執(zhí)行一次)

23session和cookie的區(qū)別

1、聯(lián)系

http是無狀態(tài)的協(xié)議,客戶每次讀取web頁面時(shí),服務(wù)器都打開新的會(huì)話,而且服務(wù)器也不會(huì)自動(dòng)

維護(hù)客戶的上下文信息,那么要怎么才能在多次請求之間共享信息呢(比如實(shí)現(xiàn)網(wǎng)上商店中的購物

車)?session和cookie就是為了解決HTTP協(xié)議的無狀態(tài)而采用的兩種解決方案。

2、原理(通過比喻形象說明,真正原理自己總結(jié))

■Cookie:發(fā)給顧客一張卡片,上面記錄著消費(fèi)的數(shù)量,一般還有個(gè)有效期限。每次消費(fèi)時(shí),

如果顧客出示這張卡片,則此次消費(fèi)就會(huì)與以前或以后的消費(fèi)相聯(lián)系起來。這種做法就是在

客戶端保持狀態(tài)。【卡上記錄所有信息,而店家只認(rèn)卡不認(rèn)人?!?/p>

■Session:發(fā)給顧客一張會(huì)員卡,除了卡號之外什么信息也不紀(jì)錄,每次消費(fèi)時(shí),如果顧客出

示該卡片,則店員在店里的紀(jì)錄本上找到這個(gè)卡號對應(yīng)的紀(jì)錄添加一些消費(fèi)信息。這種做法

就是在服務(wù)器端保持狀態(tài)。【只記用戶ID,而ID的詳細(xì)記錄放在店家的數(shù)據(jù)庫里;每次憑

ID檢索服務(wù)器的記錄。】

3、區(qū)別

■cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上(sessionid可以通過cookie保

存在客戶端,也可以使用URL重寫方式)。

■cookie不是很安全,別人可以分析存放在本地的COOKIE并進(jìn)行COOKIE欺騙,考慮到安全應(yīng)

當(dāng)使用session

■session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問增多,會(huì)比較占用你服務(wù)器的性能,考慮到

減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE

■單個(gè)cookie在客戶端的限制是3K,就是說一個(gè)站點(diǎn)在客戶端存放的COOKIE不能3K。

■個(gè)人建議:將登陸信息等重要信息存放為SESSION;其他信息如需保留,可放在COOKIE中

24轉(zhuǎn)發(fā)和重定向的區(qū)別

?轉(zhuǎn)發(fā)的原理?重定向的原理

■在服務(wù)器端跳轉(zhuǎn),將同一個(gè)request進(jìn)行傳遞■客戶端根據(jù)服務(wù)器端返回的地址發(fā)送新的請求

■只有一個(gè)請求■(服務(wù)器端控制的)客戶端跳轉(zhuǎn)

■瀏覽器不知道轉(zhuǎn)發(fā)一Web組件】

轉(zhuǎn)發(fā)是在服務(wù)端直接做的事情,是對客戶端的同一個(gè)request進(jìn)行傳遞,瀏覽器并不知道。重定向是

由瀏覽器來做的事情。重定向時(shí),服務(wù)端返回一個(gè)response,里面包含了跳轉(zhuǎn)的地址,由瀏覽器獲

得后,自動(dòng)發(fā)送一個(gè)新request。轉(zhuǎn)發(fā)像呼叫轉(zhuǎn)移或者110報(bào)警中心,重定向似114查號臺(tái)。

?區(qū)別1:跳轉(zhuǎn)效率的不同

■轉(zhuǎn)發(fā)效率相對高

■重定向效率相對低

?區(qū)別2:實(shí)現(xiàn)語句不同

■轉(zhuǎn)發(fā)request.getRequestDispatcher("xxxx")forward(request,response);

■重定向response.sendRedirectf'xxxx")

?區(qū)別3:是否共有同一個(gè)request的數(shù)據(jù)

■轉(zhuǎn)發(fā)源組件與目標(biāo)組件共有同一個(gè)request數(shù)據(jù)

■重定向源組件與目標(biāo)組件不共有同一個(gè)request數(shù)據(jù)(可使用session共有數(shù)據(jù))

?區(qū)別4:瀏覽器URL地址的不同

■轉(zhuǎn)發(fā)后瀏覽器URL地址保持不變(源組件地址)

■重定向后瀏覽器URL地址改變?yōu)橹囟ㄏ蚝蟮牡刂罚繕?biāo)組件地址)

.區(qū)別5:"/"路徑的含義不同

■轉(zhuǎn)發(fā)時(shí)"/"代表當(dāng)前項(xiàng)目的根路徑

■重定向時(shí)代表當(dāng)前服務(wù)器的根路徑

?區(qū)別6:跳轉(zhuǎn)范圍的不同

■只能轉(zhuǎn)發(fā)到同一應(yīng)用中的URL(默認(rèn))

■可以重定向任何服務(wù)器、任何應(yīng)用的URL

?區(qū)別7:刷新是否導(dǎo)致重復(fù)提交

■轉(zhuǎn)發(fā)會(huì)導(dǎo)致重復(fù)提交(可以通過同步令牌解決)

■重定向不會(huì)導(dǎo)致重復(fù)提交

?區(qū)別8:是否經(jīng)過過濾器

■轉(zhuǎn)發(fā)不經(jīng)過過濾器(默認(rèn)情況)

■重定向經(jīng)過過濾器

25MVC模式及其優(yōu)缺點(diǎn)

用戶

視圖層J

VJSP[2:E果:

控制層CServletu

;4—業(yè)務(wù)

模型層MJavaBean

5JES?S?tlEF;

數(shù)據(jù)庫6:a陛IB展水幗觸網(wǎng)

一、MVC原理

MVC是一種程序開發(fā)設(shè)計(jì)模式,它實(shí)現(xiàn)了顯示模塊與功能模塊的分離。提高了程序的可維護(hù)性、可移

植性、可擴(kuò)展性與可重用性,降低了程序的開發(fā)難度。它主要分模型、視圖、控制器三層。

1、模型(model)它是應(yīng)用程序的主體部分,主要包括業(yè)務(wù)邏輯模塊和數(shù)據(jù)模塊。模型與數(shù)據(jù)格式無

關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重

用,所以減少了代碼的重復(fù)性

2、視圖(view)用戶與之交互的界面、在web中視圖■—般由jsp,html組成

3、控制器(controller)接收來自界面的請求并交給模型進(jìn)行處理在這個(gè)過程中控制器不做任何處理

只是起到了一個(gè)連接的作用

二、MVC的優(yōu)點(diǎn)

1、降低代碼耦合性。在MVC模式中,三個(gè)層各施其職,所以如果一旦哪一層的需求發(fā)生了變化,

就只需要更改相應(yīng)的層中的代碼而不會(huì)影響到其他層中的代碼。

2、有利于分工合作。在MVC模式中,由于按層把系統(tǒng)分開,那么就能更好的實(shí)現(xiàn)開發(fā)中的分工。

網(wǎng)頁設(shè)計(jì)人員可進(jìn)行開發(fā)視圖層中的JSP,而對業(yè)務(wù)熟悉的開發(fā)人員可開發(fā)業(yè)務(wù)層,而其他開發(fā)人員

可開發(fā)控制層。

3、有利于組件的重用。如控制層可獨(dú)立成一個(gè)能用的組件,表示層也可做成通用的操作界面??梢?/p>

為一個(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖。

三、MVC的不足之處

1,增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對于簡單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分

離,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過多的更新操作,降低運(yùn)行效率。

2、視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒

有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。

3.視圖對模型數(shù)據(jù)的低效率訪問。依據(jù)模型操作接11的不同,視圖可能需要多次調(diào)用才能獲得足夠

的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。

4、口前,一般高級的界面工具或構(gòu)造器不支持模式。改造這些工具以適應(yīng)MVC需要和建立分離的

部件的代價(jià)是很高的,從而造成MVC使用的困難。

26B/S和C/S的含義及其區(qū)別

C/S結(jié)構(gòu),即Client/server(客戶機(jī)/服務(wù)器)結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低

了系統(tǒng)的通訊開銷,可充分利用兩端硬件環(huán)境優(yōu)勢。早期軟件系統(tǒng)多以此作為首選設(shè)計(jì)標(biāo)準(zhǔn)。

B/S結(jié)構(gòu),即Browser/Server(瀏覽器/服務(wù)器)結(jié)構(gòu),是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的?種

變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前

端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),節(jié)約了開發(fā)成本,便于軟件維護(hù)。

區(qū)別

1、C/S是建立在局域網(wǎng)的基礎(chǔ)上的。B/S是建立在廣域網(wǎng)的基礎(chǔ)上的,但并不是說B/S結(jié)構(gòu)不能在局

域網(wǎng)上使用。

2、B/S業(yè)務(wù)擴(kuò)展簡單方便,通過增加頁面即可增加服務(wù)器功能。C/S的客戶端還需要安裝專用的客

戶端軟件,不利于擴(kuò)展。

3、B/S維護(hù)簡單方便。開發(fā)、維護(hù)等幾乎所有工作也都集中在服務(wù)器端,當(dāng)企業(yè)對網(wǎng)絡(luò)應(yīng)用進(jìn)行升

級時(shí),只需更新服務(wù)器端的軟件就可以,這減輕了異地用戶系統(tǒng)維護(hù)與升級的成本。.

4、B/S響應(yīng)速度不及C/S;

5、B/S用戶體驗(yàn)效果不是很理想

Java集合體系結(jié)構(gòu)(List、Set、Collection-kMap的區(qū)別和聯(lián)系)

-:|Produces:■Produces

IteratorJ■:Collection*Map

……蘆』yr-z—L

r

iAbstractMap?

-;Produces,L_

ListIterator',/????:List::Set

jSortedMap

IAbstractedlectiop-'1

一iSortedSet

TreeMap

iAbstractList?iAbstractset?

WeakHashMapHashtable

(Legacy)

HashSet

-U.__I___Utilities

VectorArrayListAbstractSequentialList?

(Legacy)

StackLinkedList

(Legacy)

ComparableIComparator:

Java容器的分類(簡略)

;Collection:-;Map;

A

「一一」1

????

I__£_?__L-fII

e

:_JsJ_::__?L_:|HashMap|「reeMa,

(」H[11:K'LinkedllashMap

|ArrayList|LinkedList||H[ashSe1|rreeSet|

LinkedHashSet

Collection接口存儲(chǔ)一組不唯一,無序的對象

List接口存儲(chǔ)一組不唯一,有

溫馨提示

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

最新文檔

評論

0/150

提交評論