返回首頁
當前位置: 主頁 > 網絡編程 > Jsp實例教程 >

java筆試常見題目小結大全

時間:2012-02-17 13:21來源:知行網www.wtckvq.live 編輯:麥田守望者

1.Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?

方法的重寫Overriding和重載Overloading是Java多態性的不同表現。
重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。
如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重(Overriding)。
子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。
如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
2.servlet的生命周期

web容器加載servlet,生命周期開始。通過調用servlet的init()方法進行servlet的初始化。通過調用service()方法實現,根據請求的不同調用不同的do***()方法。結束服務,web容器調用servlet的destroy()方法。

servlet生命周期.jpg 見附件



3.說出ArrayList,Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,如果元素的數目超出了內部數組目前的長度它們都需要擴展內部數組的長度,Vector缺省情況下自動增長原來一倍的數組長度,ArrayList是原來的50%,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized同步方法保證線程安全,通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。


4.final, finally, finalize的區別。
  final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。



5.forward 和redirect的區別
forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。
redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求,所以session,request參數都可以獲取。


6.JSP中動態INCLUDE與靜態INCLUDE的區別?
動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用于包含動態頁面,并且可以帶參數。
靜態INCLUDE用include偽碼實現,不會檢查所含文件的變化,適用于包含靜態頁面<%@ include file="included.htm" %>


7.設計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();
}
}
}
}


8.編程題: 寫一個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的。
一般認為第一種形式要更加安全些


9.編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如“我ABC”4,應該截為“我AB”,輸入“我ABC漢DEF”,6,應該輸出為“我ABC”而不是“我ABC+漢的半個”。
 

 

 


Java代碼
1.public class SubStringTest {
2.
3. public static void main(String[] args) {
4. String inStr = "我ABC";
5. String str = subString(inStr, 4);
6. System.out.println(str);
7.
8. inStr = "我ABC漢DEF";
9. str = subString(inStr, 6);
10. System.out.println(str);
11. }
12.
13. /**
14. * 字符串按字節截取
15. * @param str 原字符
16. * @param len 截取長度
17. * @return String
18. * @author zheng
19. */
20. public static String subString(String str, int len) {
21. if (str == null || ("").equals(str)) {
22. return "";
23. }
24. byte[] strByte = null;
25. try {
26. strByte = str.getBytes("GBK");
27. } catch (UnsupportedEncodingException e) {
28. e.printStackTrace();
29. }
30. int strLen = strByte.length;
31. if (len >= strLen || len < 1) {
32. return str;
33. }
34. int count = 0;
35. for (int i = 0; i < len; i++) {
36. int value = (int) strByte[i];
37. if (value < 0) {
38. count++;
39. }
40. }
41. if (count % 2 != 0) {
42. len = (len == 1) ? len + 1 : len - 1;
43. }
44.
45. return str.substring(0, len-1);
46. }
47.}

------分隔線----------------------------
標簽(Tag):Java JAVA實例教程 JAVA基礎教程 Java源代碼 Java技巧
------分隔線----------------------------
推薦內容
猜你感興趣
深蓝海域APP