2023年java筆試題及答案_第1頁
2023年java筆試題及答案_第2頁
2023年java筆試題及答案_第3頁
2023年java筆試題及答案_第4頁
2023年java筆試題及答案_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

l.web中的forward和redirect的區(qū)別?(

前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),

瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地

址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward。方法,并且,這樣也有助于隱藏實

際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務(wù)器上的資源,則必須使用scndRedirect。方法。

2.xml在解釋的時候DOM和SAX協(xié)議的區(qū)別和含義?

DOM:解決大型文獻時其性能下降的非常厲害。這個問題是由DOM的樹結(jié)構(gòu)所導(dǎo)致的,這種結(jié)構(gòu)占用的內(nèi)

存較多,并且DOM必須在解析文獻之前把整個文檔裝入內(nèi)存,適合對XML的隨機訪問

SAX:不現(xiàn)于DOM.SAX是事件驅(qū)動型的XML解析方式。它順序讀取XML文獻,不需要一次所有裝載整

個文獻。當(dāng)碰到像文獻開頭,文檔結(jié)束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時,它會觸發(fā)一個事件,用戶通過在其

回調(diào)事件中寫入解決代碼來解決XML文獻,適合對XML的順序訪問

3說明JNDI、JMS、JTA、RMI的意思?

JNDI(JavaNamingandDirectoryInterface)是一個應(yīng)用程序設(shè)計的API,為開發(fā)人員

提供了查找和訪問各種命名和目錄服務(wù)的通用、統(tǒng)一的接口,類似JDBC都是構(gòu)建在

抽象層上。

JMS(JavaMessagingService)是Java平臺上有關(guān)面向消息中間件的技術(shù)規(guī)范,翻譯為

Java消息服務(wù)。JMS支持點對點和發(fā)布/訂閱兩種消息模型。

JTA(JavaTransactionAPI)為J2EE平臺提供了分布式事務(wù)服務(wù)。要用JTA進行事務(wù)界

定,應(yīng)用程序要調(diào)用javax.transaction.UserTransaction接口中的方法.

RMI是Java的一組擁護開發(fā)分布式應(yīng)用程序的APLRMI使用Java語言接口定義了

遠程對象,它集合了Java序列化和Java遠程方法協(xié)議(JavaRemoteMethodProt

ocol)o它大大增強了Java開發(fā)分布式應(yīng)用的能力

4.單子模式

