日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java 面试经典题解析:谈谈你对 Java 平台的理解?

發(fā)布時間:2025/3/21 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 面试经典题解析:谈谈你对 Java 平台的理解? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

作者|楊曉峰出處|極客時間《Java技術(shù)核心 36講》專欄

從你接觸 Java開發(fā)到現(xiàn)在,你對 Java最直觀的印象是什么呢?是它宣傳的 “Compile once, run anywhere”,還是目前看已經(jīng)有些過于形式主義的語法呢?你對于 Java平臺到底了解到什么程度?請你先停下來總結(jié)思考一下。

今天我要問你的問題是,談?wù)勀銓?Java平臺的理解?“Java是解釋執(zhí)行”,這句話正確嗎?

典型回答

Java本身是一種面向?qū)ο蟮恼Z言,最顯著的特性有兩個方面,一是所謂的“一次編譯,到處執(zhí)行”(Compile once, run anywhere),能夠非常容易地獲得跨平臺能力;另外就是垃圾收集(GC, Garbage Collection),Java通過垃圾收集器(Garbage Collector)回收分配內(nèi)存,大部分情況下,程序員不需要自己操心內(nèi)存的分配和回收。

我們?nèi)粘佑|到 JRE(Java Runtime Environment)或者 JDK(Java Development Kit)。 JRE,也就是 Java運行環(huán)境,包含了 JVM和 Java類庫,以及一些模塊等。而 JDK可以看作是 JRE的一個超集,提供了更多工具,比如編譯器、各種診斷工具等。

對于“Java是解釋執(zhí)行”這句話,這個說法不太準確。我們開發(fā)的 Java的源代碼,首先通過 Javac編譯成為字節(jié)碼(bytecode),然后,在運行時,通過 Java虛擬機(JVM)內(nèi)嵌的解釋器將字節(jié)碼轉(zhuǎn)換成為最終的機器碼。但是常見的 JVM,比如我們大多數(shù)情況使用的 Oracle JDK提供的 Hospot JVM,都提供了 JIT(Just-In-Time)編譯器,也就是通常所說的動態(tài)編譯器,JIT能夠在運行時將熱點代碼編譯成機器碼,這種情況下部分熱點代碼就屬于編譯執(zhí)行,而不是解釋執(zhí)行了。

考點分析

其實這個問題,問得有點籠統(tǒng)。題目本身是非常開放的,往往考察的是多個方面,比如,基礎(chǔ)知識理解是否很清楚;是否掌握 Java平臺主要模塊和運行原理等。很多面試者會在這種問題上吃虧,稍微緊張了一下,不知道從何說起,就給出個很簡略的回答。

對于這類籠統(tǒng)的問題,你需要盡量表現(xiàn)出自己的思維深入并系統(tǒng)化,Java知識理解得也比較全面,一定要避免讓面試官覺得你是個“知其然不知其所以然”的人。畢竟明白基本組成和機制,是日常工作中進行問題診斷或者性能調(diào)優(yōu)等很多事情的基礎(chǔ),相信沒有招聘方會不喜歡“熱愛學習和思考”的面試者。

即使感覺自己的回答不是非常完善,也不用擔心。我個人覺得這種籠統(tǒng)的問題,有時候回答得稍微片面也很正常,大多數(shù)有經(jīng)驗的面試官,不會因為一道題就對面試者輕易地下結(jié)論。通常會盡量引導(dǎo)面試者,把他的真實水平展現(xiàn)出來,這種問題就是做個開場熱身,面試官經(jīng)常會根據(jù)你的回答擴展相關(guān)問題。

知識擴展

回歸正題,對于 Java平臺的理解,可以從很多方面簡明扼要地談一下,例如:Java語言特性,包括泛型、Lambda等語言特性;基礎(chǔ)類庫,包括集合、IO/NIO、網(wǎng)絡(luò)、并發(fā)、安全等基礎(chǔ)類庫。對于我們?nèi)粘9ぷ鲬?yīng)用較多的類庫,面試前可以系統(tǒng)化總結(jié)一下,有助于臨場發(fā)揮。

