java筆試題及答案公司_第1頁
java筆試題及答案公司_第2頁
java筆試題及答案公司_第3頁
java筆試題及答案公司_第4頁
java筆試題及答案公司_第5頁
免費預(yù)覽已結(jié)束,剩余13頁可下載查看

付費下載

下載本文檔

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

文檔簡介

1、精品文檔1. web 中的 forward 和 redirect 的區(qū)別?(前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示岀轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地 址。所以,前者更加高效,在前者可以滿足需要時,盡量使用forward。方法,并且,這樣也有助于隱藏實際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務(wù)器上的資源,則必須使用sendRedirect()方法。2. xml 在解釋的時候 DOM 和 SAX 協(xié)議的區(qū)別和含義?DOM:處理大型文件時其性能下降的非常厲害。這個問題是由 DO

2、M 的樹結(jié)構(gòu)所造成的,這種結(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(Java Nami ng and Directory In terface)是一個應(yīng)用程序設(shè)計的API,為開發(fā)人員提供了查找和訪問各種命

3、名和目錄服務(wù)的通用、統(tǒng)一的接口,類似JDBC 都是構(gòu)建在抽象層上。JMS (Java Messaging Service )是 Java 平臺上有關(guān)面向消息中間件的技術(shù)規(guī)范,翻譯為Java 消息服務(wù)。JMS 支持點對點和發(fā)布/訂閱兩種消息模型。JTA(Java Transaction API)為 J2EE 平臺提供了分布式事務(wù)服務(wù)。要用 JTA 進(jìn)行事務(wù)界定,應(yīng)用程序要調(diào)用javax.transaction.UserTransaction 接口中的方法.RMI 是 Java 的一組擁護開發(fā)分布式應(yīng)用程序的API。RMI 使用 Java 語言接口定義了遠(yuǎn)程對象,它集合了 Java 序列化和 Ja

4、va 遠(yuǎn)程方法協(xié)議(Java Remote Method Protocol)。它大大增強了Java 開發(fā)分布式應(yīng)用的能力4.單子模式Public class Sig nlePrivate Sig nle()Pirvate static Signle signle = new Signle();Public static Signle gets()Retrun sig nle;*a public class MyBea n private static MyBean instance = null;private MyBea n()/do someth ingpublic static sync

5、hroni zed MyBea n get In sta nce() if(in sta nce = nu ll)in sta nce = new MyBea n();return in sta nee;精品文檔你是說單例模式是吧,這個單例模式是延遲加載的模式.還有一種就是即時加載,不需要判斷是否有實例存在,先自己 new出一個實例.5 數(shù)據(jù)庫中 left join 的意思,和在什么場合中應(yīng)用?LEFT JOIN 操作用于在任何的 FROM 子句中,組合來源表的記錄。使用LEFT JOIN 運算來創(chuàng)建一個左邊外部聯(lián)接。左邊外部聯(lián)接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(

6、右邊) 表中并沒有相符值的記錄。6 ejb 中的 sessionbean 和 entitybean 的區(qū)別和含義?Sessi on Bean 在 J2EE 應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他 EJB 組件。EntityBean 被用來代表應(yīng)用系統(tǒng)中用到的數(shù)據(jù)。對于客戶機,Session Bean 是一種非持久性對象,它實現(xiàn)某些在服務(wù)器上運行的業(yè)務(wù)邏輯。 對于客戶機,EntityBean 是一種持久性對象,它代表一個存儲在持久性存儲器中的實體的對 象視圖,或是一個由現(xiàn)有企業(yè)應(yīng)用程序?qū)崿F(xiàn)的實體。7 抽象類和接口的區(qū)別1: 一個類可以實現(xiàn)任意多的接口,但是最多只能對

7、一個抽象類進(jìn)行子類化。2: 個抽象類可以包括非抽象方法,而一個接口的所有方法在效果上都是抽象的。3: 個抽象類可以申明并使用變量,而一個接口不行。4: 一個抽象類中的方法的訪問修飾符可以使public,internal,protected,protected internal,private,而接口成員的訪問修飾符在默認(rèn)情況下都是public,而且,在申明接口成員時,不允許使用訪問修飾符(甚至不能使用 public)。5: 個抽象類可以定義構(gòu)造函數(shù),而一個接口不行。8 對象序列化的含義Java 序列化技術(shù)可以使你將一個對象的狀態(tài)寫入一個Byte 流里,并且可以從其它地方把該 Byte 流里的數(shù)

8、據(jù)讀出來。重新構(gòu)造一個相同的對象。這種機制允許你將對象通過網(wǎng)絡(luò) 進(jìn)行傳播,并可以隨時把對象持久化到數(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 進(jìn)行讀取,但不能 進(jìn)行更新

9、(S 鎖因此又稱為讀鎖),在 T 釋放 A 上的 S 鎖以前,其他事務(wù)可以再對 A 加 S 鎖,但不 能加 X 鎖,從而可以讀取 A,但不能更新 A.10 jsp 和 serverlet 的區(qū)別(1) .簡單的來說 Jsp 就是含有 Java 代碼的 html,而 servlet 是含有 html 的 Java 代碼;(2).Jsp 最終也是被解釋為servlet 并編譯再執(zhí)行, Jsp 不過是 servlet 的另一種編寫方式;(3).Jsp 擅長表示,servlet 擅長數(shù)據(jù)處理,在MVC 三層結(jié)構(gòu)中,Jsp 負(fù)責(zé) V (視圖),servlet負(fù)責(zé) C (控制),各有優(yōu)勢,各司其職;11.

10、 oracle 中數(shù)據(jù)表的交集怎么表示第一種方法:利用操作符 intersect精品文檔intersect 操作符用來合并兩個查詢,返回兩個查詢中都存在的記錄,即返回兩個查詢結(jié)果的交集,前精品文檔提是兩個查詢的列的數(shù)量和數(shù)據(jù)類型必須完全相同 舉例說明:表 A 的數(shù)據(jù)結(jié)構(gòu):表 A 的數(shù)據(jù)為:(1101 ,韓甲),(1102 ,丁乙)表 B 的數(shù)據(jù)為:(1101,韓甲,99),(1102 ,丁乙,89),(1103 ,徐靜,94)在 oracle 中運行以下查詢,圖1 顯示了這個查詢的結(jié)果:SQLselect code, name from Aintersectselect student_cod

11、e,student_name from B;圖 1 使用 intersect 操作符查詢的結(jié)果第二種方法:in 子句in 子句可以在子查詢中為種方法比較多列但只使用一個where 子句計算所得的值創(chuàng)建一個列表。這種方法與前一種方法有所不同的是,前一intersect 就行了,而一個 in 子句用來比較兩個子查詢的一列,比較幾列就要使用幾個 in 子句。下面舉例說明如何取得兩個查詢的交集。中文名稱字段名學(xué)號code姓名name表 B 的數(shù)據(jù)結(jié)構(gòu):中文名稱字段名學(xué)號Student_code姓名Student_name分?jǐn)?shù)score類型CC長度48類型CCN長度483精品文檔仍以A和E兩張數(shù)據(jù)表為例

