1. 程式人生 > >java基礎筆試面試題答案

java基礎筆試面試題答案

1 String,StringBuffer,StringBuilder的區別

String 字串常量 執行緒安全  操作少量資料
StringBuffer 字串變數 執行緒安全 操作大量資料 速度慢  多執行緒適合用
StringBuilder 字串變數  執行緒不安全  操作大量資料  速度快  單執行緒適合用

2.override(重寫)和overload(過載)區別

方法的重寫(Overriding)和過載(Overloading)是java多型性的不同表現;
重寫是父類與子類之間多型性的一種表現,過載是一類中多型性的一種表現。

3.String str = new String("xyz");建立了幾個物件。

如果String常量池中,已經建立了"xyz",則不會繼續建立,此時只建立了一個物件new String("xyz");
如果String常量池中沒有建立"xyz",則會建立兩個物件,一個物件的值是"xyz",一個物件是new String("xyz");

4.說幾個你常見到的異常。


Throwable是所有異常的根,java.lang.Throwable
Error是錯誤,java.lang.Error
Exception是異常,java.lang.Exception
一般分為Checked異常和Runtime異常,所有RuntimeException類及其子類的例項被稱為Runtime異常,不屬於該範疇的異常則被稱為CheckedException。
NullPointerException 空指標異常
ArithmeticException 除0異常
ClassCastException  型別轉換
ArrayIndexOutOfBoundsException 陣列越界異常

5.hashtable和hashmap的區別是什麼?


6.hashmap的底層實現方式是什麼?

HashMap是一個“連結串列的陣列”的資料結構,每個元素存放連結串列頭結點的陣列,即陣列和連結串列的結合體。

7.Vector , ArrayList 和LinkedList的區別?

1、Vector、ArrayList都是以類似陣列的形式儲存在記憶體中,LinkedList則以連結串列的形式進行儲存。
2、Vector執行緒同步,ArrayList、LinkedList執行緒不同步。
3、LinkedList適合指定位置插入、刪除操作,不適合查詢;ArrayList、Vector適合查詢,不適合指定位置的插入、刪除操作。
4、ArrayList在元素填滿容器時會自動擴充容器大小的50%,而Vector則是100%,因此ArrayList更節省。

8.怎麼遍歷一個map?寫一下。

public class Collection_Map {
    public static void main(String[] args) {
        Map<String, Student> hm = new HashMap<String,Student>();
        Student stu1 = new Student(1,"MapTom");
        Student stu2 = new Student(2,"MapJack");
        Student stu3 = new Student(3,"MapKoby");
        hm.put("1", stu1);
        hm.put("2", stu2);
        hm.put("3", stu3);
        /*第一種  先將map物件轉成set,然後再轉為迭代器*/
        Iterator<Entry<String, Student>> it = hm.entrySet().iterator();
        while (it.hasNext()) {
            //System.out.println(it.next().getKey());
            System.out.println(it.next().getValue().getName());
        }
        /*第二種 先將map轉為set型別的key值集合,然後轉為迭代器*/
        Iterator<String> it2 = hm.keySet().iterator();
        while(it2.hasNext()){
        /*  System.out.println(it2.next());*/
            System.out.println(hm.get(it2.next()).getName());
        }
        /*第三種*/
        for(Map.Entry<String, Student> entry : hm.entrySet()){
            String key = entry.getKey();
            String value = entry.getValue().getName();
            System.out.println(value);
        }
        /*第四種*/
        for(String key : hm.keySet()){
            System.out.println(hm.get(key).getName());
        }
    }
}

9.說一下list,set,map的區別。

List特點:元素有放入順序,元素可重複 
Map特點:元素按鍵值對儲存,無放入順序 
Set特點:元素無放入順序,元素不可重複(注意:元素雖然無放入順序,但是元素在set中的位置是有該元素的
        HashCode決定的,其位置其實是固定的) 

10.至少說五點interface和abstract的區別。

1.一個類可以實現多個介面 ,但卻只能繼承最多一個抽象類。
2.抽象類可以包含具體的方法 , 介面的所有方法都是抽象的。
3.抽象類可以宣告和使用欄位 ,介面則不能,但介面可以建立靜態的final常量。
4.介面的方法都是public的,抽象類的方法可以是public,protected,private或者預設的package;
5.抽象類可以定義建構函式,介面卻不能。 

11.怎麼把陣列放到物件裡面?

   public static void main(String[] args) {
        Integer[] arr = {1, 2, 3, 4, 5, 6};
        List<Integer> list = new ArrayList<Integer>();
        for (Integer i : arr) {
            list.add(i);
        }
    }

12.給你一組字串如:7i8hy4jjnb2.讓你程式設計輸出裡面的數字:7842.

  public static String isNumeric(String str) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char j = str.charAt(i);
            if (Character.isDigit(j)) {
                sb.append(String.valueOf(j));
            }
        }
        return sb.toString();
    }

13.java類實現序列化有幾種實現方式?都是什麼?(二種)

實現介面Serializable
實現介面Externalizable

提示:

物件的序列化就是將物件寫入輸出流中。

反序列化就是從輸入流中將物件讀取出來。


14.java開發中“==” 和 “equals” 有何區別?

equals()是個方法,繼承類Object
== 是個運算子,表示記憶體地址是否相同
==比較的是2個物件的地址,而equals比較的是2個物件的內容。顯然,當equals為true時,==不一定為true。
==操作比較的是兩個變數的值是否相等,對於引用型變量表示的是兩個變數在堆中儲存的地址是否相同,即棧中的內容是否相同。       

15.static區域性變數與全域性變數的區別,編譯後對映檔案是否包含此類變數的地址。

static全域性變數只初使化一次,防止在其他檔案單元中被引用;
static區域性變數和普通區域性變數有什麼區別:static區域性變數只被初始化一次,下一次依據上一次結果值;
static函式與普通函式有什麼區別:static函式在記憶體中只有一份,普通函式在每個被呼叫中維持一份拷貝;