原创 28-你知道哪些設計模式?分別對應的應用場景有哪些?

上一課時我們講了單例模式的 8 種實現方式以及它的優缺點,可見設計模式的內容是非常豐富且非常有趣。我們在一些優秀的框架中都能找到設計模式的具體使用,比如前面 MyBatis 中(第 13 課時)講的那些設計模式以及具體的使用場景,

原创 25-你用過哪些垃圾回收器?它們有什麼區別?

上一課時我們講了垃圾回收的理論知識,而本課時將介紹這些理論知識的具體實踐。垃圾回收器也叫垃圾收集器,不同的廠商對垃圾收集器的實現也是不同的,這裏主要介紹目前使用最廣泛的 OracleJDK 中自帶的 HotSpot 虛擬機中的幾個

原创 13-MyBatis 使用了哪些設計模式?在源碼中是如何體現的?

MyBatis 的前身是 IBatis,IBatis 是由 Internet 和 Abatis 組合而成,其目的是想當做互聯網的籬笆牆,圍繞着數據庫提供持久化服務的一個框架,2010 年正式改名爲 MyBatis。它是一款優秀的持

原创 12-底層源碼分析 Spring 的核心功能和執行流程?(下)

上一課時我們講了 Bean 相關的內容,它其實也是屬於 IoC 的具體實現之一,本課時我們就來講講 Spring 中其他幾個高頻的面試點,希望能起到拋磚引玉的作用,能爲你理解 Spring 打開一扇門。因爲 Spring 涉及的內

原创 14-SpringBoot 有哪些優點?它和 Spring 有什麼區別?

Spring 和 Spring Boot 的區別很多新手容易搞混,從這道簡單的面試題也可以很輕易試探出你的 Java 基礎功底,如果連這個問題都答不上來的話,通常就沒有什麼下文了,因爲這已經是用人單位對面試者的最低要求了,所以本課

原创 15-MQ 有什麼作用?你都用過哪些 MQ 中間件?

在第 10 課時中講過“手寫消息隊列”,當時粗略的講了 Java API 中使用 Queue 實現自定義消息隊列,以及使用 Delayed 實現延遲隊列的示例;同時還講了 RabbitMQ 中的一些基礎概念。本課時我們將會更加深入

原创 03-線程的狀態有哪些?它是如何工作的?

線程(Thread)是併發編程的基礎,也是程序執行的最小單元,它依託進程而存在。一個進程中可以包含多個線程,多線程可以共享一塊內存空間和一組系統資源,因此線程之間的切換更加節省資源、更加輕量化,也因此被稱爲輕量級的進程。 當然,線

原创 11-底層源碼分析 Spring 的核心功能和執行流程?(上)

Spring Framework 已是公認的 Java 標配開發框架了,甚至還有人說 Java 編程就是面向 Spring 編程的,可見 Spring 在整個 Java 體系中的重要位置。 Spring 中包含了衆多的功能和相關模

原创 07-深克隆和淺克隆有什麼區別?它的實現方式有哪些?

使用克隆可以爲我們快速地構建出一個已有對象的副本,它屬於 Java 基礎的一部分,也是面試中常被問到的知識點之一。 我們本課時的面試題是,什麼是淺克隆和深克隆?如何實現克隆? 典型回答 淺克隆(Shadow Clone)是把原型對

原创 02-HashMap 底層實現原理是什麼?JDK8 做了哪些優化?

HashMap 是使用頻率最高的類型之一,同時也是面試經常被問到的問題之一,這是因爲 HashMap 的知識點有很多,同時它又屬於 Java 基礎知識的一部分,因此在面試中經常被問到。 本課時的面試題是,HashMap 底層是如何

原创 09-如何實現本地緩存和分佈式緩存?

緩存(Cache) 是指將程序或系統中常用的數據對象存儲在像內存這樣特定的介質中,以避免在每次程序調用時,重新創建或組織數據所帶來的性能損耗,從而提高了系統的整體運行速度。 以目前的系統架構來說,用戶的請求一般會先經過緩存系統,如

原创 JVM-類加載機制(1)

JVM-類加載機制(1)類加載類加載器深入剖析:類的加載、連接與初始化類從磁盤上加載到內存中要經歷五個階段:加載、連接、初始化、使用、卸載類的加載詳解:類加載器的父親委託機制 類加載 class loading 在java代碼中

原创 06-談談你對鎖的理解?如何手動模擬一個死鎖?

在併發編程中有兩個重要的概念:線程和鎖,多線程是一把雙刃劍,它在提高程序性能的同時,也帶來了編碼的複雜性,對開發者的要求也提高了一個檔次。而鎖的出現就是爲了保障多線程在同時操作一組資源時的數據一致性,當我們給資源加上鎖之後,只有擁

原创 05-synchronized 和 ReentrantLock 的實現原理是什麼?它們有什麼區別?

在 JDK 1.5 之前共享對象的協調機制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的機制 ReentrantLock,該機制的誕生並不是爲了替代 synchronized,而是在 syn

原创 04-詳解 ThreadPoolExecutor 的參數含義及源碼執行流程?

線程池是爲了避免線程頻繁的創建和銷燬帶來的性能消耗,而建立的一種池化技術,它是把已創建的線程放入“池”中,當有任務來臨時就可以重用已有的線程,無需等待創建的過程,這樣就可以有效提高程序的響應速度。但如果要說線程池的話一定離不開 T