12、,在oracle 中運行以下查詢,圖 2 顯示了這個查詢的結(jié)果:SQLselect code,name from A where A.code in(select student_code from B) and A.name in(select student_name from B) order by A.code;查詢結(jié)果如圖 2 所示。圖 2 使用 in 子句查詢的結(jié)果以上為筆者使用 oracle7.3 的體會,如有不當(dāng)之處,請不吝賜教。12 jsp 頁面中如何傳遞參數(shù)(1)直接在 URL 請求后添加(2)jsp:param3)設(shè)置 session 禾口 request13 jsp 中

13、的 doget ()和 dopost ()方法的作用?這個兩個方法都是 http 協(xié)議的方法,doget 用于傳輸數(shù)據(jù)量較?。艽a會泄露),dopost 數(shù)據(jù)量較大,14 什么是用例?如何確定用例?在不展現(xiàn)一個系統(tǒng)或子系統(tǒng)內(nèi)部結(jié)構(gòu)的情況下,對系統(tǒng)或子系統(tǒng)的某個連貫的功能單元的定義和描述。一個用例可以看作是系統(tǒng)的一個功能,例如增加用戶,增加角色,查詢一個具體的一個事物,在 Ejb 的設(shè)計中,一個 use case 跟 Session bean 的一個方法是對應(yīng)的 (使用的 session fasade模式), 你說的基礎(chǔ)數(shù)據(jù)管理, 我會把它處理成為一個抽象用例 ,因為我認(rèn)為基礎(chǔ)數(shù)據(jù)這個概念非常的

