1. 程式人生 > 其它 >2021最新Java面試題全集-2021年第二版20210805版

2021最新Java面試題全集-2021年第二版20210805版

在《2021最新Java面試題全集-20210326版》基礎之上,再次在手撕了數千道網路流傳的面試題,外加十多個不眠之夜,繼續調整和完善這個面試題集,形成本版《2021最新Java面試題全集-20210805版》,精心挑選了約556道題目(完整包含20210326版的題目),做為大家求職、跳槽前複習準備面試使用。

一:挑選題目的原則:

常考的、常被面試問到的

題目有一定的深度和難度的

題目涉及的知識點比較重要的

二:敲黑板啦,重點!重點!重點! 這份面試題集和其它網路流傳的有什麼不一樣???

1:去掉了 陳舊、過時 的題目,比如:舊版本的知識,或者是現在不怎麼用的技術,如struts2、memcache等等

2:所有題目的答案,都經過稽核校對,對於一些回答錯誤的、答非所問的、沒有答案的題目,都重新整理了答案,大約有1/3的題目答案都重新調整或者是重答了一遍,所以才耗費了那麼多時間。

3:這份面試題集會不斷補充、完善下去:

  1. 不斷補充新的、實際的面試題上來,同時淘汰掉一些舊的、考的少的題目
  2. 對於已有題目的回答,還會不斷調整和完善,以求更好

希望能夠對大家求職、跳槽的備戰有所幫助!

  • 第一章 Java基礎 (這裡是部分題目,完整的請前往公眾號下載,公眾號資訊見文末)

或者是到http://90416.com/bGQ 檢視完整的網頁版

一共二十七章,包含絕大部分主流的框架和麵試題。

1:Math.round(1.5) 等於多少?Math.round(-1.5)等於多少?

Math.round(1.5)的返回值是2,Math.round(-1.5)的返回值是-1。四捨五入的原理是在引數上加0.5然後進行下取整。

2:float f=3.5;是否正確?

不正確。

3:5是雙精度數,將雙精度型(double)賦值給浮點型(float)屬於下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制型別轉換float f =(float)3.5; 或者寫成float f =3.5F;。

4:short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎?

對於short s1 = 1; s1 = s1 + 1;由於1是int型別,因此s1+1運算結果也是int 型,需要強制轉換型別才能賦值給short型。

而short s1 = 1; s1 += 1;可以正確編譯,因為s1+= 1;相當於s1 = (short)(s1 + 1);其中有隱含的強制型別轉換。

+= 隱式的將加操作的結果型別強制轉換為持有結果的型別。如果兩這個整型相加,如 byte、short 或者 int,首先會將它們提升到 int 型別,然後在執行加法操作。

5:3*0.1 == 0.3 將會返回什麼?true 還是 false?

false,因為有些浮點數不能完全精確的表示出來。

6:兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,如果兩個物件x和y滿足x.equals(y) == true,它們的雜湊碼(hash code)應當相同。
Java對於eqauls方法和hashCode方法是這樣規定的:(1)如果兩個物件相同(equals方法返回true),那麼它們的hashCode值一定要相同;(2)如果兩個物件的hashCode相同,它們並不一定相同。
當然,你未必要按照要求去做,但是如果你違背了上述原則就會發現在使用容器時,相同的物件可以出現在Set集合中,同時增加新元素的效率會大大下降(對於使用雜湊儲存的系統,如果雜湊碼頻繁的衝突將會造成存取效能急劇下降)。
關於equals和hashCode方法, equals方法的:首先equals方法必須滿足自反性(x.equals(x)必須返回true)、對稱性(x.equals(y)返回true時,y.equals(x)也必須返回true)、傳遞性(x.equals(y)和y.equals(z)都返回true時,x.equals(z)也必須返回true)和一致性(當x和y引用的物件資訊沒有被修改時,多次呼叫x.equals(y)應該得到同樣的返回值),而且對於任何非null值的引用x,x.equals(null)必須返回false。


