前言
花了近一個月的時間整理出了這套Java面試題及答案2020年最新版!(文末附參考答案)
本套Java面試題總共分為以下這十三個模塊:
-
Java基礎知識面試題
-
Java異常面試題
-
JVM面試題
-
Spring面試題
-
Spring MVC面試題
-
Spring Boot面試題
-
Spring Cloud面試題
-
MyBatis面試題
-
Redis面試題
-
Dubbo面試題
-
Tomcat面試題
-
ZooKeeper面試題
-
Netty面試題
一、Java基礎知識面試題
1、Java概述
-
何為編程?
-
什么是Java?
-
jdk1.5之后的三大版本?
-
JVM、JRE和JDK的關系?
-
什么是跨平台性?原理是什么?
-
Java語言有哪些特點?
-
什么是字節碼?采用字節碼的最大好處是什么?
-
什么是Java程序的主類?應用程序和小程序的主類有何不同?
-
Java應用程序與小程序之間有那些差別?
-
Java和C++的區別?
-
Oracle JDK 和 OpenJDK 的對比?
2、基礎語法
①. 數據類型
-
Java有哪些數據類型
-
switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
-
用最有效率的方法計算 2 乘以 8
-
Math.round(11.5) 等於多少?Math.round(-11.5)等於多少
-
float f=3.4;是否正確
-
short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎
②. 編碼
-
Java語言采用何種編碼方案?有何特點?
③. 注釋
-
什么Java注釋
④. 訪問修飾符
-
訪問修飾符 public,private,protected,以及不寫(默認)時的區別
⑤. 運算符
-
&和&&的區別
⑥. 關鍵字
-
Java 有沒有 goto
-
final 有什么用?
-
final finally finalize區別
-
this關鍵字的用法
-
super關鍵字的用法
-
this與super的區別
-
static存在的主要意義
-
static的獨特之處
-
static應用場景
-
static注意事項
⑦. 流程控制語句
-
break ,continue ,return 的區別及作用
-
在 Java 中,如何跳出當前的多重嵌套循環
3、面向對象
①. 面向對象概述
-
面向對象和面向過程的區別
②. 面向對象三大特性
-
面向對象的特征有哪些方面
-
什么是多態機制?Java語言是如何實現多態的?
-
面向對象五大基本原則是什么(可選)
③. 類與接口
-
抽象類和接口的對比
-
普通類和抽象類有哪些區別?
-
抽象類能使用 final 修飾嗎?
-
創建一個對象用什么關鍵字?對象實例與對象引用有何不同?
④. 變量與方法
-
成員變量與局部變量的區別有哪些
-
在Java中定義一個不做事且沒有參數的構造方法的作用
-
在調用子類構造方法之前會先調用父類沒有參數的構造方法,其目的是?
-
一個類的構造方法的作用是什么?若一個類沒有聲明構造方法,改程序能正確執行嗎?為什么?
-
構造方法有哪些特性?
-
靜態變量和實例變量區別
-
靜態變量與普通變量區別
-
靜態方法和實例方法有何不同?
-
在一個靜態方法內調用一個非靜態成員為什么是非法的?
-
什么是方法的返回值?返回值的作用是什么?
⑤. 內部類
-
什么是內部類?
-
內部類的分類有哪些
-
內部類的優點
-
內部類有哪些應用場景
-
局部內部類和匿名內部類訪問局部變量的時候,為什么變量必須要加上final?
-
內部類相關,看程序說出運行結果
⑥. 重寫與重載
-
構造器(constructor)是否可被重寫(override)
-
重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?
⑦. 對象相等判斷
-
== 和 equals 的區別是什么
-
hashCode 與 equals (重要)
-
對象的相等與指向他們的引用相等,兩者有什么不同?
⑧. 值傳遞
-
當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,並可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞
-
為什么 Java 中只有值傳遞
-
值傳遞和引用傳遞有什么區別
⑨. Java包
-
JDK 中常用的包有哪些
-
import java和javax有什么區別
4、IO流
-
java 中 IO 流分為幾種?
-
BIO,NIO,AIO 有什么區別?
-
Files的常用方法都有哪些?
5、反射
-
什么是反射機制?
-
反射機制優缺點
-
反射機制的應用場景有哪些?
-
Java獲取反射的三種方法
6、網絡編程
7、常用API
①. String相關
-
字符型常量和字符串常量的區別
-
什么是字符串常量池?
-
String 是最基本的數據類型嗎
-
String有哪些特性
-
String為什么是不可變的嗎?
-
String真的是不可變的嗎?
-
是否可以繼承 String 類
-
String str="i"與 String str=new String("i")一樣嗎?
-
String s = new String("xyz");創建了幾個字符串對象
-
如何將字符串反轉?
-
數組有沒有 length()方法?String 有沒有 length()方法
-
String 類的常用方法都有那些?
-
在使用 HashMap 的時候,用 String 做 key 有什么好處?
-
String和StringBuffer、StringBuilder的區別是什么?String為什么是不可變的
②. Date相關
③. 包裝類相關
-
自動裝箱與拆箱
-
int 和 Integer 有什么區別
-
Integer a= 127 與 Integer b = 127相等嗎
8、常用工具類庫
9、單元測試
10、日志
二、Java異常面試題
1、Error 和 Exception 區別是什么?
2、運行時異常和一般異常(受檢異常)區別是什么?
3、JVM 是如何處理異常的?
4、throw 和 throws 的區別是什么?
5、final、finally、finalize 有什么區別?
6、NoClassDefFoundError 和 ClassNotFoundException 區別?
7、try-catch-finally 中哪個部分可以省略?
8、try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?
9、類 ExampleA 繼承 Exception,類 ExampleB 繼承ExampleA?
10、常見的 RuntimeException 有哪些?
11、Java常見異常有哪些?
三、JVM面試題
1、Java內存區域
-
說一下 JVM 的主要組成部分及其作用?
-
說一下 JVM 運行時數據區?
-
深拷貝和淺拷貝?
-
說一下堆棧的區別?
-
隊列和棧是什么?有什么區別?
2、HotSpot虛擬機對象探秘
-
對象的創建
-
為對象分配內存
-
處理並發安全問題
-
對象的訪問定位
3、內存溢出異常
-
Java會存在內存泄漏嗎?請簡單描述
4、垃圾收集器
-
簡述Java垃圾回收機制
-
GC是什么?為什么要GC
-
垃圾回收的優點和原理。並考慮2種回收機制
-
垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?
-
Java 中都有哪些引用類型?
-
怎么判斷對象是否可以被回收?
-
在Java中,對象什么時候可以被垃圾回收
-
JVM中的永久代中會發生垃圾回收嗎
-
說一下 JVM 有哪些垃圾回收算法?
-
說一下 JVM 有哪些垃圾回收器?
-
詳細介紹一下 CMS 垃圾回收器?
-
新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么區別?
-
簡述分代垃圾回收器是怎么工作的?
5、內存分配策略
①. 簡述java內存分配與回收策率以及Minor GC和Major GC
-
對象優先在 Eden 區分配
-
大對象直接進入老年代
-
長期存活對象將進入老年代
6、虛擬機類加載機制
-
簡述java類加載機制?
-
描述一下JVM加載Class文件的原理機制
-
什么是類加載器,類加載器有哪些?
-
說一下類裝載的執行過程?
-
什么是雙親委派模型?
7、JVM調優
-
說一下 JVM 調優的工具?
-
常用的 JVM 調優的參數都有哪些?
四、參考答案
博主已將上面這些面試題及答案整理成了一份PDF版的面試手冊,大家關注我的微信公眾號:Java團長,然后回復“面試手冊”即可獲取~