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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

抽象層上。

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

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

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

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

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

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

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

4.單子模式

PublicclassSignle{

PrivateSignle(){

PirvatestaticSignlesignle=newSignle();

PublicstaticSignlegets(){

Retrunsignle;

publicclassMyBean{

privatestaticMyBeaninstance=null;

privateMyBean(){

//dosomething

)

publicstaticsynchronizedMyBeangetlnstance(){

if(instance==null){

instance=newMyBean();

)

returninstance;

)

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

先自己new出一個(gè)實(shí)例.

)

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

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

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

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

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

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

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

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

對(duì)于客戶機(jī),EntityBean是一種持久性對(duì)象,它代表一個(gè)存儲(chǔ)在持久性存儲(chǔ)器中的實(shí)體的對(duì)

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

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

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

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

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

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

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

用public)?

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

8對(duì)象序列化的含義

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

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

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

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

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

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

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

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

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

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

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

lOjsp和serverlet的區(qū)別

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

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

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

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

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

第一種方法:運(yùn)用操作符intersect

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

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

舉例說明:

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

中文名稱字段名類型長(zhǎng)度

學(xué)號(hào)codeC4

姓名nameC8

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

中文名稱字段名類型長(zhǎng)度

學(xué)號(hào)Student_codeC4

姓名Student_nameC8

分?jǐn)?shù)scoreN3

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

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

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

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

在oracle中運(yùn)營(yíng)以下查詢,圖1顯示了這個(gè)查詢的結(jié)果:

SQL>selectcode,namefromA

intersect

selectstudent_code,student_namefromB;

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

第二種方法:in子句

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

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

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

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

SQL>selectcode,namefromA

whereA.codein

(selectstudent_codefromB)

andA.namein

(selectstudent_namefromB)

orderbyA.code;

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

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

以上為筆者使用。racle7.3的體會(huì),如有不妥之處,請(qǐng)不吝賜教。

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

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

(2)jsp:param

3)設(shè)立session和request

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

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

量較大,

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

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

元的定義和描述。

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

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

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

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

15活動(dòng)圖和時(shí)序圖的區(qū)別?

時(shí)序圖重要強(qiáng)調(diào)時(shí)間的順序

活動(dòng)圖重要強(qiáng)調(diào)空間上類的交互

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

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

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

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

2、內(nèi)部維護(hù)一個(gè)Strategy的實(shí)例。

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

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

17面向接口編程的好處

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

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

18事物

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

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

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

1簡(jiǎn)答題

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

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

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

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

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

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

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

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

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

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

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

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

即可。

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

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

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

遠(yuǎn)程有一臺(tái)計(jì)算機(jī)上運(yùn)營(yíng)一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對(duì)其直接調(diào)用。

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

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

簡(jiǎn)樸說左表全都顯示右表也許為空

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

這個(gè)比較細(xì)微,我盡量回答。

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

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

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

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

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

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

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

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

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

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

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

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

Bean調(diào)出來并且后臺(tái)運(yùn)營(yíng)...

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

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

8)對(duì)象序列化的含義?

1、序列化是干什么的?

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

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

機(jī)制,那就是序列化。

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

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

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

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

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

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

比如:

FoomyFoo=newFoo();

myFoo.setWidth(37);

myFoo.setHeight(70);

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

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

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

FileOutputStreamfs=newFileOutputStream("fbo.serH);

ObjectOutputStreamos=newObjectOutputStream(fs);

os.writeObject(myFoo);

4、實(shí)現(xiàn)序列化(保存到一個(gè)文獻(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)注意事項(xiàng)

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

b)當(dāng)一個(gè)對(duì)象的實(shí)例變量引用其他對(duì)象,序列化該對(duì)象時(shí)也把引用對(duì)象進(jìn)行序列化;

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

1.安全面的因素,比如一個(gè)對(duì)象擁有private,public等f(wàn)ield,對(duì)于一個(gè)要傳輸?shù)膶?duì)象,比如寫到文獻(xiàn),或

者進(jìn)行rmi傳輸?shù)鹊?,在序列化進(jìn)行傳輸?shù)倪^程中,這個(gè)對(duì)象的private等域是不受保護(hù)的。

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

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

2選擇題

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

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

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

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

但是private呢?

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

private和abstract不沖突。

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

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

如何總是要輸出出來的。

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

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

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

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

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

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

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

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsScrvletException,lOExccption{

doPost(request,response);

)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

下圖所示:

值鎖模式鎖描述SQL

0NONE

1NULL空SELECT

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

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

LOCKROWSHARE

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

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

LOCKROWSHARE

4S(SHARE)共享鎖CREATEINDEX>LOCKSHARE

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

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

TRUNCATETABLE,LOCKEXCLUSIVE

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

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

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

加鎖。

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

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

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

UPDATE/DELETE操作被COMMIT:

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

前提:INSERT、UPDATE操作未COMMIT之前進(jìn)行SELECT;

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

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

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

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

NOWAIT:語(yǔ)句不會(huì)hold,而是直接返I可錯(cuò)誤ORA-00054:resourcebusyandacquirewithNOWAITspecified;

WAITN:語(yǔ)句被holdN秒,之后返回錯(cuò)誤ORA-30006:resourcebusy;acquirewithWAITtimeoutexpired;

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

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

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

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

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

何影響;

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

一,Servlet是什么?

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

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

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

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

本流程如下:

?客戶端通過HTTP提出請(qǐng)求.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

二.JSP與Servlet

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

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

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

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

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

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

那么JSP是什么?就是Servlet.

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

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

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

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

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

文獻(xiàn):

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

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

執(zhí)行

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

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

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

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

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

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

速度相同.下面我們來看看為什么他們?cè)诘谝淮尉幾g后再編譯的速度相同:

在整個(gè)運(yùn)營(yíng)過程中,JSP引擎會(huì)檢查編譯好的JSP(以Servlet形式存在)是否比原始的JSP文獻(xiàn)還新,假如是,

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

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

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

數(shù)據(jù)庫(kù):常用的數(shù)據(jù)庫(kù)有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)。同時(shí),在各種免費(fèi)和商業(yè)引擎

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

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

在JSP頁(yè)面第一次

溫馨提示

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

評(píng)論

0/150

提交評(píng)論