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