MLDN面試題總結

1. java異常機制的原理與應用
答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。
實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標準應用:try-catch-finally-throw-throws一起使用。

2. 垃圾回收機制的優點
答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()fangf

3. Error與Exception區別
答:Error是jvm進行處理,是jvm出錯
exception是可以由程序處理的,可以用try-catch捕獲的

4. final,finally,finallize
答:final定義的變量的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承
finally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的

5. Anonymous Inner Class是否可以extends,是否可以implements Interface
答:允許繼承和實現,因爲匿名內部類就是在抽象類和接口的基礎上發展起來的

6. Static Nested Class 與Inner Class的區別
答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問
而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。

7. HashMap and HashTable?
答:HashMap:1) released in jdk 1.2,new Class 2)採用異步處理方式,性能較高,是非線程安全的 3)允許null
HashTable:1)released in jdk 1.0 ,old Class 2)採用同步處理方式,性能低,是線程安全的         3)不允許null

8. assert代表什麼?
答:asserts是jdk 1.4之後發佈的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數

9. gc是什麼?
答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放

10. String s = new String("xyz")產生了幾個對象?
答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。

11. sleep() and wait()?
答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒
wait()方法是Object類定義的方法,需要手動notify()和notifyAll()

12. java中存在goto,但不能使用

13.數組有沒有length(),String有沒有length()?
答:數組有length屬性,String有length()

14. Overload與Override的區別
答:Overload:重載
               |- 在一個類中定義的若干方法
              |- 所有的方法名相同,但參數類型或個數不同
               |- 只有參數有關,與返回類型無關
Override:覆寫
              |- 在繼承的關係中
              |- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。
              |- 訪問權限不能更嚴格

15. Set裏的元素不能重複,用什麼方法區分?==與equals()方法的區別
答:依靠hashCode()和equals()兩個方法完成,==屬於地址比較,equals()屬於內容比較。使用的是equals()方法。

16. 列出常見的 runtime exception
答:NumberFormatException/ArrayOutIndexofBoundException/NullPointerException/ClassCastException

17. abstract class 和 interface有什麼區別?
答:抽象類:
              |-由抽象方法和常量、變量、全局常量、構造方法、普通方法組成
              |-使用abstract聲明
              |-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
              |-存在單繼承的侷限
              |-抽象類可以實現若干個接口
接口:
              |-由抽象方法和全局常量組成
              |-使用interface關鍵字
              |-子類要通過implements實現接口,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
              |-一個子類可以實現多個接口
              |-接口不能繼承一個抽象類,但允許繼承多個接口

18. 啓動一個線程要用start(),因爲要通知jvm進行cpu資源的分配

19. try{}裏面有一個return,問finally{}裏面的代碼是否執行,在什麼時機執行?
答:finally{}裏面的代碼執行,在return之前。

20. 寫一個singleton
答:singleton的核心就是構造方法私有化,Class,Runtime都採用單例
package com.leongod.demo;
public class Singleton(){
         private static final sin = new Singleton();
        private Singleton(){}
        public static Singleton getInstance(){
                  return sin;
}
}

21. 程序設計:輸入一組數字,然後排序輸出
答:package com.leongod.demo;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class IO {
public static void main(String[] args) throws Exception {
   BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
   System.out.println("請輸入一組數字,中間用空格分割:");
   String str = buf.readLine();
   Set<Integer> set = new TreeSet<Integer>();
   String[] arr = str.split(" ");
 
   for(String s : arr) {
    if (s.matches("\\d+")) {
     set.add(Integer.parseInt(s));
    }
   }
 
   Iterator<Integer> it = set.iterator();
   System.out.println("排序後的結果:");
   while (it.hasNext()) {
    System.out.print(it.next() + ",");
   }
}
}

22.列出目錄內的文件
package com.leongod.demo;
import java.io.File;
import com.sun.org.apache.xpath.internal.functions.FuncBoolean;

public class FileDemo {
public static void main(String[] args) {
   File file = new File("D:" + File.separator + "kongkong");
   fun(file);
}

public static void fun(File file) {
   if (file.isDirectory()) {
    File[] lf = file.listFiles();
    if (lf != null) {
     for(File f : lf) {
      fun(f);
     }
    }
   }else {
    System.out.println(file.toString());
   }
}
}

23. char可以存一箇中文漢字嗎?
答:可以,使用了unicode編碼

24.多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:兩種多線程方法,繼承Thread類,實現Runnable接口
              |-Thread類是Runnable接口的子類
              |-使用Runnable接口可以實現資源共享的目的
              |-所有線程操作都必須通過Thread類的start()方法啓動
兩種實現同步的方法:
              |-同步代碼塊:Synchronized(this)
              |-同步方法
25.f=3.4是不對的,3.4默認是double類型的

26.String and StringBuffer?
答:String 不可以修改,StringBuffer可以修改

27.Class.forname向容器中加載驅動程序

28.int與Integer有什麼區別?
答:int是基本數據類型,Integer是包裝類
在jdk1.5以後,可以實現自動裝箱和拆箱

29.2*8有效的方法是移位操作:2<<3

30.請說出類集框架的完整結構
答:類級框架的最大接口:Collection、Map、Iterator、Enumeration
Collection:存放單值
              |-List:允許有重複內容
                     |-ArrayList:異步處理,新的操作類,非線程安全
                     |-Vector:同步處理,舊的操作類,線程安全,支持Enumeration
              |-Set:不允許有重複的內容,依靠hashCode()和equals()進行重複的驗證
                     |-HashSet:無序存放
                     |-TreeSet:有序存放,按Comparable排序
              |-Map:存放一對值
                     |-HashMap:新的類,異步處理,非線程安全,允許有null
                     |-HashTable:舊的類,同步處理,線程安全,不允許有null
                     |-TreeMap:有序排列,按key配需
              |-Iterator:迭代輸出,依靠collection接口中的iterator方法輸出,是新的輸出標準

31.是否可以繼承String類?答:不可以,因爲使用了final關鍵字

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/leongod/archive/2009/05/06/4153554.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章