14、抽象,什么是真正的基礎(chǔ)數(shù)據(jù) ?例如說一個系統(tǒng)中郵政編碼算是這個系統(tǒng)的基礎(chǔ)數(shù)據(jù),那么 郵政編碼修改 這個就應(yīng)該算是用例了 .15 活動圖和時序圖的區(qū)別?時序圖主要強調(diào)時間的順序活動圖主要強調(diào)空間上類的交互精品文檔16 什么是策略模式?什么情況下使用? 策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使它們還可以相互替 換Context( 應(yīng)用場景 ):1 、需要使用 ConcreteStrategy 提供的算法。2 、 內(nèi)部維護一個 Strategy 的實例。3 、 負(fù)責(zé)動態(tài)設(shè)置運行時 Strategy 具體的實現(xiàn)算法。4 、負(fù)責(zé)跟 Strategy 之間的交互和數(shù)據(jù)傳遞。17 面向接口

15、編程的好處 使用接口編程,易于程序擴展,降低程序耦合性。 包括結(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)境,使 JSP,SERVLET 直接更容器中的 環(huán)境變量 接口交互

16、, 不必關(guān)注 其它系統(tǒng) 問題。主 要有 WEB 服務(wù)器來實 現(xiàn)。例如 :TOMCAT,WEBLOGIC,WEBSPHERE 等。該容器提供的接口嚴(yán)格遵守J2EE 規(guī)范中的 WEB APPLICATION標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的 WEB 服務(wù)器就叫做 J2EE 中的 WEB 容器。EJB 容器: Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運行在其中的組件 EJB 各種管理功 能。只要滿足 J2EE 規(guī)范的 EJB 放入該容器,馬上就會被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接 口來獲得系統(tǒng)級別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。JNDI :( Java Nami

17、ng & Directory Interface ) JAVA 命名目錄服務(wù)。主要提供的功能是:提供一個目錄系統(tǒng), 讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。JMS:(Java Message Service) JAVA 消息服務(wù)。主要實現(xiàn)各個應(yīng)用程序之間的通訊。包括點對點和廣播。JTA:( Java Transaction API)JAVA 事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口 即可。JAF:(Java Action FrameWork) JAVA 安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部 署

18、和自定義實現(xiàn)自己的個性安全控制策略。精品文檔RMI/IIOP: ( Remote Method Invocation /internet 對象請求中介協(xié)議) 他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺計算機上運行一個程序,它提供股票分析服務(wù),我們可以在本地計算機上實現(xiàn)對其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)之間進(jìn)行通信。RMI 是 JAVA 特有的。4)數(shù)據(jù)庫中 left join 的意思,和在什么場合中應(yīng)用?簡單說左表全都顯示右表可能為空應(yīng)用場合就是當(dāng)左表的數(shù)據(jù)全要右表有就顯示沒有就不顯這個比較細(xì)微,我盡量回答??偟膩碚f,2 種寫法,在 oracle 里,效率和性能區(qū)別不大

19、。如果非要比較的話,大概有以下區(qū)別:(+)和 left join ,在檢索顯示的字段很少的時候,或者干脆就是檢索count(*)的時候,在效率和性能上,是一樣,甚至 cpucost 都完全一樣;但是在檢索顯示的字段比較多得時候,第一次執(zhí)行,left join 比(+)的效率高;當(dāng)然,執(zhí)行第二次之后,由于數(shù)據(jù)已經(jīng)到了緩存,區(qū)別也不明顯了,基本是一致的。6)ejb 中的 sessionbean 和 entitybean 的區(qū)別和含義?EntityBean:主要是指可存儲的物件,比如:學(xué)生,學(xué)校, 公司,職員等等。必須是 SerializableSessionBean:主要是指商業(yè)邏輯物件,比如:購

