最新版Java面試題限時分享
今天給大家分享一些關(guān)于Java面試時,常碰到的一些面試題,面試題共計分為22部分。給大家整理的PDF文件,有需要的可以索要。
大綱如下:

01-Java基礎(chǔ)知識面試題
02-Java集合容器面試題-重點
03-Java異常面試題
04-并發(fā)編程面試題-重點
05-Spring MVC面試題
06-Spring面試題-重點
07-MyBatis面試題
08-Java虛擬機(JVM)面試題-重點
09-MySQL數(shù)據(jù)庫面試題-重點
10-Tomcat面試題
11-Linux操作系統(tǒng)面試題
12-Redis面試題-重點
13-ZooKeeper面試題-重點
14-Dubbo面試題
15-消息中間件MQ面試題
16-Netty面試題
17-Spring Boot面試題-重點
18-Spring Cloud面試題
19-分布式面試必會
20-計算機網(wǎng)絡(luò)面試題
21-數(shù)據(jù)結(jié)構(gòu)與算法面試題-重點
22-23種設(shè)計模式總結(jié)
01-Java基礎(chǔ)知識面試題
何為編程
編程就是讓計算機為解決某個問題而使用某種程序設(shè)計語言編寫程序代碼,并最終得到結(jié)果的過程。
為了使計算機能夠理解人的意圖,人類就必須要將需解決的問題的思路、方法、和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據(jù)人的指令一步一步去工作,完成某種特定的任務(wù)。這種人和計算機之間交流的過程就是編程。
什么是Java
Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進行復雜的編程 。
jdk1.5之后的三大版本
Java SE(J2SE,Java 2 Platform Standard Edition,標準版)
Java SE 以前稱為 J2SE。它允許開發(fā)和部署在桌面、服務(wù)器、嵌入式環(huán)境和實時環(huán)境中使用的 Java 應(yīng)用程序。Java SE 包含了支持 JavaWeb 服務(wù)開發(fā)的類,并為Java EE和Java ME提供基礎(chǔ)。
Java EE(J2EE,Java 2 Platform Enterprise Edition,企業(yè)版)
Java EE 以前稱為 J2EE。企業(yè)版本幫助開發(fā)和部署可移植、健壯、可伸縮且安全的服務(wù)器端Java 應(yīng)用程序。Java EE 是在 Java SE 的基礎(chǔ)上構(gòu)建的,它提供 Web 服務(wù)、組件模型、管理和通信 API,可以用來實現(xiàn)企業(yè)級的面向服務(wù)體系結(jié)構(gòu)(service-orientedarchitecture,SOA)和 Web2.0應(yīng)用程序。2018年2月,Eclipse 宣布正式將 JavaEE 更名為 JakartaEE
Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
Java ME 以前稱為 J2ME。Java ME 為在移動設(shè)備和嵌入式設(shè)備(比如手機、PDA、電視機頂盒和打印機)上運行的應(yīng)用程序提供一個健壯且靈活的環(huán)境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內(nèi)置的網(wǎng)絡(luò)協(xié)議以及對可以動態(tài)下載的連網(wǎng)和離線應(yīng)用程序的豐富支持。基于 Java ME 規(guī)范的應(yīng)用程序只需編寫一次,就可以用于許多設(shè)備,而且可以利用每個設(shè)備的本機功能。
JVM、JRE和JDK的關(guān)系
JVM
Java Virtual Machine是Java虛擬機,Java程序需要運行在虛擬機上,不同的平臺有自己的虛擬機,因此Java語言可以實現(xiàn)跨平臺。
JRE
Java Runtime Environment包括Java虛擬機和Java程序所需的核心類庫等。核心類庫主要是java.lang包:包含了運行Java程序必不可少的系統(tǒng)類,如基本數(shù)據(jù)類型、基本數(shù)學函數(shù)、字符串處理、線程、異常處理類等,系統(tǒng)缺省加載這個包
如果想要運行一個開發(fā)好的Java程序,計算機中只需要安裝JRE即可。
JDK
Java Development Kit是提供給Java開發(fā)人員使用的,其中包含了Java的開發(fā)工具,也包括了JRE。所以安裝了JDK,就無需再單獨安裝JRE了。其中的開發(fā)工具:編譯工具(javac.exe),打包工具(jar.exe)等
JVM&JRE&JDK關(guān)系圖