PublicclassSignle{

PrivateSignle(){

PirvatestaticSignlesignle=newSignle();

PublicstaticSignlegets(){

Retrunsignle;

publicclassMyBean{

privatestaticMyBeaninstance=null;

privateMyBean(){

//dosomething

)

publicstaticsynchronizedMyBeangetlnstance(){

if(instance==null){

instance=newMyBean();

)

returninstance;

)

你是說單例模式是吧,這個單例模式是延遲加載的模式.尚有一種就是即時加載,不需要判斷是否有實例存在,

先自己new出一個實例.

)

5數(shù)據(jù)庫中l(wèi)eftjoin的意思,和在什么場合中應(yīng)用?

LEFTJOIN操作用于在任何的FROM子句中,組合來源表的記錄。使用LEFTJOIN運算來創(chuàng)建一個左邊

外部聯(lián)接。左邊外部聯(lián)接將包含了從第一個(左邊)開始的兩個表中的所有記錄,即使在第二個(右邊)

表中并沒有相符值的記錄。

6ejb中的sessionbean和entitybean的區(qū)別和含義?

SessionBean在J2EE應(yīng)用程序中被用來完畢一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)

用其他EJB組件。EntityBean被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。

對于客戶機,SessionBean是一種非持久性對象,它實現(xiàn)某些在服務(wù)器上運營的業(yè)務(wù)邏輯。

對于客戶機,EntityBean是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對

象視圖,或是一個由現(xiàn)有公司應(yīng)用程序?qū)崿F(xiàn)的實體。

7抽象類和接口的區(qū)別

1:一個類可以實現(xiàn)任意多的接口,但是最多只能對一個抽象類進行子類化。

2:一個抽象類可以涉及非抽象方法,而一個接口的所有方法在效果上都是抽象的。

3:一個抽象類可以申明并使用變量,而一個接口不行。

4:一個抽象類中的方法的訪問修飾符可以使public,internal,protected,protectedinternal.private,而接口成員

的訪問修飾符在默認情況下都是public,并且,在申明接口成員時,不允許使用訪問修飾符(甚至不能使

用public)?

5:一個抽象類可以定義構(gòu)造函數(shù),而一個接口不行。

8對象序列化的含義

Java序列化技術(shù)可以使你將一個對象的狀態(tài)寫入一個Byte流里,并且可以從其它地方

把該Byte流里的數(shù)據(jù)讀出來。重新構(gòu)造一個相同的對象。這種機制允許你將對象通過網(wǎng)絡(luò)

進行傳播,并可以隨時把對象持久化到數(shù)據(jù)庫、文獻等系統(tǒng)里。Java的序列化機制是RMI、

EJB、JNNI等技術(shù)的技術(shù)基礎(chǔ)。

9數(shù)據(jù)庫中的鎖涉及什么?

基本的封鎖類型有兩種:排它鎖(X鎖)和共享鎖(S鎖).

所謂X鎖,是事務(wù)T對數(shù)據(jù)A加上X鎖時,只允許事務(wù)T讀取和修改數(shù)據(jù)A,...

所謂S鎖,是事務(wù)T對數(shù)據(jù)A加上S鎖時,其他事務(wù)只能再對數(shù)據(jù)A加S鎖,而不能加X鎖,

直到T釋放A上的S鎖若事務(wù)T對數(shù)據(jù)對象A加了S鎖,則T就可以對A進行讀取,但不能

進行更新(S鎖因此又稱為讀鎖),在T釋放A上的S鎖以前,其他事務(wù)可以再對A加S鎖,但不

能加X鎖,從而可以讀取A,但不能更新A.

lOjsp和serverlet的區(qū)別

(1).簡樸的來說應(yīng)1就是具有Javn代碼的html,而servlet是具有html的Java代碼;

(2)』里最終也是被解釋為servlet并編譯再執(zhí)行,Jsp但是是servlet的另一種編寫方式;

(3).Jsp擅長表達,servlet擅長數(shù)據(jù)解決,在MVC三層結(jié)構(gòu)中,應(yīng)£_負責(zé)V(視圖),servlet

負責(zé)C(控制),各有優(yōu)勢,各司其職;

11.oracle中數(shù)據(jù)表的交集怎么表達

第一種方法:運用操作符intersect

intersect操作符用來合并兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結(jié)果的交集,前

提是兩個查詢的列的數(shù)量和數(shù)據(jù)類型必須完全相同。

舉例說明:

表A的數(shù)據(jù)結(jié)構(gòu):

中文名稱字段名類型長度

學(xué)號codeC4

姓名nameC8

表B的數(shù)據(jù)結(jié)構(gòu):

中文名稱字段名類型長度

學(xué)號Student_codeC4

姓名Student_nameC8

分數(shù)scoreN3

表A的數(shù)據(jù)為:

('1101'韓甲'),C1102','丁乙')

表B的數(shù)據(jù)為:

('1101'韓甲99),('1102','丁乙89),('1103',‘徐靜',94)

在oracle中運營以下查詢,圖1顯示了這個查詢的結(jié)果:

SQL>selectcode,namefromA

intersect

selectstudent_code,student_namefromB;

圖1使用intersect操作符查詢的結(jié)果

第二種方法:in子句

in子句可以在子查詢中為where子句計算所得的值創(chuàng)建一個列表。這種方法與前一種方法有所不同的是,前一

種方法比較多列但只使用一個intersect就行了,而一個in子句用來比較兩個子查詢的一列,比較幾列就要使用幾

個in子句。下面舉例說明如何取得兩個查詢的交集。

仍以A和B兩張數(shù)據(jù)表為例,在oracle中運營以下杳詢,圖2顯示了這個查詢的結(jié)果:

SQL>selectcode,namefromA

whereA.codein

(selectstudent_codefromB)

andA.namein

(selectstudent_namefromB)

orderbyA.code;

查詢結(jié)果如圖2所示。

圖2使用in子句查詢的結(jié)果

以上為筆者使用。racle7.3的體會,如有不妥之處,請不吝賜教。

12jsp頁面中如何傳遞參數(shù)

(1)直接在URL請求后添加

(2)jsp:param

3)設(shè)立session和request

13jsp中的doget()和dopost()方法的作用?

這個兩個方法都是http協(xié)議的方法,doget用于傳輸數(shù)據(jù)量較小(密碼會泄露),dopost數(shù)據(jù)

