原创 徹底理解Java反射以及動態代理中對反射的應用

反射 (Reflection) 是 Java 的特徵之一,它允許運行中的 Java 程序獲取自身的信息,並且可以操作類或對象的內部屬性。 簡而言之,通過反射,我們可以在運行時獲得程序或程序集中每一個類型的成員和成員的信息。程序中一

原创 Java對synchronized鎖的實現與優化以及四大引用

早期的synchronized鎖 在Java 1.5之前,多線程併發中,synchronized一直都是一個元老級關鍵字,而且給人的一貫印象就是一個比較重的鎖。爲此,在Java 1.6之後,這個關鍵字被做了很多的優化,從而讓以往的

原创 再見隊列同步器——CountDownLatch實現分析

CountDownLatch使用場景 CountDownLatch是一個同步工具類,它允許一個或多個線程一直等待,直到其他線程執行完後再執行。例如,應用程序的主線程希望在負責啓動框架服務的線程已經啓動所有框架服務之後執行。Coun

原创 InnoDB對事務的實現

首先,我們知道事務具有ACID四個特性,即:原子性,一致性,隔離性,持久性。這四個性質我們不用幹癟的文字去闡述,我們只需要知道事務保證了一系列的操作要麼全部執行,要麼一個也不執行,同時一旦事務提交,則其所做的修改會永久保存到數據庫

原创 從單機文件系統到分佈式文件系統

文件及硬盤管理是計算機操作系統的重要組成部分,文件是存儲在硬盤上的,文件的讀寫訪問速度必然受到硬盤的物理限制,那麼如何才能1分鐘完成一個100T大文件的遍歷呢? 做軟件開發時,必然要經常和文件系統打交道,而文件系統也是一個軟件,瞭

原创 爲什麼需要JMM

Java語言在設計之初就引入了線程的概念,以充分利用現代處理器的計算能力,這既帶來了強大、靈活的多線程機制,也帶來了線程安全等令人混淆的問題,而Java內存模型(Java Memory Model,JMM)爲我們提供了一個在紛亂之

原创 又見隊列同步器——Condition接口的實現

Condition接口與Object監視器方法 任意一個Java對象,都擁有一組監視器方法(定義在java.lang.Object上),主要包括wait()、wait(long timeout)、nofity()以及notifyA

原创 Spring中用到的幾種典型的設計模式

Spring 框架中用到的設計模式非常多,不下十幾種。本文只挑選幾種典型的來解析。 適配器模式應用在Spring MVC中 Spring MVC定義一個Controller最常用的方式是,通過@Controller註解來標記某個類

原创 Java對函數式編程的支持

背景 現在主流的編程範式主要有三種,面向過程、面向對象和函數式編程。 函數式編程並非一個很新的東西,早在50多年前就已經出現了。近幾年,函數式編程越來越被人關注,出現了很多新的函數式編程語言,比如Clojure、Scala、Erl

原创 Mysql的索引和鎖

索引和鎖在數據庫中可以說是非常重要的知識點了,在面試中也會經常會被問到的。本文力求簡單講清每個知識點,希望大家看完能有所收穫。聲明:如果沒有說明具體的數據庫和存儲引擎,默認指的是MySQL中的InnoDB存儲引擎。 一、索引 我們

原创 面向對象及軟件設計原則總結

面向對象 現在,主流的編程範式或者編程風格有三種,它們分別是面向過程、面向對象和函數式編程。面向對象這種編程風格又是這其中最主流的。現在比較流行的編程語言大部分都是面向對象編程語言。大部分項目也都是基於面向對象編程風格開發的。面向

原创 Spring的一些知識點總結

什麼是spring? Spring是一個輕量級Java開發框架,最早由Rod Johnson創建,目的是爲了解決企業級應用開發的業務邏輯層和其他各層的耦合問題。 是一個分層的Java SE/Java EE full-stack(一

原创 觀察者模式及EventBus框架簡單實現

原理及應用場景 觀察者模式(Observer Design Pattern)也被稱爲發佈訂閱模式(Publish-Subscribe Design Pattern)。在GoF的《設計模式》一書中,它的定義是這樣的: Define

原创 一步一步實現優雅重試

重試的作用 對於重試是有場景限制的,不是什麼場景都適合重試,比如參數校驗不合法、寫操作等(要考慮寫是否冪等)都不適合重試。 遠程調用超時、網絡突然中斷可以重試。在微服務治理框架中,通常都有自己的重試與超時配置,比如dubbo可以設

原创 Java阻塞延遲隊列DelayQueue原理及使用

阻塞隊列 阻塞隊列(BlockingQueue)是一個支持兩個附加操作的隊列。這兩個附加的操作是:在隊列爲空時,從隊列中獲取元素的消費者線程會一直等待直到隊列變爲非空。當隊列滿時,向隊列中放置元素的生產者線程會等待直到隊列可用。阻