或者談?wù)?JVM的一些基礎(chǔ)概念和機制,比如 Java的類加載機制,常用版本 JDK(如 JDK 8)內(nèi)嵌的 Class-Loader,例如 Bootstrap、 Application和 Extension Class-loader;類加載大致過程:加載、驗證、鏈接、初始化(這里參考了周志明的《深入理解 Java虛擬機》,非常棒的 JVM上手書籍);自定義 Class-Loader等。還有垃圾收集的基本原理,最常見的垃圾收集器,如 SerialGC、Parallel GC、 CMS、 G1等,對于適用于什么樣的工作負載最好也心里有數(shù)。這些都是可以擴展開的領(lǐng)域,我會在后面的專欄對此進行更系統(tǒng)的介紹。

當然還有 JDK包含哪些工具或者 Java領(lǐng)域內(nèi)其他工具等,如編譯器、運行時環(huán)境、安全工具、診斷和監(jiān)控工具等。這些基本工具是日常工作效率的保證,對于我們工作在其他語言平臺上,同樣有所幫助,很多都是觸類旁通的。

下圖是我總結(jié)的一個相對寬泛的藍圖供你參考。

不再擴展了,回到前面問到的解釋執(zhí)行和編譯執(zhí)行的問題。有些面試官喜歡在特定問題上“刨根問底兒”,因為這是進一步了解面試者對知識掌握程度的有效方法,我稍微深入探討一下。

眾所周知,我們通常把 Java分為編譯期和運行時。這里說的 Java的編譯和 C/C++是有著不同的意義的,Javac的編譯,編譯 Java源碼生成“.class”文件里面實際是字節(jié)碼,而不是可以直接執(zhí)行的機器碼。Java通過字節(jié)碼和 Java虛擬機(JVM)這種跨平臺的抽象,屏蔽了操作系統(tǒng)和硬件的細節(jié),這也是實現(xiàn)“一次編譯,到處執(zhí)行”的基礎(chǔ)。

在運行時,JVM會通過類加載器(Class-Loader)加載字節(jié)碼,解釋或者編譯執(zhí)行。就像我前面提到的,主流 Java版本中,如 JDK 8實際是解釋和編譯混合的一種模式,即所謂的混合模式(-Xmixed)。通常運行在 server模式的 JVM,會進行上萬次調(diào)用以收集足夠的信息進行高效的編譯,client模式這個門限是 1500次。Oracle Hotspot JVM內(nèi)置了兩個不同的 JIT compiler,C1對應(yīng)前面說的 client模式,適用于對于啟動速度敏感的應(yīng)用,比如普通 Java桌面應(yīng)用;C2對應(yīng) server模式,它的優(yōu)化是為長時間運行的服務(wù)器端應(yīng)用設(shè)計的。默認是采用所謂的分層編譯(TieredCompilation)。這里不再展開更多 JIT的細節(jié),沒必要一下子就鉆進去,我會在后面介紹分層編譯的內(nèi)容。

Java虛擬機啟動時,可以指定不同的參數(shù)對運行模式進行選擇。 比如,指定“-Xint”,就是告訴 JVM只進行解釋執(zhí)行,不對代碼進行編譯,這種模式拋棄了 JIT可能帶來的性能優(yōu)勢。畢竟解釋器(interpreter)是逐條讀入,逐條解釋運行的。與其相對應(yīng)的,還有一個“-Xcomp”參數(shù),這是告訴 JVM關(guān)閉解釋器,不要進行解釋執(zhí)行,或者叫作最大優(yōu)化級別。那你可能會問這種模式是不是最高效啊?簡單說,還真未必。“-Xcomp”會導(dǎo)致 JVM啟動變慢非常多,同時有些 JIT編譯器優(yōu)化方式,比如分支預(yù)測,如果不進行 profiling,往往并不能進行有效優(yōu)化。