什么是跨平臺性?原理是什么
所謂跨平臺性,是指java語言編寫的程序,一次編譯后,可以在多個系統(tǒng)平臺上運行。
實現(xiàn)原理:Java程序是通過java虛擬機在系統(tǒng)平臺上運行的,只要該系統(tǒng)可以安裝相應(yīng)的java虛擬機,該系統(tǒng)就可以運行java程序。
Java語言有哪些特點
簡單易學(Java語言的語法與C語言和C++語言很接近)
面向?qū)ο螅ǚ庋b,繼承,多態(tài))
平臺無關(guān)性(Java虛擬機實現(xiàn)平臺無關(guān)性)
支持網(wǎng)絡(luò)編程并且很方便(Java語言誕生本身就是為簡化網(wǎng)絡(luò)編程設(shè)計的)
支持多線程(多線程機制使應(yīng)用程序在同一時間并行執(zhí)行多項任)
健壯性(Java語言的強類型機制、異常處理、垃圾的自動收集等)
安全性
什么是字節(jié)碼?采用字節(jié)碼的最大好處是什么
字節(jié)碼:Java源代碼經(jīng)過虛擬機編譯器編譯后產(chǎn)生的文件(即擴展為.class的文件),它不面向任何特定的處理器,只面向虛擬機。
采用字節(jié)碼的好處:
Java語言通過字節(jié)碼的方式,在一定程度上解決了傳統(tǒng)解釋型語言執(zhí)行效率低的問題,同時又保留了解釋型語言可移植的特點。所以Java程序運行時比較高效,而且,由于字節(jié)碼并不專對一種特定的機器,因此,Java程序無須重新編譯便可在多種不同的計算機上運行。
先看下java中的編譯器和解釋器:
Java中引入了虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬機器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個的共同的接口。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然后由解釋器來將虛擬機代碼轉(zhuǎn)換為特定系統(tǒng)的機器碼執(zhí)行。在Java中,這種供虛擬機理解的代碼叫做字節(jié)碼(即擴展為.class的文件),它不面向任何特定的處理器,只面向虛擬機。每一種平臺的解釋器是不同的,但是實現(xiàn)的虛擬機是相同的。Java源程序經(jīng)過編譯器編譯后變成字節(jié)碼,字節(jié)碼由虛擬機解釋執(zhí)行,虛擬機將每一條要執(zhí)行的字節(jié)碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然后在特定的機器上運行,這就是上面提到的Java的特點的編譯與解釋并存的解釋。
Java源代碼---->編譯器---->jvm可執(zhí)行的Java字節(jié)碼(即虛擬指令)---->jvm---->jvm中解釋器----->機器可執(zhí)行的二進制機器碼---->程序運行。
什么是Java程序的主類?應(yīng)用程序和小程序的主類有何不同?
一個程序中可以有多個類,但只能有一個類是主類。在Java應(yīng)用程序中,這個主類是指包含main()方法的類。而在Java小程序中,這個主類是一個繼承自系統(tǒng)類JApplet或Applet的子類。應(yīng)用程序的主類不一定要求是public類,但小程序的主類要求必須是public類。主類是Java程序執(zhí)行的入口點。
Java應(yīng)用程序與小程序之間有那些差別?
簡單說應(yīng)用程序是從主線程啟動(也就是main()方法)。applet小程序沒有main方法,主要是嵌在瀏覽器頁面上運行(調(diào)用init()線程或者run()來啟動),嵌入瀏覽器這點跟flash的小游戲類似。
Java和C++的區(qū)別
我知道很多人沒學過C++,但是面試官就是沒事喜歡拿咱們Java和C++比呀!沒辦法?。?!就算沒學過C++,也要記下來!
都是面向?qū)ο蟮恼Z言,都支持封裝、繼承和多態(tài)
Java不提供指針來直接訪問內(nèi)存,程序內(nèi)存更加安全
Java的類是單繼承的,C++支持多重繼承;雖然Java的類不可以多繼承,但是接口可以多繼承。
Java有自動內(nèi)存管理機制,不需要程序員手動釋放無用內(nèi)存
Oracle JDK 和 OpenJDK 的對比
1. Oracle JDK版本將每三年發(fā)布一次,而OpenJDK版本每三個月發(fā)布一次;
2. OpenJDK 是一個參考模型并且是完全開源的,而Oracle JDK是OpenJDK的一個實現(xiàn),并不是完全開源的;
3. Oracle JDK 比 OpenJDK 更穩(wěn)定。OpenJDK和Oracle JDK的代碼幾乎相同,但Oracle JDK有更多的類和一些
錯誤修復。因此,如果您想開發(fā)企業(yè)/商業(yè)軟件,我建議您選擇Oracle JDK,因為它經(jīng)過了徹底的測試和穩(wěn)定。某
些情況下,有些人提到在使用OpenJDK 可能會遇到了許多應(yīng)用程序崩潰的問題,但是,只需切換到Oracle JDK就
可以解決問題;
4. 在響應(yīng)性和JVM性能方面,Oracle JDK與OpenJDK相比提供了更好的性能;
5. Oracle JDK不會為即將發(fā)布的版本提供長期支持,用戶每次都必須通過更新到最新版本獲得支持來獲取最新版
本;
6. Oracle JDK根據(jù)二進制代碼許可協(xié)議獲得許可,而OpenJDK根據(jù)GPL v2許可獲得許可。
由于內(nèi)容過多在這里就不一一寫在文章中了,有需要的三連后私信索要