量較大,

14什么是用例?如何擬定用例?

在不展現(xiàn)一個系統(tǒng)或子系統(tǒng)內(nèi)部結(jié)構(gòu)的情況下,對系統(tǒng)或子系統(tǒng)的某個連貫的功能單

元的定義和描述。

一個用例可以看作是系統(tǒng)的一個功能,例如增長用戶,增長角色,查詢一個具體的一個事物,在Ejb的設(shè)計中,

一個usecase跟Sessionbean的?個方法是相應(yīng)的(使用的sessionfasade模式),你說的基礎(chǔ)數(shù)據(jù)管

理,我會把它解決成為一個抽象用例,由于我認為基礎(chǔ)數(shù)據(jù)這個概念非常的抽象,什么是真正的基礎(chǔ)數(shù)據(jù)?例

如說一個系統(tǒng)中郵政編碼算是這個系統(tǒng)的基礎(chǔ)數(shù)據(jù),那么"郵政編碼修改”這個就應(yīng)當(dāng)算是用例了.

15活動圖和時序圖的區(qū)別?

時序圖重要強調(diào)時間的順序

活動圖重要強調(diào)空間上類的交互

16什么是策略模式?什么情況下使用?

策略模式定義了一系列的算法,并將每一個算法封裝起來,并且使它們還可以互相替

Context(應(yīng)用場景):

1、需要使用ConcreteStrategy提供的算法。

2、內(nèi)部維護一個Strategy的實例。

3、負責(zé)動態(tài)設(shè)立運營時Strategy具體的實現(xiàn)算法。

4、負責(zé)跟Strategy之間的交互和數(shù)據(jù)傳遞。

17面向接口編程的好處

使用接口編程,易于程序擴展,減少程序耦合性。

涉及結(jié)構(gòu)清楚,類之間通信簡樸易懂,擴展性好,提高復(fù)用性等等。

18事物

事務(wù)就是一系列的操作,這些操作完畢一項任務(wù).只要這些操作里有一個操作沒有成功,事務(wù)

就操作失敗,發(fā)生回滾事件.即撤消前面的操作,這樣可以保證數(shù)據(jù)的一致性.并且可以把操作

暫時放在緩存里,等所有操作都成功有提交數(shù)據(jù)庫,這樣保證費時的操作都是有效操作.

1簡答題

3)說明jndi、jms、jta>rmi的意思?

web容器:給處在其中的應(yīng)用程序組件(JSP,SERVLET)提供一個環(huán)境,使JSRSERVLET直接更容器中

的環(huán)境變量接口交互,不必關(guān)注其它系統(tǒng)問題。重要有WEB服務(wù)器來實現(xiàn)。例如:

TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規(guī)范中的WEBAPPLICATION

標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。

EJB容器:Enterprisejavabean容器。更具有行業(yè)領(lǐng)域特色。他提供應(yīng)運營在其中的組件EJB各種管理功

能。只要滿足J2EE規(guī)范的EJB放入該容器,立即就會被容器進行高效率的管理。并且可以通過現(xiàn)成的接

口來獲得系統(tǒng)級別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。

JNDI:(JavaNaming&DirectoryInterface)JAVA命名目錄服務(wù)。重要提供的功能是:提供一個目錄系統(tǒng),

讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。

JMS:(JavaMessageService)JAVA消息服務(wù)。重要實現(xiàn)各個應(yīng)用程序之間的通訊。涉及點對點和廣播。

JTA:(JavaTransactionAPDJAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口

即可。

JAF:(JavaActionFrameWork)JAVA安全認證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部

署和自定義實現(xiàn)自己的個性安全控制策略。

RM1/II0P:(RemoteMethodInvocation/internet對象請求中介協(xié)議)他們重要用于通過遠程調(diào)用服務(wù)。例如,

遠程有一臺計算機上運營一個程序,它提供股票分析服務(wù),我們可以在本地計算機上實現(xiàn)對其直接調(diào)用。

當(dāng)然這是要通過一定的規(guī)范才干在異構(gòu)的系統(tǒng)之間進行通信。RM1是JAVA特有的。

4)數(shù)據(jù)庫中l(wèi)eftjoin的意思,和在什么場合中應(yīng)用?

簡樸說左表全都顯示右表也許為空