20、物,執(zhí)行某功能 etc.表示的是一種過程SessionBean 又分為:Stateless 和 Stateful 區(qū)別就是,Stateful 有狀態(tài)記憶,Stateless 無狀態(tài)記憶Message-Driven Bean:主要是用于做一些 JMS message 的處理。這一點可以從 Message-Driven Bean 的構(gòu)架 里看到:當(dāng)客戶 發(fā)送一個 message 至 U JMS,Container 就會從 Beans Pool 中把注冊了的 Message-DrivenBean 調(diào)出來并且后臺運行我這里是概述,建議你最好找一本EJB 的書來讀最新的 EJB 的版本是 3.07)抽象

21、類和接口的區(qū)別(java 經(jīng)典筆試題中也有)?8)對象序列化的含義?1、序列化是干什么的?簡單說就是為了保存在內(nèi)存中的各種對象的狀態(tài),并且可以把保存的對象狀態(tài)再讀出來。雖然你可以用 你自己的各種各樣的方法來保存Object States,但是 Java 給你提供一種應(yīng)該比你自己好的保存對象狀態(tài)的機制,那就是序列化。2、什么情況下需要序列化a)當(dāng)你想把的內(nèi)存中的對象保存到一個文件中或者數(shù)據(jù)庫中時候;b)當(dāng)你想用套接字在網(wǎng)絡(luò)上傳送對象的時候;c)當(dāng)你想通過 RMI 傳輸對象的時候;3、當(dāng)對一個對象實現(xiàn)序列化時,究竟發(fā)生了什么?精品文檔在沒有序列化前,每個保存在堆(Heap)中的對象都有相應(yīng)的狀態(tài)(

22、state),即實例變量(instance ariable)比如:Foo myFoo = new Foo();myFoo .setWidth(37);myFoo.setHeight(70);當(dāng)通過下面的代碼序列化之后,MyFoo 對象中的 width 和 Height 實例變量的值(37,70)都被保存到 foo.ser文件中,這樣以后又可以把它從文件中讀岀來,重新在堆中創(chuàng)建原來的對象。當(dāng)然保存時候不僅僅是保存對象的實例變量的值,JVM 還要保存一些小量信息,比如類的類型等以便恢復(fù)原來的對象。FileOutputStream fs = new FileOutputStream(foo.ser)

23、;ObjectOutputStream os = new ObjectOutputStream(fs);os.writeObject(myFoo);4、實現(xiàn)序列化(保存到一個文件)的步驟a) Make a FileOutputStreamjava 代碼FileOutputStream fs = new FileOutputStream(foo.ser);b) Make a ObjectOutputStreamjava 代碼ObjectOutputStream os = new ObjectOutputStream(fs);c) write the objectjava 代碼os.writeOb

24、ject(myObject1);os.writeObject(myObject2);os.writeObject(myObject3);d) close the ObjectOutputStreamjava 代碼os.close();5、舉例說明java 代碼import java.io.*;精品文檔public class Box implements Serializable精品文檔private int width;private int height;public void setWidth(int width)this.width = width;public void setHei

25、ght(int height)this.height = height;public static void main(String args)Box myBox = new Box();myBox.setWidth(50);myBox.setHeight(30);tryFileOutputStream fs = new FileOutputStream(foo.ser);ObjectOutputStream os = new ObjectOutputStream(fs);os.writeObject(myBox);os.close();catch(Exception ex)ex.printS

26、tackTrace();6、相關(guān)注意事項a)當(dāng)一個父類實現(xiàn)序列化,子類自動實現(xiàn)序列化,不需要顯式實現(xiàn)Serializable 接口;b) 當(dāng)一個對象的實例變量引用其他對象,序列化該對象時也把引用對象進(jìn)行序列化;c)并非所有的對象都可以序列化,至于為什么不可以,有很多原因了,比如:1.安全方面的原因,比如一個對象擁有private, public 等 field,對于一個要傳輸?shù)膶ο?,比如寫到文?或者進(jìn)行 rmi 傳輸?shù)鹊?,在序列化進(jìn)行傳輸?shù)倪^程中,這個對象的private 等域是不受保護的。2. 資源分配方面的原因,比如socket,thread 類,如果可以序列化,進(jìn)行傳輸或者保存,也無法

