“極客時間-Java核心技術(shù)36講”閱讀總結(jié)(1)

一、對平臺的看法

? ? ? ?近兩天,我在技術(shù)公眾號看到了極客時間的推薦,里面提及到評論區(qū)有很多高手,于是我就付費體驗了一下,先表述一下感想。

? ? ? ?1、極客時間的專欄價格真的挺貴的,不過分享給朋友訂閱能獲取現(xiàn)金獎勵,加之為平臺推薦新用戶能獲得每個用戶一張優(yōu)惠券的獎勵,加起來能省不少錢,也許還能賺錢,在這里我為平臺的商業(yè)模式點個贊,確實能吸引不少用戶,如果大牛訂閱了專欄還會牽動著大批的粉絲,我就是其中的一個。

? ? ? ?2、評論區(qū)是真的質(zhì)量很高,而且大牛云集,是個學(xué)習(xí)的平臺。但是囿于篇幅,文章的質(zhì)量很多知識點都是點到即止,需要各位看官回去細(xì)細(xì)品味。我覺得最好的一點是能向作者提問,評論區(qū)里也有不少高能提問,能學(xué)到不少知識。

? ? ? ?3、于我而言,專欄對我?guī)椭畲蟮氖菍诘闹R體系比較完善,獲取的知識也比較容易串聯(lián)起來,而且還能吸取不少技術(shù)大拿的經(jīng)驗,這是我們僅靠看書無法得到的。但專欄始終無法代替書籍,書籍相對來說更深入完善,而且理解書中晦澀的內(nèi)容對人的提供更大。只是看書需要花大量的時間,專欄能在短時間內(nèi)獲取知識,總體來說專欄能讓人快速上手,可以作為書籍的一個補充。

? ? ? ?我覺得知識付費有知識付費的好處,畢竟這對作者來說也是一種鼓勵,而且花點小錢就能使自身能力得到提高,這對我們來說也是很大的財富。我覺得花錢得來的知識更使人懂得珍惜,而且不舍得花錢學(xué)習(xí)的人是真心想提高自己嗎?我表示很大的疑問。

二、學(xué)習(xí)總結(jié)

? ? ? ?侃完了對平臺的感受,接下來做正事,總結(jié)我今天學(xué)到的知識。

? ? ? ?先從“Java核心技術(shù)36講”這個專欄說起吧,這個專欄由Oracle首席工程師楊曉峰編寫,里面的文章都是以面試題為切入點,文章中給出了作者的觀點以及相關(guān)拓展,最后提出一道思考題來引導(dǎo)讀者對課程相關(guān)內(nèi)容進行思考。

? ? ? ?今天我就看了三篇(請原諒一名初出茅廬的菜鳥),每一篇都很仔細(xì)地看過,接下來結(jié)合評論區(qū)的內(nèi)容分篇總結(jié),以及對自己的疑問進行解答。

(1)談?wù)勀銓ava平臺的理解

? ? ? ?這種問題考察的是對Java平臺的整體把握,可以從語言特性、Java類庫、JVM、Java工具、Java生態(tài)、平臺模塊這幾方面回答。既要從整體上把握J(rèn)ava平臺,也要理解底層,做到知其然知其所以然。

Java語言特性:面向?qū)ο?、反射、泛型、枚舉、平臺無關(guān)等

Java類庫:集合框架、并發(fā)包、IO/NIO、網(wǎng)絡(luò)、安全等

JVM:GC機制、運行時、動態(tài)編譯等

Java工具:輔助工具(jar、jlink、jdeps等)、編譯工具(javac、jaotc等)、診斷工具(jmap、jstack、jconsole、jcmd等)

Java生態(tài):Spring等Java框架、Spark、Hadoop、ElasticSearch等

Java平臺模塊:JVM>JRE>JDK,JVM是Java運行時環(huán)境,JRE除了JVM外還有Java類庫等一些模塊,JDK包含了JRE以及Java工具

? ? ? ?Java程序從源代碼到運行需要經(jīng)過幾個步驟:Java源代碼通過編譯器編譯成字節(jié)碼,字節(jié)碼在JVM中通過解釋或編譯轉(zhuǎn)換成機器碼。令我疑惑的是Java的兩次編譯是怎么回事?字節(jié)碼解釋和編譯又有什么不同?Java的第一次編譯是源碼編譯成字節(jié)碼,這樣才能被JVM加載;第二次編譯是即時編譯JIT(just in time),它是運行時動態(tài)編譯,是方法級的。這是JVM的一種優(yōu)化機制,經(jīng)過多次調(diào)用選出熱點代碼,將其編譯成機器碼并緩存起來,接下來用的時候不用重復(fù)編譯。而解釋則少了緩存步驟,每次調(diào)用都要解釋執(zhí)行。熱點代碼有淘汰機制,會隨著機器的運行動態(tài)變化。因此,Java是解釋和編譯混合的一種模式,片面地說編譯執(zhí)行或者解釋執(zhí)行都是不對的。

