Java基礎知識強化(用於自我鞏固)以及審查
1. Java 和 JDK 的關係
JDK(Java Development Kit)Java 開發工具包,它包括:編譯器、Java 執行環境(JRE,Java Runtime Environment)、JVM(Java 虛擬機器)監控和診斷工具等
Java 則表示一種開發語言。
2. Java 程式是怎麼執行的?
日常工作中使用的開發工具(IntelliJ IDEA 或 Eclipse 等)可以很方便的除錯程式,或者是通過打包工具把專案打包成 jar 包或者 war 包,放入 Tomcat 等 Web 容器中就可以正常執行了,這裡需要瞭解並掌握一下 Java 程式內部是如何執行的?
其實不論是在開發工具中執行還是在 Tomcat 中執行,Java 程式的執行流程基本都是相同的,它的執行流程如下:
- 先把 Java 程式碼編譯成位元組碼,也就是把 .java 型別的檔案編譯成 .class 型別的檔案。這個過程的大致執行流程:Java 原始碼 -> 詞法分析器 -> 語法分析器 -> 語義分析器 -> 位元組碼生成器 -> 最終生成位元組碼,其中任何一個節點執行失敗就會造成編譯失敗;
- 把 class 檔案放置到 Java 虛擬機器,這個虛擬機器通常指的是 Oracle 官方自帶的 Hotspot JVM;
- Java 虛擬機器使用類載入器(Class Loader)裝載 class 檔案;
- 類載入完成之後,會進行位元組碼校驗,位元組碼校驗通過之後 JVM 直譯器會把位元組碼翻譯成機器碼交由作業系統執行。但不是所有程式碼都是解釋執行的,JVM 對此做了優化,比如,以 Hotspot 虛擬機器來說,它本身提供了 JIT(Just In Time)也就是我們通常所說的動態編譯器,它能夠在執行時將熱點程式碼編譯為機器碼,這個時候位元組碼就變成了編譯執行。
Java 程式執行流程圖(記住這個圖-*)如下:
3. Java 虛擬機器是如何判定熱點程式碼的?
Java 虛擬機器判定熱點程式碼的方式有兩種:
- 基於取樣的熱點判定
主要是虛擬機器會週期性的檢查各個執行緒的棧頂,若某個或某些方法經常出現在棧頂,那這個方法就是“熱點方法”。這種判定方式的優點是實現簡單;缺點是很難精確一個方法的熱度,容易受到執行緒阻塞或外界因素的影響。
- 基於計數器的熱點判定
主要就是虛擬機器給每一個方法甚至程式碼塊建立了一個計數器,統計方法的執行次數,超過一定的閥值則標記為此方法為熱點方法。
Hotspot 虛擬機器使用的基於計數器的熱點探測方法。它使用了兩類計數器:方法呼叫計數器和回邊計數器,當到達一定的閥值是就會觸發 JIT 編譯。
方法呼叫計數器:在 client 模式下的閥值是 1500 次,Server 是 10000 次,可以通過虛擬機器引數: -XX:CompileThreshold=N
對其進行設定。但是JVM還存在熱度衰減,時間段內呼叫方法的次數較少,計數器就減小。
回邊計數器:主要統計的是方法中迴圈體程式碼執行的次數。
由上面的知識可以看出,要想做到對 Java 瞭如指掌,必須要好好學習 Java 虛擬機器(JVM),那除了 Java 虛擬機器外,還有哪些知識是面試必考,也是 Java 工程師必須掌握的知識呢?
這裡列個清單進行後續學習更新記錄
1. Java 基礎中的核心內容
字串和字串常量池的深入理解、Array 的操作和排序演算法、深克隆和淺克隆、各種 IO 操作、反射和動態代理(JDK 自身動態代理和 CGLIB)等。
2. 集合
集合和 String 是程式設計中最常用的資料型別,關於集合的知識也是面試備考的內容,它包含:連結串列(LinkedList)、TreeSet、棧(Stack)、佇列(雙端、阻塞、非阻塞佇列、延遲佇列)、HashMap、TreeMap 等,它們的使用和底層儲存資料結構都是熱門的面試內容。
3. 多執行緒
多執行緒使用和執行緒安全的知識也是必考的面試題目,它包括:死鎖、6 種執行緒池的使用與差異、ThreadLocal、synchronized、Lock、JUC(java.util.concurrent包)、CAS(Compare and Swap)、ABA 問題等。
4. 熱門框架
Spring、Spring MVC、MyBatis、SpringBoot
5. 分散式程式設計
訊息佇列(RabbitMQ、Kafka)、Dubbo、Zookeeper、SpringCloud 等。
6. 資料庫
MySQL 常用引擎的掌握、MySQL 字首索引、回表查詢、資料儲存結構、最左匹配原則、MySQL 的問題分析和排除方案、MySQL 讀寫分離的實現原理以及 MySQL 的常見優化方案等。 Redis 的使用場景、快取雪崩和快取穿透的解決方案、Redis 過期淘汰策略和主從複製的實現方案等。
7. Java 虛擬機器
虛擬機器的組成、垃圾回收演算法、各種垃圾回收器的區別、Java 虛擬機器分析工具的掌握、垃圾回收器的常用調優引數等。
8. 其他
常用演算法的掌握、設計模式的理解、網路知識和常見 Linux 命令的掌握等。
相關文章
- html基礎鞏固HTML
- 《怎麼鞏固JAVA基礎語法基礎(上)》Java
- Go 基礎鞏固加強-1.0-指標Go指標
- Java代審:Maven基礎知識JavaMaven
- JAVA面試 基礎加強與鞏固:反射、註解、泛型等Java面試反射泛型
- [鞏固基礎]總結Python基礎知識的14張思維導圖Python
- PHP 函式基礎鞏固PHP函式
- 「查缺補漏」鞏固你的Redis知識體系Redis
- Java 基礎鞏固:再談抽象類和介面Java抽象
- 基礎鞏固 --多執行緒執行緒
- python基礎題目大全,測試你的水平,鞏固知識(含答案)Python
- Flutter的強制自我審查Flutter
- java基礎知識-序列化/反序列化-gson基礎知識Java
- 鞏固好基礎,才能學好LinuxLinux
- 計算機基礎知識(自我的理解)計算機
- Java基礎知識系列—序列化Java
- Java基礎鞏固第三天(泛型、ArrayList、LinkList、HashSet)Java泛型
- 基礎鞏固、探尋Java裝箱和拆箱的奧妙!Java
- java基礎鞏固-淺析String原始碼及其不可變性Java原始碼
- Java基礎知識Java
- 脫殼基礎知識以及簡單應用
- 長篇總結之JavaScript,鞏固前端基礎JavaScript前端
- 鞏固系統韌性三個基礎策略
- 初識Java Java基礎知識Java
- Java基礎概念知識Java
- java基礎知識點Java
- Java基礎知識(二)Java
- Java SE 基礎知識Java
- Java 物件導向基礎 以及進階知識 總結Java物件
- 用例基礎知識
- go學習鞏固知識點(3) 資料庫操作 sql.DB 增刪改查Go資料庫SQL
- 學Python要避免哪些坑,如何鞏固好基礎Python
- 鞏固Python基礎必學的22個語法Python
- Java併發--基礎知識Java
- Java基礎知識點梳理Java
- Java基礎知識——異常Java
- Java基礎知識總結Java
- Java基礎知識面試題Java面試題