應(yīng)用場合就是當(dāng)左表的數(shù)據(jù)全要右表有就顯示沒有就不顯

這個比較細微,我盡量回答。

總的來說,2種寫法,在oracle里,效率和性能區(qū)別不大。

假如非要比較的話,大約有以下區(qū)別:

(+)和leftjoin,在檢索顯示的字段很少的時候,或者干脆就是檢索count(*)的時候,在效率和性能上,是

同樣,甚至cpucost都完全同樣;

但是在檢索顯示的字段比較多得時候,第一次執(zhí)行,leftjoin比(+)的效率高;當(dāng)然,執(zhí)行第二次之后,

由于數(shù)據(jù)已經(jīng)到了緩存,區(qū)別也不明顯了,基本是一致的。

6)ejb中的sessionbean和entitybean的區(qū)別和含義?

EntityBean:重要是指可存儲的物件,比如:學(xué)生,學(xué)校,公司,職工等等。。。必須是Serializable

SessionBean:重要是指商業(yè)邏輯物件,比如:購物,執(zhí)行某功能etc.表達的是一種過程

SessionBcan又分為:Stateless和Stateful區(qū)別就是,Stateful有狀態(tài)記憶,Stateless無狀態(tài)記憶

Message-DrivenBean:重要是用于做一些JMSmessage的解決。這?點可以從Message-DrivenBean的構(gòu)架

里看到:當(dāng)客戶發(fā)送一個message到JMS,Container就會從BeansPool中把注冊了的Message-Driven

Bean調(diào)出來并且后臺運營...

我這里是概述,建議你最佳找一本EJB的書來讀…最新的EJB的版本是3.0

7)抽象類和接口的區(qū)別(java經(jīng)典筆試題中也有)?

8)對象序列化的含義?

1、序列化是干什么的?

簡樸說就是為了保存在內(nèi)存中的各種對象的狀態(tài),并且可以把保存的對象狀態(tài)再讀出來。雖然你可以用

你自己的各種各樣的方法來保存ObjectStates,但是Java給你提供?種應(yīng)當(dāng)比你自己好的保存對象狀態(tài)的

機制,那就是序列化。

2、什么情況下需要序列化

a)當(dāng)你想把的內(nèi)存中的對象保存到一個文獻中或者數(shù)據(jù)庫中時候;

b)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對象的時候;

當(dāng)你想通過RMI傳輸對象的時候;

3、當(dāng)對一個對象實現(xiàn)序列化時,究竟發(fā)生了什么?

在沒有序列化前,每個保存在堆(Heap)中的對象都有相應(yīng)的狀態(tài)(state),即實例變量(instanceariable)

比如:

FoomyFoo=newFoo();

myFoo.setWidth(37);

myFoo.setHeight(70);

當(dāng)通過下面的代碼序列化之后,MyFoo對象中的width和Height實例變量的值(37,7(0都被保存到foo.ser

文獻中,這樣以后又可以把它從文獻中讀出來,重新在堆中創(chuàng)建本來的對象。當(dāng)然保存時候不僅僅是保存

對象的實例變量的值,JVM還要保存一些小量信息,比如類的類型等以便恢復(fù)本來的對象。

FileOutputStreamfs=newFileOutputStream("fbo.serH);

ObjectOutputStreamos=newObjectOutputStream(fs);

os.writeObject(myFoo);

4、實現(xiàn)序列化(保存到一個文獻)的環(huán)節(jié)

a)MakeaFileOutputStream

java代碼

FileOutputStreamfs=newFileOutputStream("foo.serH);

b)MakeaObjectOutputStream

java代碼

ObjectOutputStreamos=newObjectOutputStream(fs);

c)writetheobject

java代碼

os.writeObject(myObjectl);

os.writeObject(myObject2);

os.writeObject(myObject3);

d)closetheObjectOutpulStreain

java代碼

os.close();

5、舉例說明

java代碼

importjava.io.*;

publicclassBoximplementsSerializable

(

privateintwidth;

privateintheight;

publicvoidset\Vidth(intwidth){

this.width=width;

)

publicvoidsetHcight(intheight))

this.height=height;

)

publicstaticvoidmain(String[]args){

BoxmyBox=newBox();

myBox.setWidth(50);

myBox.setHeight(30);

try(

FileOulpulStreamfs=newFileOutputStreamC^o.ser");

ObjectOutputStreamos=newObjectOutputStream(fs);

os.writeObject(myBox);

os.close();

}catch(Exceptioncx)(

ex.printStackTrace();

)

)

)

