[转载] JAVA面试题大全(part_1)
參考鏈接: 對Java中派生類方法更嚴(yán)格的訪問
JAVA面試題大全(part_1)?
1、面向?qū)ο蟮奶卣饔心男┓矫?/p>
(1)抽象:
抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只
是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。
(2)繼承:
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對象的一個(gè)新類可以從現(xiàn)有的類中派
生,這個(gè)過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生
類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
(3)封裝:
封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一
系列完全自治、封裝的對象,這些對象通過一個(gè)受保護(hù)的接口訪問其他對象。
(4) 多態(tài)性:
多態(tài)性是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享
、代碼共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
?
2、String是最基本的數(shù)據(jù)類型嗎?
基本數(shù)據(jù)類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer
類
?
3、int 和 Integer 有什么區(qū)別
Java 提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的封裝類。
Java為每個(gè)原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行為完全不同,并且它們具有不同的語義。引用類型和原始類型具有不同的特征和用法,它們包括:大小和速
度問題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲,當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對象引用實(shí)例變量
的缺省值為 null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)。
?
4、String 和StringBuffer的區(qū)別
JAVA 平臺提供了兩個(gè)類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了
數(shù)值不可改變的字符串。而這個(gè)StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer
。典型地,你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。
?
5、運(yùn)行時(shí)異常與一般異常有何異同?
異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯(cuò)誤。java
編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。
?
6、說出Servlet的生命周期,并說出Servlet和CGI的區(qū)別。
Servlet被服務(wù)器實(shí)例化后,容器運(yùn)行其init方法,請求到達(dá)時(shí)運(yùn)行其service方法,service方法自動派遣運(yùn)行與請求對應(yīng)的doXXX方
法(doGet,doPost)等,當(dāng)服務(wù)器決定將實(shí)例銷毀的時(shí)候調(diào)用其destroy方法。
與cgi的區(qū)別在于servlet處于服務(wù)器進(jìn)程中,它通過多線程方式運(yùn)行其service方法,一個(gè)實(shí)例可以服務(wù)于多個(gè)請求,并且其實(shí)例一
般不會銷毀,而CGI對每個(gè)請求都產(chǎn)生新的進(jìn)程,服務(wù)完成后就銷毀,所以效率上低于servlet。
?
7、說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList 和Vector都是使用數(shù)組方式存儲數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號索
引元素,但是插入元素要涉及數(shù)組元素移動等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程
安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲,按序號索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)
據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快。
?
8、EJB是基于哪些技術(shù)實(shí)現(xiàn)的?并說出SessionBean和EntityBean的區(qū)別,StatefulBean和StatelessBean的區(qū)別。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技術(shù)實(shí)現(xiàn)。
SessionBean在J2EE應(yīng)用程序中被用來完成一些服務(wù)器端的業(yè)務(wù)操作,例如訪問數(shù)據(jù)庫、調(diào)用其他EJB組件。EntityBean被用來代表應(yīng)
用系統(tǒng)中用到的數(shù)據(jù)。
對于客戶機(jī),SessionBean是一種非持久性對象,它實(shí)現(xiàn)某些在服務(wù)器上運(yùn)行的業(yè)務(wù)邏輯。
對于客戶機(jī),EntityBean是一種持久性對象,它代表一個(gè)存儲在持久性存儲器中的實(shí)體的對象視圖,或是一個(gè)由現(xiàn)有企業(yè)應(yīng)用程序?qū)?/p>
現(xiàn)的實(shí)體。
Session Bean 還可以再細(xì)分為 Stateful Session Bean 與 Stateless Session Bean ,這兩種的 Session Bean都可以將系統(tǒng)邏輯
放在 method之中執(zhí)行,不同的是 Stateful Session Bean 可以記錄呼叫者的狀態(tài),因此通常來說,一個(gè)使用者會有一個(gè)相對應(yīng)的
Stateful Session Bean 的實(shí)體。Stateless Session Bean 雖然也是邏輯組件,但是他卻不負(fù)責(zé)記錄使用者狀態(tài),也就是說當(dāng)使用
者呼叫 Stateless Session Bean 的時(shí)候,EJB Container 并不會找尋特定的 Stateless Session Bean 的實(shí)體來執(zhí)行這個(gè) method
。換言之,很可能數(shù)個(gè)使用者在執(zhí)行某個(gè) Stateless Session Bean 的 methods 時(shí),會是同一個(gè) Bean 的 Instance 在執(zhí)行。從內(nèi)
存方面來看, Stateful Session Bean 與 Stateless Session Bean 比較, Stateful Session Bean 會消耗 J2EE Server 較多的
內(nèi)存,然而 Stateful Session Bean 的優(yōu)勢卻在于他可以維持使用者的狀態(tài)。
?
9、Collection 和 Collections的區(qū)別。
Collection是集合類的上級接口,繼承與他的接口主要有Set 和List.
Collections是針對集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對各種集合的搜索、排序、線程安全化等操作。
?
10、&和&&的區(qū)別。
&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)。
?
11、HashMap和Hashtable的區(qū)別。
HashMap是Hashtable的輕量級實(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)閏ontains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進(jìn)的Map interface的一個(gè)實(shí)現(xiàn)。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步
,而HashMap 就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
?
12、final, finally, finalize的區(qū)別。
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源
回收,例如關(guān)閉文件等。
?
13、sleep() 和 wait() 有什么區(qū)別?
sleep是線程類(Thread)的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,把執(zhí)行機(jī)會給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會自動
恢復(fù)。調(diào)用sleep不會釋放對象鎖。
wait是Object類的方法,對此對象調(diào)用wait方法導(dǎo)致本線程放棄對象鎖,進(jìn)入等待此對象的等待鎖定池,只有針對此對象發(fā)出notify
方法(或notifyAll)后本線程才進(jìn)入對象鎖定池準(zhǔn)備獲得對象鎖進(jìn)入運(yùn)行狀態(tài)。
?
14、Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型?
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載
Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說該方法被重寫
(Overriding)。子類的對象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對它而言,父類中的定義如同被”屏蔽”了。如果在一個(gè)類中定義
了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改
變返回值的類型。
?
15、error和exception有什么區(qū)別?
error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。
exception 表示一種設(shè)計(jì)或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運(yùn)行正常,從不會發(fā)生的情況。
?
16、同步和異步有何異同,在什么情況下分別使用他們?舉例說明。
如果數(shù)據(jù)將在線程間共享。例如正在寫的數(shù)據(jù)以后可能被另一個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另一個(gè)線程寫過了,那么這
些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取。
當(dāng)應(yīng)用程序在對象上調(diào)用了一個(gè)需要花費(fèi)很長時(shí)間來執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很
多情況下采用異步途徑往往更有效率。
?
17、abstract class和interface有什么區(qū)別?
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法
,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體
子類的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是
抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法
都是抽象的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中
繼承行為。當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對象上
調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接
口類型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。
18、heap和stack有什么區(qū)別。
棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。
堆是棧的一個(gè)組成元素
?
19、forward 和redirect的區(qū)別
forward是服務(wù)器請求資源,服務(wù)器直接訪問目標(biāo)地址的URL,把那個(gè)URL的響應(yīng)內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽
器根本不知道服務(wù)器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是原來的地址。
redirect就是服務(wù)端根據(jù)邏輯,發(fā)送一個(gè)狀態(tài)碼,告訴瀏覽器重新去請求那個(gè)地址,一般來說瀏覽器會用剛才請求的所有參數(shù)重新請求
,所以session,request參數(shù)都可以獲取。
?
20、EJB與JAVA BEAN的區(qū)別?
Java Bean 是可復(fù)用的組件,對Java Bean并沒有嚴(yán)格的規(guī)范,理論上講,任何一個(gè)Java類都可以是一個(gè)Bean。但通常情況下,由于
Java Bean是被容器所創(chuàng)建(如Tomcat)的,所以Java Bean應(yīng)具有一個(gè)無參的構(gòu)造器,另外,通常Java Bean還要實(shí)現(xiàn)Serializable
接口用于實(shí)現(xiàn)Bean的持久性。Java Bean實(shí)際上相當(dāng)于微軟COM模型中的本地進(jìn)程內(nèi)COM組件,它是不能被跨進(jìn)程訪問的。Enterprise
Java Bean 相當(dāng)于DCOM,即分布式組件。它是基于Java的遠(yuǎn)程方法調(diào)用(RMI)技術(shù)的,所以EJB可以被遠(yuǎn)程訪問(跨進(jìn)程、跨計(jì)算機(jī)
)。但EJB必須被布署在諸如Webspere、WebLogic這樣的容器中,EJB客戶從不直接訪問真正的EJB組件,而是通過其容器訪問。EJB容
器是EJB組件的代理, EJB組件由容器所創(chuàng)建和管理。客戶通過容器來訪問真正的EJB組件。
?
21、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被聲明為靜態(tài)(static)的內(nèi)部類,它可以不依賴于外部類實(shí)例被實(shí)例化。而通常的內(nèi)部類需要在外部類實(shí)
例化后才能實(shí)例化。
?
22、JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?
動態(tài)INCLUDE用jsp:include動作實(shí)現(xiàn)
23、什么時(shí)候用assert。
assertion (斷言)在軟件開發(fā)中是一種常用的調(diào)試方式,很多開發(fā)語言中都支持這種機(jī)制。在實(shí)現(xiàn)中,assertion就是在程序中的一
條語句,它對一個(gè) boolean表達(dá)式進(jìn)行檢查,一個(gè)正確程序必須保證這個(gè)boolean表達(dá)式的值為true;如果該值為false,說明程序已
經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來說,assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在
開發(fā)和測試時(shí)開啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的。
?
24、GC是什么? 為什么要有GC?
GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會導(dǎo)致程序
或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達(dá)到自動回收內(nèi)存的目的,Java語言沒有提供釋
放已分配內(nèi)存的顯示操作方法。
?
25、short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
short s1 = 1; s1 = s1 + 1; (s1+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)
short s1 = 1; s1 += 1;(可以正確編譯)
?
26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)==12
Math.round(-11.5)==-11
round方法返回與參數(shù)最接近的長整數(shù),參數(shù)加1/2后求其floor.
?
27、String s = new String(“xyz”);創(chuàng)建了幾個(gè)String Object?
兩個(gè)(一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對象s)
?
28、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對j增加1,另外兩個(gè)線程對j每次減少1。寫出程序。
以下程序使用內(nèi)部類實(shí)現(xiàn)線程,對j增減的時(shí)候沒有考慮順序問題。
public class ThreadTest1{
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc();
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}
?
29、Java有沒有g(shù)oto?
java中的保留字,現(xiàn)在沒有在java中使用。
?
30、啟動一個(gè)線程是用run()還是start()?
啟動一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線
程就會立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個(gè)線程。
?
31、EJB包括(SessionBean,EntityBean)說出他們的生命周期,及如何管理事務(wù)的?
SessionBean: Stateless Session Bean 的生命周期是由容器決定的,當(dāng)客戶機(jī)發(fā)出請求要建立一個(gè)Bean的實(shí)例時(shí),EJB容器不一定
要創(chuàng)建一個(gè)新的Bean的實(shí)例供客戶機(jī)調(diào)用,而是隨便找一個(gè)現(xiàn)有的實(shí)例提供給客戶機(jī)。當(dāng)客戶機(jī)第一次調(diào)用一個(gè)Stateful Session
Bean 時(shí),容器必須立即在服務(wù)器中創(chuàng)建一個(gè)新的Bean實(shí)例,并關(guān)聯(lián)到客戶機(jī)上,以后此客戶機(jī)調(diào)用Stateful Session Bean 的方法
時(shí)容器會把調(diào)用分派到與此客戶機(jī)相關(guān)聯(lián)的Bean實(shí)例。
EntityBean:Entity Beans能存活相對較長的時(shí)間,并且狀態(tài)是持續(xù)的。只要數(shù)據(jù)庫中的數(shù)據(jù)存在,Entity beans就一直存活。而不
是按照應(yīng)用程序或者服務(wù)進(jìn)程來說的。即使EJB容器崩潰了,Entity beans也是存活的。Entity Beans生命周期能夠被容器或者
Beans自己管理。
EJB通過以下技術(shù)管理實(shí)務(wù):對象管理組織(OMG)的對象實(shí)務(wù)服務(wù)(OTS),Sun Microsystems的Transaction Service(JTS)、
Java Transaction API(JTA),開發(fā)組(X/Open)的XA接口。
?
32、應(yīng)用服務(wù)器有那些?
BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,jBoss,Tomcat
?
33、給我一個(gè)你最常見到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException,
CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException,
EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException,
IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException,
NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException,
RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException,
UnsupportedOperationException
?
34、接口是否可繼承接口? 抽象類是否可實(shí)現(xiàn)(implements)接口? 抽象類是否可繼承實(shí)體類(concrete class)?
接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)。
?
35、List, Set, Map是否繼承自Collection接口?
List,Set是,Map不是
?
36、說出數(shù)據(jù)連接池的工作機(jī)制是什么?
J2EE 服務(wù)器啟動時(shí)會建立一定數(shù)量的池連接,并一直維持不少于此數(shù)目的池連接。客戶端程序需要連接時(shí),池驅(qū)動程序會返回一個(gè)
未使用的池連接并將其表記為忙。如果當(dāng)前沒有空閑連接,池驅(qū)動程序就新建一定數(shù)量的連接,新建連接的數(shù)量由配置參數(shù)決定。當(dāng)
使用的池連接調(diào)用完成后,池驅(qū)動程序?qū)⒋诉B接表記為空閑,其他調(diào)用就可以使用這個(gè)連接。
?
37、abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?
都不能
?
38、數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法?
數(shù)組沒有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。String有有l(wèi)ength()這個(gè)方法。
?
39、Set里的元素是不能重復(fù)的,那么用什么方法來區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?
Set里的元素是不能重復(fù)的,那么用iterator()方法來區(qū)分重復(fù)與否。equals()是判讀兩個(gè)Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對象的內(nèi)容和類型相配的話,返回真值
。
?
40、構(gòu)造器Constructor是否可被override?
構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
?
41、是否可以繼承String類?
String類是final類故不可以繼承。
?
42、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個(gè)整數(shù)表達(dá)式。因此傳遞給 switch 和 case 語句的參數(shù)應(yīng)該是 int、 short、 char 或者 byte。
long,string 都不能作用于swtich。
?
43、try {}里有一個(gè)return語句,那么緊跟在這個(gè)try后的finally {}里的code會不會被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后?
會執(zhí)行,在return前執(zhí)行。
?
44、編程題: 用最有效率的方法算出2乘以8等於幾?
2 << 3 (有C背景的程序員特別喜歡問這種問題)
?
45、兩個(gè)對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
?
46、當(dāng)一個(gè)對象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是
引用傳遞?
是值傳遞。Java 編程語言只有值傳遞參數(shù)。當(dāng)一個(gè)對象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是對該對象的引用。對象
的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠(yuǎn)不會改變的。
?
47、當(dāng)一個(gè)線程進(jìn)入一個(gè)對象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對象的其它方法?
不能,一個(gè)對象的一個(gè)synchronized方法只能由一個(gè)線程訪問。
?
48、編程題: 寫一個(gè)Singleton出來。
Singleton模式主要作用是保證在Java應(yīng)用程序中,一個(gè)類Class只有一個(gè)實(shí)例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個(gè)類,它的構(gòu)造函數(shù)為private的,它有一個(gè)static的private的該類變量,在類初始化時(shí)實(shí)例話,通過一個(gè)
public的getInstance方法獲取對它的引用,繼而調(diào)用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內(nèi)部定義自己一個(gè)實(shí)例,是不是很奇怪?
//注意這是private 只供內(nèi)部調(diào)用
private static Singleton instance = new Singleton();
//這里提供了一個(gè)供外部訪問本class的靜態(tài)方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個(gè)方法比上面有所改進(jìn),不用每次都進(jìn)行生成對象,只是第一次
//使用時(shí)生成實(shí)例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個(gè)類,它的構(gòu)造函數(shù)為private的,所有方法為static的。
一般認(rèn)為第一種形式要更加安全些
?
49、Java的接口和C++的虛類的相同和不同處。
由于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩娴姆椒ɑ驅(qū)傩?#xff0c;現(xiàn)有的單繼承機(jī)制就不能滿足要求。
與繼承相比,接口有更高的靈活性,因?yàn)榻涌谥袥]有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和屬
性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是public static,所有方法默認(rèn)情況下是public.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。
?
50、Java中的異常處理機(jī)制的簡單原理和應(yīng)用。
當(dāng)JAVA 程序違反了JAVA的語義規(guī)則時(shí),JAVA虛擬機(jī)就會將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫
內(nèi)置的語義檢查。例如數(shù)組下標(biāo)越界,會引發(fā)IndexOutOfBoundsException;訪問null的對象時(shí)會引發(fā)NullPointerException。另一種
情況就是JAVA允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常
都是 java.lang.Thowable的子類。
?
51、垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。
Java 語言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程
序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)垃圾回收機(jī)制,Java中的對象不再有"作用域"的概念,只有對象的引用才有"作用域"。垃
圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個(gè)單獨(dú)的低級別的線程運(yùn)行,不可預(yù)知的情
況下對內(nèi)存堆中已經(jīng)死亡的或者長時(shí)間沒有使用的對象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對某個(gè)對象或所有對象進(jìn)
行垃圾回收。回收機(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
?
52、請說出你所知道的線程同步的方法。
wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對象的lock。
sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異常。
notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定
喚醒哪個(gè)線程,而且不是按優(yōu)先級。
Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對象的鎖,而是讓它們競爭。
?
53、你所知道的集合類都有哪些?主要方法?
最常用的集合類是 List 和 Map。 List 的具體實(shí)現(xiàn)包括 ArrayList 和 Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲和操
作任何類型對象的元素列表。 List 適用于按數(shù)值索引訪問元素的情形。
Map 提供了一個(gè)更通用的元素存儲方法。 Map 集合類用于存儲元素對(稱作"鍵"和"值"),其中每個(gè)鍵映射到一個(gè)值。
?
54、描述一下JVM加載class文件的原理機(jī)制?
JVM中類的裝載是由ClassLoader和它的子類來實(shí)現(xiàn)的,Java ClassLoader 是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和
裝入類文件的類。
?
55、char型變量中能不能存貯一個(gè)中文漢字?為什么?
能夠定義成為一個(gè)中文的,因?yàn)閖ava中以unicode編碼,一個(gè)char占2個(gè)字節(jié)(Byte)共16位(bit),所以放一個(gè)中文是沒問題的
?
56、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify
?
57、JSP的內(nèi)置對象及方法。
request表示HttpServletRequest對象。它包含了有關(guān)瀏覽器請求的信息,并且提供了幾個(gè)用于獲取cookie, header, 和session數(shù)據(jù)
的有用的方法。
response表示HttpServletResponse對象,并提供了幾個(gè)用于設(shè)置送回瀏覽器的響應(yīng)的方法(如cookies,頭信息等)
out對象是javax.jsp.JspWriter的一個(gè)實(shí)例,并提供了幾個(gè)方法使你能用于向?yàn)g覽器回送輸出結(jié)果。
pageContext表示一個(gè)javax.servlet.jsp.PageContext對象。它是用于方便存取各種范圍的名字空間、servlet相關(guān)的對象的API,并
且包裝了通用的servlet相關(guān)功能的方法。
session表示一個(gè)請求的javax.servlet.http.HttpSession對象。Session可以存貯用戶的狀態(tài)信息
applicaton 表示一個(gè)javax.servle.ServletContext對象。這有助于查找有關(guān)servlet引擎和servlet環(huán)境的信息
config表示一個(gè)javax.servlet.ServletConfig對象。該對象用于存取servlet實(shí)例的初始化參數(shù)。
page表示從該頁面產(chǎn)生的一個(gè)servlet實(shí)例
?
58、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系
線程指在程序執(zhí)行過程中,能夠執(zhí)行程序代碼的一個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。
Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束。
?
59、JSP的常用指令
?
isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達(dá)式)
?
" target="_blank">http://……”%>
?
60、什么情況下調(diào)用doGet()和doPost()?
Jsp頁面中的form標(biāo)簽里的method屬性為get時(shí)調(diào)用doGet(),為post時(shí)調(diào)用doPost()。
?
61、servlet的生命周期
web容器加載servlet,生命周期開始。通過調(diào)用servlet的init()方法進(jìn)行servlet的初始化。通過調(diào)用service()方法實(shí)現(xiàn),根據(jù)請
求的不同調(diào)用不同的do***()方法。結(jié)束服務(wù),web容器調(diào)用servlet的destroy()方法。
?
62、如何現(xiàn)實(shí)servlet的單線程模式
?
63、頁面間對象傳遞的方法
request,session,application,cookie等
?
64、JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?
JSP 是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是”類servlet”。Servlet和JSP最主要
的不同點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成
一個(gè)擴(kuò)展名為.jsp的文件。JSP側(cè)重于視圖,Servlet主要用于控制邏輯。
?
65、四種會話跟蹤技術(shù)
會話作用域ServletsJSP 頁面描述
page否是代表與一個(gè)頁面相關(guān)的對象和屬性。一個(gè)頁面由一個(gè)編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒
有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機(jī)發(fā)出的一個(gè)請求相關(guān)的對象和屬性。一個(gè)請求可能跨越多個(gè)頁面,涉及多個(gè) Web 組件(由于
forward 指令和 include 動作的關(guān)系)
session是是代表與用于某個(gè) Web 客戶機(jī)的一個(gè)用戶體驗(yàn)相關(guān)的對象和屬性。一個(gè) Web 會話可以也經(jīng)常會跨越多個(gè)客戶機(jī)請求
application是是代表與整個(gè) Web 應(yīng)用程序相關(guān)的對象和屬性。這實(shí)質(zhì)上是跨越整個(gè) Web 應(yīng)用程序,包括多個(gè)頁面、請求和會話的
一個(gè)全局作用域
?
66、Request對象的主要方法:
setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結(jié)果是一個(gè)枚舉的實(shí)例
getCookies():返回客戶端的所有Cookie對象,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請求中的字符編碼方式
getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():返回請求的輸入流,用于獲得請求中的數(shù)據(jù)
getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getParameterValues(String name):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號
removeAttribute(String name):刪除請求中的一個(gè)屬性
?
67、J2EE是技術(shù)還是平臺還是框架?
J2EE本身是一個(gè)標(biāo)準(zhǔn),一個(gè)為企業(yè)分布式應(yīng)用的開發(fā)提供的標(biāo)準(zhǔn)平臺。
J2EE也是一個(gè)框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)。
?
68、我們在web應(yīng)用開發(fā)過程中經(jīng)常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個(gè)某種編碼的字符串?
Public String translate (String str) {
String tempStr = “”;
try {
tempStr = new String(str.getBytes(“ISO-8859-1″), “GBK”);
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
?
69、簡述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別。
區(qū)別主要答兩點(diǎn):a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型
b.邏輯操作不會產(chǎn)生短路
?
70、XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?解析XML文檔有哪幾種方式?
a: 兩種形式 dtd schema
b: 本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的)
c:有DOM,SAX,STAX等
DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文
件之前把整個(gè)文檔裝入內(nèi)存,適合對XML的隨機(jī)訪問
SAX:不現(xiàn)于DOM,SAX是事件驅(qū)動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)
束,或者標(biāo)簽開頭與標(biāo)簽結(jié)束時(shí),它會觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問
STAX:Streaming API for XML (StAX)
xml文檔有兩種定義方法:
dtd:數(shù)據(jù)類型定義(data type definition),用以描述XML文檔的文檔結(jié)構(gòu),是早期的XML文檔定義形式。
schema:其本身是基于XML語言編寫的,在類型和語法上的限定能力比dtd強(qiáng),處理也比較方便,因?yàn)榇苏饾u代替dtd成為新的模式
定義語言。
?
71、簡述synchronized和java.util.concurrent.locks.Lock的異同?
主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能
主要不同點(diǎn):Lock有比synchronized更精確的線程語義和更好的性能。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放
,并且必須在finally從句中釋放。
?
72、EJB的角色和三個(gè)對象
一個(gè)完整的基于EJB的分布式計(jì)算結(jié)構(gòu)由六個(gè)角色組成,這六個(gè)角色可以由不同的開發(fā)商提供,每個(gè)角色所作的工作必須遵循Sun公司
提供的EJB規(guī)范,以保證彼此之間的兼容性。這六個(gè)角色分別是EJB組件開發(fā)者(Enterprise Bean Provider) 、應(yīng)用組合者
(Application Assembler)、部署者(Deployer)、EJB 服務(wù)器提供者(EJB Server Provider)、EJB 容器提供者(EJB
Container Provider)、系統(tǒng)管理員(System Administrator)
三個(gè)對象是Remote(Local)接口、Home(LocalHome)接口,Bean類
?
73、EJB容器提供的服務(wù)
主要提供聲明周期管理、代碼產(chǎn)生、持續(xù)性管理、安全、事務(wù)管理、鎖和并發(fā)行管理等服務(wù)。
?
74、EJB規(guī)范規(guī)定EJB中禁止的操作有哪些?
1. 不能操作線程和線程API(線程API指非線程對象的方法如notify,wait等),2.不能操作awt,3.不能實(shí)現(xiàn)服務(wù)器功能,4.不能對靜
態(tài)屬生存取,5.不能使用IO操作直接存取文件系統(tǒng),6.不能加載本地庫.,7.不能將this作為變量和返回,8.不能循環(huán)調(diào)用。
?
75、remote接口和home接口主要作用
remote接口定義了業(yè)務(wù)方法,用于EJB客戶端調(diào)用業(yè)務(wù)方法。
home接口是EJB工廠用于創(chuàng)建和移除查找EJB實(shí)例
?
76、bean 實(shí)例的生命周期
對于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在緩沖池管理,而對于Entity Bean和Statefull Session
Bean存在Cache管理,通常包含創(chuàng)建實(shí)例,設(shè)置上下文、創(chuàng)建EJB Object(create)、業(yè)務(wù)方法調(diào)用、remove等過程,對于存在緩沖
池管理的Bean,在create之后實(shí)例并不從內(nèi)存清除,而是采用緩沖池調(diào)度機(jī)制不斷重用實(shí)例,而對于存在Cache管理的Bean則通過激
活和去激活機(jī)制保持Bean的狀態(tài)并限制內(nèi)存中實(shí)例數(shù)量。
?
77、EJB的激活機(jī)制
以Stateful Session Bean 為例:其Cache大小決定了內(nèi)存中可以同時(shí)存在的Bean實(shí)例的數(shù)量,根據(jù)MRU或NRU算法,實(shí)例在激活和去
激活狀態(tài)之間遷移,激活機(jī)制是當(dāng)客戶端調(diào)用某個(gè)EJB實(shí)例業(yè)務(wù)方法時(shí),如果對應(yīng)EJB Object發(fā)現(xiàn)自己沒有綁定對應(yīng)的Bean實(shí)例則從
其去激活Bean存儲中(通過序列化機(jī)制存儲實(shí)例)回復(fù)(激活)此實(shí)例。狀態(tài)變遷前會調(diào)用對應(yīng)的 ejbActive和ejbPassivate方法。
?
78、EJB的幾種類型
會話(Session)Bean ,實(shí)體(Entity)Bean 消息驅(qū)動的(Message Driven)Bean
會話Bean又可分為有狀態(tài)(Stateful)和無狀態(tài)(Stateless)兩種
實(shí)體Bean可分為Bean管理的持續(xù)性(BMP)和容器管理的持續(xù)性(CMP)兩種
?
79、客服端調(diào)用EJB對象的幾個(gè)基本步驟
設(shè)置JNDI服務(wù)工廠以及JNDI服務(wù)地址系統(tǒng)屬性,查找Home接口,從Home接口調(diào)用Create方法創(chuàng)建Remote接口,通過Remote接口調(diào)用其
業(yè)務(wù)方法。
?
80、如何給weblogic指定大小的內(nèi)存?
在啟動Weblogic的腳本中(位于所在Domian對應(yīng)服務(wù)器目錄下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以調(diào)
整最小內(nèi)存為32M,最大200M
?
81、如何設(shè)定的weblogic的熱啟動模式(開發(fā)模式)與產(chǎn)品發(fā)布模式?
可以在管理控制臺中修改對應(yīng)服務(wù)器的啟動模式為開發(fā)或產(chǎn)品模式之一。或者修改服務(wù)的啟動文件或者commenv文件,增加set
PRODUCTION_MODE=true。
?
82、如何啟動時(shí)不需輸入用戶名與密碼?
修改服務(wù)啟動文件,增加 WLS_USER和WLS_PW項(xiàng)。也可以在boot.properties文件中增加加密過的用戶名和密碼.
?
83、在weblogic管理制臺中對一個(gè)應(yīng)用域(或者說是一個(gè)網(wǎng)站,Domain)進(jìn)行jms及ejb或連接池等相關(guān)信息進(jìn)行配置后,實(shí)際保存在什么
文件中?
保存在此Domain的config.xml文件中,它是服務(wù)器的核心配置文件。
?
84、說說weblogic中一個(gè)Domain的缺省目錄結(jié)構(gòu)?比如要將一個(gè)簡單的helloWorld.jsp放入何目錄下,然的在瀏覽器上就可打入主機(jī):
端口號//helloword.jsp就可以看到運(yùn)行結(jié)果了? 又比如這其中用到了一個(gè)自己寫的javaBean該如何辦?
Domain 目錄服務(wù)器目錄applications,將應(yīng)用目錄放在此目錄下將可以作為應(yīng)用訪問,如果是Web應(yīng)用,應(yīng)用目錄需要滿足Web應(yīng)用
目錄要求,jsp文件可以直接放在應(yīng)用目錄中,Javabean需要放在應(yīng)用目錄的WEB-INF目錄的classes目錄中,設(shè)置服務(wù)器的缺省應(yīng)用
將可以實(shí)現(xiàn)在瀏覽器上無需輸入應(yīng)用名。
?
85、在weblogic中發(fā)布ejb需涉及到哪些配置文件
不同類型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP實(shí)體Bean一般還需要
weblogic-cmp-rdbms-jar.xml
?
86、如何在weblogic中進(jìn)行ssl配置與客戶端的認(rèn)證配置或說說j2ee(標(biāo)準(zhǔn))進(jìn)行ssl的配置
缺省安裝中使用DemoIdentity.jks和DemoTrust.jks KeyStore實(shí)現(xiàn)SSL,需要配置服務(wù)器使用Enable SSL,配置其端口,在產(chǎn)品模式
下需要從CA獲取私有密鑰和數(shù)字證書,創(chuàng)建identity和trust keystore,裝載獲得的密鑰和數(shù)字證書。可以配置此SSL連接是單向還
是雙向的。
?
87、如何查看在weblogic中已經(jīng)發(fā)布的EJB?
可以使用管理控制臺,在它的Deployment中可以查看所有已發(fā)布的EJB
?
88、CORBA是什么?用途是什么?
CORBA 標(biāo)準(zhǔn)是公共對象請求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由對象管理組織 (Object Management Group
,縮寫為 OMG)標(biāo)準(zhǔn)化。它的組成是接口定義語言(IDL), 語言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。其目的為
:用不同的程序設(shè)計(jì)語言書寫在不同的進(jìn)程中運(yùn)行,為不同的操作系統(tǒng)開發(fā)。
?
89、說說你所熟悉或聽說過的j2ee中的幾種常用模式?及對設(shè)計(jì)模式的一些看法
Session Facade Pattern:使用SessionBean訪問EntityBean
Message Facade Pattern:實(shí)現(xiàn)異步調(diào)用
EJB Command Pattern:使用Command JavaBeans取代SessionBean,實(shí)現(xiàn)輕量級訪問
Data Transfer Object Factory:通過DTO Factory簡化EntityBean數(shù)據(jù)提供特性
Generic Attribute Access:通過AttibuteAccess接口簡化EntityBean數(shù)據(jù)提供特性
Business Interface:通過遠(yuǎn)程(本地)接口和Bean類實(shí)現(xiàn)相同接口規(guī)范業(yè)務(wù)邏輯一致性
EJB架構(gòu)的設(shè)計(jì)好壞將直接影響系統(tǒng)的性能、可擴(kuò)展性、可維護(hù)性、組件可重用性及開發(fā)效率。項(xiàng)目越復(fù)雜,項(xiàng)目隊(duì)伍越龐大則越
能體現(xiàn)良好設(shè)計(jì)的重要性。
90、說說在weblogic中開發(fā)消息Bean時(shí)的persistent與non-persisten的差別
persistent方式的MDB可以保證消息傳遞的可靠性,也就是如果EJB容器出現(xiàn)問題而JMS服務(wù)器依然會將消息在此MDB可用的時(shí)候發(fā)送過
來,而non-persistent方式的消息將被丟棄。
既然沒有標(biāo)準(zhǔn)答案,就根據(jù)自己的所了解的,補(bǔ)充修正一下好了
?
91、Servlet執(zhí)行時(shí)一般實(shí)現(xiàn)哪幾個(gè)方法?
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
init ()方法在servlet的生命周期中僅執(zhí)行一次,在服務(wù)器裝載servlet時(shí)執(zhí)行。缺省的init()方法通常是符合要求的,不過也可以
根據(jù)需要進(jìn)行 override,比如管理服務(wù)器端資源,一次性裝入GIF圖像,初始化數(shù)據(jù)庫連接等,缺省的inti()方法設(shè)置了servlet的
初始化參數(shù),并用它的ServeltConfig對象參數(shù)來啟動配置,所以覆蓋init()方法時(shí),應(yīng)調(diào)用super.init()以確保仍然執(zhí)行這些任務(wù)
。
service ()方法是servlet的核心,在調(diào)用service()方法之前,應(yīng)確保已完成init()方法。對于HttpServlet,每當(dāng)客戶請求一個(gè)
HttpServlet對象,該對象的service()方法就要被調(diào)用,HttpServlet缺省的service()方法的服務(wù)功能就是調(diào)用與 HTTP請求的方法
相應(yīng)的do功能,doPost()和doGet(),所以對于HttpServlet,一般都是重寫doPost()和doGet() 方法。
destroy()方法在servlet的生命周期中也僅執(zhí)行一次,即在服務(wù)器停止卸載servlet時(shí)執(zhí)行,把servlet作為服務(wù)器進(jìn)程的一部分關(guān)閉
。缺省的destroy()方法通常是符合要求的,但也可以override,比如在卸載servlet時(shí)將統(tǒng)計(jì)數(shù)字保存在文件中,或是關(guān)閉數(shù)據(jù)庫連
接。
getServletConfig()方法返回一個(gè)servletConfig對象,該對象用來返回初始化參數(shù)和servletContext。servletContext接口提供有
關(guān)servlet的環(huán)境信息。
getServletInfo()方法提供有關(guān)servlet的信息,如作者,版本,版權(quán)。
?
92、j2ee常用的設(shè)計(jì)模式?說明工廠模式。
Java中的23種設(shè)計(jì)模式:
Factory(工廠模式), Builder(建造模式), Factory Method(工廠方法模式),
Prototype(原始模型模式),Singleton(單例模式), Facade(門面模式),
Adapter(適配器模式), Bridge(橋梁模式), Composite(合成模式),
Decorator(裝飾模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解釋器模式), Visitor(訪問者模式),
Iterator(迭代子模式), Mediator(調(diào)停者模式), Memento(備忘錄模式),
Observer(觀察者模式), State(狀態(tài)模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(責(zé)任鏈模式)
工廠模式:工廠模式是一種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類可以根據(jù)提供的數(shù)據(jù)生成一組類中某一個(gè)類的實(shí)例,通常這
一組類有一個(gè)公共的抽象父類并且實(shí)現(xiàn)了相同的方法,但是這些方法針對不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個(gè)基類,該
類的子類通過不同的方法實(shí)現(xiàn)了基類中的方法。然后需要定義一個(gè)工廠類,工廠類可以根據(jù)條件生成不同的子類實(shí)例。當(dāng)?shù)玫阶宇惖?/p>
實(shí)例后,開發(fā)人員可以調(diào)用基類中的方法而不必考慮到底返回的是哪一個(gè)子類的實(shí)例。
?
93、EJB需直接實(shí)現(xiàn)它的業(yè)務(wù)接口或Home接口嗎,請簡述理由。
遠(yuǎn)程接口和Home接口不需要直接實(shí)現(xiàn),他們的實(shí)現(xiàn)代碼是由服務(wù)器產(chǎn)生的,程序運(yùn)行中對應(yīng)實(shí)現(xiàn)類會作為對應(yīng)接口類型的實(shí)例被使用
。
其實(shí)一直都不是很明白EJB的remote接口,home接口,Bean類究竟是如何使用的,或許應(yīng)該進(jìn)一步了解EJB的原理吧,查到了一個(gè)原創(chuàng)
文章,那就說說EJB調(diào)用的原理吧。其實(shí)在這個(gè)問題上,最需要理解的是RMI機(jī)制原理。
一個(gè)遠(yuǎn)程對象至少要包括4個(gè)class文件:遠(yuǎn)程對象、遠(yuǎn)程對象接口、實(shí)現(xiàn)遠(yuǎn)程接口的對象的stub、對象的skeleton。
而在EJB中則至少要包括10個(gè)class:
Bean類,特定App Server的Bean實(shí)現(xiàn)類
Bean的remote接口,特定App Server的remote接口實(shí)現(xiàn)類,特定App Server的remote接口的實(shí)現(xiàn)類的stub類和skeleton類。
Bean的home接口,特定App Server的home接口實(shí)現(xiàn)類,特定App Server的home接口的實(shí)現(xiàn)類的stub類和skeleton類。
和RMI不同的是,EJB中這10個(gè)class真正需要用戶寫的只有3個(gè),Bean類,remote接口,home接口,其它的7個(gè)究竟怎么生成,被打包
在哪里,是否需要更多的類文件,否根據(jù)不同的App Server表現(xiàn)出較大的差異。
Weblogic:
home接口和remote接口的weblogic的實(shí)現(xiàn)類的stub類和skeleton類是在EJB被部署到weblogic的時(shí)候,由weblogic動態(tài)生成stub類和
skeleton類的字節(jié)碼,所以看不到這4個(gè)類文件。
對于一次客戶端遠(yuǎn)程調(diào)用EJB,要經(jīng)過兩個(gè)遠(yuǎn)程對象的多次RMI循環(huán)。首先是通過JNDI查找Home接口,獲得Home接口的實(shí)現(xiàn)類,這個(gè)過
程其實(shí)相當(dāng)復(fù)雜,首先是找到Home接口的Weblogic實(shí)現(xiàn)類,然后創(chuàng)建一個(gè)Home接口的Weblogic實(shí)現(xiàn)類的stub類的對象實(shí)例,將它序列
化傳送給客戶端(注意stub類的實(shí)例是在第1次RMI循環(huán)中,由服務(wù)器動態(tài)發(fā)送給客戶端的,因此不需要客戶端保存Home接口的
Weblogic實(shí)現(xiàn)類的stub 類),最后客戶端獲得該stub類的對象實(shí)例(普通的RMI需要在客戶端保存stub類,而EJB不需要,因?yàn)榉?wù)
器會把stub類的對象實(shí)例發(fā)送給客戶端)。
客戶端拿到服務(wù)器給它的Home接口的Weblogic實(shí)現(xiàn)類的stub類對象實(shí)例以后,調(diào)用stub類的create方法, (在代碼上就是
home.create(),但是后臺要做很多事情),于是經(jīng)過第2次RMI循環(huán),在服務(wù)器端,Home接口的Weblogic實(shí)現(xiàn)類的 skeleton類收到stub
類的調(diào)用信息后,由它再去調(diào)用Home接口的Weblogic實(shí)現(xiàn)類的create方法。
在服務(wù)端, Home接口的Weblogic實(shí)現(xiàn)類的create方法再去調(diào)用Bean類的Weblogic實(shí)現(xiàn)類的ejbCreate方法,在服務(wù)端創(chuàng)建或者分配一
個(gè)EJB實(shí)例,然后將這個(gè)EJB實(shí)例的遠(yuǎn)程接口的Weblogic實(shí)現(xiàn)類的stub類對象實(shí)例序列化發(fā)送給客戶端。
?
客戶端收到 remote接口的Weblogic實(shí)現(xiàn)類的stub類的對象實(shí)例,對該對象實(shí)例的方法調(diào)用(在客戶端代碼中實(shí)際上就是對remote接
口的調(diào)用),將傳送給服務(wù)器端remote接口的Weblogic實(shí)現(xiàn)類的skeleton類對象,而skeleton類對象再調(diào)用相應(yīng)的remote接口的
Weblogic實(shí)現(xiàn)類,然后remote接口的Weblogic實(shí)現(xiàn)類再去調(diào)用Bean類的Weblogic實(shí)現(xiàn)類,如此就完成一次EJB對象的遠(yuǎn)程調(diào)用。
先拿普通RMI來說,有4個(gè)class,分別是遠(yuǎn)程對象,對象的接口,對象的stub類和skeleton類。而對象本身和對象的stub類同時(shí)都實(shí)
現(xiàn)了接口類。而我們在客戶端代碼調(diào)用遠(yuǎn)程對象的時(shí)候,雖然在代碼中操縱接口,實(shí)質(zhì)上是在操縱stub類,例如:
接口類:Hello
遠(yuǎn)程對象:Hello_Server
stub類:Hello_Stub
skeleton類:Hello_Skeleton
?
客戶端代碼要這樣寫:
Hello h = new Hello_Stub();
h.getString();
?
我們不會這些寫:
Hello_Stub h = new Hello_Stub();
h.getString();
?
因?yàn)槭褂媒涌谶m用性更廣,就算更換了接口實(shí)現(xiàn)類,也不需要更改代碼。因此客戶端需要Hello.class和Hello_Stub.class這兩個(gè)文
件。但是對于EJB來說,就不需要Hello_Stub.class,因?yàn)榉?wù)器會發(fā)送給它,但是Hello.class文件客戶端是省不了的,必須有。表
面上我們的客戶端代碼在操縱Hello,但別忘記了Hello只是一個(gè)接口,抽象的,實(shí)質(zhì)上是在操縱Hello_Stub。
拿Weblogic上的EJB舉例子,10個(gè)class分別是:
Bean類:HelloBean (用戶編寫)
Bean類的Weblogic實(shí)現(xiàn)類:HelloBean_Impl (EJBC生成)
?
Home接口:HelloHome (用戶編寫)
Home接口的Weblogic實(shí)現(xiàn)類 HelloBean_HomeImpl(EJBC生成)
Home接口的Weblogic實(shí)現(xiàn)類的stub類 HelloBean_HomeImpl_WLStub(部署的時(shí)候動態(tài)生成字節(jié)碼)
Home接口的Weblogic實(shí)現(xiàn)類的skeleton類 HelloBean_HomeImpl_WLSkeleton(部署的時(shí)候動態(tài)生成字節(jié)碼)
?
Remote接口: Hello (用戶編寫)
Remote接口的Weblogic實(shí)現(xiàn)類 HelloBean_EOImpl(EJBC生成)
Remote接口的Weblogic實(shí)現(xiàn)類的stub類 HelloBean_EOImpl_WLStub(部署的時(shí)候動態(tài)生成字節(jié)碼)
Remote接口的Weblogic實(shí)現(xiàn)類的skeleton類 HelloBean_EOImpl_WLSkeleton(部署的時(shí)候動態(tài)生成字節(jié)碼)
?
客戶端只需要Hello.class和HelloHome.class這兩個(gè)文件。
?
HelloHome home = (Home) PortableRemoteObject.narrow(ctx.lookup(“Hello”), HelloHome.class);
?
這一行代碼是從JNDI獲得Home接口,但是請記住!接口是抽象的,那么home這個(gè)對象到底是什么類的對象實(shí)例呢?很簡單,用
toString()輸出看一下就明白了,下面一行是輸出結(jié)果:
HelloBean_HomeImpl_WLStub@18c458
這表明home這個(gè)通過從服務(wù)器的JNDI樹上查找獲得的對象實(shí)際上是HelloBean_HomeImpl_WLStub類的一個(gè)實(shí)例。
接下來客戶端代碼:
?
Hello h = home.create()
?
同樣Hello只是一個(gè)抽象的接口,那么h對象是什么東西呢?打印一下:
HelloBean_EOImpl_WLStub@8fa0d1
原來是HelloBean_EOImpl_WLStub的一個(gè)對象實(shí)例。
?
用這個(gè)例子來簡述一遍EJB調(diào)用過程:
?
首先客戶端JNDI查詢,服務(wù)端JNDI樹上Hello這個(gè)名字實(shí)際上綁定的對象是HelloBean_HomeImpl_WLStub,所以服務(wù)端將創(chuàng)建
HelloBean_HomeImpl_WLStub的一個(gè)對象實(shí)例,序列化返回給客戶端。
?
于是客戶端得到home對象,表面上是得到HelloHome接口的實(shí)例,實(shí)際上是進(jìn)行了一次遠(yuǎn)程調(diào)用得到了 HelloBean_HomeImpl_WLStub
類的對象實(shí)例,別忘記了HelloBean_HomeImpl_WLStub也實(shí)現(xiàn)了 HelloHome接口。
?
然后home.create()實(shí)質(zhì)上就是 HelloBean_HomeImpl_WLStub.create(),該方法將發(fā)送信息給 HelloBean_HomeImpl_WLSkeleton,而
HelloBean_HomeImpl_WLSkeleton接受到信息后,再去調(diào)用 HelloBean_HomeImpl的create方法,至此完成第1次完整的RMI循環(huán)。
?
注意在這次RMI循環(huán)過程中,遠(yuǎn)程對象是HelloBean_HomeImpl,遠(yuǎn)程對象的接口是HelloHome,對象的stub是
HelloBean_HomeImpl_WLStub,對象的skeleton是HelloBean_HomeImpl_WLSkeleton。
?
然后HelloBean_HomeImpl 再去調(diào)用HelloBean_Impl的ejbCreate方法,而HelloBean_Impl的ejbCreate方法將負(fù)責(zé)創(chuàng)建或者分配一個(gè)
Bean實(shí)例,并且創(chuàng)建一個(gè)HelloBean_EOImpl_WLStub的對象實(shí)例。
?
這一步比較有趣的是,在前一步RMI循環(huán)中,遠(yuǎn)程對象HelloBean_HomeImpl在客戶端有一個(gè)代理類HelloBean_HomeImpl_WLStub,但在
這一步, HelloBean_HomeImpl自己卻充當(dāng)了HelloBean_Impl的代理類,只不過HelloBean_HomeImpl不在客戶端,而是在服務(wù)端,因
此不進(jìn)行RMI。
?
然后HelloBean_EOImpl_WLStub的對象實(shí)例序列化返回給客戶端,這一步也很有趣,上次RMI過程,主角是HelloBean_HomeImpl和它的
代理類HelloBean_HomeImpl_WLStub,但這這一次換成了 HelloBean_EOImpl和它的代理類HelloBean_EOImpl_WLStub來玩了。
?
Hello h = home.create();h.helloWorld();
?
假設(shè)Hello接口有一個(gè)helloWorld遠(yuǎn)程方法,那么表面上是在調(diào)用Hello接口的helloWorld方法,實(shí)際上是在調(diào)用
HelloBean_EOImpl_WLStub的helloWorld方法。
?
然后HelloBean_EOImpl_WLStub的helloWorld方法將發(fā)送信息給服務(wù)器上的 HelloBean_EOImpl_WLSkeleton,而
HelloBean_EOImpl_WLSkeleton收到信息以后,再去調(diào)用 HelloBean_EOImpl的helloWorld方法。至此,完成第2次完整的RMI循環(huán)過程
。
?
在剛才 HelloBean_EOImpl是作為遠(yuǎn)程對象被調(diào)用的,它的代理類是HelloBean_EOImpl_WLStub,但現(xiàn)在 HelloBean_EOImpl要作為
HelloBean_Impl的代理類了。現(xiàn)在HelloBean_EOImpl去調(diào)用 HelloBean_Impl的helloWorld方法。注意!HelloBean_Impl繼承了
HelloBean,而HelloBean中的 helloWorld方法是我們親自編寫的代碼,現(xiàn)在終于調(diào)用到了我們編寫的代碼了!
?
至此,一次EJB調(diào)用過程終于完成。在整個(gè)過程中,服務(wù)端主要要調(diào)用的類是HelloBean_Impl, HelloBean_HomeImpl,
HelloBean_HomeImpl_WLSkeleton,HelloBean_EOImpl, HelloBean_EOImpl_WLSkeleton。客戶端主要調(diào)用的類是
HelloBean_HomeImpl_WLStub, HelloBean_EOImpl_WLStub,這兩個(gè)類在客戶端代碼中并不會直接出現(xiàn),出現(xiàn)在代碼中的類是他們的
接口HelloHome和 Hello,因此客戶端需要這兩個(gè)接口文件,而Stub是服務(wù)器傳送給他們的。
?
http://www.pbase.com/nobo123/image/27229257
?
http://forum.javaeye.com/viewtop … der=asc&start=0
?
94、排序都有哪幾種方法?請列舉。用JAVA實(shí)現(xiàn)一個(gè)快速排序。
排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),
歸并排序,分配排序(箱排序、基數(shù)排序)
快速排序的偽代碼。
/ /使用快速排序方法對a[ 0 :n- 1 ]排序
從a[ 0 :n- 1 ]中選擇一個(gè)元素作為m i d d l e,該元素為支點(diǎn)
把余下的元素分割為兩段left 和r i g h t,使得l e f t中的元素都小于等于支點(diǎn),而right 中的元素都大于等于支點(diǎn)
遞歸地使用快速排序方法對left 進(jìn)行排序
遞歸地使用快速排序方法對right 進(jìn)行排序
所得結(jié)果為l e f t + m i d d l e + r i g h t
?
95、請對以下在J2EE中常用的名詞進(jìn)行解釋(或簡單描述)
web 容器:給處于其中的應(yīng)用程序組件(JSP,SERVLET)提供一個(gè)環(huán)境,使JSP,SERVLET直接和容器中的環(huán)境變量接接口互,不必關(guān)
注其它系統(tǒng)問題。主要有WEB服務(wù)器來實(shí)現(xiàn)。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴(yán)格遵守J2EE規(guī)范中的WEB
APPLICATION 標(biāo)準(zhǔn)。我們把遵守以上標(biāo)準(zhǔn)的WEB服務(wù)器就叫做J2EE中的WEB容器。
Web container:實(shí)現(xiàn)J2EE體系結(jié)構(gòu)中Web組件協(xié)議的容器。這個(gè)協(xié)議規(guī)定了一個(gè)Web組件運(yùn)行時(shí)的環(huán)境,包括安全,一致性,生命周
期管理,事務(wù),配置和其它的服務(wù)。一個(gè)提供和JSP和J2EE平臺APIs界面相同服務(wù)的容器。一個(gè)Web container 由Web服務(wù)器或者J2EE
服務(wù)器提供。
EJB容器:Enterprise java bean 容器。更具有行業(yè)領(lǐng)域特色。他提供給運(yùn)行在其中的組件EJB各種管理功能。只要滿足J2EE規(guī)范的
EJB放入該容器,馬上就會被容器進(jìn)行高效率的管理。并且可以通過現(xiàn)成的接口來獲得系統(tǒng)級別的服務(wù)。例如郵件服務(wù)、事務(wù)管理。
一個(gè)實(shí)現(xiàn)了J2EE體系結(jié)構(gòu)中EJB組件規(guī)范的容器。
這個(gè)規(guī)范指定了一個(gè)Enterprise bean的運(yùn)行時(shí)環(huán)境,包括安全,一致性,生命周期,事務(wù),
配置,和其他的服務(wù)。
JNDI:(Java Naming & Directory Interface)JAVA命名目錄服務(wù)。主要提供的功能是:提供一個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程
序在其上面留下自己的索引,從而滿足快速查找和定位分布式應(yīng)用程序的功能。
JMS:(Java Message Service)JAVA消息服務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對點(diǎn)和廣播。
JTA:(Java Transaction API)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。
JAF:(Java Action FrameWork)JAVA安全認(rèn)證框架。提供一些安全控制方面的框架。讓開發(fā)者通過各種部署和自定義實(shí)現(xiàn)自己的個(gè)
性安全控制策略。
RMI/IIOP: (Remote Method Invocation /internet對象請求中介協(xié)議)他們主要用于通過遠(yuǎn)程調(diào)用服務(wù)。例如,遠(yuǎn)程有一臺計(jì)算機(jī)
上運(yùn)行一個(gè)程序,它提供股票分析服務(wù),我們可以在本地計(jì)算機(jī)上實(shí)現(xiàn)對其直接調(diào)用。當(dāng)然這是要通過一定的規(guī)范才能在異構(gòu)的系統(tǒng)
之間進(jìn)行通信。RMI是JAVA特有的。
RMI-IIOP出現(xiàn)以前,只有RMI和 CORBA兩種選擇來進(jìn)行分布式程序設(shè)計(jì)。RMI-IIOP綜合了RMI和CORBA的優(yōu)點(diǎn),克服了他們的缺點(diǎn),使
得程序員能更方便的編寫分布式程序設(shè)計(jì),實(shí)現(xiàn)分布式計(jì)算。首先,RMI-IIOP綜合了RMI的簡單性和CORBA的多語言性(兼容性),其
次RMI-IIOP克服了RMI只能用于Java 的缺點(diǎn)和CORBA的復(fù)雜性(可以不用掌握IDL)。
?
96、JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?在try塊中可以拋出異常嗎?
Java 通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對象,
它是Throwable類或其它子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對象,該對象中包含有異常信息,調(diào)用這個(gè)對象的方法
可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過5個(gè)關(guān)鍵詞來實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下
是用try來執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會拋出(throws)一個(gè)異常,這時(shí)候你可以通過它的類型來捕捉(catch)它,或最后
(finally)由缺省處理器來處理。
用try來指定一塊預(yù)防所有”異常”的程序。緊跟在try程序后面,應(yīng)包含一個(gè)catch子句來指定你想要捕捉的”異常”的類型。
throw語句用來明確地拋出一個(gè)”異常”。
throws用來標(biāo)明一個(gè)成員函數(shù)可能拋出的各種”異常”。
Finally為確保一段代碼不管發(fā)生什么”異常”都被執(zhí)行一段代碼。
可以在一個(gè)成員函數(shù)調(diào)用的外面寫一個(gè)try語句,在這個(gè)成員函數(shù)內(nèi)部寫另一個(gè)try語句保護(hù)其他代碼。每當(dāng)遇到一個(gè)try語句,”異常
“的框架就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種”異常”進(jìn)行處理,堆棧就會展開,直到遇到
有處理這種”異常”的try語句。
?
http://www.programfan.com/article/showarticle.asp?id=2731
?
97、一個(gè)”.java”源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?
可以。必須只有一個(gè)類名與文件名相同。
?
98、MVC的各個(gè)部分都有那些技術(shù)來實(shí)現(xiàn)?如何實(shí)現(xiàn)?
MVC 是Model-View-Controller的簡寫。”Model” 代表的是應(yīng)用的業(yè)務(wù)邏輯(通過JavaBean,EJB組件實(shí)現(xiàn)), “View” 是應(yīng)用的表
示面,用于與用戶的交互(由JSP頁面產(chǎn)生),”Controller” 是提供應(yīng)用的處理過程控制(一般是一個(gè)Servlet),通過這種設(shè)計(jì)模
型把應(yīng)用邏輯,處理過程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。
model層實(shí)現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,view層用于與用戶的交互,controller層是model與view之間溝通的橋梁,可以分派用戶的請求并選
擇恰當(dāng)?shù)囊晥D以用于顯示,同時(shí)它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。
?
99、java中有幾種方法可以實(shí)現(xiàn)一個(gè)線程?用什么關(guān)鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?
有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
用synchronized關(guān)鍵字修飾同步方法
反對使用stop(),是因?yàn)樗话踩K鼤獬删€程獲取的所有鎖定,而且如果對象處于一種不連貫狀態(tài),那么其他線程能在那種狀
態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會停下來,
但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被”掛起”的線程恢復(fù)運(yùn)行。對任何線程來說,
如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread
類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用 wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)
恢復(fù),則用一個(gè)notify()重新啟動線程。
?
100、java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
字節(jié)流,字符流。字節(jié)流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。在java.io包
中還有許多其他的流,主要是為了提高性能和使用方便。
?
101、java中會存在內(nèi)存泄漏嗎,請簡單描述。
的確存在Java的內(nèi)存泄漏, 并且事態(tài)可以變得相當(dāng)嚴(yán)重
?
Java garbage collector自動釋放哪些內(nèi)存里面程序不在需要的對象, 以此避免大多數(shù)的其他程序上下文的內(nèi)存泄漏. 但是Java應(yīng)用
程序依舊會有相當(dāng)?shù)膬?nèi)存泄漏. 查找原因會十分困難.
有兩類主要的Java內(nèi)存泄漏:
* 不再需要的對象引用
* 未釋放的系統(tǒng)資源
2.2 非必要的對象引用
Java代碼常常保留對于不再需要的對象引用, 并且這組織了內(nèi)存的垃圾收集器的工作. Java對象通常被其他對象包含引用, 為此一個(gè)
單一對象可以保持整個(gè)對象樹在內(nèi)存中, 于是導(dǎo)致了如下問題:
* 在向數(shù)組添加對象以后遺漏了對于他們的處理
* 直到你再次使用對象的時(shí)候都不釋放引用. 比如一個(gè)菜單指令可以插件一個(gè)對象實(shí)例引用并且不釋放便于以后再次調(diào)用的時(shí)候使用
, 但是也許永遠(yuǎn)不會發(fā)生.
* 在其他引用依然需要舊有狀態(tài)的時(shí)候貿(mào)然修改對象狀態(tài). 比如當(dāng)你為了在一個(gè)文本文件里面保存一些屬性而使用一個(gè)數(shù)組, 諸如”
字符個(gè)數(shù)”等字段在不再需要的時(shí)候依然保留在內(nèi)存當(dāng)中.
* 允許一個(gè)長久執(zhí)行的線程所引用的對象. 設(shè)置引用為NULL也無濟(jì)于事, 在線程退出和空閑之前, 對象不會被收集釋放
2.3 未釋放的系統(tǒng)資源
Java方法可以定位Java實(shí)例意外的堆內(nèi)存, 諸如針對視窗和位圖的內(nèi)存資源. Java常常通過JNI(Java Native Interface)調(diào)用C/C++
子程序定位這些資源.
102、java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?
方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding是父類與子類之間多態(tài)性的一種表現(xiàn),重載
Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。
?
103、垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動通知虛擬機(jī)進(jìn)行垃圾回收?
對于GC來說,當(dāng)程序員創(chuàng)建對象時(shí),GC就開始監(jiān)控這個(gè)對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆
(heap)中的所有對象。通過這種方式確定哪些對象是”可達(dá)的”,哪些對象是”不可達(dá)的”。當(dāng)GC確定一些對象為”不可達(dá)”時(shí),GC就有
?
責(zé)
任回收這些內(nèi)存空間。可以。程序員可以手動執(zhí)行System.gc(),通知GC運(yùn)行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行。
?
104、靜態(tài)變量和實(shí)例變量的區(qū)別?
static i = 10; //常量
class A a; a.i =10;//可變
?
105、什么是java序列化,如何實(shí)現(xiàn)java序列化?
序列化就是一種用來處理對象流的機(jī)制,所謂對象流也就是將對象的內(nèi)容進(jìn)行流化。可以對流化后的對象進(jìn)行讀寫操作,也可將流化
后的對象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對對象流進(jìn)行讀寫操作時(shí)所引發(fā)的問題。
序列化的實(shí)現(xiàn):將需要被序列化的類實(shí)現(xiàn)Serializable接口,該接口沒有需要實(shí)現(xiàn)的方法,implements Serializable只是為了標(biāo)注
該對象是可被序列化的,然后使用一個(gè)輸出流(如:FileOutputStream)來構(gòu)造一個(gè) ObjectOutputStream(對象流)對象,接著,使用
ObjectOutputStream對象的writeObject(Object obj)方法就可以將參數(shù)為obj的對象寫出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流。
?
106、是否可以從一個(gè)static方法內(nèi)部發(fā)出對非static方法的調(diào)用?
不可以,如果其中包含對象的method();不能保證對象初始化.
?
107、寫clone()方法時(shí),通常都有一行代碼,是什么?
Clone 有缺省行為,super.clone();他負(fù)責(zé)產(chǎn)生正確大小的空間,并逐位復(fù)制。
?
108、在JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)?
用break; return 方法。
?
109、List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?
List 以特定次序來持有元素,可有重復(fù)元素。Set 無法擁有重復(fù)元素,內(nèi)部排序。Map 保存key-value值,value可多值。
?
110、J2EE是什么?
J2EE 是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級應(yīng)用模型 (enterpriese
application model).在這樣的一個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層
次(tier)中。所屬層次包括客戶層(clietn tier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。
?
111、UML方面
標(biāo)準(zhǔn)建模語言UML。用例圖,靜態(tài)圖(包括類圖、對象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖。
?
112、說出一些常用的類,包,接口,請各舉5個(gè)
常用的類:BufferedReader BufferedWriter FileReader FileWirter String Integer
常用的包:java.lang java.awt java.io java.util java.sql
常用的接口:Remote List Map Document NodeList
?
113、開發(fā)中都用到了那些設(shè)計(jì)模式?用在什么場合?
每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問題,然后描述了該問題的解決方案的核心。通過這種方式,你可以無數(shù)次地使用
那些已有的解決方案,無需在重復(fù)相同的工作。主要用到了MVC的設(shè)計(jì)模式。用來開發(fā)JSP/Servlet或者J2EE的相關(guān)應(yīng)用。簡單工廠模
式等。
?
114、jsp有哪些動作?作用分別是什么?
JSP 共有以下6種基本動作 jsp:include:在頁面被請求的時(shí)候引入一個(gè)文件。 jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。
jsp:setProperty:設(shè)置JavaBean的屬性。 jsp:getProperty:輸出某個(gè)JavaBean的屬性。 jsp:forward:把請求轉(zhuǎn)到一個(gè)新的頁面
。 jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記。
?
115、Anonymous Inner Class (匿名內(nèi)部類) 是否可以extends(繼承)其它類,是否可以implements(實(shí)現(xiàn))interface(接口)?
可以繼承其他類或完成其他接口,在swing編程中常用此方式。
?
116、應(yīng)用服務(wù)器與WEB SERVER的區(qū)別?
應(yīng)用服務(wù)器:Weblogic、Tomcat、Jboss
WEB SERVER:IIS、 Apache
?
117、BS與CS的聯(lián)系與區(qū)別。
C/S是Client/Server的縮寫。服務(wù)器通常采用高性能的PC、工作站或小型機(jī),并采用大型數(shù)據(jù)庫系統(tǒng),如Oracle、Sybase、Informix
或 SQL Server。客戶端需要安裝專用的客戶端軟件。
B/S是Brower/Server的縮寫,客戶機(jī)上只要安裝一個(gè)瀏覽器(Browser),如Netscape Navigator或Internet Explorer,服務(wù)器安
裝Oracle、Sybase、Informix或 SQL Server等數(shù)據(jù)庫。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)
現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn)。瀏覽器通過Web Server 同數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互。
C/S 與 B/S 區(qū)別:
?
1.硬件環(huán)境不同:
C/S 一般建立在專用的網(wǎng)絡(luò)上, 小范圍里的網(wǎng)絡(luò)環(huán)境, 局域網(wǎng)之間再通過專門服務(wù)器提供連接和數(shù)據(jù)交換服務(wù).
B/S 建立在廣域網(wǎng)之上的, 不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng), 租用設(shè)備. 信息自己管理. 有比C/S更強(qiáng)的適應(yīng)范圍, 一
般只要有操作系統(tǒng)和瀏覽器就行
2.對安全要求不同
C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強(qiáng). 一般高度機(jī)密的信息系統(tǒng)采用C/S 結(jié)構(gòu)適宜. 可以通過B/S發(fā)布
部分可公開信息.
B/S 建立在廣域網(wǎng)之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
3.對程序架構(gòu)不同
C/S 程序可以更加注重流程, 可以對權(quán)限多層次校驗(yàn), 對系統(tǒng)運(yùn)行速度可以較少考慮.
B/S 對安全以及訪問速度的多重的考慮, 建立在需要更加優(yōu)化的基礎(chǔ)之上. 比C/S有更高的要求 B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨
勢, 從MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng). SUN 和IBM推的JavaBean 構(gòu)件技術(shù)等,使
B/S更加成熟.
4.軟件重用不同
C/S 程序可以不可避免的整體性考慮, 構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好.
B/S 對的多重結(jié)構(gòu),要求構(gòu)件相對獨(dú)立的功能. 能夠相對較好的重用.就入買來的餐桌可以再利用,而不是做在墻上的石頭桌子
5.系統(tǒng)維護(hù)不同
C/S 程序由于整體性, 必須整體考察, 處理出現(xiàn)的問題以及系統(tǒng)升級. 升級難. 可能是再做一個(gè)全新的系統(tǒng)
B/S 構(gòu)件組成,方面構(gòu)件個(gè)別的更換,實(shí)現(xiàn)系統(tǒng)的無縫升級. 系統(tǒng)維護(hù)開銷減到最小.用戶從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級.
6.處理問題不同
C/S 程序可以處理用戶面固定, 并且在相同區(qū)域, 安全要求高需求, 與操作系統(tǒng)相關(guān). 應(yīng)該都是相同的系統(tǒng)
B/S 建立在廣域網(wǎng)上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統(tǒng)平臺關(guān)系最小.
7.用戶接口不同
C/S 多是建立的Window平臺上,表現(xiàn)方法有限,對程序員普遍要求較高
B/S 建立在瀏覽器上, 有更加豐富和生動的表現(xiàn)方式與用戶交流. 并且大部分難度減低,減低開發(fā)成本.
8.信息流不同
C/S 程序一般是典型的中央集權(quán)的機(jī)械式處理, 交互性相對低
B/S 信息流向可變化, B-B B-C B-G等信息、流向的變化, 更像交易中心。
?
118、LINUX下線程,GDI類的解釋。
LINUX實(shí)現(xiàn)的就是基于核心輕量級進(jìn)程的”一對一”線程模型,一個(gè)線程實(shí)體對應(yīng)一個(gè)核心輕量級進(jìn)程,而線程之間的管理在核外函數(shù)
庫中實(shí)現(xiàn)。
GDI類為圖像設(shè)備編程接口類庫。
?
119、STRUTS的應(yīng)用(如STRUTS架構(gòu))
Struts 是采用Java Servlet/JavaServer Pages技術(shù),開發(fā)Web應(yīng)用程序的開放源碼的framework。采用Struts能開發(fā)出基于MVC
(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架。 Struts有如下的主要功能:一.包含一個(gè)controller servlet,能將用戶的請求發(fā)
送到相應(yīng)的Action對象。二.JSP自由tag庫,并且在controller servlet中提供關(guān)聯(lián)支持,幫助開發(fā)員創(chuàng)建交互式表單應(yīng)用。三.提供
了一系列實(shí)用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。
?
120、Jdo是什么?
JDO 是Java對象持久化的新的規(guī)范,為java data object的簡稱,也是一個(gè)用于存取某種數(shù)據(jù)倉庫中的對象的標(biāo)準(zhǔn)化API。JDO提供了
透明的對象存儲,因此對開發(fā)人員來說,存儲數(shù)據(jù)對象完全不需要額外的代碼(如JDBC API的使用)。這些繁瑣的例行工作已經(jīng)轉(zhuǎn)移
到JDO產(chǎn)品提供商身上,使開發(fā)人員解脫出來,從而集中時(shí)間和精力在業(yè)務(wù)邏輯上。另外,JDO很靈活,因?yàn)樗梢栽谌魏螖?shù)據(jù)底層上
運(yùn)行。JDBC只是面向關(guān)系數(shù)據(jù)庫(RDBMS)JDO更通用,提供到任何數(shù)據(jù)底層的存儲功能,比如關(guān)系數(shù)據(jù)庫、文件、XML以及對象數(shù)據(jù)
庫(ODBMS)等等,使得應(yīng)用可移植性更強(qiáng)。
?
121、內(nèi)部類可以引用他包含類的成員嗎?有沒有什么限制?
一個(gè)內(nèi)部類對象可以訪問創(chuàng)建它的外部類對象的內(nèi)容
內(nèi)部類如果不是static的,那么它可以訪問創(chuàng)建它的外部類對象的所有屬性
內(nèi)部類如果是sattic的,即為nested class,那么它只可以訪問創(chuàng)建它的外部類對象的所有static屬性
一般普通類只有public或package的訪問修飾,而內(nèi)部類可以實(shí)現(xiàn)static,protected,private等訪問修飾。
當(dāng)從外部類繼承的時(shí)候,內(nèi)部類是不會被覆蓋的,它們是完全獨(dú)立的實(shí)體,每個(gè)都在自己的命名空間內(nèi),如果從內(nèi)部類中明確地繼承
,就可以覆蓋原來內(nèi)部類的方法。
?
122、WEB SERVICE名詞解釋。JSWDL開發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。
Web ServiceWeb Service是基于網(wǎng)絡(luò)的、分布式的模塊化組件,它執(zhí)行特定的任務(wù),遵守具體的技術(shù)規(guī)范,這些規(guī)范使得Web
Service能與其他兼容的組件進(jìn)行互操作。
JAXP(Java API for XML Parsing) 定義了在Java中使用DOM, SAX, XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接
口,當(dāng)你需要改變具體的實(shí)現(xiàn)時(shí)候也不需要修改代碼。
JAXM(Java API for XML Messaging) 是為SOAP通信提供訪問方法和傳輸機(jī)制的API。
WSDL是一種 XML 格式,用于將網(wǎng)絡(luò)服務(wù)描述為一組端點(diǎn),這些端點(diǎn)對包含面向文檔信息或面向過程信息的消息進(jìn)行操作。這種格式
首先對操作和消息進(jìn)行抽象描述,然后將其綁定到具體的網(wǎng)絡(luò)協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(
服務(wù))。
SOAP即簡單對象訪問協(xié)議(Simple Object Access Protocol),它是用于交換XML編碼信息的輕量級協(xié)議。
UDDI 的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是一套基于Web的、分布式的、為Web Service提供的、信息注冊中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同
時(shí)也包含一組使企業(yè)能將自身提供的Web Service注冊,以使別的企業(yè)能夠發(fā)現(xiàn)的訪問協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。
soap是web service最關(guān)鍵的技術(shù),是web service中數(shù)據(jù)和方法調(diào)傳輸?shù)慕橘|(zhì)。
WSDL(web service definition language)描述了web service的接口和功能。
?
第一章 Java概述
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Java是一種先 編譯 后 解釋 運(yùn)行的語言。
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】J2SE:Java 2 Standard Edition Java標(biāo)準(zhǔn)版
2.? 【基礎(chǔ)題】J2EE:Java 2 Enterprise Edition Java企業(yè)版
3.? 【基礎(chǔ)題】J2ME:Java 2 Micro Edition Java微型版
4.? 【基礎(chǔ)題】JDK:Java Development Kit Java開發(fā)工具包
5.? 【基礎(chǔ)題】JRE:Java Runtime Environment Java運(yùn)行環(huán)境
四、? 問答題
1.? 【基礎(chǔ)題】Java的優(yōu)點(diǎn)有哪些(回答六個(gè)以上)?
1)? 簡單(Simple)
2)? 安全(Secure)
3)? 可移植(Portable)
4)? 面向?qū)ο?#xff08;Object-oriented)
5)? 健壯(Robust)
6)? 多線程(Multithreaded)
7)? 體系結(jié)構(gòu)中立(Architecture-neutral)
8)? 解釋執(zhí)行(Interpreted)
9)? 高性能(Highperformance)
10) 分布式(Distributed)
11) 動態(tài)(Dynamic)
2.? 【基礎(chǔ)題】假設(shè)JDK安裝在d:\java目錄中。寫出JAVA環(huán)境變量的設(shè)置方法。
答:
JAVA_HOME=d:\java
CLASSPATH=.;d:\java\lib
PATH=d:\java\bin
3.? 【中等題】GC是什么? 為什么要有GC?
答:
GC是垃圾收集的意思(Gabage Collection),內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不
?
穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達(dá)到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的
?
顯示操作方法。
4.? 【中等題】垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制。
答:
Java語言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使c++程序員最頭疼的內(nèi)存管理的問題迎刃而解,它使得Java程序員在編寫程序的時(shí)
?
候不再需要考慮內(nèi)存管理。由于有個(gè)垃圾回收機(jī)制,Java中的對象不再有”作用域”的概念,只有對象的引用才有”作用域”。垃圾回收
?
可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個(gè)單獨(dú)的低級別的線程運(yùn)行,不可預(yù)知的情況下對內(nèi)存
?
堆中已經(jīng)死亡的或者長時(shí)間沒有使用的對象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對某個(gè)對象或所有對象進(jìn)行垃圾回收。回
?
收機(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。
5.? 【提高題】heap和stack有什么區(qū)別。
答:
(stack)棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。(heap)堆是棧的一個(gè)組成元素
?
第二章 基本詞匯、數(shù)據(jù)類型、變量
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Java中數(shù)據(jù)類型包括 基本數(shù)據(jù)類型 和 引用類型 。
二、? 選擇題
1.? 【基礎(chǔ)題】可作為Java標(biāo)識符的是( A )
A.? identifier
B.? User.name
C.? Not/ok
D.? user-name
2.? 【基礎(chǔ)題】以下選項(xiàng)中,合法的賦值語句是( D )
A.? a == 1;
B.? ++i;
C.? a = a + 1 = 5;
D.? y = (int)I;
三、? 名詞解釋
四、? 問答題
1.? 【基礎(chǔ)題】Java有沒有g(shù)oto?
答:
goto是java中的保留字,現(xiàn)在沒有在java中使用。
2.? 【基礎(chǔ)題】寫出JAVA的基本數(shù)據(jù)類型。
答:
byte,short,int,long,char, float,double,boolean
3.? 【基礎(chǔ)題】什么是常量?什么是變量?
答:
常量能在任何地方被它所允許的類型使用,代表的是所屬類型的一個(gè)值。變量是JAVA程序的一個(gè)基本存儲單元。變量是有一個(gè)標(biāo)識符,類
?
型及一個(gè)可選初始值的組合定義
4.? 【基礎(chǔ)題】Java代碼注釋有幾種?分別起什么作用?舉例寫出來。
答:
有3種;單行注釋、多行注釋和文檔注釋;//、/* */、/** */
5.? 【基礎(chǔ)題】字節(jié)型(byte)、短整形(short)、整形(int)、單精度浮點(diǎn)型(float)的取值范圍是多少?
答:
字節(jié)型(byte):它是有符號的8位類型,數(shù)的范圍是-128~127。
短整形(short):short是有符號的16位類型,數(shù)的范圍是 –32,768~32,767 。
整形(int):它是有符號的32位類型,數(shù)的范圍是-2,147,483,648~2,147,483,647。
單精度浮點(diǎn)型(float):單精度浮點(diǎn)型(float)專指占用32位存儲空間的單精度(single-precision)值。數(shù)的范圍是3.4E–038~
?
3.4E+038。
6.? 【中等題】簡述邏輯操作(&,|,^)與條件操作(&&,||)的區(qū)別。
答:
區(qū)別主要答兩點(diǎn):
a.條件操作只能操作布爾型的,而邏輯操作不僅可以操作布爾型,而且可以操作數(shù)值型
b.邏輯操作不會產(chǎn)生短路
第三章 數(shù)據(jù)類型轉(zhuǎn)換和運(yùn)算符
筆試題
一、? 填空題
1.? 【中等題】int x = 5; int y = 4; y = x++; y的值是 5 。
二、? 選擇題
1.? 【基礎(chǔ)題】int類型不可以與下列那些數(shù)據(jù)類型進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換( C )
A.? char
B.? byte
C.? boolean
D.? double
2.? 【基礎(chǔ)題】請選擇以下運(yùn)算優(yōu)先級別:1()、2>、3++、4+=、5&&。( C )
A.? 12345
B.? 32154
C.? 13254
D.? 52134
3.? 【中等題】int i=2;i+=i-=i*i的值為( A )
A.? 0
B.? 2
C.? 4
D.? 2
4.? 【中等題】
boolean bool = true;
if(bool = false) {
System.out.println(“a”);
} else if (bool) {
System.out.println(“c”);
} else if (!bool) {
System.out.println(“c”);
} else {
System.out.println(“d”);
}
?
What is the result? ( C )
A.? a
B.? b
C.? c
D.? d
E.? Compilation fails
5.? 【中等題】
public class Delta {
static boolean foo(char c) {
System.out.print(c);
return true;
}
public static void main( String[] argv ) {
int i =0;
for ( foo(‘A’); foo(‘B’)&&(i<2); foo(‘C’)){
i++ ;
foo(‘D’);
}
}
}
?
What is the result? ( A )
A.? ABDCBDCB
B.? ABCDABCD
C.? Compilation fails.
D.? An exception is thrown at runtime.
6.? 【 提高題】
public class Alpha1 {
public static void main( String[] args ) {
boolean flag; int i=0;
do {
flag = false;
System.out.println( i++ );
flag = i < 10;
continue;
} while ( (flag)? true:false );
}
}
What is the result? ( B )
A.? 000000000
B.? 0123456789
C.? Compilation fails.
D.? The code runs with no output.
E.? The code enters an infinite loop.
F.? An exception is thrown at runtime.
三、? 名詞解釋
四、? 問答題
1.? 【基礎(chǔ)題】請闡述=運(yùn)算符和==運(yùn)算符的區(qū)別。
答:
=是賦值運(yùn)算符, 用于給變量賦值
==是比較運(yùn)算符, 用于邏輯比較
第四章 流程控制
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Java程序控制語句中的循環(huán)語法分 for , while 和 do…while 三種。
二、? 選擇題
2.? 【基礎(chǔ)題】下列程序在執(zhí)行完循環(huán)后的結(jié)果為 ( D )
int i=1,j=10;
do{
if(i++>–j)
continue;
} while(i<5);
A.? i = 6 j = 5
B.? i = 5? ?j = 5
C.? i = 6? ?j = 4
D.? i = 5? ?j = 6
3.? 【基礎(chǔ)題】以下選項(xiàng)中,那一個(gè)是結(jié)束本次循環(huán)關(guān)鍵字 ( B )
A.? break
B.? continue
C.? go
D.? do
4.? 【基礎(chǔ)題】
int i = 0;
for (; i <4; i += 2) {
System.out.print(i + “”);
}
System.out.println(i);
What is the result? ( A )
A.? 0 2 4
B.? 0 2 4 5
C.? 0 1 2 3 4
D.? Compilation fails.
E.? An exception is thrown at runtime.
5.? 【基礎(chǔ)題】
public class SwitchTest {
public static void main(String[] args) {
System.out.println(“value = “ + switchIt(4));
}
public static int switchIt(int x) {
int j = 1;
switch (x) {
case 1: j++;
case 2: j++;
case 3: j++;
case 4: j++;
case 5: j++;
default: j++;
}
return j + x;
}
}
What is the result? ( F )
A.? value = 3
B.? value = 4
C.? value = 5
D.? value = 6
E.? value = 7
F.? value = 8
6.? 【基礎(chǔ)題】
int i = 1,j = -1;
switch (i) {
case 0, 1:j = 1;
case 2: j = 2;
default; j = 0;
}
System.out.println(“j=”+j);
What is the result? ( E )
A.? j = -1
B.? j = 0
C.? j = 1
D.? j = 2
E.? Compilation fails.
7.? 【基礎(chǔ)題】
switch(x) {
default:
System.out.println(“Hello”);
}
Which two are acceptable types for x? (Choose two) ( A、C )
A.? byte
B.? long
C.? char
D.? float
E.? Short
F.? Long
三、? 名詞解釋
四、? 問答題
?
第五章 Eclipse使用
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Eclipse中代碼助手的快捷鍵是 alt+/ ,格式化的快捷鍵是 ctrl+shift+f 。
二、? 選擇題
1.? 【基礎(chǔ)題】Eclipse目錄下,插件jar包放在什么文件夾里( B )
A.? configuration
B.? plugins
C.? links
D.? features
三、? 名詞解釋
1.? 【基礎(chǔ)題】IDE:Integrated Development Environment集成開發(fā)環(huán)境。
四、? 問答題
1.? 【基礎(chǔ)題】常用的Java IDE都有哪些?
答:
JBuilder
NetBeans
Eclipse
2.? 【基礎(chǔ)題】MyEclipse是JAVA IDE嗎?
答:
不是,MyEclipse是Eclipse的一個(gè)插件。
3.? 【中等題】Eclipse安裝插件的方法。
答:
一般來說,安裝插件都是直接拷貝到Plugins子目錄下,但是這樣有個(gè)缺陷,若插件太多,會使內(nèi)容非常混亂,而且分不清哪個(gè)是系統(tǒng)自帶
?
的,哪個(gè)是以后安裝的。這里提供一個(gè)辦法:
在Eclipse安裝目錄下新建一個(gè)子目錄links,里面新建一個(gè)文件abcd.link,文件名隨便取,文件里的內(nèi)容為path=D:/MyPlugins(目錄可
?
換成自己的),而在Path中指定的目錄,即剛才的D:/MyPlugins目錄下,一定要有一個(gè)eclipse子目錄,在此子目錄下再有features及
?
plugins子目錄(同Eclipse安裝目錄一樣),新插件在安裝時(shí)即可以拷貝到此plugins目錄下,這樣就避免了所有插件都放在一起的缺點(diǎn)。
?
而且links目錄下可以建多個(gè)*.link文件,每個(gè).link文件中的內(nèi)容可有多行path=...,極大的方便了將插件按照功能來進(jìn)行分門別類。
第六章 String
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】字符串的下標(biāo)從 0 開始。
2.? 【基礎(chǔ)題】String的取子串的方法是 substring() , 取某個(gè)位置上字符的方法是 charAt() 。
二、? 選擇題
1.? 【基礎(chǔ)題】比較兩個(gè)字符串引用地址是否相等用那個(gè)方法 ( C )
A.? contact()
B.? charAt()
C.? equals()
D.? substring()
2.? 【基礎(chǔ)題】取出字符串的長度是以下那個(gè)( B )
A.? String.length
B.? String.length()
C.? String.long
D.? String.long()
3.? 【中等題】
String a = “ABCD”;
String b = a.toLowerCase();
b.replace(‘a(chǎn)’, ‘d’);
b.replace(‘b’, ‘c’);
System.out.println(b);
What is the result? ( A )
A.? abcd
B.? ABCD
C.? dccd
D.? dcba
E.? Compilation fails.
F.? An exception is thrown at runtime.
4.? 【中等題】
public class Foo {
public static void main (String [] args) {
StringBuffer a = new StringBuffer (“A”);
StringBuffer b = new StringBuffer (“B”);
operate (a,b);
System.out.println(a + “,” +b);
}
static void operate (StringBuffer x, StringBuffer y) {
x.append(y);
y = x;
}
}
What is the result? ( D )
A.? The code compiles and prints “A,B”.
B.? The code compiles and prints “A,A”.
C.? The code compiles and prints “B,B”.
D.? The code compiles and prints “AB,B”.
E.? The code compiles and prints “AB,AB”.
F.? The code does not compile because “+” cannot be overloaded for StringBuffer.
?
三、? 名詞解釋
四、? 問答題
1.? 【中等題】equals()和==比較兩個(gè)字符串是否相同有什么區(qū)別。
答:
equals()比較的是兩個(gè)字符串的值,==比較的是兩個(gè)字符串的地址。
2.? 【中等題】簡述String 和StringBuffer的區(qū)別。
答:
JAVA平臺提供了兩個(gè)類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類提供了數(shù)值不
?
可改變的字符串。而這個(gè)StringBuffer類提供的字符串進(jìn)行修改。當(dāng)你知道字符數(shù)據(jù)要改變的時(shí)候你就可以使用StringBuffer。典型地,
?
你可以使用StringBuffers來動態(tài)構(gòu)造字符數(shù)據(jù)。
3.? 【中等題】String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
答:
2個(gè),1個(gè)在String池中,一個(gè)在堆內(nèi)存中。
4.? 【基礎(chǔ)題】是否可以繼承String類?
答:
String類是final類故不可以繼承。
第七章 數(shù)組及算法
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】字符串的下標(biāo)從 0 開始,數(shù)組的下標(biāo)從 0 開始。
2.? 【基礎(chǔ)題】int[] c1 = new int[10]; int[] c2 = {1,2,3,4,5,6,7,8,9,0}; 數(shù)組c1中的元素有__10__個(gè);c2中的元素有__10__個(gè)
?
;已初始化賦值的是__C2__;當(dāng)執(zhí)行System.out.println(c2[12])代碼會產(chǎn)生__數(shù)組下標(biāo)越界 錯(cuò)誤.
二、? 選擇題
1.? 【基礎(chǔ)題】以下選項(xiàng)中,請選出數(shù)組聲明錯(cuò)誤的 (D )
A.? String[] seasons = {"winter", "spring", "summer", "fall"};
B.? int[] intArray = new int[5];
C.? String []StrArray = new String("abc","123");
D.? int[] anArray = {3,x,9,2};
2.? 【基礎(chǔ)題】以下關(guān)于數(shù)組的描述有誤的是 ( D )
A.? 整型數(shù)組中的各元素的值必須是整型
B.? 數(shù)組是有序數(shù)據(jù)的集合
C.? 如數(shù)組名為ab,即ab.length可以取得該數(shù)組的長度
D.? 數(shù)組的下標(biāo)從1開始
3.? 【基礎(chǔ)題】請選擇不正確的描述 ( C )
A.? 可以聲明任何類型的數(shù)組──包括原始類型或類類型
B.? 數(shù)組的下標(biāo)從0開始
C.? 數(shù)組中的元素可以自動增長
D.? 用數(shù)組的屬性length可以得到數(shù)組的長度
三、? 名詞解釋
1.? 【基礎(chǔ)題】數(shù)組:數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),用來存儲同一類型值的集合.通過一個(gè)整形下標(biāo)可以訪問數(shù)組中的每一個(gè)值.一旦創(chuàng)建了數(shù)
?
組就不能再改變它的大小了.
四、? 問答題
1.? 【基礎(chǔ)題】數(shù)組有沒有l(wèi)ength()這個(gè)方法? String有沒有l(wèi)ength()這個(gè)方法?
答:
數(shù)組沒有l(wèi)ength()這個(gè)方法,有l(wèi)ength的屬性。
String有l(wèi)ength()這個(gè)方法。
?
第八章 類和對象
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】抽象類的關(guān)鍵字是abstract
2.? 【基礎(chǔ)題】子類的構(gòu)造中顯示調(diào)用父類默認(rèn)構(gòu)造方法的代碼是 super() 父類有參構(gòu)造中顯示調(diào)用自身默認(rèn)構(gòu)造方法的代碼是?
?
this() 。
3.? 【基礎(chǔ)題】final關(guān)鍵字可以修飾在 類 、 屬性 和 方法 前面
二、? 選擇題
1.? 【基礎(chǔ)題】面向?qū)ο蟮奶卣饔?#xff08;ABC)
A.? 繼承
B.? 多態(tài)
C.? 封裝
D.? 抽象
2.? 【基礎(chǔ)題】請選擇下面程序中正確的選項(xiàng) (B C)
A.? int i=0;
if (i) {
System.out.println(“Hi”);
}
B.? boolean b=true;
boolean b2=true;
if(b==b2) {
System.out.println(“So true”);
}
C.? int i=1;
? ?int j=2;
if(i==1|| j==2)
System.out.println(“OK”);
D.? int i=1;
int j=2;
if (i==1 &| j==2)
System.out.println(“OK”);
3.? 【基礎(chǔ)題】方法重載必須的條件為 (A B)
A.? 參數(shù)不同
B.? 參數(shù)類型不同
C.? 返回值不同
D.? 參數(shù)順序不同
三、? 名詞解釋
1.? 【基礎(chǔ)題】重載:如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,則稱為方法的重載
2.? 【基礎(chǔ)題】OOA: 面向?qū)ο蠓治龇椒?#xff08;Object-Oriented Analysis)
3.? 【基礎(chǔ)題】OOD: 面向?qū)ο笤O(shè)計(jì)方法(Object-Oriented design)
4.? 【基礎(chǔ)題】OOP: 面向?qū)ο缶幊谭椒?#xff08;Object-Oriented programming)
四、? 問答題
1.? 【中等題】abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?
答:
都不能
2.? 【中等題】是否可以在靜態(tài)(static)方法內(nèi)部調(diào)用非靜態(tài)(static)方法?
答:
不可以,如果其中包含對象的method();不能保證對象初始化。
3.? 【中等題】面向?qū)ο蟮奶卣饔心男┓矫?/p>
1)? 抽象:
抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問題,而只是選
?
擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過程抽象,二是數(shù)據(jù)抽象。
2)? 繼承:
繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了一種明確表述共性的方法。對象的一個(gè)新類可以從現(xiàn)有的類中派生,
?
這個(gè)過程稱為類繼承。新類繼承了原始類的特性, 新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從
?
它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合特殊的需要。
3)? 封裝:
封裝是把過程和數(shù)據(jù)包圍起來,對數(shù)據(jù)的訪問只能通過已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列
?
完全自治、封裝的對象,這些對象通過一個(gè)受保護(hù)的接口訪問其他對象。
4)? 多態(tài):
多態(tài)是指允許不同類的對象對同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語言具有靈活、抽象、行為共享、代碼
?
共享的優(yōu)勢,很好的解決了應(yīng)用程序函數(shù)同名問題。
?
第九章 構(gòu)造方法
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】構(gòu)造方法 能 ( 能或者不能)被public、private、protected修飾
二、? 選擇題
1.? 【基礎(chǔ)題】下列說法正確的有( C)
A.? 類中的構(gòu)造函數(shù)不可省略
B.? 構(gòu)造函數(shù)必須與class同名,但方法不能與class同名
C.? 構(gòu)造函數(shù)在一個(gè)對象被new時(shí)執(zhí)行
D.? 一個(gè)class只能定義一個(gè)構(gòu)造函數(shù)
2.? 【中等題】下面哪個(gè)關(guān)鍵字可以用在構(gòu)造方法中? ( E)
A.? final
B.? static
C.? synchronized
D.? native
E.? 都不行
(解析:構(gòu)造方法不能被子類繼承,所以用final修飾沒有意義。構(gòu)造方法用于創(chuàng)建一個(gè)新的對象,不能作為類的靜態(tài)方法,所以用static
?
修飾沒有意義。此外,Java語言不支持native或synchronized的構(gòu)造方法。)
三、? 名詞解釋
1.? 【基礎(chǔ)題】constructor: 構(gòu)造器
四、? 問答題
1.? 【基礎(chǔ)題】構(gòu)造方法必須滿足哪些條件?
答:
方法名必須與類名稱完全相匹配;
不要聲明返回類型;
不能被static、final、synchronized、abstract、native修飾。
?
第十章 變量的生命周期、作用域、參數(shù)傳遞
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Java中的靜態(tài)聲明包括 變量 方法 和 塊
2.? 【基礎(chǔ)題】final類可以修飾在 類 , 屬性 和 方法 前面
3.? 【基礎(chǔ)題】Java的訪問控制有四種: private 、 protected、 public 、 默認(rèn)
4.? 【基礎(chǔ)題】封裝一個(gè)類通常將屬性設(shè)為 private ,如果屬性名稱為speed,該屬性的setter方法的應(yīng)該寫成 public void?
?
setSpeed(String speed).。
二、? 選擇題
1.? 【基礎(chǔ)題】下面那個(gè)是用聲明靜態(tài)方法的關(guān)鍵字 (D)
A.? String
B.? switch
C.? final
D.? static
2.? 【基礎(chǔ)題】那個(gè)可以作為方法的參數(shù)傳遞 (A、B、C)
A.? 基本數(shù)據(jù)類型
B.? 數(shù)組
C.? 類實(shí)例化的對象
D.? 常量
三、? 名詞解釋
四、? 問答題
1.? 【中等題】簡述final, finally, finalize的含義
答:
final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時(shí)的其他資源回收
?
,例如關(guān)閉文件等。
2.? 【中等題】當(dāng)類被加載時(shí),請簡述一下類中的靜態(tài)聲明執(zhí)行順序
答:
首先初始化靜態(tài)屬性值
然后執(zhí)行靜態(tài)塊
最后執(zhí)行類加載時(shí)的構(gòu)造函數(shù)
3.? 【中等題】簡述final和finalize的區(qū)別
答:
1)? 如果一個(gè)類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為abstract的,又
?
被聲明為final的。
2)? 將變量或方法聲明為final,可以保證它們在使用中不被改變。
3)? 被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。
4)? 被聲明為final的方法也同樣只能使用,不能重載。 finalize()方法名,不是關(guān)鍵字,它在Object中定義的。Java技術(shù)允許使用?
?
finalize是方法名;在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對象沒有被引用
?
時(shí)對這個(gè)對象調(diào)用的。它是在Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清
?
理工作。finalize()方法是在垃圾收集器刪除對象之前對這個(gè)對象調(diào)用的。
4.? 【中等題】Java語言里,一個(gè)類中靜態(tài)變量與非靜態(tài)變量有什么區(qū)別?
答:
靜態(tài)變量或方法, 就是以static修飾的變量或方法, 如static int count; 它的意義是讓系統(tǒng)分配一個(gè)靜態(tài)空間給這個(gè)變量count, 那么包
?
含這個(gè)變量的類的全部實(shí)例就會共用這個(gè)變量, 任何一個(gè)改變了count都會對其余的實(shí)例產(chǎn)生影響, 它是在文件編繹時(shí)就被初始化的, 比一
?
切其它non-static 變量都要早;
而non-static 變量就是每一個(gè)類實(shí)例都有自己的count, 任何實(shí)例的改變都不會影響到其它的實(shí)例的count(也就是分配了各自的空間), 它
?
們是第一次使用的時(shí)候才被初始化的
5.? 【中等題】當(dāng)一個(gè)對象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對象的屬性,并可返回變化后的結(jié)果,那么這里到底是
?
值傳遞還是引用傳遞?
答:
是值傳遞。Java 編程語言只有值傳遞參數(shù)。當(dāng)一個(gè)對象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是對該對象的引用。對象的內(nèi)容
?
可以在被調(diào)用的方法中改變,但對象的引用是永遠(yuǎn)不會改變的。
第十一章 常用系統(tǒng)類使用、包和訪問控制符
筆試題
一、? 填空題
二、? 選擇題
1.? 【基礎(chǔ)題】下面導(dǎo)入包語法正確的是( B)
A.? import util.Date;
B.? import java.util.*;
C.? package java.util.*;
D.? package java.util.Date
2.? 【基礎(chǔ)題】屬于訪問控制的關(guān)鍵字是( D)
A.? import
B.? final
C.? static
D.? protected
3.? 【基礎(chǔ)題】對成員的訪問控制保護(hù)最強(qiáng)的是( B)
A.? public
B.? private
C.? 默認(rèn)
D.? protected
4.? 【基礎(chǔ)題】Math類哪個(gè)方法是求絕對值( A)
A.? abs
B.? random
C.? exp
D.? print
三、? 名詞解釋
1.? 【基礎(chǔ)題】包:Java中的包(package)指的就是目錄,它是為了更好地管理Java類(Class)和接口(Interface)。包是類的容
?
器,用于分隔類名空間
四、? 問答題
1.? 【中等題】簡述包的用途
答:
1)? 包允許你將類文件組織起來,便于查找和使用合適的類。
2)? 包不僅包含類和接口,還能包含其它包,從而形成有層次的包空間。
3)? 包有助于避免命名沖突。當(dāng)你使用很多類時(shí),確保類和方法名稱的唯一性是非常困難的。
4)? 包能夠形成層次命名空間,縮小了名稱沖突的范圍,易于管理名稱。
2.? 【基礎(chǔ)題】定義包和引入包有什么區(qū)別?請各寫一個(gè)標(biāo)準(zhǔn)語法例子
答:
定義包就是用戶自己定義一個(gè)類文件夾路徑來管理編寫的類,不需要對包中的類進(jìn)行定義說明!而引用一個(gè)包就是把系統(tǒng)或者用戶一個(gè)已
?
經(jīng)定義好的包直接用,其中包括包里面的類!
package user
import java.io.*
3.? 【基礎(chǔ)題】請描述訪問控制符的各自作用域與區(qū)別
訪問控制? ? private成員? ?缺省的成員? ?protected成員 public成員
同一類中
同一包中其他類
不同包中子類
不同包中非子類
答:
訪問控制? ? private成員? ?缺省的成員? ?protected成員 public成員
同一類中? ? √? ??√? ?√? ?√
同一包中其他類 ×? ??√? ?√? ?√
不同包中子類 ×? ? ×? ??√? ?√
不同包中非子類 ×? ?×? ?×? ??√
?
第十二章 繼承
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】 繼承 是一種軟件重用形式,在這種形式中,新類獲得現(xiàn)有類的數(shù)據(jù)和方法,并可增加新的功能。
2.? 【基礎(chǔ)題】派生類構(gòu)造方法可以通過關(guān)鍵字 super 調(diào)用基類構(gòu)造方法
3.? 【基礎(chǔ)題】在Java中繼承的關(guān)鍵字是 extends
二、? 選擇題
1.? 【基礎(chǔ)題】如果任何包中的子類都能訪問超類中的成員,那么應(yīng)使用哪個(gè)關(guān)鍵詞( A)
A.? public
B.? private
C.? protected
D.? final
2.? 【提高題】有關(guān)類Demo,那些描述是正確的 (AC)
public class Demo extends Base{
private int count;
public Demo(){
System.out.println("A Demo object has been created");
}
protected void addOne() {
count++;
}
}
A.? 當(dāng)創(chuàng)建一個(gè)Demo類的實(shí)例對象時(shí),count的值為0。
B.? 當(dāng)創(chuàng)建一個(gè)Demo類的實(shí)例對象時(shí),count的值是不確定的。
C.? 超類對象中可以包含改變count 值的方法。
D.? Demo的子類對象可以訪問count。
三、? 名詞解釋
1.? 【基礎(chǔ)題】uses-a: 依賴
2.? 【基礎(chǔ)題】has-a: 聚合
3.? 【基礎(chǔ)題】is-a: 繼承
四、? 問答題
1.? 【基礎(chǔ)題】通過繼承,子類可以獲得哪些好處?
答:
擴(kuò)展自己,獲得父類的屬性和方法。
獲取父類的數(shù)據(jù)和對數(shù)據(jù)的操作
2.? 【基礎(chǔ)題】簡述方法覆蓋
答:
方法覆蓋是指子類中存在和父類完全同名(方法名相同、返回類型相同、參數(shù)表相同)的方法
3.? 【基礎(chǔ)題】簡述Super關(guān)鍵詞的好處和使用方法、訪問范圍
答:
super關(guān)鍵字用來解決如何直接訪問或初始化從父類繼承來的成員。
在寫子類無參數(shù)構(gòu)造方法時(shí),不用顯式調(diào)用父類無參數(shù)構(gòu)造方法,系統(tǒng)會自動提供 ,但在寫子類帶參數(shù)構(gòu)造方法時(shí),應(yīng)在第一句寫super(
?
參數(shù))來初始化父類成員變量;訪問范圍包括父類屬性、一般方法和構(gòu)造方法。
4.? 【中等題】請描述繼承中的訪問權(quán)限控制
答:
本類訪問權(quán)限
本類方法可訪問本類所有變量
本類對象不可訪問本類private變量
子類訪問權(quán)限
子類方法不可訪問父類private變量
子類對象不可訪問父類private變量
父類對象引用可指向它的任何子類對象,不論是直接還是間接子類,反之不行
?
第十三章 多態(tài)
筆試題
一、? 填空題
二、? 選擇題
1.? 【基礎(chǔ)題】下列哪種說法是正確的(D )
A.? 實(shí)例方法可直接調(diào)用超類的實(shí)例方法
B.? 實(shí)例方法可直接調(diào)用超類的類方法
C.? 實(shí)例方法可直接調(diào)用其他類的實(shí)例方法
D.? 實(shí)例方法可直接調(diào)用本類的類方法對象?
2.? 【中等題】請?jiān)谙骂}XXXXXX中選擇正確的代碼填入(D)
public class Parent{
public Parent(){
System.out.println(“good”);
}
public Parent(int j){
System.out.println(“bad”);
}
}
?
public class Example extends Parent{
public static void main(String[] args){
new Example();
}
?
public Example(){
XXXXXX
}
}
?
A.? this
B.? super
C.? Parent
D.? 什么都不填
3.? 【基礎(chǔ)題】class BaseClass{
private float x=1.0f;
private float getVar(){return x;}
}
class SubClass extends BaseClass{
private float x=2.0f;
//insert code
}
下面哪個(gè)構(gòu)成getVar() 方法的覆蓋 ( B )
A.? float getVar(){
B.? public float getVar(){
C.? public double getVar(){
D.? protected float getVar(){
E.? public float getVar(float f){
4.? 【中等題】下列說法正確的有(C )
A.? 類中的構(gòu)造函數(shù)不可省略
B.? 構(gòu)造函數(shù)必須與class同名,但方法不能與class同名
C.? 構(gòu)造函數(shù)在一個(gè)對象被new時(shí)執(zhí)行
D.? 一個(gè)class只能定義一個(gè)構(gòu)造函數(shù)
三、? 名詞解釋
四、? 問答題
5.? 【基礎(chǔ)題】簡述什么是多態(tài)現(xiàn)象?
答:
是允許將父對象設(shè)置成為和一個(gè)和多個(gè)它的子對象相等的技術(shù),
舉個(gè)例子:從一個(gè)基類中派生,響應(yīng)一個(gè)虛命令,產(chǎn)生不同的結(jié)果
6.? 【中等題】簡述方法覆蓋重載有什么區(qū)別
答:
在繼承中,如果子類的一個(gè)方法與父類中的方法有相同的名字并具有相同數(shù)量和類型的參數(shù),這種情況稱為方法覆蓋
覆蓋是父類與子類之間多態(tài)性的一種表現(xiàn),重載是一個(gè)類中多態(tài)性的一種表現(xiàn)。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),
?
我們說該方法被覆蓋
7.? 【基礎(chǔ)題】final有哪三種用法?每種用法是什么含義?
答:
1)? 當(dāng)你在類中定義變量時(shí),在其前面加上final關(guān)鍵字,那便是說,這個(gè)變量一旦被初始化便不可改變
2)? 將方法聲明為final,那就說明你已經(jīng)知道這個(gè)方法提供的功能已經(jīng)滿足你要求,不需要進(jìn)行擴(kuò)展,并且也不允許任何從此類繼承
?
的類來覆寫這個(gè)方法,但是繼承仍然可以繼承這個(gè)方法,也就是說可以直接使用
3)? 當(dāng)你將final用于類身上時(shí),你就需要仔細(xì)考慮,因?yàn)橐粋€(gè)final類是無法被任何人繼承的,那也就意味著此類在一個(gè)繼承樹中是
?
一個(gè)葉子類,并且此類的設(shè)計(jì)已被認(rèn)為很完美而不需要進(jìn)行修改或擴(kuò)展
?
第十四章 抽象類
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】抽象類的關(guān)鍵字是abstract 。
2.? 【基礎(chǔ)題】抽象類 可以 實(shí)現(xiàn)接口,可以繼承實(shí)體類。
3.? 【基礎(chǔ)題】抽象類不能被實(shí)例化,抽象類可以有構(gòu)造函數(shù) 。
4.? 【基礎(chǔ)題】如果一個(gè)類里有一個(gè)以上的抽象方法,則該類必須聲明為抽象類,該方法也必須聲明為抽象方法 。
二、? 選擇題
三、? 名詞解釋
四、? 問答題
1.? 【中等題】什么是抽象類?
答:
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但
?
不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)
?
實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類。取而代之
?
,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。==========================
2.? 【中等題】抽象類為什么不能實(shí)例化?
答:
抽象類就是類里面含有了抽象的方法。抽象的方法就是沒有實(shí)現(xiàn)的方法
有抽象的方法當(dāng)然不能實(shí)例化,如果它能實(shí)例 那么這個(gè)實(shí)例調(diào)用那個(gè)沒有實(shí)現(xiàn)的抽象類會有什么結(jié)果。所以抽象類不能實(shí)例化
3.? 【中等題】抽象類的方法是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?
答:
抽象方法不可被上述三個(gè)中的任意一個(gè)修飾,抽象方法只能被public或protected修飾,其他修飾符皆不可以。抽象類的一般就是沒有什么
?
具體的實(shí)現(xiàn),主要是讓子類來幫助他實(shí)現(xiàn)。如果在再abstract之前加static,native,synchronized這些修飾符沒有任何意義
4.? 【中等題】Java中的抽象類有沒有對象?
答:
抽象類可以聲明對象,但是不能使用自身的構(gòu)造方法創(chuàng)建對象,但是可以使用子類的構(gòu)造方法進(jìn)行創(chuàng)建。
public abstract class A{}
public class B extends A{}
A a = new B();
?
第十五章 接口
筆試題
一、? 填空題
二、? 選擇題
1.? 【中等題】下列那些選項(xiàng)符合接口的特征(A C D )
A.? 接口中只能包含public、static、final類型的成員變量和public、abstract類型的成員方法
B.? 接口有構(gòu)造方法,可以被實(shí)例化。
C.? 一個(gè)接口不能實(shí)現(xiàn)另一個(gè)接口,但可以繼承多個(gè)其他接口
D.? 接口中的方法默認(rèn)都是public、abstract類型的
2.? 【基礎(chǔ)題】下列哪種定義接口的方式是正確的 ( A )
A.? public interface A{ int a(); }
B.? public interface A implement B{}
C.? interface C { int a; }
D.? private interface D{}
E.? abstract interface E{}
3.? 【提高題】請指出下列代碼錯(cuò)誤的地方 (D)
interface Playable {
void play();
}
interface Bounceable {
void play();
}
?
interface Rollable extends Playable, Bounceable {
Ball ball = new Ball("PingPang"); A
}
class Ball implements Rollable { B
private String name;
public String getName() {
return name;
}
public Ball(String name) {
this.name = name;
}
public void play() { C
ball = new Ball("Football"); D
System.out.println(ball.getName());
}
}
三、? 名詞解釋
四、? 問答題
1.? 【中等題】抽象類和接口有什么區(qū)別?
答:
聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstract class),它用于要創(chuàng)建一個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但
?
不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建abstract 類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的一個(gè)
?
實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract 類的子類為它們父類中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代
?
之,在子類中實(shí)現(xiàn)該方法。知道其行為的其它類可以在類中實(shí)現(xiàn)這些方法。
接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽
?
象的,沒有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。
?
當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類的任何對象上調(diào)用接口的方法
?
。由于有抽象類,它允許使用接口名作為引用變量的類型。通常的動態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,
?
instanceof 運(yùn)算符可以用來決定某對象的類是否實(shí)現(xiàn)了接口。
2.? 【中等題】接口里定義的成員變量都是使用final static修飾的,為什么?
答:
接口就是提供一種統(tǒng)一的”協(xié)議”,而接口中的屬性也屬于“協(xié)議”中的成員。它們是公共的,靜態(tài)的,最終的常量。相當(dāng)于全局常量。
?
如果接口可以定義變量,但是接口中的方法又都是抽象的,在接口中無法通過行為來修改屬性。所以接口不能定義變量。
?
第十六章 異常處理
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】在“異常”類最上層的類叫Throwable,它有兩個(gè)直接的子類:Exception和Error。
二、? 選擇題
2.? 【基礎(chǔ)題】程序員將可能發(fā)生異常的代碼放在(A )塊中,后面緊跟著一個(gè)或多個(gè)(B )塊。
A.? try
B.? catch
C.? try、exception
D.? exception、try
三、? 名詞解釋
四、? 問答題
1.? 【中等題】運(yùn)行時(shí)異常與一般異常有何異同?
答:
異常表示程序運(yùn)行過程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見運(yùn)行錯(cuò)誤。java編譯
?
器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常
2.? 【基礎(chǔ)題】throw和throws關(guān)鍵字有什么區(qū)別?
答:
throws 用于拋出方法層次的異常,并且直接由些方法調(diào)用異常處理類來處理該異常, 所以它常用在方法的后面。throw 用于方法塊里面
?
的代碼,比throws的層次要低,比如try...catch ....語句塊,表示它拋出異常,但它不會處理它,而是由方法塊的throws Exception來
?
調(diào)用異常處理類來處理。throw用在程序中,明確表示這里拋出一個(gè)異常。 throws用在方法聲明的地方,表示這個(gè)方法可能會拋出某異常
?
。throw是拋出一個(gè)具體的異常類,產(chǎn)生一個(gè)異常。throws則是在方法名后標(biāo)出該方法會產(chǎn)生何種異常需要方法的使用者捕獲并處理。
3.? 【中等題】JAVA語言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?
答:
Java通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。在Java中,每個(gè)異常都是一個(gè)對象,它是
?
Throwable類或其它子類的實(shí)例。當(dāng)一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對象,該對象中包含有異常信息,調(diào)用這個(gè)對象的方法可以捕獲到
?
這個(gè)異常并進(jìn)行處理。Java的異常處理是通過5個(gè)關(guān)鍵詞來實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來執(zhí)行一
?
段程序,如果出現(xiàn)異常,系統(tǒng)會拋出(throws)一個(gè)異常,這時(shí)候你可以通過它的類型來捕捉(catch)它。
用try來指定一塊預(yù)防所有"異常"的程序。緊跟在try程序后面,應(yīng)包含一個(gè)catch子句來指定你想要捕捉的"異常"的類型。
throw語句用來明確地拋出一個(gè)"異常"。
throws用來標(biāo)明一個(gè)成員函數(shù)可能拋出的各種"異常"。
finally為確保一段代碼不管發(fā)生什么"異常"都被執(zhí)行一段代碼。
可以在一個(gè)成員函數(shù)調(diào)用的外面寫一個(gè)try語句,在這個(gè)成員函數(shù)內(nèi)部寫另一個(gè)try語句保護(hù)其他代碼。每當(dāng)遇到一個(gè)try語句,"異常"的框
?
架就放到堆棧上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種"異常"進(jìn)行處理,堆棧就會展開,直到遇到有處理這種"
?
異常"的try語句。
4.? 【中等題】請說出Java中的異常處理機(jī)制的簡單原理和應(yīng)用?
答:
當(dāng)JAVA程序違反了JAVA的語義規(guī)則時(shí),JAVA虛擬機(jī)就會將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語義規(guī)則包括2種情況。一種是JAVA類庫內(nèi)置的
?
語義檢查。例如數(shù)組下標(biāo)越界,會引發(fā)IndexOutOfBoundsException;訪問null的對象時(shí)會引發(fā)NullPointerException。另一種情況就是JAVA
?
允許程序員擴(kuò)展這種語義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是
?
java.lang.Thowable的子類。
?
第十七章 集合框架
筆試題
一、? 填空題
二、? 選擇題
1.? 【基礎(chǔ)題】下面哪個(gè)類是實(shí)現(xiàn)的Set接口 ( C )
A.? Vector
B.? LinkedList
C.? HashSet
D.? Hashtable
2.? 【基礎(chǔ)題】下列哪個(gè)集合可以存放重復(fù)數(shù)據(jù) ( A B)
A.? Collection
B.? List
C.? Map
D.? Set
3.? 【基礎(chǔ)題】List中能存放一個(gè)NULL值嗎? (A )
A.? 可以
B.? 可以,不過僅僅當(dāng)List是一個(gè)有序的集合的時(shí)候
C.? 可以,當(dāng)List為空的時(shí)候
D.? 不可以
4.? 【中等題】下列程序運(yùn)行結(jié)果是 ( C )
Class Question{
public static void main(String args[]){
TreeMap map = new TreeMap();
map.put(“one”,”1”);
map.put(“two”,”2”);
map.put(“three”,”3”);
displayMap(map);
}
?
static void displayMap(TreeMap map){
Collection c = map.entrySet();
Iterator i = c.iterator();
while(i.hasNext()){
Object o = i.next();
System.out.print(o.toString());
}
}
}
A.? onetwothree
B.? 123
C.? ont = 1 three = 3 two=2
D.? one three two
5.? 【提高題】下列哪個(gè)類實(shí)現(xiàn)了Collection接口 (B D)
A.? Dictionary
B.? List
C.? Map
D.? Set
三、? 名詞解釋
四、? 問答題
1.? 【中等題】請說出 ArrayList和Vector的區(qū)別
答:
主要從二方面來說.
同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的
二.數(shù)據(jù)增長:當(dāng)需要增長時(shí),Vector 默認(rèn)增長為原來一培,而ArrayList卻是原來的一半
2.? 【中等題】請說出HashMap和Hashtable的區(qū)別
答:HashMap與HashTable主要從三方面來說。
一.歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進(jìn)的Map接口的一個(gè)實(shí)現(xiàn)
二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的
三.值:只有HashMap可以讓你將空值作為一個(gè)表的條目的key或value
3.? 【基礎(chǔ)題】Collection 和 Collections的區(qū)別
答:
Collections是個(gè)java.util下的類,它包含有各種有關(guān)集合操作的靜態(tài)方法。
Collection是個(gè)java.util下的接口,它是各種集合結(jié)構(gòu)的父接口
?
第十八章 輸入輸出
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】File對象的isFile()方法作用是判斷是否是文件,getAbsolutePath() 方法作用是獲取文件或目錄的絕對路徑。
2.? 【基礎(chǔ)題】BufferedReader和BufferedWriter以字符流的方式讀寫文本文件,且效率更高。
3.? 【基礎(chǔ)題】FileInputStream和FileOutputStream以字節(jié)流的方式讀寫文本文件。
二、? 選擇題
1.? 【基礎(chǔ)題】下列哪個(gè)類是實(shí)體類(BC )
A.? InputStream
B.? PrintStream
C.? Socket
D.? Reader
E.? DataInput
2.? 【提高題】請選擇下列程序的運(yùn)行結(jié)果(A)
public class TestIOapp{
public static void main(String [] args) throws IOException{
StringReader stingin = new StringReader("test");
LineNumberReader in = new LineNumberReader(stingin);
PrintWriter out = new PrintWriter(System.out);
out.println(in.readLine());
out.flush();
}
}
A.? test
B.? test:1
C.? 1:test
D.? 1 test
3.? 【提高題】請選擇下列程序的運(yùn)行結(jié)果 ( B )
public class TestIOapp{
public static void main(String [] args) throws IOException{
RandomAccessFile file = new RandomAccessFile("test.txt","rw");
file.writeBoolean(true);
file.writeInt(123456);
file.writeInt(7890);
file.writeLong(1000000);
file.writeInt(777);
file.writeFloat(.0001f);
file.seek(5);
System.out.println(file.readInt());
}
}
A.? 123456
B.? 7890
C.? 1000000
D.? 777
E.? 0001
三、? 名詞解釋
四、? 問答題
1.? 【中等題】請說出java.io.reader和java.io.inputstream的區(qū)別
答:
java.io.Reader 和 java.io.InputStream 組成了 Java 輸入類。Reader 用于讀入16位字符,也就是 Unicode 編碼的字符;而?
?
InputStream 用于讀入 ASCII 字符和二進(jìn)制數(shù)據(jù)。
2.? 【中等題】java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
答:
字節(jié)流,字符流。字節(jié)流繼承于InputStream OutputStream,字符流繼承于InputStreamReader OutputStreamWriter。在java.io包中還有
?
許多其他的流,主要是為了提高性能和使用方便。
3.? 【中等題】請簡述什么是流?
答:
流是指一連串流動的字符,是以先進(jìn)先出的方式發(fā)送和接收數(shù)據(jù)的通道, 流分為輸入流和輸出流,輸入輸出流是相對于計(jì)算機(jī)內(nèi)存來說的
?
,如果數(shù)據(jù)輸入到內(nèi)存,則稱為輸入流,如果從內(nèi)存中流出則稱為輸出流
?
第十九章 JDBC
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】 ODBC:Open Database Connectivity 開放數(shù)據(jù)庫互連
2.? 【基礎(chǔ)題】 JDBC:Java DataBase Connectivity Java數(shù)據(jù)庫連接
3.? 【基礎(chǔ)題】 DBMS:Data Base Management System數(shù)據(jù)庫管理系統(tǒng)
4.? 【基礎(chǔ)題】 URL:Uniform Resource Locator 統(tǒng)一資源定位器
URL組成:協(xié)議名和資源名
protocol://resourceName
四、? 問答題
1.? 【中等題】Class.forName()的作用?
答:
調(diào)用該方法返回一個(gè)以字符串指定類名的類的對象。此對象用來與特定的數(shù)據(jù)庫連接。
2.? 【中等題】簡述Statement和PreparedStatement 的區(qū)別?
答:
無論多少次地使用同一個(gè)SQL命令,PreparedStatement都只對它解析和編譯一次。當(dāng)使用Statement對象時(shí),每次執(zhí)行一個(gè)SQL命令時(shí),都
?
會對它進(jìn)行解析和編譯,使用PreparedStatement對象比使用Statement對象的速度更快。
3.? 【中等題】在connection類中提供了3個(gè)控制事務(wù)的方法,分別是:
答:
setAutoCommit(boolean bln)
commit():提交事務(wù)
rollback():撤銷事務(wù)
4.? 【提高題】請簡述元數(shù)據(jù)。
答:
在SQL中,描述數(shù)據(jù)庫或其組成部分的數(shù)據(jù)稱為元數(shù)據(jù)(區(qū)別于那些存在數(shù)據(jù)庫中的實(shí)際數(shù)據(jù))。我們可以得到三類元數(shù)據(jù):關(guān)于數(shù)據(jù)庫的元
?
數(shù)據(jù)、關(guān)于結(jié)果集的元數(shù)據(jù)以及關(guān)于預(yù)備語句參數(shù)的元數(shù)據(jù)。
5.? 【提高題】 ResultSet 類中的Cursor 方式主要有
ResultSet.TYPE_FORWARD_ONLY,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.TYPE_SCROLL_INSENSITIVE等方式,你能詳細(xì)說明嗎。
答:
ResultSet.TYPE_FORWARD_ONLY(為缺省設(shè)置):游標(biāo)只能前進(jìn)不能后退,也就是只能從第一個(gè)一直移動到最后一個(gè)。
ResultSet.TYPE_SCROLL_SENSITIVE :允許游標(biāo)前進(jìn)或后退并感應(yīng)到其它ResultSet 的光標(biāo)的移動情形。
ResultSet.TYPE_SCROLL_INSENSITIVE :允許游標(biāo)前進(jìn)或后退并不能感應(yīng)到其它ResultSet 的光標(biāo)的移動情形。
?
第二十章 XML
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】XML 是一種 標(biāo)記 語言。
2.? 【基礎(chǔ)題】XML 的設(shè)計(jì)宗旨是 傳輸數(shù)據(jù) ,而非顯示數(shù)據(jù)。
3.? 【基礎(chǔ)題】XML 文檔必須有一個(gè)元素是所有其他元素的父元素。該元素稱為 根元素 。
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】XML:EXtensible Markup Language 可擴(kuò)展標(biāo)記語言
2.? 【基礎(chǔ)題】DTD:Document Type Definition 文檔類型定義
3.? 【基礎(chǔ)題】W3C:World Wide Web Consortium 萬維網(wǎng)聯(lián)盟
4.? 【基礎(chǔ)題】CSS:Cascading Style Sheets 層疊樣式單
5.? 【基礎(chǔ)題】XSL:EXtensible Stylesheet Language可擴(kuò)展樣式單語言
四、? 問答題
1.? 【中等題】XML文檔定義有幾種形式?它們之間有何本質(zhì)區(qū)別?
答:
1)? 兩種形式 dtd schema。
2)? 本質(zhì)區(qū)別:schema本身是xml的,可以被XML解析器解析(這也是從DTD上發(fā)展schema的根本目的)。
2.? 【中等題】格式良好的XML文檔的標(biāo)準(zhǔn)是必須遵守XML 1.0規(guī)范中的語法規(guī)則,應(yīng)滿足的條件主要包括:
答:
文檔應(yīng)包含一個(gè)或多個(gè)元素
文檔中只有一個(gè)根元素,該元素?zé)o任何部分出現(xiàn)在其它元素中
元素必須正確關(guān)閉
元素不得交叉
屬性值必須加引號
?
3.? 【中等題】XML 與 HTML 的主要差異(難度:中)
答:
XML 不是 HTML 的替代。XML 和 HTML 為不同的目的而設(shè)計(jì):
XML 被設(shè)計(jì)為傳輸和存儲數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的內(nèi)容。
HTML 被設(shè)計(jì)用來顯示數(shù)據(jù),其焦點(diǎn)是數(shù)據(jù)的外觀。
HTML 旨在顯示信息,而 XML 旨在傳輸信息。
?
第二十一章 Java+XML應(yīng)用
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】 DOM:Document Object Model文檔對象模型
2.? 【基礎(chǔ)題】 SAX:Simple API for XML 文檔邊讀入邊解析
四、? 問答題
1. 【提高題】請描述出DOM和SAX解析XML文檔各有什么有缺點(diǎn)?
答:
DOM:處理大型文件時(shí)其性能下降的非常厲害。這個(gè)問題是由DOM的樹結(jié)構(gòu)所造成的,這種結(jié)構(gòu)占用的內(nèi)存較多,而且DOM必須在解析文件之
?
前把整個(gè)文檔裝入內(nèi)存,適合對XML的隨機(jī)訪問。
SAX:是事件驅(qū)動型的XML解析方式。它順序讀取XML文件,不需要一次全部裝載整個(gè)文件。當(dāng)遇到像文件開頭,文檔結(jié)束,或者標(biāo)簽開頭與
?
標(biāo)簽結(jié)束時(shí),它會觸發(fā)一個(gè)事件,用戶通過在其回調(diào)事件中寫入處理代碼來處理XML文件,適合對XML的順序訪問。
2. 【中等題】你在項(xiàng)目中用到了xml技術(shù)的哪些方面?舉例說明
答:
用到了數(shù)據(jù)存儲,信息配置兩方面。
數(shù)據(jù)存儲:可以將數(shù)據(jù)庫中的數(shù)據(jù)保存成一個(gè)xml文件以方便網(wǎng)絡(luò)傳輸.
信息配置:struts-config.xml是struts框架的核心配置文件, 該文件由struts應(yīng)用程序啟動時(shí)自動加載, struts會從中讀取ActionForm,?
?
Action等相關(guān)配置
?
第二十二章 多線程
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
四、? 問答題
1.? 【提高題】請談?wù)勥M(jìn)程和線程有什么區(qū)別?
答:
進(jìn)程一般是對操作系統(tǒng)而言的。例如,你打開word編輯文檔,同時(shí)打開outlook收取郵件。我們可以說這時(shí)系統(tǒng)內(nèi)有兩個(gè)進(jìn)程在運(yùn)行。即多
?
個(gè)程序幾乎在同一時(shí)間執(zhí)行多個(gè)任務(wù)。
線程一般是對某一程序而言的。如上例,你打開outlook收新郵件的同時(shí),還可以看已下載的郵件,這兩件事沒有相互干擾,那么我們說此
?
時(shí)這一程序中至少有兩個(gè)線程在運(yùn)行。即每一個(gè)程序在同一時(shí)間內(nèi)執(zhí)行多個(gè)任務(wù)。
2.? 【中等題】多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?
答:
多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify
3.? 【中等題】sleep() 和 wait() 有什么區(qū)別?
答:
sleep()方法是使線程停止一段時(shí)間的方法。在sleep 時(shí)間間隔期滿后,線程不一定立即恢復(fù)執(zhí)行。這是因?yàn)樵谀莻€(gè)時(shí)刻,其它線程可能正
?
在運(yùn)行而且沒有被調(diào)度為放棄執(zhí)行,除非(a)“醒來”的線程具有更高的優(yōu)先級 (b)正在運(yùn)行的線程因?yàn)槠渌蚨枞?/p>
wait()是線程交互時(shí),如果線程對一個(gè)同步對象x 發(fā)出一個(gè)wait()調(diào)用,該線程會暫停執(zhí)行,被調(diào)對象進(jìn)入等待狀態(tài),直到被喚醒或等待
?
時(shí)間到。
4.? 【中等題】啟動一個(gè)線程是用run()還是start()?
答:
啟動一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就
?
會立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來停止一個(gè)線程。
5.? 【中等題】請說出你所知道的線程同步的方法。
答:
wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對象的lock。
sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉? ?InterruptedException異常。
notify():喚醒一個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒
?
哪個(gè)線程,而且不是按優(yōu)先級。
Allnotity():喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對象的鎖,而是讓它們競爭。
6.? 【提高題】請描述出線程存在的幾種狀態(tài)?
答:
1)? 線程可以正在運(yùn)行(running)。只要獲得CPU時(shí)間它就可以運(yùn)行。
2)? 運(yùn)行的線程可以被掛起(suspend),并臨時(shí)中斷它的執(zhí)行。
3)? 一個(gè)掛起的線程可以被恢復(fù)(resume,允許它從停止的地方繼續(xù)運(yùn)行。
4)? 一個(gè)線程可以在等待資源時(shí)被阻塞(block)。
5)? 在任何時(shí)候,線程可以終止(terminate),這立即中斷了它的運(yùn)行。一旦終止,線程不能被恢復(fù)。
7.? 【提高題】當(dāng)一個(gè)線程進(jìn)入一個(gè)對象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對象的其它方法?
答:
不能,一個(gè)對象的一個(gè)synchronized方法只能由一個(gè)線程訪問。
?
第二十三章 網(wǎng)絡(luò)編程
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
1.? 【中等題】TCP:Transmission Control Protocol傳輸控制協(xié)議
是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過TCP協(xié)議傳輸,得到的是一個(gè)順序的無差錯(cuò)的數(shù)據(jù)流。發(fā)送方和接收方的成對的兩個(gè)socket之
?
間必須建立連接,以便在TCP協(xié)議的基礎(chǔ)上進(jìn)行通信,當(dāng)一個(gè)socket(通常都是server socket)等待建立連接時(shí),另一個(gè)socket可以要求
?
進(jìn)行連接,一旦這兩個(gè)socket連接起來,它們就可以進(jìn)行雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送或接收操作。
2.? 【中等題】UDP:User Datagram Protocol用戶數(shù)據(jù)報(bào)協(xié)議
UDP是無連接通信協(xié)議,UDP不保證可靠數(shù)據(jù)的傳輸,但能夠向若干個(gè)目標(biāo)發(fā)送數(shù)據(jù),接收發(fā)自若干個(gè)源的數(shù)據(jù)。簡單的說,如果一個(gè)主機(jī)
?
向另外一臺主機(jī)發(fā)送數(shù)據(jù),這一數(shù)據(jù)就會立即發(fā)出,而不管另外一臺主機(jī)是否已準(zhǔn)備接收數(shù)據(jù)。如果另外一臺主機(jī)收到了數(shù)據(jù),它不會確
?
認(rèn)收到與否。
3.? 【基礎(chǔ)題】IP:Internet Protocol互聯(lián)網(wǎng)協(xié)議
4.? 【基礎(chǔ)題】LAN:local area network局域網(wǎng)
5.? 【基礎(chǔ)題】WAN:wide area network廣域網(wǎng)
四、? 問答題
1. 【提高題】什么是網(wǎng)絡(luò)通信協(xié)議
答:
計(jì)算機(jī)網(wǎng)絡(luò)中實(shí)現(xiàn)通信必須有一些約定即通信協(xié)議,對速率、傳輸代碼、代碼結(jié)構(gòu)、傳輸控制步驟、出錯(cuò)控制等制定標(biāo)準(zhǔn)。
2. 【提高題】 網(wǎng)絡(luò)通信接口
答:
為了使兩個(gè)結(jié)點(diǎn)之間能進(jìn)行對話,必須在它們之間建立通信工具(即接口),使彼此之間 能進(jìn)行信息交換。接口包括兩部分:
硬件裝置:實(shí)現(xiàn)結(jié)點(diǎn)之間的信息傳送
軟件裝置:規(guī)定雙方進(jìn)行通信的約定協(xié)議
?
3.? 【提高題】你能說出TCP/IP的7層協(xié)議嗎?
答:
應(yīng)用層、表示層、會話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層
?
第二十四章 J2EE和Servlet概述
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】我們常用的Servlet的版本是 2.4 。
2.? 【基礎(chǔ)題】Tomcat的核心配置文件是 server.xml。
3.? 【基礎(chǔ)題】Tomcat中發(fā)布一個(gè)WEB應(yīng)用時(shí),通常把Web應(yīng)用發(fā)布在 webapps 目錄下。
4.? 【基礎(chǔ)題】Tomcat將Jsp生成的Servlet源文件和和字節(jié)碼文件放在work 目錄下。
5.? 【基礎(chǔ)題】Tomcat的內(nèi)置編碼就是使用了 ISO-8859-1。
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】Java EE:Java Platform Enterprise Edition
2.? 【基礎(chǔ)題】HTTP:Hypertext Transfer Protocol
四、? 問答題
1.? 【提高題】C/S和B/S之比較
答:
C/S和B/S是當(dāng)今世界開發(fā)模式技術(shù)架構(gòu)的兩大主流技術(shù)。C/S是美國Borland公司最早研發(fā),B/S是美國微軟公司研發(fā)。
1) C/S架構(gòu)軟件的優(yōu)勢與劣勢
a)? 應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較輕。
b)? 數(shù)據(jù)的儲存管理功能較為透明。
c)? C/S架構(gòu)的劣勢是高昂的維護(hù)成本且投資大。
d)? 傳統(tǒng)的C/S結(jié)構(gòu)的軟件需要針對不同的操作系統(tǒng)系統(tǒng)開發(fā)不同版本的軟件,由于產(chǎn)品的更新?lián)Q代十分快,代價(jià)高和低效率已經(jīng)不適
?
應(yīng)工作需要。
2) B/S架構(gòu)軟件的優(yōu)勢與劣勢
a)? 維護(hù)和升級方式簡單。
b)? 成本降低,選擇更多。
c)? 應(yīng)用服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷較重。
2.? 【提高題】J2EE規(guī)范了服務(wù)器端應(yīng)用系統(tǒng)的開發(fā)框架,其中最核心的思想就是分層和組件的思想,那么分層是哪幾層,分別有哪
?
些組建?
答:
分層:共分為四層,數(shù)據(jù)層,業(yè)務(wù)層,表述層,客戶層。
組件:三大類,即業(yè)務(wù)邏輯組件(EJB/JavaBean組件)、Web組件(JSP和Servlet組件)和客戶端組件(應(yīng)用程序客戶端組件或Applet組件)
?
。
3.? 【提高題】J2EE是技術(shù)還是平臺還是框架?
答:
J2EE本身是一個(gè)標(biāo)準(zhǔn),一個(gè)為企業(yè)分布式應(yīng)用的開發(fā)提供的標(biāo)準(zhǔn)平臺。J2EE也是一個(gè)框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)
?
。
4.? 【提高題】JAVA13種核心技術(shù),你能說出來嗎?
答:
J2EE基礎(chǔ)技術(shù)XML、RMI、JNDI 、JMS
J2EE主要技術(shù)JDBC、Servlet、JSP、EJB
J2EE其它技術(shù)JTA、JTS、Java IDL、Java Mail、JAF
5.? 【基礎(chǔ)題】你能說出哪些J2EE開發(fā)工具和服務(wù)器
答:
開發(fā)工具:
Borland公司的JBuilder
Sun公司的SunJavaStudio
開源的IDE Eclipse
服務(wù)器:
Apache的Tomcat
IBM的WebSphere
BEA的WebLogic
6.? 【中等題】說一說Servlet的生命周期?
答:servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理請求以及服務(wù)結(jié)束。這個(gè)生存期由javax.servlet.Servlet接口的
?
init,service和destroy方法表達(dá)。
7.? 【中等題】什么是Web容器?
答:實(shí)現(xiàn)J2EE規(guī)范中web協(xié)議的應(yīng)用.該協(xié)議定義了web程序的運(yùn)行時(shí)環(huán)境,包括:并發(fā)性,安全性,生命周期管理等等.
?
第二十五章 Servlet
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
四、? 問答題
1.? 【中等題】什么是Web容器?
答:
實(shí)現(xiàn)J2EE規(guī)范中web協(xié)議的應(yīng)用.該協(xié)議定義了web程序的運(yùn)行時(shí)環(huán)境,包括: 并發(fā)性,安全性,生命周期管理等等.
2.? 【中等題】說一說Servlet的生命周期?
答:
servlet有良好的生存期的定義,包括加載和實(shí)例化、初始化、處理請求以及服務(wù)結(jié)束。這個(gè)生存期由javax.servlet.Servlet接口的
?
init,service和destroy方法表達(dá)。
3.? 【中等題】 JAVA SERVLET API中forward() 與redirect()的區(qū)別?(中等)
答:
前者僅是容器中控制權(quán)的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的? 地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地
?
址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時(shí),盡量
?
使用forward()方法,并且,這樣也有助于隱藏實(shí)際的? ? 鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個(gè)其它服務(wù)器上的資源,則必須使用
?
sendRedirect()方法。
4.? 【基礎(chǔ)題】 寫出Servlet類的基本結(jié)構(gòu)?
答:
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
}
}
5.? 【基礎(chǔ)題】什么情況下調(diào)用doGet()和doPost()?
答:Jsp頁面中的form標(biāo)簽里的method屬性為get時(shí)調(diào)用doGet(),為post時(shí)調(diào)用doPost()。
?
第二十六章 JSP
筆試題
一、? 填空題
二、? 選擇題
1.? 【基礎(chǔ)題】在Jsp指令中errorPage(“url”)的意思是(C)
A.? 將本頁面設(shè)置為錯(cuò)誤的頁面
B.? 將本頁面中所有的錯(cuò)誤的信息保存到url變量中
C.? 為本頁面指定一個(gè)錯(cuò)誤頁面
D.? 沒有具體的含義
?
三、? 名詞解釋
1.? 【基礎(chǔ)題】JSP: Java Server Page
2.? 【基礎(chǔ)題】JS: Java Script
四、? 問答題
1.? 【中等題】 JSP和Servlet有哪些相同點(diǎn)和不同點(diǎn),他們之間的聯(lián)系是什么?(中等)
答:
JSP是Servlet技術(shù)的擴(kuò)展,本質(zhì)上是Servlet的簡易方式,更強(qiáng)調(diào)應(yīng)用的外表表達(dá)。JSP編譯后是"類servlet"。Servlet和JSP最主要的不同
?
點(diǎn)在于,Servlet的應(yīng)用邏輯是在Java文件中,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名
?
為.jsp的文件。JSP側(cè)重于視圖,Servlet? ?主要用于控制邏輯。
2.? 【中等題】 jsp的四種范圍是什么?(中等)
答:
pageContext否是代表與一個(gè)頁面相關(guān)的對象和屬性。一個(gè)頁面由一個(gè)編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是
?
沒有 include 動作)表示。這既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機(jī)發(fā)出的一個(gè)請求相關(guān)的對象和屬性。一個(gè)請求可能跨越多個(gè)頁面,涉及多個(gè) Web 組件(由于 forward 指
?
令和 include 動作的關(guān) 系)
session是是代表與用于某個(gè) Web 客戶機(jī)的一個(gè)用戶體驗(yàn)相關(guān)的對象和屬性。一個(gè) Web 會話可以也經(jīng)常會跨越多個(gè)客戶機(jī)請求
application是是代表與整個(gè) Web 應(yīng)用程序相關(guān)的對象和屬性。這實(shí)質(zhì)上是跨越整? ? 個(gè) Web 應(yīng)用程序,包括多個(gè)頁面、請求和會話
?
的一個(gè)全局作用域
3.? 【中等題】 JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?(中等)
答:
動態(tài)INCLUDE用jsp:include動作實(shí)現(xiàn) 它總是會檢查所含文件中的變化,適合用于包含動態(tài)頁面,并且可 以帶參數(shù)。靜態(tài)INCLUDE用
?
include偽碼實(shí)現(xiàn),定不會檢查所含文件的變化,適用 于包含靜態(tài)頁面<%@ include file="included.htm" %>
4.? 【中等題】 jsp有哪些動作?作用分別是什么?(中等)
答:
JSP共有以下6種基本動作
jsp:include:在頁面被請求的時(shí)候引入一個(gè)文件。
jsp:useBean:尋找或者實(shí)例化一個(gè)JavaBean。
jsp:setProperty:設(shè)置JavaBean的屬性。
jsp:getProperty:輸出某個(gè)JavaBean的屬性。
jsp:forward:把請求轉(zhuǎn)到一個(gè)新的頁面。
jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標(biāo)記
5.? jsp如何使用注釋?
答:
1) <%-- --%> 2); //; 3)/** **/; 4);
6.? 【中等題】 get和post的區(qū)別?(難)
答:
Form中的get和post方法,在數(shù)據(jù)傳輸過程中分別對應(yīng)了HTTP協(xié)議中的GET和POST方法。二者主要區(qū)別如下:
1)? Get是用來從服務(wù)器上獲得數(shù)據(jù),而Post是用來向服務(wù)器上傳遞數(shù)據(jù)。
2)? Get將表單中數(shù)據(jù)的按照variable=value的形式,添加到action所指向的URL? 后面,并且兩者使用“?”連接,而各個(gè)變量之
?
間使用“&”連接;Post是將表單? ?中的數(shù)據(jù)放在form的數(shù)據(jù)體中,按照變量和值相對應(yīng)的方式,傳遞到action所指 向URL。
3)? Get是不安全的,因?yàn)樵趥鬏斶^程,數(shù)據(jù)被放在請求的URL中,而如今現(xiàn)有的很多服務(wù)器、代理服務(wù)器或者用戶代理都會將請求URL
?
記錄到日志文件中,然后放在某個(gè)地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數(shù)
?
據(jù),一些系統(tǒng)內(nèi)部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
4)? Get傳輸?shù)臄?shù)據(jù)量小,這主要是因?yàn)槭躑RL長度限制;而Post可以傳輸大量的數(shù)據(jù),所以在上傳文件只能使用Post(當(dāng)然還有一個(gè)
?
原因,將在后面的提到)。
5)? Get限制Form表單的數(shù)據(jù)集的值必須為ASCII字符;而Post支持整個(gè)ISO10646字符集。
6)? Get是Form的默認(rèn)方法。
?
第二十七章 JSP內(nèi)置對象
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】 JSP:Java Server Pages,JSP是在Servlet技術(shù)上發(fā)展起來的,已經(jīng)成為J2EE技術(shù)應(yīng)用中非常重要的一個(gè)組成部分。
?
JSP是結(jié)合HTML、Java代碼、JavaScript代碼等內(nèi)容一起處理信息的動態(tài)網(wǎng)頁技術(shù),在B/S開發(fā)架構(gòu)中主要用于處理客戶端的信息。(簡單
?
)
四、? 問答題
1.? 【中等題】 Request對象的主要方法有哪些? (中等)
答:
setAttribute(String name,Object):設(shè)置名字為name的request的參數(shù)值
getAttribute(String name):返回由name指定的屬性值
getAttributeNames():返回request對象所有屬性的名字集合,結(jié)果是一個(gè)枚
舉的實(shí)例
getCookies():返回客戶端的所有Cookie對象,結(jié)果是一個(gè)Cookie數(shù)組
getCharacterEncoding():返回請求中的字符編碼方式 getContentLength():返回請求的Body的長度
getHeader(String name):獲得HTTP協(xié)議定義的文件頭信息
getHeaders(String name):返回指定名字的request Header的所有值,結(jié)果
是一個(gè)枚舉的實(shí)例
getHeaderNames():返回所以request Header的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getInputStream():返回請求的輸入流,用于獲得請求中的數(shù)據(jù)
&&&getMethod():獲得客戶端向服務(wù)器端傳送數(shù)據(jù)的方法
getParameter(String name):獲得客戶端傳送給服務(wù)器端的有name指定的參數(shù)值
getParameterNames():獲得客戶端傳送給服務(wù)器端的所有參數(shù)的名字,結(jié)果是一個(gè)枚舉的實(shí)例
getParameterValues(String name):獲得有name指定的參數(shù)的所有值
getProtocol():獲取客戶端向服務(wù)器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱
getQueryString():獲得查詢字符串
getRequestURI():獲取發(fā)出請求字符串的客戶端地址
getRemoteAddr():獲取客戶端的IP地址
getRemoteHost():獲取客戶端的名字
getSession([Boolean create]):返回和請求相關(guān)Session
getServerName():獲取服務(wù)器的名字
getServletPath():獲取客戶端所請求的腳本文件的路徑
getServerPort():獲取服務(wù)器的端口號
removeAttribute(String name):刪除請求中的一個(gè)屬性
2.? 【基礎(chǔ)題】 JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?(簡單)
答:
動態(tài)INCLUDE用jsp:include動作實(shí)現(xiàn)
它總是會檢查所含文件中的變化,適合用于包含動態(tài)頁面,并且可以帶參數(shù)
靜態(tài)INCLUDE用include偽碼實(shí)現(xiàn),定不會檢查所含文件的變化,適用于包含靜態(tài)? ? 頁面
3.? 【基礎(chǔ)題】 JSP有哪些內(nèi)置對象?作用和分別是什么?
答:
JSP共有以下9種基本內(nèi)置組件(可與ASP的6種內(nèi)部組件相對應(yīng)):
? ?request 用戶端請求,此請求會包含來自GET/POST請求的參數(shù)
response 網(wǎng)頁傳回用戶端的回應(yīng)
pageContext 網(wǎng)頁的屬性是在這里管理
session 與請求有關(guān)的會話期
application servlet 正在執(zhí)行的內(nèi)容
out 用來傳送回應(yīng)的輸出
config servlet的構(gòu)架部件
page JSP網(wǎng)頁本身
exception 針對錯(cuò)誤網(wǎng)頁,未捕捉的異常
.
第二十八章 EL表達(dá)式和JSTL標(biāo)記庫
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】 EL 表達(dá)式的格式是:用? 美元符號($) 定界,內(nèi)容包括在 花括號({}) 中。
2.? 【基礎(chǔ)題】 JSTL由四個(gè)定制標(biāo)記庫 core 、 format 、 xml 、 sql 和一個(gè) 函數(shù)庫 組成。
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】 EL表達(dá)式:Expression Language 表達(dá)式語言,它是為了便于存取數(shù)據(jù)而定義的一種語言,JSP2.0之后才成為一種標(biāo)
?
準(zhǔn)。
2.? 【基礎(chǔ)題】 JSTL:JSP Standard Tag Library JSP標(biāo)準(zhǔn)標(biāo)簽庫
四、? 問答題
1.? 【中等題】JSTL與傳統(tǒng)JSP開發(fā)手段的區(qū)別和優(yōu)勢是什么?
答:
傳統(tǒng)的JSP開發(fā)會使用腳本元素在頁面中嵌入程序源代碼(通常是 Java 代碼),? ? 對于這樣的 JSP 頁面,其軟件維護(hù)任務(wù)的復(fù)雜度大大增
?
加了。
JSTL 使 JSP 作者可以減少對編制腳本元素的需求,甚至可以不需要它們,并避? ? 免了相關(guān)的維護(hù)成本。
2.? 【中等題】EL表達(dá)式的隱含對象及其作用(至少說出4個(gè))?
答:
1)? applicationScope ? 應(yīng)用程序范圍內(nèi)的scoped變量組成的集合
2)? cookie ? ? 所有cookie組成的集合
3)? header HTTP請求頭部,字符串
4)? headerValues ? ?HTTP請求頭部,字符串集合
5)? initParam 全部應(yīng)用程序參數(shù)名組成的集合
6)? pageContext ? ?當(dāng)前頁面的javax.servlet.jsp.PageContext對象
7)? pageScope ? 頁面范圍內(nèi)所有對象的集合
8)? param ? 所有請求參數(shù)字符串組成的集合
9)? paramValues ? ?所有作為字符串集合的請求參數(shù)
10) requestScope ? ?所有請求范圍的對象的集合
11) sessionScope ? ?所有會話范圍的對象的集合
第二十九章 Web監(jiān)聽器和過濾器
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Web監(jiān)聽器的種類可以分為: Servlet上下文(ServletContext)監(jiān)聽 、 Http 會話(HttpSession)監(jiān)聽 和 請求(
?
ServletRequest)監(jiān)聽 。
2.? 【基礎(chǔ)題】如果要編寫一個(gè)過濾器,需要實(shí)現(xiàn) javax.servlet.Filter 接口。
二、? 選擇題
三、? 名詞解釋
四、? 問答題
1.? 【基礎(chǔ)題】過濾器的作用是什么?
答:
截取從客戶端發(fā)過來的請求,并進(jìn)行處理,對數(shù)據(jù)進(jìn)行重新編碼,過濾掉客戶的某? ? 些不應(yīng)出現(xiàn)的詞匯,可以驗(yàn)證用戶是否已經(jīng)登
?
陸。
?
第三十章 會話跟蹤
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】在Servlet中,我們可以使用 HttpServletRequest 對象的 getSession() 方法獲取? session對象。
2.? 【基礎(chǔ)題】使用Session進(jìn)行數(shù)據(jù)傳遞時(shí),調(diào)用session對象的getAttribute()方法需要傳入的參數(shù)類? 型是 String ,返
?
回的數(shù)據(jù)類型是 Object 。
二、? 選擇題
1.? 【基礎(chǔ)題】從session中獲取數(shù)據(jù)的方法是:(D)
getParameter();
getCreationTime();
getAttributeNames();
getAttribute();
三、? 名詞解釋
四、? 問答題
四種會話跟蹤技術(shù) (中等)
答:
會話作用域ServletsJSP 頁面描述
page否是代表與一個(gè)頁面相關(guān)的對象和屬性。一個(gè)頁面由一個(gè)編譯好的 Java servlet 類(可以帶有任何的 include 指令,但是沒有?
?
include 動作)表示。這 既包括 servlet 又包括被編譯成 servlet 的 JSP 頁面
request是是代表與 Web 客戶機(jī)發(fā)出的一個(gè)請求相關(guān)的對象和屬性。一個(gè)請求可
能跨越多個(gè)頁面,涉及多個(gè) Web 組件(由于 forward 指令和 include 動作的關(guān) 系)
session是是代表與用于某個(gè) Web 客戶機(jī)的一個(gè)用戶體驗(yàn)相關(guān)的對象和屬性。一個(gè) Web 會話可以也經(jīng)常會跨越多個(gè)客戶機(jī)請求
application是是代表與整個(gè) Web 應(yīng)用程序相關(guān)的對象和屬性。這實(shí)質(zhì)上是跨越整? ? 個(gè) Web 應(yīng)用程序,包括多個(gè)頁面、請求和會話
?
的一個(gè)全局作用域
?
第三十一章 MVC
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】 DAO類屬于MVC中的 模型 層, Servlet類屬于MVC中的 控制 層, JSP屬于MVC中的 視圖 層
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】 MVC:MVC是Model-View-Controller三個(gè)英文單詞的所寫,是一種流行的軟件設(shè)計(jì)模式。即把一個(gè)應(yīng)用的輸入、處理
?
、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成三個(gè)層——模型層、視圖層、控制層。
2.? 【基礎(chǔ)題】 DAO: Data Access Object數(shù)據(jù)訪問接口.
3.? 【基礎(chǔ)題】 VO: value object值對象.
四、? 問答題
1.? 【中等題】 簡述MVC三個(gè)層次的作用。
1)? 視圖(View):代表用戶交互界面,一個(gè)應(yīng)用可能有很多不同的視圖,MVC設(shè)計(jì)模式對于視圖的處理僅限于視圖上數(shù)據(jù)的采集和處理
?
。
2)? 模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。業(yè)務(wù)流程的處理過程對其它層來說是黑箱操作,模型接受視圖請
?
求的數(shù)據(jù),并返回最終的處理結(jié)果。業(yè)務(wù)模型的設(shè)計(jì)是MVC最主要的核心部分。
業(yè)務(wù)模型包含一個(gè)很重要的模型——數(shù)據(jù)模型。數(shù)據(jù)模型主要指實(shí)體對象的數(shù)據(jù)保存(持久化),所有有關(guān)數(shù)據(jù)庫的操作只限制在該模型
?
中。
3)? 控制(Controller):可以理解為從用戶接收請求, 將模型與視圖匹配在一起,共同完成用戶的請求。控制層并不做任何的數(shù)據(jù)處
?
理。
2.? 【中等題】 簡述MVC的優(yōu)缺點(diǎn)。
優(yōu)點(diǎn):
開發(fā)效率高。
松耦合,程序靈活性和擴(kuò)展性好。
代碼重用度更高。
易于人員分工。
缺點(diǎn):
1)? 代碼復(fù)雜度增加。
2)? 代碼數(shù)量增加。
3)? 不適合開發(fā)小型項(xiàng)目。
?
第三十二章 國際化
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】資源文件的后綴名是 properties 。
2.? 【基礎(chǔ)題】一個(gè)資源文件的名稱是appenUS.properties, 其中app是指 基本名稱 , en是指 語言編碼 , US是指 國家編碼 。
3.? 【基礎(chǔ)題】資源文件中可以添加不同國家的語言字符, 編寫完成后需要轉(zhuǎn)換稱 Unicode 編碼。
二、? 選擇題
1.? 【基礎(chǔ)題】資源文件通常放置在WEB工程的(A)中。
A.? classes 目錄
B.? WEB根目錄
C.? tomcat根目錄
D.? WEB-INF目錄
三、? 名詞解釋
1.? 【基礎(chǔ)題】I18N:國際化(internationalization)的簡稱。指的是在軟件設(shè)計(jì)階段,就應(yīng)該使軟件具有支持多種語言和地區(qū)的
?
功能。
四、? 問答題
?
第三十三章 上傳與下載
筆試題
一、? 填空題
1.? 【中等題】如果tomcat的安裝路徑是c:/tomcat5, 已經(jīng)將一個(gè)名稱為test的WEB應(yīng)用程序發(fā)布到tomcat中, 在一個(gè)servlet中使用?
?
this.getServletContext().getRealPath(“/”)方法得到的路徑是 c:/tomcat5/webapps/test/ 。
2.? 【基礎(chǔ)題】文件上傳功能中, 頁面表單的請求方式應(yīng)設(shè)成 POST 表單類型應(yīng)設(shè)成 multipart/form-data, 使用
表單元素
二、? 選擇題
3.? 【中等題】如果需要在url中傳遞中文參數(shù), 需要對中文進(jìn)行編碼, 應(yīng)該采取以下哪個(gè)方法(A)。
A.? URLEncode.encode()
B.? URLDecoder.decode()
C.? request.setCharacterEncoding()
D.? response.setCharacterEncoding()
三、? 名詞解釋
四、? 問答題
?
第三十四章 Struts
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】 Struts的核心配置文件名稱是 struts-config.xml 。
2.? 【基礎(chǔ)題】 Struts的標(biāo)記庫有 struts-html標(biāo)記庫, struts-bean標(biāo)記庫, struts-logic 標(biāo)記庫, struts-nested標(biāo)記庫,?
?
struts-tiles標(biāo)記庫。
3.? 【基礎(chǔ)題】 Struts中使用 標(biāo)記顯示錯(cuò)誤消息,使用 標(biāo)記顯示資源文件中的數(shù)據(jù), 使用 struts-logic 標(biāo)記庫執(zhí)行頁面邏輯處理
?
。
4.? 【基礎(chǔ)題】在ActionForm中定義 FormFile 類型的屬性可以方便的處理上傳。
5.? 【基礎(chǔ)題】一個(gè)Action通常可以配置一個(gè)或多個(gè)ActionForard, ActionForward必須配置 name 和 path 兩個(gè)屬性。
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】 Strtus: Struts是一個(gè)非常流行的MVC框架, 是Apache軟件基金會Jakarta項(xiàng)目中的一個(gè)子項(xiàng)目Struts采用JSP作為MVC
?
的視圖, 采用JavaBean充當(dāng)模型部分, 由ActionServlet具體指定的Action動作類作為控制器,負(fù)責(zé)視圖與模型之間的交互。
四、? 問答題
1.? 【中等題】簡述Struts的工作流程。
1)? 控制器讀取配置文件進(jìn)行初始化工作。
2)? 控制器接收Http請求,并從ActionConfig中找出對應(yīng)于該請求的Action子類,如果沒有對應(yīng)的Action,控制器直接將請求轉(zhuǎn)發(fā)給
?
JSP或者靜態(tài)頁面。
3)? 在控制器調(diào)用具體的Action的execute方法之前,ActionForm對象將利用Http請求中的參數(shù)來填充自已。還可以在ActionForm類中
?
調(diào)用validate方法來檢查請求參數(shù)的合法性,并且可以返回一個(gè)包含所有錯(cuò)誤信息的ActionErrors對象。
4)? 執(zhí)行具體的的Execute的方法,它負(fù)責(zé)執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。執(zhí)行完后,返回一個(gè)ActionForward對象,控制器通過該
?
ActionForward對象來進(jìn)行轉(zhuǎn)發(fā)工作。
?
第三十五章 Hibernate
筆試題
一、? 填空題
1.? 【基礎(chǔ)題】Hibernate關(guān)注應(yīng)用程序的 持久 層。
2.? 【基礎(chǔ)題】ORM指的是 對象 和 關(guān)系 的映射。
3.? 【基礎(chǔ)題】面向關(guān)系概念中的表 對應(yīng)與面向?qū)ο蟾拍钪械?類 , 表中的行對應(yīng)與 對象 , 表中的字段對應(yīng)與 屬性 。
4.? 【基礎(chǔ)題】Hibernate的核心配置文件名稱通常是 hibernate.cfg.xml , 對象關(guān)系映射文件名稱通常是類名加上 .hbm.xml 組成
?
。
5.? 【中等題】Hibernate 對象的三種狀態(tài) 瞬時(shí)狀態(tài) , 持久狀態(tài) , 脫管狀態(tài)。
6.? 【中等題】Hibernate的對象檢索方式有 OID檢索方式,HQL檢索方式, QBC檢索方式, 本地SQL檢索方式。
二、? 選擇題
三、? 名詞解釋
1.? 【基礎(chǔ)題】名詞解釋—Hibernate: Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,
?
使得Java程序員可以使用對象編程思維來操縱數(shù)據(jù)庫。
四、? 問答題
?
第三十六章 AJAX
筆試題
一、? 填空題
1.? AJAX的核心對象是 XMLHttpRequest 。
2.? AJAX中發(fā)送請求的方法是 send() , 服務(wù)器返回?cái)?shù)據(jù)如果是文本用 responseText 屬性訪問,如果是xml用 responseXML 屬性
?
訪問。
3.? 通常要判斷XMLHttpRequest對象的readyState等于 4 并且服務(wù)器的狀態(tài)碼 等于 200 時(shí)進(jìn)行后續(xù)處理。
二、? 選擇題
三、? 名詞解釋
1.? AJAX: AJAX全稱為“Asynchronous JavaScript and XML”(異步JavaScript和XML),是一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技
?
術(shù)。
四、? 問答題
1.? 簡述AJAX應(yīng)用和傳統(tǒng)WEB應(yīng)用的區(qū)別。
傳統(tǒng)WEB應(yīng)用是頁面完全刷新, 簡單操作也導(dǎo)致重新加載頁面全部數(shù)據(jù)。AJAX應(yīng)用是部分刷新頁面,只作必要的數(shù)據(jù)交換,并且可以異步訪
?
問服務(wù)器端。
?
第三十七章 Spring
筆試題
一、? 填空題
二、? 選擇題
三、? 名詞解釋
1.? Spring—Spring是一個(gè)開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring提供了管理業(yè)務(wù)
?
對象的一致方法并且鼓勵(lì)了注入對接口編程而不是對類編程的良好習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性的Inversion of?
?
Control容器。
2.? 輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且
?
Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對象不依賴于Spring的特定類。
3.? 控制反轉(zhuǎn)——Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對象依賴的其它對象會通過被動的
?
方式傳遞進(jìn)來,而不是這個(gè)對象自己創(chuàng)建或者查找依賴對象。你可以認(rèn)為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象
?
初始化時(shí)不等對象請求就主動將依賴傳遞給它。
4.? 面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(jì)(auditing)和事
?
務(wù)()管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系
?
統(tǒng)級關(guān)注點(diǎn),例如日志或事務(wù)支持。
5.? 容器——Spring包含并管理應(yīng)用對象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建——
?
基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例——以及它們是如何相互關(guān)聯(lián)
?
的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。
6.? 框架——Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個(gè)XML文件
?
里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。
所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
總結(jié)
以上是生活随笔為你收集整理的[转载] JAVA面试题大全(part_1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 责任链模式 链表_责任链模式的
- 下一篇: 进度条设置_为你的练习设置进度条