27、對他們進(jìn)行重新的資源分配,而且,也是沒有必要這樣實現(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

28、 塊的運用,就是出一道程序,然后讓你寫出輸出的結(jié)果來,在finally 塊中的 printin (”不管 如何總是要輸岀岀來的。4)jsp 中的 doget () 和 dopost ()方法的作用?第一:doGet 方法是 servlet 提交報頭數(shù)據(jù)之類的用的,doGet 方法提交表單的時候會在url 后邊顯示提交的內(nèi)容,正是因為這樣所以我們一般對于需要保密的的信息(比如密碼等)不用這樣的提交方式;而且 doGet方法只能提交 256 個字符,這就指岀了它的使用環(huán)境,對于我們傳遞短的文字信息的時候可以用它,但是 當(dāng)我們傳遞的是比較大的媒體文件的時候就不能夠使用它了。doPost 則沒有這個限

29、制。通常我們使用的都是 doPost 方法,你只要在 servlet 中讓這兩個方法互相調(diào)用就行 了,例如在doGet 方法中這樣寫public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, lOException doPost(request,response);再把業(yè)務(wù)邏輯直接寫在doPost 方法中。servlet 碰到 doGet 方法調(diào)用直接就會去調(diào)用doPost 因為他們的參數(shù)都一樣。而且 doGet 方法處理中文問題很困難,要寫過濾器之類的。

30、第二:不管是 post 還是 get 方法提交過來的連接,都會在 service 中處理,然后,由 service 來交由相應(yīng)的 doPost 或 doGet方法處理,如果你重寫了 service 方法,就不會再處理 doPost 或 doGet 了。不管是 post 還是 get 方法提交過來的連接,都會在 service 中處理,然后,由 service 來交由相應(yīng)的 doPost 或 doGet 方法處理, 如果你重寫了 service 方法,就不會再處理 doPost 或 doGet 了。5)數(shù)據(jù)庫中的鎖包括什么?數(shù)據(jù)庫是一個多用戶使用的共享資源。當(dāng)多個用戶并發(fā)地存取數(shù)據(jù)時,在數(shù)據(jù)庫中

31、就會產(chǎn)生多個事務(wù)同時 存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。加鎖是實現(xiàn)數(shù)據(jù)庫并發(fā)控制的一個非常重要的技術(shù)。當(dāng)事務(wù)在對某個數(shù)據(jù)對象進(jìn)行操作前,先向系統(tǒng)發(fā)岀請求,對其加鎖。加鎖后事務(wù)就對該數(shù)據(jù)對象有了一定的控制,在該事務(wù)釋放鎖之前,其他的事務(wù)不能對 此數(shù)據(jù)對象進(jìn)行更新操作。在數(shù)據(jù)庫中有兩種基本的鎖類型:排它鎖( Exclusive Locks,即 X 鎖)和共享鎖(Share Locks,即 S 鎖)。當(dāng)數(shù)據(jù)對象被加上排它鎖時,其他的事務(wù)不能對它讀取和修改。加了共享鎖的數(shù)據(jù)對象可以被其他事務(wù)讀取,但不能修改。數(shù)據(jù)庫利用這兩種基本的鎖類型來對數(shù)據(jù)

32、庫的事務(wù)進(jìn)行并發(fā)控制。根據(jù)保護的對象不同,Oracle 數(shù)據(jù)庫鎖可以分為以下幾大類:精品文檔DML 鎖(data locks,數(shù)據(jù)鎖),用于保護數(shù)據(jù)的完整性;精品文檔DDL 鎖(dictionary locks,字典鎖),用于保護數(shù)據(jù)庫對象的結(jié)構(gòu),如表、索引等的結(jié)構(gòu)定義;內(nèi)部鎖和閂(internal locks and latches),保護數(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) Ora