6、相關(guān)注意事項

a)當(dāng)一個父類實現(xiàn)序列化,子類自動實現(xiàn)序列化,不需要顯式實現(xiàn)Serializable接口;

b)當(dāng)一個對象的實例變量引用其他對象,序列化該對象時也把引用對象進行序列化;

c)并非所有的對象都可以序列化,,至于為什么不可以,有很多因素了,比如:

1.安全面的因素,比如一個對象擁有private,public等field,對于一個要傳輸?shù)膶ο螅热鐚懙轿墨I,或

者進行rmi傳輸?shù)鹊龋谛蛄谢M行傳輸?shù)倪^程中,這個對象的private等域是不受保護的。

2.資源分派方面的因素,比如socket,thread類,假如可以序列化,進行傳輸或者保存,也無法對他們

進行重新的資源分配,并且,也是沒有必要這樣實現(xiàn)。

2選擇題

說明:不是太難所以,我只說下大約考試的內(nèi)容。

1)抽象類可以是final、private嘛?

java類一旦被聲明為abstract(抽象類),必須要繼承或者匿名(其實匿名也是種繼承)才干使用。

而final則是讓該類無法被繼承,所以final是必然不能和abstract同時聲明的

但是private呢?

一個類被聲明為private的時候,它當(dāng)然是內(nèi)部類,內(nèi)部類是可以被它的外部類訪問到的,所以,可以繼承,

private和abstract不沖突。

2)異常能出來的情況有什么?

3)finally塊的運用,就是出一道程序,然后讓你寫出輸出的結(jié)果來,在finally塊中的printin("")不管

如何總是要輸出出來的。

4)jsp中的doget。和dopost()方法的作用?

第一:doGct方法是servlet提交報頭數(shù)據(jù)之類的用的,doGet方法提交表單的時候會在url后邊顯示提交的

內(nèi)容,正是由于這樣所以我們一般對于需要保密的的信息(比如密碼等)不用這樣的提交方式;并且doGct

方法只能提交256個字符,這就指出了它的使用環(huán)境,對于我們傳遞短的文字信息的時候可以用它,但是

當(dāng)我們傳遞的是比較大的媒體文獻的時候就不可以使用它了。

doPost則沒有這個限制。通常我們使用的都是doPost方法,你只要在servlet中讓這兩個方法互相調(diào)用就行

了,例如在doGet方法中這樣寫

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsScrvletException,lOExccption{

doPost(request,response);

)

再把業(yè)務(wù)邏輯直接寫在doPost方法中。servlet碰至UdoGct方法調(diào)用直接就會去調(diào)用doPost由于他們的參數(shù)

都同樣。并且doGet方法解決中文問題很困難,要寫過濾器之類的。

第二:不管是post還是get方法提交過來的連接,都會在service中解決,然后,由service來交由相應(yīng)的

doPost或doGct方法解決,假如你重寫了service方法,就不會再解決doPost或doGet了。不管是post還是

get方法提交過來的連接,都會在service中解決,然后,由service來交由相應(yīng)的doPost或doGet方法解決,

假如你重寫了service方法,就不會再解決doPost或doGct了。

5)數(shù)據(jù)庫中的鎖涉及什么?

數(shù)據(jù)庫是一個多用戶使用的共享資源。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù)時,在數(shù)據(jù)庫中就會產(chǎn)生多個事務(wù)同時

存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就也許會讀取和存儲不對的的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。

加鎖是實現(xiàn)數(shù)據(jù)庫并發(fā)控制的一個非常重要的技術(shù)。當(dāng)事務(wù)在對某個數(shù)據(jù)對象進行操作前,先向系統(tǒng)發(fā)出

請求,對其加鎖。加鎖后事務(wù)就對該數(shù)據(jù)對象有了一定的控制,在該事務(wù)釋放鎖之前,其他的事務(wù)不能對

此數(shù)據(jù)對象進行更新操作。

在數(shù)據(jù)庫中有兩種基本的鎖類型:排它鎖(ExclusiveLocks,即X鎖)和共享鎖(ShareLocks,即S鎖)。

當(dāng)數(shù)據(jù)對象被加上排它鎖時,其他的事務(wù)不能對它讀取和修改。加了共享鎖的數(shù)據(jù)對象可以被其他事務(wù)讀

