Java基礎中的面試題(一),你能接幾招(附答案(不帶答案的面試題都是耍流氓))

 

  1. Java中的數據類型有幾種?

    Java中的數據類型分爲基本數據類型和引用數據類型兩大類,基本數據類型中分爲八種,分別是byte,short,int ,long,float,double,boolean ,char。 引用數據類型的定義是除了基本數據類型以外的所有類型,主要包括,類,接口, 數組, 枚舉,註解等。

  2. java中的基本數據類型的長度範圍?

    byte(1字節) , short(2字節) ,int(4字節), long(8字節),float(4字節) , double(8字節), boolean(1字節), char(2字節)

  3. 給出下列程序的輸出結果:

    System.out.println(3+4); //7, 沒什麼可解釋的

    System.out.println(3+'4');// 55, char值參與運算使用ascii進行運算,'4'的ascii 是52

    System.out.println('3'+'4');//103,51+52

    System.out.println(3+"4");//34,字符串參與運行,就是拼接

  4. 面向對象的特徵

    封裝, 繼承 , 多態, 抽象

  5. 抽象類和接口的區別

    1. 抽象類中既可以定義常量有可以定義變量,接口中定義的變量默認爲常量(默認都是用pubilc static final 修飾)

    2. 抽象類中既可以定義抽象方法,也可以定義非抽象方法;接口中只能定義抽象方法(默認用public abstract修飾,jdk8以後接口可以定義非抽象方法,但是必須用default或 static修飾)

    3. 一個類最多是能繼承一個抽象類,但是可以實現多個接口

    4. 抽象類是對事物根源的抽象,接口側重對功能的擴展

    5. 接口不能實現接口,只能繼承接口,並且可以多繼承

  6. switch中支持的數據類型

    switch中可以使用byte,short,char,int 或者對應的包裝類和枚舉類型。jdk7以後開始支持String類型,不支持long類型

  7. float f = 18.5; double d = 12.3; 這兩種寫法正確麼?

    小數的默認類型是double, 所以像18.5 和 12.3其實都是double類型的, 把double類型賦值給float 是有問題的,因爲有可能裝不下。 所以第一種寫法錯誤,第二種寫法正確。簡單來說,就是定義float類型的小數結尾必須加f. 正確寫法: float f = 18.5f;

  8. 方法重載和方法重寫的區別

    方法的重載(overload): 說的是一個類中的事。 一個類中可以存在多個名字相同的方法,但是必須保證參數的類型或個數不同,這幾個方法叫做重載的方法,與返回值無關。

    方法的重寫(override): 說的是父類和子類中的事,子類中出現了和父類中一模一樣的方法,就是重寫的方法,可以在子類的方法上加 @Override註解驗證。 關於重寫有一些特殊情況需要注意:

    私有和靜態方法不能重寫。 子類重寫父類中的方法訪問權限不能更低。子類拋出的異常不能比父類大。

  9. equals 和 == 的區別

    equals 是 Object類中的方法,所以代表所有的對象中都可以調用這個方法。如果沒有重寫equals方法,那麼調用的時候相當於都是在調用父類Object中的equals方法, Object類中的equals就是使用 == 實現的。==在連接基本數據類型的時候,比較的是值。 連接引用數據對象的時候比較的是地址值。

  10. 數組初始化的兩種方式:

    靜態初始化: int[] arr = new int[10];

    動態初始化: int[] arr = new int[]{1,2,3,4,5}; 可簡寫爲: int[] arr = {1,2,3,4,5};

  11. Object類中有哪些方法?介紹一下equals和 hashCode() 方法的區別及注意事項

    Object類中有 hashCode(), equals(Object), toString(), clone(),wait(), notify(), notifyAll() 等方法。

    hashCode:可以看做是當前對象的一個地址值經過計算後得到的值,所以我們可以根據兩個對象的hashCode值是否相等來判斷二者是不是同一個對象。native方法,底層使用c語言實現。

    equals: 判斷對象是不是同一個對象。默認的equals是== 也就是比較地址值。我們可以重寫equals方法。

    兩個方法都可以用來比較對象是否相同。但是由於hashCode 底層是用c語言實現的,所以速度較快,但他的缺點是由於使用算法生成的,可能在某些極端的情況之下出現兩個不同的對象經過算法後得到的hashCode值相同。所以一般我們比較的時候,一般先比較hashCode是否相等,如果hashCode不相等,說明肯定不是同一個對象,如果hashCode相等,也不能代表是同一個對象,因爲上面說了存在一些極端情況,所以在使用equals比較。像hashSet, HashMap中都是使用這樣的比較方式,也是業界公認的比較方式。這也是爲什麼我們在重寫hashCode的時候也要重寫equals, 因爲大家都這麼用,我們必須要保證他們兩者返回結果的一致性。否則就會出問題。

  12. HashMap的實現原理:

    HashMap底層是使用hash表(數組+鏈表) 的形式進行存儲。 當一個鍵值對存儲到HashMap中的時候,會先根據key通過hash算法計算出一個值,這個值就是代表存儲到數組中的那個位置,如果多個key得到的值相同,代表這幾個數據要存儲到同一個數組的位置上,這種情況叫做哈希衝突,此時會以鏈表的形式將hash衝突的元素連接起來。 hashMap有個負載因子,默認是0.75, 當hashMap中存儲的元素對數超過數組程度*負載因子時,會觸發自動擴容。jdk1.8以後,當鏈表長度超過8會自動轉爲紅黑樹,當紅黑樹的個數小於6會轉爲鏈表。 當key值完全相同時(通過hashCode,equals比較), value會覆蓋。

  13. 實現多線程的方式

    1. 繼承Thread類,重寫run方法,調用start()

      new Thead(()->{}).start();

    2. 實現Runnable接口,重寫run方法,創建Thread對象,傳入Runnable, 調動start()

      new Thread(new Runnable()-{}).start();

    3. 使用線程池,傳入Runnable:

  14. 獲取Class對象的幾種方式:

    1. 類名.class: Class clazz = Person.class;

    2. 對象名.getClass(); Class clazz = person.getClass();

    3. Class.forName(全類名); Class clazz = Class.forName("com.test.Person");// 有異常需要處理

 

更多面試及技術資料,請關注公衆號 java_breeze 

 

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