摘要:語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。有針對不同系統的特定實現,,,目的是使用相同的字節碼,它們都會給出相同的結果。
一、面向對象和面向過程的區別
面向過程
優點: 性能比面向對象高,因為類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、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 的所有部分,除了我們考慮商業功能的部分。
總結:
Oracle JDK 版本將每三年發布一次,而 OpenJDK 版本每三個月發布一次;
OpenJDK 是一個參考模型并且是完全開源的,而 Oracle JDK 是OpenJDK 的一個實現,并不是完全開源的;
Oracle JDK 比 OpenJDK 更穩定。OpenJDK 和 Oracle JDK 的代碼幾乎相同,但 Oracle JDK 有更多的類和一些錯誤修復。因此,如果您想開發企業/商業軟件,我建議您選擇 Oracle JDK,因為它經過了徹底的測試和穩定。某些情況下,有些人提到在使用 OpenJDK 可能會遇到了許多應用程序崩潰的問題,但是,只需切換到 Oracle JDK 就可以解決問題;
頂級公司正在使用 Oracle JDK,例如 Android Studio,Minecraft 和IntelliJ IDEA 開發工具,其中 Open JDK 不太受歡迎;
在響應性和 JVM 性能方面,Oracle JDK 與 OpenJDK 相比提供了更好的性能;
Oracle JDK 不會為即將發布的版本提供長期支持,用戶每次都必須通過更新到最新版本獲得支持來獲取最新版本;
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 的小游戲類似。
八. 字符型常量和字符串常量的區別形式上: 字符常量是單引號引起的一個字符 字符串常量是雙引號引起的若干個字符
含義上: 字符常量相當于一個整形值( ASCII 值),可以參加表達式運算 字符串常量代表一個地址值(該字符串在內存中存放位置)
占內存大小 字符常量只占 2 個字節 字符串常量占若干個字節(至少一個字符結束標志) (注意: char 在 Java 中占兩個字節)
九、 構造器 Constructor 是否可被 override在講繼承的時候我們就知道父類的私有屬性和構造方法并不能被繼承,所以Constructor 也就不能被 override(重寫),但是可以 overload(重載),所以你可以看到一個類中有多個構造函數的情況。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74459.html
摘要:好不容易在月號這天中午點左右接到了來自阿里的面試電話。這里會不斷收集和更新基礎相關的面試題,目前已收集題。面試重難點的和的打包過程多線程機制機制系統啟動過程,啟動過程等等掃清面試障礙最新面試經驗分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發面試題總結 各大公司 Jav...
摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡單,整個并發包下面的工具都是在為多線程服務。 去年的這個時候樓主通過兩個月的復習拿到了阿里巴巴的 offer,有一些運氣,也有一些心得,借著跳槽季來臨特此分享出來。簡單梳理一下我的復習思路,同時也希望和大家一起交流討論,一起學習,如果不對之處歡迎指正一...
摘要:我自己總結的學習的系統知識點以及面試問題,已經開源,目前已經。面試官那你都了解里面的哪些東西呢我哈哈哈這可是我的強項,從,說到,,又說到線程池,分別說了底層實現和項目中的應用。 我自己總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 35k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://github.com/Snailclimb... ...
摘要:面經因為我完全沒有面試經驗,從來沒有經歷過面試,于是想著在去這類大公司面試之前先找成都的小公司練練手,積累點面試經驗。于是三月份開始就有成都的小公司開始約我面試。 前序 從我高考成績出來那一刻開始,從我在高考志愿上填上計算機科學與技術這幾個當時在心中堪稱神圣的幾個字開始,我就已經把進入中國互聯網最高殿堂BAT作為我整個大學奮斗的目標,哪怕我就讀的是一所位于內陸的雙非一本大學我也認為我能...
閱讀 2322·2021-11-17 09:33
閱讀 848·2021-10-13 09:40
閱讀 579·2019-08-30 15:54
閱讀 786·2019-08-29 15:38
閱讀 2423·2019-08-28 18:15
閱讀 2481·2019-08-26 13:38
閱讀 1847·2019-08-26 13:36
閱讀 2135·2019-08-26 11:36