取,但不能修改。數(shù)據(jù)庫運用這兩種基本的鎖類型來對數(shù)據(jù)庫的事務(wù)進行并發(fā)控制。

根據(jù)保護的對象不同,Oracle數(shù)據(jù)庫鎖可以分為以下幾大類:

DML鎖(datalocks,數(shù)據(jù)鎖),用于保護數(shù)據(jù)的完整性;

DDL鎖(dictionarylocks,字典鎖),用于保護數(shù)據(jù)庫對象的結(jié)構(gòu),如表、索引等的結(jié)構(gòu)定義;

內(nèi)部鎖和閂(internallocksandlatches),保護數(shù)據(jù)庫的內(nèi)部結(jié)構(gòu),應(yīng)用于SGA;

在我們實際應(yīng)用開發(fā)中涉及較多的是DML鎖,其他兩種的話DBA會更加關(guān)心點;

DML鎖的目的在于保證并發(fā)情況下的數(shù)據(jù)完整性,重要涉及TM鎖和TX鎖,其中TM鎖稱為表級鎖,TX

鎖稱為事務(wù)鎖或行級鎖。

當(dāng)Oracle執(zhí)行DML語句時、系統(tǒng)自動在所要操作的表上申請TM類型的鎖。當(dāng)TM鎖獲得后,系統(tǒng)再自

動申請TX類型的鎖,并將實際鎖定的數(shù)據(jù)行的鎖標(biāo)志位進行置位。這樣在事務(wù)加鎖前檢查TX鎖相容性

時就不用再逐行檢查鎖標(biāo)志,而只需檢查TM鎖模式的相容性即可,大大提高了系統(tǒng)的效率。TM鎖涉及

了SS、SX、S、X等多種模式,在數(shù)據(jù)庫中用0—6來表達。不同的SQL操作產(chǎn)生不同類型的TM鎖。如

下圖所示:

值鎖模式鎖描述SQL

0NONE

1NULL空SELECT

2SS(ROW-S)行級共享鎖

其他對象只能查詢這些數(shù)據(jù)行SELECTFORUPDATE.LOCKFORUPDATE,

LOCKROWSHARE

3SX(ROW-X)行級排它鎖

在提交前不允許做DML操作INSERT、UPDATE、DELETE>

LOCKROWSHARE

4S(SHARE)共享鎖CREATEINDEX>LOCKSHARE

5SSX(SZROW-X)共享行級排它鎖LOCKSHAREROWEXCLUSIVE

6X(eXclusive)排它鎖ALTERTABLE.DROPTABLE、DROPINDEX>

TRUNCATETABLE,LOCKEXCLUSIVE

在數(shù)據(jù)行上只有X鎖(排他鎖)。在Oracle數(shù)據(jù)庫中,當(dāng)一個事務(wù)初次發(fā)起一個DML語句時就獲得一個

TX鎖,該鎖保持到事務(wù)被提交或【可滾。當(dāng)兩個或多個會話在表的同一條記錄上執(zhí)行DML語句時,第一個

會話在該條記錄上加鎖,其他的會話處在等待狀態(tài)。當(dāng)?shù)谝粋€會話提交后,TX鎖被釋放,其他會話才可以

加鎖。

在大約了解。racle的鎖機制之后,我們來解決幾個基本的問題:

1.UPDATE/DELETE操作會將RS鎖定,直至操作被COMMIT或者ROLLBACK;

若操作未COMMIT之前其他session對同樣的RS做變更操作,則操作會被hold,直至前session的

UPDATE/DELETE操作被COMMIT:

2.session內(nèi)外SELECT的RS范圍

前提:INSERT、UPDATE操作未COMMIT之前進行SELECT;

若在同一session內(nèi),SELECT出來的RS會涉及之前INSERT、UPDATE影響的記錄;

若不在同一session內(nèi),SELECT出來的RS不會涉及未被COMMIT的記錄;

3.SELECT....FORUPDATE|OFcols]|NOWAIT/WAIT]|SKIPLOCKED]

OFcols:只鎖定指定字段所在表的RS,而沒有指定的表則不會鎖定,只會在多表聯(lián)合查詢時出現(xiàn);

NOWAIT:語句不會hold,而是直接返I可錯誤ORA-00054:resourcebusyandacquirewithNOWAITspecified;

