前言
在面試中,Dubbo 這個 RPC 框架的代表作一直是熱點,而且面試官也會根據經驗從各種角度提問,並且像剝洋蔥一樣層層深入底層原理,因此單純看看常規的面試題是遠遠不足的,最好還是能夠自己深入閱讀源碼。另一方面,程序猿在平時的工作中又很少接觸到源碼,而且自己硬啃源碼也是困難重重。
小編分享的這份Java后端開發面試總結包含了JavaOOP、Java集合容器、Java異常、並發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分布式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有很多粉絲靠這份PDF拿下眾多大廠的offer,今天在這里總結分享給到大家!【已完結】
完整版Java面試題地址:2021最新面試題合集集錦。
一、Java概述
1. 何為編程

2. 什么是Java

3. jdk1.5之后的三大版本

4. Jdk和Jre和JVM的區別

5. 什么是跨平台性?原理是什么
- 所謂跨平台性,是指java語言編寫的程序,一次編譯后,可以在多個系統平台上運行。
- 實現原理:Java程序是通過java虛擬機在系統平台上運行的,只要該系統可以安裝相應的java虛擬機,該系統就可以運行java程序。
6. Java語言有哪些特點
- 簡單易學(Java語言的語法與C語言和C++語言很接近)
- 面向對象(封裝,繼承,多態)
- 平台無關性(Java虛擬機實現平台無關性)
- 支持網絡編程並且很方便(Java語言誕生本身就是為簡化網絡編程設計的)
- 支持多線程(多線程機制使應用程序在同一時間並行執行多項任)
- 健壯性(Java語言的強類型機制、異常處理、垃圾的自動收集等)
- 安全性好
7. 什么是字節碼?采用字節碼的最大好處是什么

8. 什么是Java程序的主類?應用程序和小程序的主類有何不同?

9. Java應用程序與小程序之間有那些差別?

10. Java和C++的區別

11. Oracle JDK 和 OpenJDK 的對比

二、基礎語法
數據類型
12. Java有哪些數據類型

13. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上

14. 用最有效率的方法計算 2 乘以 8
- 2 << 3(左移 3 位相當於乘以 2 的 3 次方,右移 3 位相當於除以 2 的 3 次方)。
15. Math.round(11.5) 等於多少?Math.round(-11.5)等於多少
- Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數上加 0.5 然后進行下取整。
16. float f=3.4;是否正確

17. short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎

編碼
18. Java語言采用何種編碼方案?有何特點?
- Java語言采用Unicode編碼標准,Unicode(標准碼),它為每個字符制訂了一個唯一的數值,因此在任何的語言,平台,程序都可以放心的使用。
注釋
19. 什么Java注釋

訪問修飾符
20. 訪問修飾符 public,private,protected,以及不寫(默認)時的區別

運算符
21. &和&&的區別

關鍵字
22. Java 有沒有 goto
- goto 是 Java 中的保留字,在目前版本的 Java 中沒有使用。
23. final 有什么用?

24. final finally finalize區別

25. this關鍵字的用法

26. super關鍵字的用法

class Person{
protected String name;
public Person(String name) {
this.name = name;
}
}
class Student extends Person{
private String name;
public Student(String name, String name1) {
super(name);
this.name = name1;
}
public void getInfo(){
System.out.println(this.name);
//Child
System.out.println(super.name);
//Father
}
}
public class Test {
public static void main(String[] args) {
Student s1 = new Student("Father","Child");
s1.getInfo();
}
}

27. this與super的區別

28. static存在的主要意義

29. static的獨特之處

30. static應用場景

31. static注意事項
- 1、靜態只能訪問靜態。
- 2、非靜態既可以訪問非靜態的,也可以訪問靜態的
流程控制語句
32. break ,continue ,return 的區別及作用
- break 跳出總上一層循環,不再執行循環(結束當前的循環體)
- continue 跳出本次循環,繼續執行下次循環(結束正在執行的循環 進入下一個循環條件)
- return 程序返回,不再執行下面的代碼(結束當前的方法 直接返回)
33. 在 Java 中,如何跳出當前的多重嵌套循環

三、面向對象
面向對象概述
34. 面向對象和面向過程的區別

面向對象三大特性
35. 面向對象的特征有哪些方面

36. 什么是多態機制?Java語言是如何實現多態的?

37. 面向對象五大基本原則是什么(可選)

38. 抽象類和接口的對比
- 抽象類是用來捕捉子類的通用特性的。接口是抽象方法的集合。
- 從設計層面來說,抽象類是對類的抽象,是一種模板設計,接口是行為的抽象,是一種行為的規范。
相同點
- 接口和抽象類都不能實例化
- 都位於繼承的頂端,用於被其他實現或繼承
- 都包含抽象方法,其子類都必須覆寫這些抽象方法
不同點

39. 普通類和抽象類有哪些區別?
- 普通類不能包含抽象方法,抽象類可以包含抽象方法。
- 抽象類不能直接實例化,普通類可以直接實例化。
40. 抽象類能使用 final 修飾嗎?
不能,定義抽象類就是讓其他類繼承的,如果定義為 fifinal 該類就不能被繼承,這樣彼此就會產生矛盾,所以 fifinal 不能修飾抽象類
41. 創建一個對象用什么關鍵字?對象實例與對象引用有何不同?

變量與方法
42. 成員變量與局部變量的區別有哪些

43. 在Java中定義一個不做事且沒有參數的構造方法的作用

