原创 java進階篇--紅黑樹和平衡二叉樹有什麼區別?

數據結構屬於理解一些源碼和技術所必備的知識,比如要讀懂 Java 語言中 TreeMap 和 TreeSet 的源碼就要懂紅黑樹的數據結構,不然是無法理解源碼中關於紅黑樹數據的操作代碼的,比如左旋、右旋、添加和刪除操作等。因此本課時我們就

原创 java進階篇--Redis 是如何實現高可用的?

高可用是通過設計,減少系統不能提供服務的時間,是分佈式系統的基礎也是保障系統可靠性的重要手段。而 Redis 作爲一款普及率最高的內存型中間件,它的高可用技術也非常的成熟。 我們本課時的面試題是,Redis 是如何保證系統高可用的?它的實

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

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

原创 java基礎篇--線程的狀態有哪些?它是如何工作的?

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

原创 java進階篇--聊聊工作中常用的算法以及它的內部實現過程?

前面的文章中我們介紹了數據結構的知識,數據結構屬於計算機存儲的基礎,有了它才能更好地將數據進行存儲。而算法可以這樣理解:它是爲數據結構服務的,使用合適的算法可以更快地操作和查詢這些數據。 算法的內容有很多,隨隨便便一本算法書有個 700

原创 java進階篇--什麼是分佈式鎖?如何實現分佈式鎖?

“鎖”是我們實際工作和麪試中無法避開的話題之一,正確使用鎖可以保證高併發環境下程序的正確執行,也就是說只有使用鎖才能保證多人同時訪問時程序不會出現問題。 我們本課時的面試題是,什麼是分佈式鎖?如何實現分佈式鎖? 回答: 之前的文章中我們講

原创 java進階篇--Redis 的過期策略和內存淘汰機制有什麼區別?

Redis 和 MySQL 是面試繞不過的兩座大山,他們一個是關係型數據庫的代表(MySQL),一個是鍵值數據庫以及緩存中間件的一哥。尤其 Redis 幾乎是所有互聯網公司都在用的技術,比如國內的 BATJ、新浪、360、小米等公司;國外

原创 java基礎篇--詳解 ThreadPoolExecutor 的參數含義及源碼執行流程?

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

原创 Java框架篇--MQ的原理及使用場景?你都用過哪些 MQ 中間件?

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

原创 java框架篇--SpringBoot 和 Spring 有什麼區別?

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

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

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

原创 java進階篇--Docker 有什麼優點?使用時需要注意什麼問題?

Docker 從 2013 年發展到現在,它的普及率已經可以和最常用的 MySQL 和 Redis 並駕齊驅了,從最初偶爾出現在面試中,到現在幾乎成爲面試中必問的問題之一。如果再不瞭解 Docker 相關的知識點,可能就會與自己心儀的職位

原创 java基礎篇--如何實現本地緩存和分佈式緩存?

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

原创 Java基礎篇--synchronized 和 ReentrantLock 的實現原理是什麼?它們有什麼區別?

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

原创 java基礎篇--動態代理是如何實現的?JDK Proxy 和 CGLib 有什麼區別?

90% 的程序員直接或者間接的使用過動態代理,無論是日誌框架或 Spring 框架,它們都包含了動態代理的實現代碼。動態代理是程序在運行期間動態構建代理對象和動態調用代理方法的一種機制。 我們本課時的面試題是,如何實現動態代理?JDK P