WAITN:語句被holdN秒,之后返回錯誤ORA-30006:resourcebusy;acquirewithWAITtimeoutexpired;

SKIPLOCKED:不提醒錯誤,而是直接返回Inorowsselected;

以上幾個選項可以聯(lián)合使用的,比較推薦的有:

SELECT....FORUPDATENOWAIT:對同一RS執(zhí)行該SQL時,直接返回錯誤:

SELECT....FORUPDATENOWAITSKIPLOCKED:對同一RS執(zhí)行該SQL時,直接返回空行;

PS:當(dāng)RS被LOCK住之后,只對同樣請求LOCK的語句有效,對無需LOCK的SELECT語句并沒有任

何影響;

6)jsp和serverlet的區(qū)別或者是他們的關(guān)系?

一,Servlet是什么?

客戶機/服務(wù)器計算的發(fā)展。Java提供了一整套客戶機/服務(wù)器解決方案,在這個方案中,程序可以自動地下

載到客戶端并執(zhí)行,這就是applet。但是它僅僅是問題的一半。問題的另一半就是Servlet。

servlet可以被認為是服務(wù)器端的applet。servlet被Web服務(wù)器加載和執(zhí)行,就如同applet被瀏覽器加載和

執(zhí)行同樣。servlet從客戶端(通過Web服務(wù)器)接受請求,執(zhí)行某種作業(yè),然后返回結(jié)果。使用servlet的基

本流程如下:

?客戶端通過HTTP提出請求.

?Web服務(wù)器接受該請求并將其發(fā)給servlet.假如這個servlet尚未被加載,Web服務(wù)器將把它加載到Java

虛擬機并且執(zhí)行它。

?servlet將接受該HTTP請求并執(zhí)行某種解決。

?servlet將向Web服務(wù)器返回應(yīng)答。

?Web服務(wù)器將從servlet收到的應(yīng)答發(fā)送給客戶端。

由于servlet是在服務(wù)器上執(zhí)行,通常與applet相關(guān)的安全性的問題并不需實現(xiàn)。要注意的是Web瀏覽器并

不直接和servlet通信,servlet是由Web服務(wù)器加載和執(zhí)行的。

而servlet是用Java編寫的,所以它們一開始就是平臺無關(guān)的。這樣,Java編寫一次就可以在任何平臺運營

(writeonce,runanywhere)的承諾就同樣可以在服務(wù)器上實現(xiàn)了。servlet尚有?些CGI腳本所不具有的獨特

優(yōu)點:(本人對CGI并不是十分了解,所以這些特點不能完全的體會到,這也是摘自論壇的貼子,請見諒)

servlet是持久的。servlet只需Web服務(wù)器加載一次,并且可以在不同請求之間保持服務(wù)(例如一次數(shù)據(jù)庫連

接)。與之相反,CGI腳本是短暫的、瞬態(tài)的。每一次對CGI腳本的請求,都會使Web服務(wù)器加載并執(zhí)行

該腳本。一旦這個CGI腳本運營結(jié)束,它就會被從內(nèi)存中清除,然后將結(jié)果返回到客戶端。CGI腳本的每

-次使用,都會導(dǎo)致程序初始化過程(例如連接數(shù)據(jù)庫)的反復(fù)執(zhí)行。

servlet是與平臺無關(guān)的。如前所述,servlet是用Java編寫的,它自然也繼承/Java的平臺無關(guān)性。

servlet是可擴展的。由于servlet是用Java編寫的,它就具有了Java所能帶來的所有優(yōu)點。Java是健壯的、

面向?qū)ο蟮木幊陶Z言,它很容易擴展以適應(yīng)你的需求。servlet自然也具有了這些特性。

servlet是安全的。從外界調(diào)用一個servlet的惟一方法就是通過Web服務(wù)器。這提供了高水平的安全性保障,

特別是在你的Web服務(wù)器有防火墻保護的時候。

setvlet可以在多種多樣的客戶機上使用。由于servlet是用Java編寫的,所以你可以很方便地在HTML

中使用它們,就像你使用叩plet同樣。

那么,Servlet是如何執(zhí)行的?如何來寫一個Servlet,它的基本架構(gòu)是怎么樣的?

這些問題,將在后面部分給予介紹。

二.JSP與Servlet

現(xiàn)在已經(jīng)對Servlet有了大約的了解,現(xiàn)在我們就來說說JSP和Servlet的關(guān)系。