33、cle 執(zhí)行 DML 語句時,系統(tǒng)自動在所要操作的表上申請TM 類型的鎖。當(dāng) TM 鎖獲得后,系統(tǒng)再自動申請 TX 類型的鎖,并將實際鎖定的數(shù)據(jù)行的鎖標(biāo)志位進(jìn)行置位。這樣在事務(wù)加鎖前檢查TX 鎖相容性時就不用再逐行檢查鎖標(biāo)志,而只需檢查TM 鎖模式的相容性即可,大大提高了系統(tǒng)的效率。TM 鎖包括了 SS、SX、S、X 等多種模式,在數(shù)據(jù)庫中用 0 6 來表示。不同的 SQL 操作產(chǎn)生不同類型的 TM 鎖。如 下圖所示:值鎖模式鎖描述 SQL0 NONE1NULL 空 SELECT2SS(ROW-S)行級共享鎖其他對象只能查詢這些數(shù)據(jù)行SELECT FOR UPDA TE、LOCK FOR UP

34、DA TE、LOCK ROW SHARE3SX(ROW-X) 行級排它鎖在提交前不允許做 DML 操作 INSERT、UPDATE、DELETE、LOCK ROW SHARE4S(SHARE)共享鎖 CREATE INDEX、LOCK SHARE5SSX(S/ROW-X) 共享行級排它鎖LOCK SHARE ROW EXCLUSIVE6X(eXclusive) 排它鎖 ALTER TABLE、DROP TABLE、DROP INDEX、TRUNCATE TABLE、LOCK EXCLUSIVE在數(shù)據(jù)行上只有 X 鎖(排他鎖)。在 Oracle 數(shù)據(jù)庫中,當(dāng)一個事務(wù)首次發(fā)起一個DML 語句時就獲

35、得一個TX 鎖,該鎖保持到事務(wù)被提交或回滾。當(dāng)兩個或多個會話在表的同一條記錄上執(zhí)行DML 語句時,第一個會話在該條記錄上加鎖,其他的會話處于等待狀態(tài)。當(dāng)?shù)谝粋€會話提交后,TX 鎖被釋放,其他會話才可以加鎖。在大概了解 oracle 的鎖機制之后,我們來解決幾個基本的問題:1. UPDATE/DELETE 操作會將 RS 鎖定,直至操作被 COMMIT 或者 ROLLBACK ;若操作未 COMMIT 之前其他 session 對同樣的 RS 做變更操作, 則操作會被 hold, 直至前 session 的 UPDATE/DELETE 操作被 COMMIT ;2. session 內(nèi)外 SELE

36、CT 的 RS 范圍前提:INSERT、UPDATE 操作未 COMMIT 之前進(jìn)行 SELECT ;若在同一 session 內(nèi),SELECT 出來的 RS 會包括之前 INSERT、UPDATE 影響的記錄;若不在同一 session 內(nèi),SELECT 出來的 RS 不會包括未被 COMMIT 的記錄;精品文檔3.SELECT. FOR UPDA TE OF cols NOWAIT/WAIT SKIP LOCKED精品文檔OF cols:只鎖定指定字段所在表的RS,而沒有指定的表則不會鎖定,只會在多表聯(lián)合查詢時岀現(xiàn);NOWAIT :語句不會 hold,而是直接返回錯誤 ORA-00054:

37、 resource busy and acquire with NOWAIT specified ; WAIT N :語句被 hold N 秒,之后返回錯誤 0RA-30006: resource busy; acquire with WAIT timeout expired ; SKIP LOCKED :不提示錯誤,而是直接返回no rows selected;以上幾個選項可以聯(lián)合使用的,比較推薦的有:SELECT. FOR UPDA TE NOWAIT :對同一 RS 執(zhí)行該 SQL 時,直接返回錯誤;SELECT. FOR UPDA TE NOWAIT SKIP LOCKED :對同一

38、RS 執(zhí)行該 SQL 時,直接返回空行;PS:當(dāng) RS 被 LOCK 住之后,只對同樣請求 LOCK 的語句有效,對無需 LOCK 的 SELECT 語句并沒有任 何影響;6)jsp 和 serverlet 的區(qū)別或者是他們的關(guān)系?一.Servlet 是什么?客戶機/服務(wù)器計算的發(fā)展。Java 提供了一整套客戶機/服務(wù)器解決方案,在這個方案中,程序可以自動地下 載到客戶端并執(zhí)行,這就是 applet。但是它僅僅是問題的一半。問題的另一半就是Servletoservlet 可以被認(rèn)為是服務(wù)器端的applet。servlet 被 Web 服務(wù)器加載和執(zhí)行,就如同 applet 被瀏覽器加載和執(zhí)行一

