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