標籤:ade 介紹 類載入機制 是什麼 垃圾收集器 模組 java面試題 解釋執行 監控
從你接觸java開發到現在,你對java最直觀的印象是什麼呢?是他宣傳的"write once ,run anywhere"還是目前看已經有些形式主義的文法呢?你對於java平台到底瞭解到什麼程度?請先停下來總結思考一下.
今天我要問你的問題是,談談你對java平台的理解?"java是解釋執行"這句話正確嗎?
典型回答.
java本身是一種物件導向的語言,最顯著地特徵有兩個方面,一是所謂的"書寫一次,到處運行.write once,run anywhere"能夠非常容易的獲得跨平台能力,另外就是記憶體回收,java通過記憶體回收行程,回收分配記憶體,大部分情況下,程式員不需要自己操心記憶體的分配和回收.我們日常會接觸到JRE或者JDK,jre就是java的運行環境,包括:jvm和java類庫,以及一些模組等.jdk可以看做jre的一個超集,提供更多工具,如:編譯器,各種診斷工具.
對於"java是解釋執行"這句話並不準確,我們開發的java原始碼,首先通過javac編譯成位元組碼,然後運行時,通過java虛擬機器(JVM)內嵌的解譯器將位元組碼轉換成為最終的機器碼,但是常見的jvm,比如我們大多數情況下使用的oracleJDK提供的hotspot jvm,都提供了jit編譯器,就是通常所說的動態編譯器,jit能夠在運行時將熱點代碼編譯成機器碼,這種情況下部分熱點代碼就屬於編譯執行,而不是解釋執行.
考點分析;
其實這個問題,問的有點籠統.題目本身是非常開放的,往往考察的是多個方面,比如,基礎知識理解是否清晰,是否掌握java平台主要模組和運行原理,很多面試者會在這種問題上吃虧,稍微緊張一下,就不知從何說起.
對於這類籠統的問題,你需要盡量表現出自己的思維深度和系統化理解,java知識理解也要全面.避免讓面試官覺得是"知其然而不知其所",畢竟明白基本組成和機制,是日常工作中進行問題診斷或者效能調優等多方面事情的基礎,相信沒人會不喜歡"熱愛學習和思考"的面試者.
即使覺得自己的回答不是非常完善,也不用擔心,我個人覺得這種籠統的問題,回答的片面寫也是正常,大多數有經驗的面試官,不會因為一個問題輕易對面試者下結論.會盡量引導面試者展示他的真實水平.這種問題是開場熱身,然後根據你的回答拓展問題.
知識拓展
迴歸正題,對於java平台的理解,可以從很多方面簡明扼要的談,例如;java語言特性包括泛型,lambda等語言特性.基礎類庫,包括集合,io\nio,網路,並發,安全等基礎類庫.對於我們日常工作應用較多的類庫,面試前可以系統總結,有助臨場發揮.
或者談談jvm的一些基礎概念和機制,比如java的類載入機制,常用版本jdk的內嵌的class-loader,例如bootstrap,application,和extension class-loader,類載入大致過程;載入,驗證,串連,初始化(周志明<深入理解java虛擬機器>很好的jvm上手書籍)自訂class-loader等.還有垃圾收集的基本原理,最常見的垃圾收集器,如cms,g1等對於適用於什麼樣的工作負載也要心理有數,這些都是可以拓展的領域,在後面專欄進行更系統介紹.
jdk或java領域的工具,如編譯器,運行時環境,安全工具,診斷和監控工具.這些基本工具是日常日常工作效率的保證.而對於其他的語言平台,也是觸類旁通.
java面試題(楊曉峰)---談談你對java平台的理解