這套Java面試題可以讓你拿offer成功率再翻一番

一、面向對象和麪向過程的區別

面向過程

優點: 性能比面向對象高,因爲類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、Linux/Unix 等一般採用面向過程開發,性能是最重要的因素。

缺點: 沒有面向對象易維護、易複用、易擴展

面向對象

優點: 易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護

缺點: 性能比面向過程低

二、Java 語言有哪些特點:

簡單易學;面向對象(封裝,繼承,多態);平臺無關性( Java 虛擬機實現平臺無關性);可靠性;安全性;支持多線程;支持網絡編程並且很方便;編譯與解釋並存;

三、關於 JVM JDK 和 JRE 最詳細通俗的解答

JVM

Java 虛擬機(JVM)是運行 Java 字節碼的虛擬機。JVM 有針對不同系統的特定實現(Windows,Linux,macOS),目的是使用相同的字節碼,它們都會給出相同的結果。

什麼是字節碼?採用字節碼的好處是什麼?

在 Java 中,JVM 可以理解的代碼就叫做字節碼(即擴展名爲 .class 的文件),它不面向任何特定的處理器,只面向虛擬機。Java 語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。所以 Java 程序運行時比較高效,而且,由於字節碼並不專對一種特定的機器,因此,Java 程序無須重新編譯便可在多種不同的計算機上運行。

Java 程序從源代碼到運行一般有下面 3 步:

我們需要格外注意的是 .class->機器碼 這一步。在這一步 jvm 類加載器首先加載字節碼文件,然後通過解釋器逐行解釋執行,這種方式的執行速度會相對比較慢。而且,有些方法和代碼塊是經常需要被調用的,也就是所謂的熱點代碼,所以後面引進了 JIT 編譯器,JIT 屬於運行時編譯。當 JIT 編譯器完成第一次編譯後,其會將字節碼對應的機器碼保存下來,下次可以直接使用。而我們知道,機器碼的運行效率肯定是高於 Java 解釋器的。這也解釋了我們爲什麼經常會說 Java 是編譯與解釋共存的語言。

HotSpot 採用了惰性評估(Lazy Evaluation)的做法,根據二八定律,消耗大部分系統資源的只有那一小部分的代碼(熱點代碼),而這也就是 JIT 所需要編譯的部分。JVM 會根據代碼每次被執行的情況收集信息並相應地做出一些優化,因此執行的次數越多,它的速度就越快。JDK 9 引入了一種新的編譯模式AOT(Ahead of Time Compilation),它是直接將字節碼編譯成機器碼,這樣就避免了 JIT 預熱等各方面的開銷。JDK 支持分層編譯和 AOT 協作使用。但是 ,AOT 編譯器的編譯質量是肯定比不上 JIT 編譯器的。

總結:Java 虛擬機(JVM)是運行 Java 字節碼的虛擬機。JVM 有針對不同系

統的特定實現(Windows,Linux,macOS),目的是使用相同的字節碼,它們

都會給出相同的結果。字節碼和不同系統的 JVM 實現是 Java 語言“一次編

譯,隨處可以運行”的關鍵所在。

JDK 和 JRE

JDK 是 Java Development Kit,它是功能齊全的 Java SDK。它擁有 JRE 所擁有的一切,還有編譯器(javac)和工具(如 javadoc 和 jdb)。它能夠創建和編譯程序。

JRE 是 Java 運行時環境。它是運行已編譯 Java 程序所需的所有內容的集合,包括 Java 虛擬機(JVM),Java 類庫,java 命令和其他的一些基礎構件。但是,它不能用於創建新程序。

如果你只是爲了運行一下 Java 程序的話,那麼你只需要安裝 JRE 就可以了。如果你需要進行一些 Java 編程方面的工作,那麼你就需要安裝 JDK 了。但是,這不是絕對的。有時,即使您不打算在計算機上進行任何 Java 開發,仍然需要安裝 JDK。例如,如果要使用 JSP 部署 Web 應用程序,那麼從技術上講,您只是在應用程序服務器中運行 Java 程序。那你爲什麼需要 JDK 呢?因爲應用程序服務器會將 JSP 轉換爲 Java servlet,並且需要使用 JDK 來編譯servlet。

四、Oracle JDK 和 OpenJDK 的對比

可能在看這個問題之前很多人和我一樣並沒有接觸和使用過 OpenJDK 。那麼Oracle 和 OpenJDK 之間是否存在重大差異?下面通過我通過我收集到一些資料對你解答這個被很多人忽視的問題。

