阿里巴巴十個Java小測試題

這是4月23號阿里技術公衆號出的十個Java的小測試題,感覺很有意思,我就做了一下,果然沒有全對,事後給出了答案,碼一下學習學習。
Java 測試題答案及詳解
-阿里技術出品-


  • 題目一: float a = 0.125f; double b = 0.125d; System.out.println((a - b) == 0.0); 代碼的輸出
    結果是什麼?
    A. true
    B. false
    解釋:首先浮點數是由符號位、指數位、有效數字三個部分組成,而0.125f、0.125d 均可以精確的表示
    出來,不存在精度丟失,因而a-b==0.0。

  • 題目二: double c = 0.8; double d = 0.7; double e = 0.6; 那麼c-d 與d-e 是否相等?
    A. true
    B. false
    解釋:類似十進制裏面的分數1/3,就是無限循環數,無法精確表示出來,同理浮點數裏有些數值也沒法
    精確表示出來。
    System.out.println(0.8-0.7);//輸出0.10000000000000009
    System.out.println(0.7-0.6);//輸出0.09999999999999998

  • 題目三: System.out.println(1.0 / 0); 的結果是什麼?
    A. 拋出異常
    B. Infinity
    C. NaN
    解釋:在整型運算中,除數是不能爲0 的,否則直接運行異常。但是在浮點數運算中,引入了無限這個概
    念。可以看一下源碼Double 的定義, public static final double POSITIVE_INFINITY = 1.0 / 0.0;

  • 題目四: System.out.println(0.0 / 0.0); 的結果是什麼?
    A. 拋出異常
    B. Infinity
    C. NaN
    D. 1.0
    解釋:java 源碼,Double 包裝類下,public static final double NaN = 0.0d / 0.0;NAN 表示非數
    字,它與任何值都不相等,甚至不等於它自己。

  • 題目五: >>和>>>的區別是?
    A. 任何整數沒有區別
    B. 負整數一定沒有區別
    C. 浮點數可以>>運算,但是不可以>>>運算
    D. 正整數一定沒有區別
    解釋:>>>表示不帶符號向右移動二進制數,移動後前面統統補0;兩個箭頭表示帶符號移動,正整數的
    符號位是0,因而兩者沒有區別

  • 題目六: 某個類有兩個重載方法:void f(String s) 和 void f(Integer i),那麼f(null)的會調用哪個
    方法?
    A. 前者
    B. 後者
    C. 隨機調用
    D. 編譯出錯
    解釋:1)精確匹配->2)基本數據類型(自動轉換成更大範圍)->3)封裝類(自動拆箱與裝箱)->4)
    子類向上轉型依次匹配->5)可變參數匹配。子類向上轉型,兩者的父類都是object 類(null 默認類型
    是object),因而會同時匹配上兩者,編譯器會報Ambiguous method call. Both 錯誤

  • 題目七: 某個類有兩個重載方法:void g(double d) 和 void g(Integer i),那麼g(1)的會調用哪個
    方法?
    A. 前者
    B. 後者
    C. 隨機調用
    D. 編譯出錯
    解釋:1)精確匹配->2)基本數據類型(自動轉換成更大範圍)->3)封裝類(自動拆箱與裝箱)->4)
    子類向上轉型依次匹配->5)可變參數匹配,本題是進行到第二步匹配上了。

  • 題目八: String a = null; switch(a)匹配case 中的哪一項?
    A. null
    B. “null”
    C. 不與任何東西匹配,但不拋出異常
    D. 直接拋出異常
    解釋:在Java 編程語言的設計者的判斷中,這比靜默跳過整個開關語句要合理,因爲使用null 作爲開關
    標籤的話,編寫的代碼將永遠不會執行。

  • 題目九: <String, T, Alibaba> String get(String string, T t) { return string; } 此方法:
    A. 編譯錯誤,從左往右第一個String 處
    B. 編譯錯誤,T 處
    C. 編譯錯誤,Alibaba 處
    D. 編譯正確
    解釋:尖括號裏的每個元素都指代一種未知類型,在定義處只具備執行Object 方法的能力,在編譯期
    間,所有的泛型信息都會被擦除,編譯後,get()的兩個參數是Object,返回值也是Object。

  • 題目十: HashMap 初始容量10000 即new HashMap(10000),當往裏put 10000 個元素時,需要
    resize 幾次?
    A. 1 次
    B. 2 次
    C. 3 次
    D. 0 次
    解釋:比10000 大,且最接近的2 的n 次方數是16384,默認負載因子是0.75,163840.75 =
    12288>10000,因而不需要擴容。*

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