JSP 試題集
來源:互聯網
上載者:User
1.如何執行一個安全執行緒的JSP?
答:只需增加如下指令
<%@ page isThreadSafe="false" %>
2.Collection 和 Collections的區別?
答:Collection是個java.util下的介面,它是各種集合結構的父介面。
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法
3.short i=1;i=i+1; 和short i=1;i+=1;有什麼錯誤?
答:short s1 = 1; s1 = s1 + 1;有錯,s1是short型,s1+1是int型,不能顯式轉化為short型。可修改為s1 =(short)(s1 + 1) 。
short s1 = 1; s1 += 1正確。
4.Servlet的生命週期是什麼? Servlet和CGI的區別是什麼
答:web容器載入servlet,生命週期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,
根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。
與cgi的區別在於servlet處於伺服器處理序中,它通過多線程方式運行其service方法,一個執行個體可以服務於多個請求,
並且其執行個體一般不會銷毀,而CGI對每個請求都產生新的進程,服務完成後就銷毀,所以效率上低於servlet。
5.jsp指令有哪些?
答:jsp指令分為兩大類型,page指令和動作指令
動作指令通常有:useBean,setProperty,getProperty,forward,plugin,include
6.jsp如何使用注釋?
答:1) <%-- --%> 2); //; 3)/** **/; 4)<!-- -->;
7.設定cookie
答:Cookie cookie=new Cookie("myCookie",null);
cookie.setMaxAge(0);
cookie.setPath("/");
response.addCookie(cookie);
8.&和&&的區別
答:&是位元運算符,表示按位與運算,&&是邏輯運算子,表示邏輯與
9.HashTable和HashMap的區別
答: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演算法都大概一樣,所以效能不會有很大的差異。
10.JSP中有哪些內建對象
答:jsp共有9個內建對象
1) request 使用者端請求,此請求會包含來自POST/GET的參數
2) response 網頁傳回給用戶端的回應。
3) pageContext 網頁的屬性在這裡管理
4) session 與請求有關的會話期
5) appliation servlet正在執行的內容
6) out 用來傳送回應的參數
7) page 表示該頁產生的servlet執行個體
8) exeption 針對jsp產生的錯誤頁面,未捕捉的例外
9) config servlet的架構組件
11.描述JSP和Servlet的區別、共同點、各自應用的範圍
答:儘管JSP在本質上就是SERVLET,但是兩者的建立方式不一樣.Servlet完全是JAVA程式碼構成擅長於流程式控制制和交易處理而通過Servlet
來產生動態網頁很不直觀;JSP由HTML代碼和JSP標籤構成可以方便地編寫動態網頁因此在實際應用中採用Servlet來控制商務程序,而采
用JSP來產生動態網頁.在struts架構中,JSP位於MVC設計模式的視圖層,而Servlet位於控制層
12.Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?
答:Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對象equals()在類中被覆蓋,為的是當兩個分離的對象的內容和類型相配的話,
返回真值。
13.給我一個你最常見到的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
14.abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized
答:都不可能
15.啟動一個線程是用run()還是start()
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。
run()方法可以產生必須退出的標誌來停止一個線程
16.try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?
答:會執行,在return前執行。
17.用最有效率的方法算出2乘以8等於幾?
答:2 << 3
18.abstract class和interface有什麼區別?
答:聲明方法的存在而不去實現它的類被叫做抽象類別(abstract class),它用於要建立一個體現某些基本行為的類,並為該類聲明方法,
但不能在該類中實現該類的情況。不能建立abstract 類的執行個體。然而可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類
的一個執行個體。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類別
為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類別的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都
是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實作類別不能從介面定義中繼承
行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何對象上調用接
口的方法。由於有抽象類別,它允許使用介面名作為引用變數的類型。通常的動態聯編將生效。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算子可以用來決定某對象的類是否實現了介面。
19.String s = new String("xyz");建立了幾個String Object?
答:兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。
20.sleep() 和 wait() 有什麼區別?
答:sleep()方法是使線程停止一段時間的方法。在sleep 時間間隔期滿後,線程不一定立即恢複執行。這是因為在那個時刻,其它線程可
能正在運行而且沒有被調度為放棄執行,除非(a)“醒來”的線程具有更高的優先順序
(b)正在啟動並執行線程因為其它原因而阻塞。wait()是線程互動時,如果線程對一個同步對象x 發出一個wait()調用,該線程會暫停執行,
被調對象進入等待狀態,直到被喚醒或等待時間到。
21.數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。
String有有length()這個方法。
22.Overload和Override的區別。Overloaded的方法是否可以改變傳回值的類型
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,
重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,
我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。
如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。
Overloaded的方法是可以改變傳回值的類型。
23.介面是否可繼承介面? 抽象類別是否可實現(implements)介面? 抽象類別是否可繼承實體類(concrete class)
答:介面可以繼承介面。抽象類別可以實現(implements)介面,抽象類別是否可繼承實體類,但前提是實體類必須有明確的建構函式。
24.是否可以繼承String類
答:String是final類,故不能繼承。
25.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
答:switch(expr1)中,expr1是一個整數運算式。因此傳遞給 switch 和 case 語句的參數應該是 int、 short、 char 或者 byte。
long,string 都不能作用於swtich。
26.兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
答:不對,有相同的hash code
27.當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
答:是值傳遞。Java 編程 語言只由值傳遞參數。當一個對象執行個體作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。
對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
28.當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
答:不能,一個對象的一個synchronized方法只能由一個線程訪問。
29.構造器Constructor是否可被override
答:不能,因為建構函式不能被繼承,所以不能被重寫,但可以重載
30.反轉函數
String reverse(String arg)
{
if(arg.length()==0)
return arg;
else
return reverse(arg.substring(1,arg.length)+arg.substring(0,1);
}
31.範圍public,private,protected,以及不寫時的區別
當前類 所在包 其它包子孫類 其它包非子孫類
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
32.ArrayList和Vector的區別
答:就ArrayList與Vector主要從二方面來說.
一.同步性:Vector是安全執行緒的,也就是說是同步的,而ArrayList是線程式不安全的,不是同步的
二.資料增長:當需要增長時,Vector預設增長為原來一培,而ArrayList卻是原來的一半
33.char型變數中能不能存貯一個中文漢字 為什麼
答:是能夠定義成為一個中文的,因為java中以unicode編碼,一個char佔16個位元組,所以放一個中文是沒問題的
34.多線程有幾種實現方法,都是什麼 同步有幾種實現方法,都是什麼
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable介面
同步的實現方面有兩種,分別是synchronized,wait與notify
35.float型float f=3.4是否正確
答:不正確,精度不準確,應該用強制轉換,f=(float)3.4;
36.Class.forName的作用 為什麼要用
答:調用該訪問返回一個以字串指定類名的類的對象。
37.兩個int 型的整數, 不經過第3方變數進行替換?
如a =10 b =5
轉換後 a =5 b =10
答:1) a=a+b;b=a-b;a=a-b;
2) a^= b;b ^= a;a ^= b;
38.編一段程式,建立4個線程,2個線程增加,2個線程減
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<10;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<10;i++){
dec();
}
}
}
}