除了我們?nèi)粘W畛R姷?Java使用模式,其實還有一種新的編譯方式,即所謂的 AOT(Ahead-of-Time Compilation),直接將字節(jié)碼編譯成機器代碼,這樣就避免了 JIT預(yù)熱等各方面的開銷,比如 Oracle JDK 9就引入了實驗性的 AOT特性,并且增加了新的 jaotc工具。利用下面的命令把某個類或者某個模塊編譯成為 AOT庫。

  • jaotc --output libHelloWorld.so HelloWorld.class

  • jaotc --output libjava.base.so --module java.base

  • ?

    然后,在啟動時直接指定就可以了。

    java -XX:AOTLibrary=./libHelloWorld.so,./libjava.base.so HelloWorld

    而且,Oracle JDK支持分層編譯和 AOT協(xié)作使用,這兩者并不是二選一的關(guān)系。如果你有興趣,可以參考相關(guān)文檔:http://openjdk.java.net/jeps/295。AOT也不僅僅是只有這一種方式,業(yè)界早就有第三方工具(如 GCJ、Excelsior JET)提供相關(guān)功能。

    另外,JVM作為一個強大的平臺,不僅僅只有 Java語言可以運行在 JVM上,本質(zhì)上合規(guī)的字節(jié)碼都可以運行,Java語言自身也為此提供了便利,我們可以看到類似 Clojure、Scala、Groovy、JRuby、Jython等大量 JVM語言,活躍在不同的場景。

    今天,我簡單介紹了一下 Java平臺相關(guān)的一些內(nèi)容,目的是提綱挈領(lǐng)地構(gòu)建一個整體的印象,包括 Java語言特性、 核心類庫與常用第三方類庫、Java虛擬機基本原理和相關(guān)工具,希望對你有所幫助。

    《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的Java 面试经典题解析:谈谈你对 Java 平台的理解?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 丰满少妇一区二区 | 少妇高潮灌满白浆毛片免费看 | 欧美日韩国产三级 | 亚洲av综合色区无码一二三区 | 制服丝袜在线第一页 | 国产suv精品一区二区6 | 人妻精品一区一区三区蜜桃91 | 999国产在线 | 69精品| 午夜激情视频网站 | 亚洲AV综合色区无码国产播放 | 九久久 | 久草视频手机在线观看 | 久久精品91| 欧美午夜在线视频 | 少妇高潮一区二区三区在线 | 天天摸天天做天天爽 | 亚洲区av | 日韩黄色一级 | 久久久三级视频 | 亚洲av永久一区二区三区蜜桃 | 天堂在线 | 一级片一级片 | 国产精品一卡 | 国产黄色视屏 | 亚洲在线成人 | 国产youjizz| 午夜秋霞影院 | n0659极腔濑亚美莉在线播放播放 | 欧美日韩69 | 香蕉毛片 | 一级性生活黄色片 | 97人妻精品一区二区三区动漫 | 手机看片一区 | 国产一区二区三区免费看 | 亚洲视频免费在线 | 美国做爰xxxⅹ性视频 | 国产三级a | 高清国产一区二区三区四区五区 | 人妻精品久久久久中文字幕 | 久久精品亚洲精品国产欧美 | 九九热在线免费观看 | 亚洲午夜免费 | 精品无码av在线 | 少妇天天干 | 91亚洲综合 | 老王66福利网| 日韩黄色小视频 | 老司机深夜网站 | 国产免费看av | 亚洲国产精品综合久久久 | 亚洲男性天堂 | 天堂视频免费在线观看 | 欧美肉大捧一进一出免费视频 | 亚洲福利二区 | a天堂在线观看视频 | 国产寡妇亲子伦一区二区三区四区 | 国产精彩视频一区二区 | 69久久夜色精品国产69 | 欧美三级小说 | 亚洲天堂一区二区三区 | 欧美精品免费播放 | 亚洲 日本 欧美 中文幕 | 久久久久久五月天 | 亚洲第一偷拍 | 国产睡熟迷奷系列精品视频 | 免费成人av在线 | 182tv福利视频 | 可以直接观看的av | 久久99免费 | 国产精品国产三级国产aⅴ 欧美bbbbbbbbbbbb18av | 亚洲视频a | 一区二区影院 | 国产在线成人精品午夜 | 久艹视频在线观看 | 日韩精品免费一区 | 婷婷成人在线 | 国产又黄又粗又爽 | 四虎在线免费播放 | 免费视频久久久 | 少妇真实被内射视频三四区 | 少妇又紧又色又爽又刺激 | 亚洲综合中文字幕在线 | 国产精品久久久久久久久久东京 | 男男车车的车车网站w98免费 | 天天做天天爽 | 欧洲精品久久 | 无码播放一区二区三区 | 欧美黄色特级视频 | 国产香蕉视频在线观看 | 一区二区三区国产精品视频 | 日韩一级片网站 | 色综合九九 | 九一成人网 | 亚洲一区二区三区四区在线播放 | 玉足女爽爽91 | 黄色免费网站在线观看 | 日本成人黄色 | 99精品亚洲|