JSP是--種腳本語言,包裝了JavaServlet系統(tǒng)的界面,簡化了Java和Servlet的使用難度,同時通過擴展

JSP標(biāo)簽(TAG)提供了網(wǎng)頁動態(tài)執(zhí)行的能力。盡管如此,JSP仍沒有超過Java和Servlet的范圍,不僅JSP

頁面上可以直接寫Java代碼,并且JSP是先被譯成Servlet之后才實際運營的。JSP在服務(wù)器上執(zhí)行,并將

執(zhí)行結(jié)果輸出到客戶端瀏覽器,我們可以說基本上與瀏覽器無關(guān)。它是與JavaScript不同的,JavaScript是

在客戶端的腳本語言,在客戶端執(zhí)行,與服務(wù)器無關(guān)。

那么JSP是什么?就是Servlet.

JSP與Servlet之間的重要差異在于,JSP提供了一套簡樸的標(biāo)簽,和HTML融合的比較好,可以使不了解

Servlet的人可以做出動態(tài)網(wǎng)頁來。對于Java語言不熟悉的人(比如像我),會覺得JSP開發(fā)比較方便。JSP修

改后可以立即看到結(jié)果,不需要手工編譯,JSP引擎會來做這些工作;而Servelt缺需要編譯,重新啟動Servlet

引擎等一系列動作。但是在JSP中,HTML與程序代碼混雜在一起,而Servlet卻不是這樣。也許大家比較

混亂了,那么Servlet又是什么?下面我們對JSP的運營來做一個簡樸的介紹,告訴大家如何來執(zhí)行一個JSP

文獻:

當(dāng)Web服務(wù)器(或Servlet引擎,應(yīng)用服務(wù)器)支持JSP引擎時,JSP引擎會照著JSP的語法,將JSP文獻轉(zhuǎn)換

成Servlet代碼源文獻,接著Servlet會被編譯成Java可執(zhí)行字節(jié)碼(bytecode),并以一般的Servlet方式載入

執(zhí)行

JSP語法簡樸,可以方便的嵌入HTML之中,很容易加入動態(tài)的部分,方便的輸出HTML。在Servlet中輸

出HTML缺需要調(diào)用特定的方法,對于引號之類的字符也要做特殊的解決,加在復(fù)雜的HTML頁面中作

為動態(tài)部分,比起JSP來說是比較困難的。

除去了轉(zhuǎn)換和編譯階段,JSP和Servlel之間的區(qū)別實在是不大。

JSP引擎通常架構(gòu)在Servlet引擎之上,自身就是?個Servlet,把JSP文獻轉(zhuǎn)譯成Servlet源代碼,再調(diào)用Java

編譯器,編譯成Servlet。這也是JSP在第一次調(diào)用時速度比較慢的因素,在第一次編譯之后,JSP與Servlel

速度相同.下面我們來看看為什么他們在第一次編譯后再編譯的速度相同:

在整個運營過程中,JSP引擎會檢查編譯好的JSP(以Servlet形式存在)是否比原始的JSP文獻還新,假如是,

JSP引擎不會編譯;假如不是,表達JSP文獻比較新,就會重新執(zhí)行轉(zhuǎn)譯與編譯的過程。

為了有個深刻的了解,我們看一下JSP的運營和開發(fā)環(huán)境:

瀏覽器:常見的瀏覽器有正和Netscape兩種。

數(shù)據(jù)庫:常用的數(shù)據(jù)庫有Oracle,SQLServer,Informix,DB2,Sybase,Access,MySQL等。

操作系統(tǒng):常見的有Windows,Linux,以及各種Unix系統(tǒng)。

Web服務(wù)器:常見的有IIS,Apache,NetscapeEnterpriseServer等。

JSP引擎:?般JSP引擎都以Servlet引擎為基礎(chǔ),并以Servlet的形式出現(xiàn)。同時,在各種免費和商業(yè)引擎

的實現(xiàn)中,Servlet引擎和Jsp引擎通常也是一起出現(xiàn),我們成為Servlet/JSP引擎,或從某種成為JSP引擎。

JSP引擎是可以提供JSP和Servlet運營支持并對其生存周期進行管理的系統(tǒng)級實體。

在JSP頁面第一次

溫馨提示

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

最新文檔

評論

0/150

提交評論