- 相關推薦
Java筆試題和答案
在各個領域,我們最不陌生的就是試題了,試題可以幫助學;蚋髦鬓k方考察參試者某一方面的知識才能。那么你知道什么樣的試題才能有效幫助到我們嗎?以下是小編為大家收集的Java筆試題和答案,歡迎大家分享。
Java筆試題和答案 1
面向對象編程(OOP)
Java是一個支持并發(fā)、基于類和面向對象的計算機編程語言。下面列出了面向對象軟件開發(fā)的優(yōu)點:
代碼開發(fā)模塊化,更易維護和修改。
代碼復用。
增強代碼的可靠性和靈活性。
增加代碼的可理解性。
面向對象編程有很多重要的特性,比如:封裝,繼承,多態(tài)和抽象。下面的章節(jié)我們會逐個分析這些特性。
封裝
封裝給對象提供了隱藏內部特性和行為的能力。對象提供一些能被其他對象訪問的方法來改變它內部的數(shù)據(jù)。在Java當中,有3種修飾符:public,private和protected。每一種修飾符給其他的位于同一個包或者不同包下面對象賦予了不同的訪問權限。
下面列出了使用封裝的一些好處:
通過隱藏對象的屬性來保護對象內部的狀態(tài)。
提高了代碼的可用性和可維護性,因為對象的行為可以被單獨的改變或者是擴展。
禁止對象之間的不良交互提高模塊化。
參考這個文檔獲取更多關于封裝的細節(jié)和示例。
多態(tài)
多態(tài)是編程語言給不同的底層數(shù)據(jù)類型做相同的接口展示的一種能力。一個多態(tài)類型上的操作可以應用到其他類型的值上面。
繼承
繼承給對象提供了從基類獲取字段和方法的能力。繼承提供了代碼的重用行,也可以在不修改類的情況下給現(xiàn)存的類添加新特性。
抽象
抽象是把想法從具體的實例中分離出來的步驟,因此,要根據(jù)他們的功能而不是實現(xiàn)細節(jié)來創(chuàng)建類。Java支持創(chuàng)建只暴漏接口而不包含方法實現(xiàn)的抽象的類。這種抽象技術的主要目的是把類的行為和實現(xiàn)細節(jié)分離開。
抽象和封裝的不同點
抽象和封裝是互補的概念。一方面,抽象關注對象的行為。另一方面,封裝關注對象行為的細節(jié)。一般是通過隱藏對象內部狀態(tài)信息做到封裝,因此,封裝可以看成是用來提供抽象的一種策略。
常見的Java問題
1.什么是Java虛擬機?為什么Java被稱作是“平臺無關的編程語言”?
Java虛擬機是一個可以執(zhí)行Java字節(jié)碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執(zhí)行的字節(jié)碼文件。
Java被設計成允許應用程序可以運行在任意的平臺,而不需要程序員為每一個平臺單獨重寫或者是重新編譯。Java虛擬機讓這個變?yōu)榭赡,因為它知道底層硬件平臺的指令長度和其他特性。
2.JDK和JRE的區(qū)別是什么?
Java運行時環(huán)境(JRE)是將要執(zhí)行Java程序的Java虛擬機。它同時也包含了執(zhí)行applet需要的瀏覽器插件。Java開發(fā)工具包 (JDK)是完整的Java軟件開發(fā)包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),可以讓開發(fā)者開發(fā)、編譯、執(zhí)行 Java應用程序。
3.”static”關鍵字是什么意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
“static”關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的`實例變量的情況下被訪問。
Java中static方法不能被覆蓋,因為方法覆蓋是基于運行時動態(tài)綁定的,而static方法是編譯時靜態(tài)綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。
4.是否可以在static環(huán)境中訪問非static變量?
static變量在Java中是屬于類的,它在所有的實例中的值是一樣的。當類被Java虛擬機載入的時候,會對static變量進行初始化。如果你的代碼嘗試不用實例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創(chuàng)建出來,還沒有跟任何實例關聯(lián)上。
5.Java支持的數(shù)據(jù)類型有哪些?什么是自動拆裝箱?
Java語言支持的8中基本數(shù)據(jù)類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是Java編譯器在基本數(shù)據(jù)類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成double,等等。反之就是自動拆箱。
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什么意思?
Java中的方法重載發(fā)生在同一個類里面兩個或者是多個方法的方法名相同但是參數(shù)不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數(shù)列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
7.Java中,什么是構造函數(shù)?什么是構造函數(shù)重載?什么是復制構造函數(shù)?
當新對象被創(chuàng)建的時候,構造函數(shù)會被調用。每一個類都有構造函數(shù)。在程序員沒有給類提供構造函數(shù)的情況下,Java編譯器會為這個類創(chuàng)建一個默認的構造函數(shù)。
Java中構造函數(shù)重載和方法重載很相似?梢詾橐粋類創(chuàng)建多個構造函數(shù)。每一個構造函數(shù)必須有它自己唯一的參數(shù)列表。
Java不支持像C++中那樣的復制構造函數(shù),這個不同點是因為如果你不自己寫構造函數(shù)的情況下,Java不會創(chuàng)建默認的復制構造函數(shù)。
8.Java支持多繼承么?
不支持,Java不支持多繼承。每個類都只能繼承一個類,但是可以實現(xiàn)多個接口。
9.接口和抽象類的區(qū)別是什么?
Java提供和支持創(chuàng)建抽象類和接口。它們的實現(xiàn)有共同點,不同點在于:
接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法
Java筆試題和答案 2
1、在java中如果聲明一個類為final,表示什么意思?
答:final是最終的意思,final可用于定義變量、方法和類但含義不同,聲明為final的類不能被繼承。
2、父類的構造方法是否可以被子類覆蓋(重寫)?
答:父類的構造方法不可以被子類覆蓋,因為父類和子類的類名是不可能一樣的。
3、請講述String 和StringBuffer的區(qū)別。
答:String 類所定義的對象是用于存放“長度固定”的字符串。
StringBuffer類所定義的對象是用于存放“長度可變動”的字符串。
4、如果有兩個類A、B(注意不是接口),你想同時使用這兩個類的功能,那么你會如何編寫這個C類呢?
答:因為類A、B不是接口,所以是不可以直接繼承的,但可以將A、B類定義成父子類,那么C類就能實現(xiàn)A、B類的功能了。假如A為B的父類,B為C的父類,此時C就能實現(xiàn)A、B的功能。
5、結合Java視頻Lesson5(多線程),分析sleep()和wait()方法的區(qū)別。
答: Sleeping睡眠的意思 : sleep() 方法用來暫時中止執(zhí)行的線程。在睡眠后,線程將進入就緒狀態(tài)。
waiting等待的.意思: 如果調用了 wait() 方法,線程將處于等待狀態(tài)。用于在兩個或多個線程并發(fā)運行時。
6、談談你對抽象類和接口的理解。
答:定義抽象類的目的是提供可由其子類共享的一般形式、子類可以根據(jù)自身需要擴展抽象類、抽象類不能實例化、抽象方法沒有函數(shù)體、抽象方法必須在子類中給出具體實現(xiàn)。他使用extends來繼承。
接口:一個接口允許一個類從幾個接口繼承而來,Java 程序一次只能繼承一個類但可以實現(xiàn)幾個接口,接口不能有任何具體的方法,接口也可用來定義可由類使用的一組常量。其實現(xiàn)方式是interface來實現(xiàn)。
Java筆試題和答案 3
1. Java中sleep和wait的區(qū)別
、 這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object類。
sleep是Thread的靜態(tài)類方法,誰調用的誰去睡覺,即使在a線程里調用b的sleep方法,實際上還是a去睡覺,要讓b線程睡覺要在b的代碼中調用sleep。
、 鎖: 最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。
sleep不出讓系統(tǒng)資源;wait是進入線程等待池等待,出讓系統(tǒng)資源,其他線程可以占用CPU。一般wait不會加時間限制,因為如果wait線程的運行資源不夠,再出來也沒用,要等待其他線程調用notify/notifyAll喚醒等待池中的所有線程,才會進入就緒隊列等待OS分配系統(tǒng)資源。sleep(milliseconds)可以用時間指定使它自動喚醒過來,如果時間不到只能調用interrupt()強行打斷。
Thread.sleep(0)的作用是“觸發(fā)操作系統(tǒng)立刻重新進行一次CPU競爭”。
、 使用范圍:wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在任何地方使用。
synchronized(x){ x.notify() //或者wait() }
2. Java中HashMap和HashTable的區(qū)別
、 歷史原因: Hashtable是給予陳舊的Dictonary類的, HashMap是Java1.2引進的Map接口的一個實現(xiàn)
、 HashMap允許空的鍵值對, 而HashTable不允許
、 HashTable同步,而HashMap非同步,效率上比HashTable要高
3. 請簡述在異常當中,throw和throws有什么區(qū)別
、 throw代表動作,表示拋出一個異常的動作;throws代表一種狀態(tài),代表方法可能有異常拋出
② throw用在方法實現(xiàn)中,而throws用在方法聲明中
③ throw只能用于拋出一種異常,而throws可以拋出多個異常
4. 內存溢出和內存泄露的區(qū)別
內存溢出 out of memory,是指程序在申請內存時,沒有足夠的內存空間供其使用,出現(xiàn)out of memory;比如申請了一個integer,但給它存了long才能存下的數(shù),那就是內存溢出。
內存泄露 memory leak,是指程序在申請內存后,無法釋放已申請的內存空間,一次內存泄露危害可以忽略,但內存泄露堆積后果很嚴重,無論多少內存,遲早會被占光。
memory leak會最終會導致out of memory!
內存溢出就是你要求分配的內存超出了系統(tǒng)能給你的,系統(tǒng)不能滿足需求,于是產(chǎn)生溢出。
內存泄漏是指你向系統(tǒng)申請分配內存進行使用(new),可是使用完了以后卻不歸還(),結果你申請到的那塊內存你自己也不能再訪問(也許你把它的地址給弄丟了),而系統(tǒng)也不能再次將它分配給需要的程序。一個盤子用盡各種方法只能裝4個果子,你裝了5個,結果掉倒地上不能吃了。這就是溢出!比方說棧,棧滿時再做進棧必定產(chǎn)生空間溢出,叫上溢,棧空時再做退棧也產(chǎn)生空間溢出,稱為下溢。就是分配的內存不足以放下數(shù)據(jù)項序列,稱為內存溢出。
以發(fā)生的方式來分類,內存泄漏可以分為4類:
① 常發(fā)性內存泄漏。發(fā)生內存泄漏的代碼會被多次執(zhí)行到,每次被執(zhí)行的'時候都會導致一塊內存泄漏。
、 偶發(fā)性內存泄漏。發(fā)生內存泄漏的代碼只有在某些特定環(huán)境或操作過程下才會發(fā)生。常發(fā)性和偶發(fā)性是相對的。對于特定的環(huán)境,偶發(fā)性的也許就變成了常發(fā)性的。所以測試環(huán)境和測試方法對檢測內存泄漏至關重要。
、 一次性內存泄漏。發(fā)生內存泄漏的代碼只會被執(zhí)行一次,或者由于算法上的缺陷,導致總會有一塊僅且一塊內存發(fā)生泄漏。比如,在類的構造函數(shù)中分配內存,在析構函數(shù)中卻沒有釋放該內存,所以內存泄漏只會發(fā)生一次。
④ 隱式內存泄漏。程序在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這里并沒有發(fā)生內存泄漏,因為最終程序釋放了所有申請的內存。但是對于一個服務器程序,需要運行幾天,幾周甚至幾個月,不及時釋放內存也可能導致最終耗盡系統(tǒng)的所有內存。所以,我們稱這類內存泄漏為隱式內存泄漏。
從用戶使用程序的角度來看,內存泄漏本身不會產(chǎn)生什么危害,作為一般的用戶,根本感覺不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會最終消耗盡系統(tǒng)所有的內存。從這個角度來說,一次性內存泄漏并沒有什么危害,因為它不會堆積,而隱式內存泄漏危害性則非常大,因為較之于常發(fā)性和偶發(fā)性內存泄漏它更難被檢測到。
5. String,StringBuffer 和 StringBuilder的區(qū)別
、倏勺兣c不可變
String類中使用字符數(shù)組保存字符串,如下就是,因為有“final”修飾符,所以可以知道string對象是不可變的。
private final char value[];
StringBuilder與StringBuffer都繼承自AbstractStringBuilder類,在AbstractStringBuilder中也是使用字符數(shù)組保存字符串,如下就是,可知這兩種對象都是可變的。
char[] value;
、谑欠穸嗑程安全
String中的對象是不可變的,也就可以理解為常量,顯然線程安全。
AbstractStringBuilder是StringBuilder與StringBuffer的公共父類,定義了一些字符串的基本操作,如expandCapacity、append、、indexOf等公共方法。
StringBuffer對方法加了同步鎖或者對調用的方法加了同步鎖,所以是線程安全的。看如下源碼:
public synchronized StringBuffer reverse() { super.reverse(); return this; } public int indexOf(String str) { return indexOf(str, 0); //存在 public synchronized int indexOf(String str, int fromIndex) 方法 }
StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。
③StringBuilder與StringBuffer共同點
StringBuilder與StringBuffer有公共父類AbstractStringBuilder(抽象類)。
抽象類與接口的其中一個區(qū)別是:抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重復寫已經(jīng)存在的方法;而接口中只是對方法的申明和常量的定義。
StringBuilder、StringBuffer的方法都會調用AbstractStringBuilder中的公共方法,如super.append(...)。只是StringBuffer會在方法上加synchronized關鍵字,進行同步。
最后,如果程序不是多線程的,那么使用StringBuilder效率高于StringBuffer。
6. 數(shù)組和鏈表的區(qū)別
二者都屬于一種數(shù)據(jù)結構
從邏輯結構來看:
、 數(shù)組必須事先定義固定的長度(元素個數(shù)),不能適應數(shù)據(jù)動態(tài)地增減的情況。當數(shù)據(jù)增加時,可能超出原先定義的元素個數(shù);當數(shù)據(jù)減少時,造成內存浪費;數(shù)組可以根據(jù)下標直接存取。
、 鏈表動態(tài)地進行存儲分配,可以適應數(shù)據(jù)動態(tài)地增減的情況,且可以方便地插入、刪除數(shù)據(jù)項。(數(shù)組中插入、刪除數(shù)據(jù)項時,需要移動其它數(shù)據(jù)項,非常繁瑣)鏈表必須根據(jù)next指針找到下一個元素。
從內存存儲來看:
、(靜態(tài))數(shù)組從棧中分配空間,對于程序員方便快速,但是自由度小。
、阪湵韽亩阎蟹峙淇臻g,自由度大但是申請管理比較麻煩。
從上面的比較可以看出,如果需要快速訪問數(shù)據(jù),很少或不插入和刪除元素,就應該用數(shù)組;相反,如果需要經(jīng)常插入和刪除元素就需要用鏈表數(shù)據(jù)結構了。
7. ArrayList和LinkedList的區(qū)別
①ArrayList是實現(xiàn)了基于動態(tài)數(shù)組的數(shù)據(jù)結構,LinkedList基于鏈表的數(shù)據(jù)結構。
②對于隨機訪問get和set,ArrayList覺得優(yōu)于LinkedList,因為LinkedList要移動指針。
、蹖τ谛略龊蛣h除操作add和remove,LinedList比較占優(yōu)勢,因為ArrayList要移動數(shù)據(jù)。
Java筆試題和答案 4
1. J2EE 是什么?它包括哪些技術?
解答:從整體上講,J2EE 是使用 Java 技術開發(fā)企業(yè)級應用的工業(yè)標準,它是 Java 技術不斷適應和促進企業(yè)級應用過程中的產(chǎn)物.適用于企業(yè)級應用的 J2EE,提供一個平臺 獨立的、可移植的、多用戶的、安全的和基于標準的企業(yè)級平臺,從而簡化企業(yè)應用的開發(fā)、管理和部署。J2EE 是一個標準,而不是一個現(xiàn)成的產(chǎn)品。
主要包括以下這些技術:
1) Servlet
Servlet 是 Java 平臺上的 CGI 技術。Servlet 在服務器端運行,動態(tài)地生成 Web 頁面。與傳統(tǒng)的 CGI和許多其它類似 CGI 的技術相比,Java Servlet 具有更高的效率并更容易使用。對于 Servlet,重復的請求不會導致同一程序的多次轉載,它是依靠線程的方式來支持并發(fā)訪問的。
2)JSP
JSP(Java Server Page)是一種實現(xiàn)普通靜態(tài) HTML 和動態(tài)頁面輸出混合編碼的技術。從這一點來看,非常類似 MicrosoftASP、PHP 等技術。借助形式上的內容和外觀表現(xiàn)的分離,Web 頁面制作的任務可以比較方便地劃分給頁面設計人員和程序員,并方便地通過JSP 來合成。在運行時態(tài),JSP 將會被首先轉換成 Servlet,并以 Servlet 的形態(tài)編譯運行,因此它的效率和功能與 Servlet 相比沒有差別,一樣具有很高的效率。
3) EJB
EJB 定義了一組可重用的組件:Enterprise Beans。開發(fā)人員可以利用這些組件,像搭積木一樣建立分布式應用。
4)JDBC
JDBC(Java Database Connectivity , Java 數(shù)據(jù)庫連接)API 是 一 個 標 準 SQL(Structured QueryLanguage,結構化查詢語言)數(shù)據(jù)庫訪問接口,它使數(shù)據(jù)庫開發(fā)人員能夠用標準 Java API 編寫數(shù)據(jù)庫應用程序。JDBC API 主要用來連接數(shù)據(jù)庫和直接調用 SQL 命令執(zhí)行各種 SQL 語句。利用 JDBC API 可以執(zhí)行一般的 SQL 語句、 動態(tài) SQL 語句及帶 IN 和 OUT 參數(shù)的存儲過程。 Java 中的 JDBC 相當于 Microsoft平臺中的 ODBC(Open DatabaseConnectivity)。
2.測試生命周期、測試過程分為幾個階段,以及各階段的含義?
解答:軟件測試生命周期一般包括 6 個階段:1)計劃 2)分析,3)設計,4)構建,5)測試周期,6)最后測試和實施,1) 計劃:產(chǎn)品定義階段2). 分析:外部文檔階段3). 設計:文檔架構階段4). 構建:單元測試階段5). 測試周期:錯誤修正,重復系統(tǒng)測試階段6). 最后的測試和實施:代碼凍結階段
4. 什么是 Web 容器?
解答:容器就是一種服務程序,在服務器一個端口就有一個提供相應服務的程序,而這個程序就是處理從客戶端發(fā)出的請求,如 JAVA 中的 Tomcat 容器,ASP 的 IIS 或 PWS 都是這樣的容器。
5. 運行時異常與一般異常有何異同?
解答:異常表示程序運行過程中可能出現(xiàn)的非正常狀態(tài),運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java 編譯器要求方法必須聲明拋出可能發(fā)生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
9.試述數(shù)據(jù)庫完整保護的主要任務和措施。
解答:數(shù)據(jù)庫的完整性保護也就是數(shù)據(jù)庫中數(shù)據(jù)正確性的維護。數(shù)據(jù)庫完整性包括三個內容:實體完整性規(guī)則,參照物完整性規(guī)則以及用戶定義完整性規(guī)則。前兩個是有 DBMS 自動處理。實體完整性規(guī)則是說針對于基表中的關鍵字中屬性值不能為空值,是數(shù)據(jù)庫完整性的基本要求,主關鍵字和元組的唯一性對應。參照物完整性規(guī)則是不允許引用不存在的元組:即基表中的外關鍵字要么為空,要么關聯(lián)基表中必存在元組。用戶定義完整性規(guī)則針對具體的數(shù)據(jù)環(huán)境由用戶具體設置的規(guī)則,它反應了具體應用中的語義要求。一個完整性規(guī)則一般由下面三部分組成:完整性約束條件設置,完整性約束條件的檢查以及完整性約束條件的處理.后兩部分在數(shù)據(jù)庫中一般有相應的模塊處理。另外觸發(fā)器也可以做完整性的保護,但觸發(fā)器大量用于主動性領域。
12. 類有哪三個基本特性?各特性的優(yōu)點?
解答:類具有封裝性、繼承性和多態(tài)性。
封裝性:類的封裝性為類的成員提供公有、缺省、保護和私有等多級訪問權限,目的是隱藏類中的私有變量和類中方法的實現(xiàn)細節(jié)。
繼承性:類的繼承性提供從已存在的類創(chuàng)建新類的機制,繼承(inheritance)使一個新類自動擁有被繼承類(父類)的全部可繼承的成員。
多態(tài)性:類的多態(tài)性提供類中方法執(zhí)行的多樣性,多態(tài)性有兩種表現(xiàn)形式:重載和覆蓋。
13.談談對 XML 的理解?說明 Web 應用中 Web.xml 文件的作用?
解答:XML(Extensible Markup Language)即可擴展標記語言,它與 HTML 一樣,都是 SGML(Standard GeneralizedMarkup Language,標準通用標記語言)。Xml 是 Internet 環(huán)境中跨平臺的,依賴于內容的技術,是當前處理結構化文檔信息的有力工具。擴展標記語言 XML 是一種簡單的數(shù)據(jù)存儲語言,使用一系列簡單的標記描述數(shù)據(jù),而這些標記可以用方便的方式建立,雖然 XML 占用的空間比二進制數(shù)據(jù)要占用更多的空間,但 XML 極其簡單易于掌握和使用。web.xml的作用是配置歡迎頁,servlet,filter,listener 等的。
14.jsp 有哪些內置對象?作用分別是什么?(至少三個)
解答:1)request 表示 HttpServletRequest 對象。它包含了有關瀏覽器請求的信息,并且提供了幾個用于獲取cookie, header 和 session 數(shù)據(jù)的有用的方法。
2)response 表示 HttpServletResponse 對象,并提供了幾個用于設置送回瀏覽器的響應的方法(如cookies,頭信息等)。
3) out 對象是javax.jsp.JspWriter 的一個實例, 并提供了幾個方法使你能用于向瀏覽器回送輸出結果。
4) pageContext 表示一個 javax.servlet.jsp.PageContext 對象。它是用于方便存取各種范圍的名字空間、servlet 相關的對象的 API,并且包裝了通用的servlet 相關功能的方法。
5)session 表示一個請求的 javax.servlet.http.HttpSession 對象。Session 可以存貯用戶的狀態(tài)信息。
6)application 表示一個 javax.servle.ServletContext 對象。這有助于查找有關 servlet 引擎和servlet 環(huán)境的信息。
7)config 表示一個 javax.servlet.ServletConfig 對象。該對象用于存取 servlet 實例的初始化參數(shù)。
8)page 表示從該頁面產(chǎn)生的一個servlet 實例。9)exception 針對錯誤網(wǎng)頁,未捕捉的例外
15.事務是什么?有哪些屬性,并簡要說明這些屬性的.含義。
解答:事務(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項的一個程序執(zhí)行單元(unit)。事務通常由高級數(shù)據(jù)庫操縱語言或編程語言(如 SQL,C++或 Java)書寫的用戶程序的執(zhí)行所引起,并用形如 begin transaction 和 end transaction 語句(或函數(shù)調用)來界定。事務由事務開始(begintransaction)和事務結束(end transaction)之間執(zhí)行的全體操作組成。事務應該具有 4 個屬性:原子性、一致性、隔離性、持續(xù)性。這四個屬性通常稱為 ACID 特性。
。╝tomicity)。一個事務是一個不可分割的工作單位,事務中包括的諸操作要么都做,要么都不做。
一致性(consistency)。事務必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。一致性與原子性是密切相關的。
隔離性(isolation)。一個事務的執(zhí)行不能被其他事務干擾。即一個事務內部的操作及使用的數(shù)據(jù)對并發(fā)的其他事務是隔離的,并發(fā)執(zhí)行的各個事務之間不能互相干擾。
持久性(durability)。持續(xù)性也稱永久性(permanence),指一個事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是永久性的。接下來的其他操作或故障不應該對其有任何影響。
19、HashMap 和 Hashtable 的區(qū)別?
解答:HashMap 是 Hashtable 的輕量級實現(xiàn)(非線程安全的實現(xiàn)) ,他們都實現(xiàn)了 Map 接口,主要區(qū)別在于HashMap 允許空(null)鍵值(key),由于非線程安全,效率上高于 Hashtable。HashMap 允許將 null 作為一個 entry 的 key 或者 value, Hashtable 不允許HashMap 把 Hashtable 的 contains方法去掉了,改成 containsvalue 和 containsKey。因為 contains 方法容易讓人引起誤解Hashtable繼承自 Dictionary 類,而 HashMap 是 Java1.2 引進的 Map interface 的一個實現(xiàn)。最大的不同是,Hastable 的方法是 synchronize 的,而 HashMap 不是,在多個線程訪問 Hashtable 時,不需要自己為s它的方法實現(xiàn)同步,而 HashMap 就必須為之提供同步。
20.請說出 ArrayList,Vector, LinkedList 的存儲性能和特性
解答: ArrayList 和 Vector 都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素數(shù)大于實際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數(shù)組元素移動等內存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector 由于使用了 synchronized 方法(線程安全),通常性能上較ArrayList 差,而 LinkedList 使用雙向鏈表實現(xiàn)存儲,按序號索引數(shù)據(jù)需要進行前向或后向遍歷,但是插入數(shù)據(jù)時只需要記錄本項的前后項即可,所以插入速度較快。
21. 描述 J2EE 框架的多層結構,并簡要說明各層的作用。
解答:1)Presentation layer(表示層)a. 表示邏輯(生成界面代碼)b. 接收請求 c. 處理業(yè)務層拋出的異常 d. 負責規(guī)則驗證(數(shù)據(jù)格式,數(shù)據(jù)非空等)e. 流程控制
2) Service layer(服務層/業(yè)務層)a.封裝業(yè)務邏輯處理,并且對外暴露接口b.負責事務,安全等服務
3) Persistence layer(持久層) a 封裝數(shù)據(jù)訪問的邏輯,暴露接口 b.提供方便的數(shù)據(jù)訪問的方案(查詢語言,API,映射機制等)
4)Domain layer(域層) a. 業(yè)務對象以及業(yè)務關系的表示b. 處理簡單的業(yè)務邏輯c. 域層的對象可以穿越表示層,業(yè)務層,持久層軟件分層結構使得代碼維護非常方便,設計明確,各層獨立,專注自己擅長的領域。
23.簡要描述如何結合 struts、hibernate、spring 開發(fā) Web 應用?
解答:Struts 可以將 jsp 頁面的表單關聯(lián)起來,就是把 JSP 頁面的表單數(shù)據(jù)封裝成 javaBean,這樣的話,在 action 中你再也不需要使用傳統(tǒng)的 request.getParameter("name");還有 struts 有一個控制器,你在 struts 編程中的控制器(XxxAction)都是繼承總的 ActionServlet,它能集中處理請求,然后轉到相關的頁面。還有 struts 的表單驗證組件,不用你寫 js 驗證了,只需要你配置一下文件就可以了。另外 struts 的令牌機制可以防表單重復提交。
Spring 是一個輕量級容器,非侵入性.包含依賴注入,AOP 等。它是為了解決企業(yè)應用程序開發(fā)復雜性而創(chuàng)建的?蚣艿闹饕獌(yōu)勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為J2EE 應用程序開發(fā)提供集成的框架。
Hibernate:它可以讓我們以 OO 的方式操作數(shù)據(jù)庫,這讓我們看到了 hibernate 的強大之處,體驗到操作數(shù)據(jù)的方便。但 hibernate 最耀眼之處是 hibernate 的緩存機制,而不是以 OO 的方式操作數(shù)據(jù)庫。Hibernate 的緩存機制不外乎是一級緩存 session,二級緩存 sessionFactory,和第三方緩存 如 ehcache 。 也就 是 hibernate 的 最 強大 的地 方 是 它的 緩存 , 理解了 這 個 才能 真正 的 理解hibernate,Hibernate 的命名查詢/命名參數(shù)查詢, 就是將 hql 語句放在一個單獨的 xml 文件之中, 它仍然讓人們以面向對象的方式去操縱數(shù)據(jù),而不用在以 OO 的方式寫著代碼的同時,然后再轉變思維,用面向關系的方式去寫那些 sql 語句。但 hibernate不僅做了這些,它的native sql 查詢方式,完
全滿足 sql 語句的偏愛者,它像 ibatis 一樣,將 sql 語句放在配置文件之中
27.列出自己常用的 jdk 包.
解答:JDK 常用的 package
java.lang:這個是系統(tǒng)的基礎類,比如 String 等都是這里面的,這個 package 是唯一一個可以不用 import 就可以使用的 Package
java.io: 這里面是所有輸入輸出有關的類,比如文件操作等
java.net: 這里面是與網(wǎng)絡有關的類,比如 URL,URLConnection 等。
java.util : 這個是系統(tǒng)輔助類,特別是集合類 Collection,List,Map 等。
java.sql: 這個是數(shù)據(jù)庫操作的類,Connection, Statememt,ResultSet 等
【Java筆試題和答案】相關文章:
java筆試題及答案08-20
java筆試題及答案02-09
115個Java面試題和答案04-02
java筆試題目及答案02-16
經(jīng)典java筆試題及答案分享07-06
java面試題及答案10-27
java基礎筆試題及答案10-18
java面試題及答案11-01
java考試試題及答案10-25