? ? ? ?JVM啟動時,可通過傳入?yún)?shù)指定其運行模式。“-Xint”告訴JVM只解釋執(zhí)行;“-Xcomp”告訴JVM關(guān)閉解釋器,不解釋執(zhí)行。但這樣JVM啟動很慢,而且也不利于JIT的分支預(yù)測。Java9中引入了一種新的編譯方式AOT(Ahead-of-Time Compilation),將字節(jié)碼直接編譯成機器碼,省去了JIT預(yù)熱的開銷。

(2)Exception和Error的區(qū)別

? ? ? ?Exception和Error都是Throwable的子類,只有Throwable的子類才可以被拋出和捕獲。Exception是我們設(shè)計時可以用到的,能進行捕獲并處理異常。Error會導(dǎo)致程序處于非正常的、不可恢復(fù)狀態(tài)。

Error: OutOfMemoryError、StackOverflowError、NoClassDefFoundError等

Exception:可檢查異常和不可檢查異常

可檢查異常:編譯時檢查的一場( 如IOException以及一些顯式拋出的異常 )

不可檢查異常:編譯時不檢查,運行時才拋出的異常(如ClassNotFoundException、 NullPointerException、ArrayIndexOutOfBoundsException、ClassCastException、ArithmeticException、IllegalArgumentException等)

? ? ? ?那么,ClassNotFoundException和NoClassDefFoundError有什么區(qū)別呢?簡單來說,當(dāng)類加載器無法找在指定路徑下無法找到類的時候,就會拋出ClassNotFoundException。產(chǎn)生ClassNotFoundException的另一個原因就是多個類加載器在同一個包中加載同一個類,可以通過控制動態(tài)類加載過程避免。當(dāng)JVM或類加載器嘗試加載類的時候卻無法找到類的定義,會發(fā)生NoClassDefFoundError,也就是該類在編譯時存在,在其他類new時都可以通過編譯,但是在運行new時卻無法找到該類的定義

? ? ? ?對于異常處理,有一些實踐性的技巧。隨著Java的發(fā)展,產(chǎn)生了一些新特性,如try-with-resourse、multipyle catch。try-with-resourse是Java1.7引入的新特性,指的是在編寫代碼時可以不用顯式調(diào)用實現(xiàn)了AutoCloseable或Closable的類的關(guān)閉方法,編譯時編譯器會自動填充。multipyle catch是指多個Exception可以在一個catch塊中被捕獲,簡化代碼編寫。

? ? ? ?在進行異常捕獲時,我們捕獲特定異常,而不是Exception這類通用異常,這樣能在代碼中明確異常的目的。對于異常,我們盡量不要“生吞”,捕獲到異常而不做任何處理,一般情況下可以將異常信息記錄到日志中,不建議printStackTrace(),因為不知道異常信息會輸出到哪里。

? ? ? ?在處理異常時,我們要本著early throw,catch late的原則,先考慮拋出異常,等有足夠的信息時再捕獲處理,捕獲異常時需要注意避免包含敏感信息。

? ? ? ?checked exception已經(jīng)偏離了設(shè)計初衷,大多數(shù)情況下不可恢復(fù)。而且checked exception對函數(shù)式編程不兼容,意思是說受檢查異常在進行函數(shù)式編程時無法拋出,只能被捕獲。

? ? ? ?異常處理會給性能帶來一定的開銷,try-catch會影響JVM對代碼進行優(yōu)化,而Exception對象的創(chuàng)建會對棧進行快照,發(fā)生頻繁時開銷就不可忽視了。當(dāng)然創(chuàng)建Exception對象時也可以不進行??煺眨皇窃诰幋a前要仔細(xì)斟酌,避免遺漏必要的堆棧信息。

三、結(jié)束語

? ? ? ?由于時間限制,今天先總結(jié)兩篇文章??戳诉@幾篇文章,我最大大的感受就是我的基礎(chǔ)還不夠牢靠,很多熱門技術(shù)和專業(yè)屬于都不知道,如反應(yīng)式編程(Reactive Stream)、異常處理的TraceId、Spring的一些異常處理機制等?!奥仿湫捱h(yuǎn)兮,吾將上下而求索”,我相信只要不斷學(xué)習(xí)積累,一定能到達(dá)我向往的高度,共勉?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Java 簡介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計...
    子非魚_t_閱讀 4,562評論 1 44
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,679評論 18 399
  • Mac生成SSH Keys 使用git管理代碼的時候,需要生成一個公匙key,添加到自己的git賬戶中,才能從gi...
    海浪萌物閱讀 344評論 0 0
  • ??吹揭恍﹫蟮勒f現(xiàn)代社會人與人之間的關(guān)系異常冷漠,特別是城里。最簡單的事實就是同一棟樓住了許多年,卻不認(rèn)識對門的鄰...
    死侃腦殼的老妖婆閱讀 531評論 5 10
  • 工作幾年有哪些道理你覺得,如果早一些知道就好了? 我覺得有三個。 第一個是不要用戰(zhàn)術(shù)上的勤奮,掩蓋戰(zhàn)略上的懶惰。 ...
    Q喜悅_Liu閱讀 318評論 0 1

友情鏈接更多精彩內(nèi)容