實現高質量的equals方法的訣竅包括:
(1) 使用==操作符檢查"引數是否為這個物件的引用";
(2) 使用instanceof操作符檢查"引數是否為正確的型別";
(3) 對於類中的關鍵屬性,檢查引數傳入物件的屬性是否與之相匹配;
(4) 編寫完equals方法後,問自己它是否滿足對稱性、傳遞性、一致性;
(5) 重寫equals時總是要重寫hashCode;
(6) 不要將equals方法引數中的Object物件替換為其他的型別,在重寫時不要忘掉註解。

7:當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
是值傳遞。Java語言的方法呼叫只支援引數的值傳遞。
當一個物件例項作為一個引數被傳遞到方法中時,引數的值就是對該物件的引用。物件的屬性可以在被呼叫過程中被改變,但對物件引用的改變是不會影響到呼叫者的。
Java中沒有傳引用實在是非常的不方便,這一點在Java 8中仍然沒有得到改進,正是如此在Java編寫的程式碼中才會出現大量的Wrapper類(將需要通過方法呼叫修改的引用置於一個Wrapper類中,再將Wrapper物件傳入方法)。

8:String str="i"與 String str=new String(“i”)一樣嗎?
不一樣,因為記憶體的分配方式不一樣。
String str="i"的方式,Java 虛擬機器會將其分配到常量池中;而 String str=new String(“i”) 則會被分到堆記憶體中。

9:請說出下面程式的輸出,90%的程式人員都可能錯?
class StringTest {
public static void main(String[] args) {
String s1 = "Programming";
String s2 = new String("Programming");
String s3 = "Program";
String s4 = "ming";
String s5 = "Program" + "ming";
String s6 = s3 + s4;
System.out.println(s1 == s2);
System.out.println(s1 == s5);
System.out.println(s1 == s6);
System.out.println(s1 == s6.intern());
System.out.println(s2 == s2.intern());
}
}
答案分別是:
false
true
false
true
false
下面詳細解釋一下:
第一個:
s1在常量池,s2在堆記憶體,而“==”比較的是引用的地址,所以false
第二個:
s1在常量池,s5的寫法是一種特例,在賦值語句中直接用兩個原始的字串相加的時候(用變數都不行),不會轉成使用StringBuilder來操作,而是直接執行字串連線,並把結果放在常量池裡面,所以true
第三個:
s1在常量池,s6是兩個變數相加,跟s5不一樣,會轉成使用StringBuilder來操作,結果是在StringBuilder物件裡面,所以false
第四個:
首先要清楚一點:String物件的intern方法會得到字串物件在常量池中對應的版本的引用(如果常量池中有一個字串與String物件的equals結果是true),如果常量池中沒有對應的字串,則該字串將被新增到常量池中,然後返回常量池中字串的引用。
s1在常量池,而s6.intern()也是常量池中字串的引用了,所以true
第五個:
s2在堆上,而s2.intern()也是常量池中字串的引用了,所以false


10:介面和抽象類有什麼區別?
• 實現方面:抽象類的子類使用 extends 來繼承;介面必須使用 implements 來實現介面。
• 建構函式方面:抽象類可以有建構函式;介面沒有建構函式。
• main 方法方面:抽象類可以有 main 方法,並且我們能執行它;介面不能有 main 方法。
• 實現數量方面:一個類可以實現很多個介面;但是隻能繼承一個抽象類,Java是單繼承的。
• 訪問修飾符:介面中的方法預設使用 public修飾;抽象類中的方法可以是任意訪問修飾符。

滿滿的都是誠意!!!

趕緊新增我的公眾號領取吧,無套路!無套路!無套路!

只是為了防止失聯,另外,後續更新的版本,也會及時更新到公眾號上!好方便大家獲取!

公眾號見下:

新增公眾號過後,直接輸入 20210805 ,即可自助獲取《2021最新Java面試題全集》-20210805版本的文件了!

祝大家都能找到滿意的工作!!!

敬請關注公眾號,這份面試題集會不斷完善,不斷髮放新版本!

後續版本都會在公眾號發放!