簡介:聽說這是一套阿里Java工程師答題正確率只有50%的題目,由泰山版《Java開發手冊》做者孤盡親自出題,來測測憑藉你的Java基礎寫下答案,看看你能對幾題?java
聽說這是一套阿里Java工程師答題正確率只有50%的題目,由泰山版《Java開發手冊》做者孤盡親自出題,來測測憑藉你的Java基礎寫下答案,看看你能對幾題?編程
題目一: float a = 0.125f; double b = 0.125d; System.out.println((a - b) == 0.0); 代碼的輸出結果是什麼?
A. true
B. false編程語言
題目二: double c = 0.8; double d = 0.7; double e = 0.6; 那麼c-d與d-e是否相等?
A. true
B. falsespa
題目三: System.out.println(1.0 / 0); 的結果是什麼?
A. 拋出異常
B. Infinity
C. NaN設計
題目四: System.out.println(0.0 / 0.0); 的結果是什麼?
A. 拋出異常
B. Infinity
C. NaN
D. 1.03d
題目五: >>和>>>的區別是?
A. 任何整數沒有區別
B. 負整數必定沒有區別
C. 浮點數能夠>>運算,可是不能夠>>>運算
D. 正整數必定沒有區別code
題目六: 某個類有兩個重載方法:void f(String s) 和 void f(Integer i),那麼f(null)的會調用哪一個方法?
A. 前者
B. 後者
C. 隨機調用
D. 編譯出錯blog
題目七: 某個類有兩個重載方法:void g(double d) 和 void g(Integer i),那麼g(1)的會調用哪一個方法?
A. 前者
B. 後者
C. 隨機調用
D. 編譯出錯開發
題目八: String a = null; switch(a)匹配case中的哪一項?
A. null
B. "null"
C. 不與任何東西匹配,但不拋出異常
D. 直接拋出異常rem
題目九:<String, T, Alibaba> String get(String string, T t) { return string; }
此方法:
A. 編譯錯誤,從左往右第一個String處
B. 編譯錯誤,T處
C. 編譯錯誤,Alibaba處
D. 編譯正確
題目十: HashMap 初始容量 10000 即 new HashMap(10000),當往裏 put 10000 個元素時,須要 resize 幾回(初始化的那次不算)?
A. 1次
B. 2次
C. 3次
D. 0次
答案見下面哦,附帶解析~
題目一: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,16384*0.75 = 12288>10000,於是不須要擴容。