對於 Java 7,沒什麼關鍵的地方。OpenJDK 項目主要基於 Sun 捐贈的 HotSpot源代碼。此外,OpenJDK 被選爲 Java 7 的參考實現,由 Oracle 工程師維護。關於 JVM,JDK,JRE 和OpenJDK 之間的區別,Oracle 博客帖子在 2012 年有一個更詳細的答案:

問:OpenJDK 存儲庫中的源代碼與用於構建 Oracle JDK 的代碼之間有什麼區別?

答:非常接近 - 我們的 Oracle JDK 版本構建過程基於 OpenJDK 7 構建,只添加了幾個部分,例如部署代碼,其中包括 Oracle 的 Java 插件和 Java WebStart的實現,以及一些封閉的源代碼派對組件,如圖形光柵化器,一些開源的第三方組件,如 Rhino,以及一些零碎的東西,如附加文檔或第三方字體。展望未來,我們的目的是開源 Oracle JDK 的所有部分,除了我們考慮商業功能的部分。

總結:

1. Oracle JDK 版本將每三年發佈一次,而 OpenJDK 版本每三個月發佈一次;

2. OpenJDK 是一個參考模型並且是完全開源的,而 Oracle JDK 是OpenJDK 的一個實現,並不是完全開源的;

3. Oracle JDK 比 OpenJDK 更穩定。OpenJDK 和 Oracle JDK 的代碼幾乎相同,但 Oracle JDK 有更多的類和一些錯誤修復。因此,如果您想開發企業/商業軟件,我建議您選擇 Oracle JDK,因爲它經過了徹底的測試和穩定。某些情況下,有些人提到在使用 OpenJDK 可能會遇到了許多應用程序崩潰的問題,但是,只需切換到 Oracle JDK 就可以解決問題;

4. 頂級公司正在使用 Oracle JDK,例如 Android Studio,Minecraft 和IntelliJ IDEA 開發工具,其中 Open JDK 不太受歡迎;

5. 在響應性和 JVM 性能方面,Oracle JDK 與 OpenJDK 相比提供了更好的性能;

6. Oracle JDK 不會爲即將發佈的版本提供長期支持,用戶每次都必須通過更新到最新版本獲得支持來獲取最新版本;

7. Oracle JDK 根據二進制代碼許可協議獲得許可,而 OpenJDK 根據 GPLv2 許可獲得許可。

 

五、Java 和 C++的區別

我知道很多人沒學過 C++,但是面試官就是沒事喜歡拿咱們 Java 和 C++ 比呀!沒辦法!!!就算沒學過 C++,也要記下來!

 都是面向對象的語言,都支持封裝、繼承和多態

 Java 不提供指針來直接訪問內存,程序內存更加安全

 Java 的類是單繼承的,C++ 支持多重繼承;雖然 Java 的類不可以多繼承,但是接口可以多繼承。

 Java 有自動內存管理機制,不需要程序員手動釋放無用內存

六、什麼是 Java 程序的主類 應用程序和小程序的主類有何不同

一個程序中可以有多個類,但只能有一個類是主類。在 Java 應用程序中,這個主類是指包含 main()方法的類。而在 Java 小程序中,這個主類是一個繼承自系統類 JApplet 或 Applet 的子類。應用程序的主類不一定要求是 public類,但小程序的主類要求必須是 public 類。主類是 Java 程序執行的入口點。

七、Java 應用程序與小程序之間有那些差別

簡單說應用程序是從主線程啓動(也就是 main() 方法)。applet 小程序沒有main 方法,主要是嵌在瀏覽器頁面上運行(調用 init()線程或者 run()來啓動),嵌入瀏覽器這點跟 flash 的小遊戲類似。

八、字符型常量和字符串常量的區別

1. 形式上: 字符常量是單引號引起的一個字符 字符串常量是雙引號引起的若干個字符

2. 含義上: 字符常量相當於一個整形值( ASCII 值),可以參加表達式運算 字符串常量代表一個地址值(該字符串在內存中存放位置)

3. 佔內存大小 字符常量只佔 2 個字節 字符串常量佔若干個字節(至少一個字符結束標誌) (注意: char 在 Java 中佔兩個字節)

九、構造器 Constructor 是否可被 override

在講繼承的時候我們就知道父類的私有屬性和構造方法並不能被繼承,所以Constructor 也就不能被 override(重寫),但是可以 overload(重載),所以你可以看到一個類中有多個構造函數的情況。

更多面試題分享

我總結出了一些架構視頻資料和互聯網公司java程序員面試涉及到的絕大部分面試題和答案做成了文檔和架構視頻資料還有完整高清的java進階架構學習思維導圖免費分享給大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式、高併發等架構技術資料),希望能幫助到您面試前的複習且找到一個好的工作,也節省大家在網上搜索資料的時間來學習。

資料領取方式:加羣956058372即可免費獲取!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章