44. 在調用子類構造方法之前會先調用父類沒有參數的構造方法,其目的是?
幫助子類做初始化工作。
45. 一個類的構造方法的作用是什么?若一個類沒有聲明構造方法,改程序能正確執行嗎?為什么?
主要作用是完成對類對象的初始化工作。可以執行。因為一個類即使沒有聲明構造方法也會有默認的不帶參數的構造方法
46. 構造方法有哪些特性?
- 名字與類名相同;
- 沒有返回值,但不能用void聲明構造函數;
- 生成類的對象時自動執行,無需調用。
47. 靜態變量和實例變量區別

48. 靜態變量與普通變量區別

49. 靜態方法和實例方法有何不同?

50. 在一個靜態方法內調用一個非靜態成員為什么是非法的?
- 由於靜態方法可以不通過對象進行調用,因此在靜態方法里,不能調用其他非靜態變量,也不可以訪問非靜態變量成員。
51. 什么是方法的返回值?返回值的作用是什么?

內部類
52. 什么是內部類?

53. 內部類的分類有哪些




54. 內部類的優點

55. 內部類有哪些應用場景
- 一些多算法場合
- 解決一些非面向對象的語句塊。
- 適當使用內部類,使得代碼更加靈活和富有擴展性。
- 當某個類除了它的外部類,不再被其他的類使用時。
56. 局部內部類和匿名內部類訪問局部變量的時候,為什么變量必須要加上final?

57. 內部類相關,看程序說出運行結果

重寫與重載
58. 構造器(constructor)是否可被重寫(override)
構造器不能被繼承,因此不能被重寫,但可以被重載。
59. 重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?
- 方法的重載和重寫都是實現多態的方式,區別在於前者實現的是編譯時的多態性,而后者實現的是運行時的多態性。
- 重載:發生在同一個類中,方法名相同參數列表不同(參數類型不同、個數不同、順序不同),與方法返回值和訪問修飾符無關,即重載的方法不能根據返回類型進行區分
- 重寫:發生在父子類中,方法名、參數列表必須相同,返回值小於等於父類,拋出的異常小於等於父類,訪問修飾符大於等於父類(里氏代換原則);如果父類方法訪問修飾符為private則子類中就不是重寫。
對象相等判斷
60. == 和 equals 的區別是什么


61. hashCode 與 equals (重要)

62. 對象的相等與指向他們的引用相等,兩者有什么不同?
- 對象的相等 比的是內存中存放的內容是否相等而 引用相等 比較的是他們指向的內存地址是否相等。
值傳遞
63. 當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,並可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞

64. 為什么 Java 中只有值傳遞





65. 值傳遞和引用傳遞有什么區別

Java包
66. JDK 中常用的包有哪些
- java.lang:這個是系統的基礎類;
- java.io:這里面是所有輸入輸出有關的類,比如文件操作等;
- java.nio:為了完善 io 包中的功能,提高 io 包中性能而寫的一個新包;
- java.net:這里面是與網絡有關的類;
- java.util:這個是系統輔助類,特別是集合類;
- java.sql:這個是數據庫操作的類。
67. import java和javax有什么區別

四、IO流
68. java 中 IO 流分為幾種?



69. BIO,NIO,AIO 有什么區別?

70. Files的常用方法都有哪些?
- Files. exists():檢測文件路徑是否存在。
- Files. createFile():創建文件。
- Files. createDirectory():創建文件夾。
- Files. delete():刪除一個文件或目錄。
- Files. copy():復制文件。
- Files. move():移動文件。
- Files. size():查看文件個數。
- Files. read():讀取文件。
- Files. write():寫入文件。
五、反射
71. 什么是反射機制?

72. 反射機制優缺點

73. 反射機制的應用場景有哪些?

74. Java獲取反射的三種方法

六、常用API
String相關
75. 字符型常量和字符串常量的區別

76. 什么是字符串常量池?

77. String 是最基本的數據類型嗎

78. String有哪些特性

79. String為什么是不可變的嗎?

80. String真的是不可變的嗎?


81. 是否可以繼承 String 類
String 類是 fifinal 類,不可以被繼承。
82. String str="i"與 String str=new String(“i”)一樣嗎?
不一樣,因為內存的分配方式不一樣。String str="i"的方式,java 虛擬機會將其分配到常量池中;而 String str=new String(“i”) 則會被分到堆內存中。
83. String s = new String(“xyz”);創建了幾個字符串對象

84. 如何將字符串反轉?

85. 數組有沒有 length()方法?String 有沒有 length()方法
數組沒有 length()方法 ,有 length 的屬性。String 有 length()方法。JavaScript中,獲得字符串的長度是通過 length 屬性得到的,這一點容易和 Java 混淆。
86. String 類的常用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引處的字符。
- replace():字符串替換。
- trim():去除字符串兩端空白。
- split():分割字符串,返回一個分割后的字符串數組。
- getBytes():返回字符串的 byte 類型數組。
- length():返回字符串長度。
- toLowerCase():將字符串轉成小寫字母。
- toUpperCase():將字符串轉成大寫字符。
- substring():截取字符串。
- equals():字符串比較。
87. 在使用 HashMap 的時候,用 String 做 key 有什么好處?
HashMap 內部實現是通過 key 的 hashcode 來確定 value 的存儲位置,因為字符串是不可變的,所以當創建字符串時,它的 hashcode 被緩存下來,不需要再次計算,所以相比於其他對象更快。
88. String和StringBuffer、StringBuilder的區別是什么?String為什么是不可變的

包裝類相關
89. 自動裝箱與拆箱
- 裝箱:將基本類型用它們對應的引用類型包裝起來;
- 拆箱:將包裝類型轉換為基本數據類型;
90. int 和 Integer 有什么區別

91. Integer a= 127 與 Integer b = 127相等嗎

最后
小編分享的文章到這里就結束了,整理不易,歡迎大家一起交流,喜歡小編分享的文章記得關注我點贊喲,感謝支持!