39、樣。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 瀏覽器并不直接和 servl

40、et 通信,servlet 是由 Web 服務(wù)器加載和執(zhí)行的。而 servlet 是用 Java 編寫的,所以它們一開始就是平臺無關(guān)的。這樣,Java 編寫一次就可以在任何平臺運行(write once,run anywhere)的承諾就同樣可以在服務(wù)器上實現(xiàn)了。servlet 還有一些 CGI 腳本所不具備的獨特優(yōu)點:(本人對 CGI 并不是十分了解,所以這些特點不能完全的體會到,這也是摘自論壇的貼子,請見諒)servlet 是持久的。servlet 只需 Web 服務(wù)器加載一次,而且可以在不同請求之間保持服務(wù)(例如一次數(shù)據(jù)庫連接)。與之相反,CGI 腳本是短暫的、瞬態(tài)的。每一次對CGI 腳

41、本的請求,都會使 Web 服務(wù)器加載并執(zhí)行該腳本。一旦這個 CGI 腳本運行結(jié)束,它就會被從內(nèi)存中清除,然后將結(jié)果返回到客戶端。CGI 腳本的每一次使用,都會造成程序初始化過程(例如連接數(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)用一個 serv

42、let 的惟一方法就是通過 Web 服務(wù)器。這提供了高水平的安全性保障, 尤其是在你的 Web 服務(wù)器有防火墻保護的時候。setvlet 可以在多種多樣的客戶機上使用。由于 servlet 是用 Java 編寫的,所以你可以很方便地在 HTML中使用它們,就像你使用 applet 一樣。那么,Servlet 是怎樣執(zhí)行的?怎樣來寫一個Servlet,它的基本架構(gòu)是怎么樣的?這些問題,將在后面部分給予介紹。二 JSP 與 Servlet現(xiàn)在已經(jīng)對 Servlet 有了大概的了解,現(xiàn)在我們就來說說JSP 和 Servlet 的關(guān)系。JSP 是一種腳本語言, 包裝了 Java Servlet 系統(tǒng)的

43、界面, 簡化了 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

44、 提供了一套簡單的標(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ù)器

45、)支持 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 和 Servlet 之間的區(qū)別實在是不大。JSP 引擎通常架構(gòu)在 Serv

46、let 引擎之上,本身就是一個 Servlet,把 JSP 文件轉(zhuǎn)譯成 Servlet 源代碼,再調(diào)用 Java 編譯器,編譯成 Servlet。這也是 JSP 在第一次調(diào)用時速度比較慢的原因, 在第一次編譯之后,JSP 與 Servlet 速度相同.下面我們來看看為什么他們在第一次編譯后再編譯的速度相同:在整個運行過程中,JSP 引擎會檢查編譯好的 JSP(以 Servlet 形式存在)是否比原始的 JSP 文件還新,如果是, JSP引擎不會編譯;如果不是,表示 JSP 文件比較新,就會重新執(zhí)行轉(zhuǎn)譯與編譯的過程。為了有個深刻的了解,我們看一下JSP 的運行和開發(fā)環(huán)境:瀏覽器:常見的瀏覽器有

47、IE 和 Netscape 兩種。數(shù)據(jù)庫: 常用的數(shù)據(jù)庫有 Oracle,SQL Server,lnformix,DB2,Sybase,Access,MySQL 等。操作系統(tǒng): 常見的有 Windows,Linux,以及各種 Unix 系統(tǒng)。Web 服務(wù)器:常見的有 IIS,Apache,Netscape Enterprise Server 等。JSP 引擎:一般 JSP 引擎都以 Servlet 引擎為基礎(chǔ),并以 Servlet 的形式出現(xiàn)。同時,在各種免費和商業(yè)引擎 的實現(xiàn)中,Servlet 引擎和 Jsp 引擎通常也是一起出現(xiàn),我們成為Servlet/JSP 引擎,或從某種成為 JSP 引擎。JSP 引擎是可以提供 JSP 和 Servlet 運行支持并對其生存周期進(jìn)行管理的系統(tǒng)級實體

溫馨提示

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

最新文檔

評論

0/150

提交評論