原创 Java類卸載之後無法刪除源文件,PF4J

背景 我們有一個Plugin的管理系統,可以實現Jar包的熱裝載,內部是基於一個Plugin管理類庫 PF4J,類似於OSGI,現在是GitHub上一個千星項目。 以下是該類庫的官網介紹 A plugin is a way fo

原创 深入理解Linux, NIO和Netty中的零拷貝(Zero-Copy)

背景 零拷貝(Zero Copy)是一個耳熟能詳的術語,衆多高性能的網絡框架如Netty,Kafka,Rocket MQ都將零拷貝標榜爲其特性。那麼究竟什麼是零拷貝? 零拷貝 Wikipedia上對零拷貝的解釋如下: “Zero

原创 設計模式,創建型模式之單例模式

1 概述 單例模式應該是最簡單,同時又是最複雜的一種創建型模式。因爲大家都知道這個模式:無非就是保證某個對象在系統中只存在一個實例。然而想要真正實現一個完美的單例模式,卻不簡單。 2 單例模式 一般單例模式的實現,都需要包含兩個步

原创 SpringBoot服務無法讀取系統變量,我重新認識了profile和bashrc

背景 CentOS服務器上,我們用Systemd部署了一個SpringBoot服務。關於如何部署,可以參考這篇文章。這個SpringBoot服務會用ProcessBuilder去調用機器上一個C++的可執行文件。 問題描述 Spr

原创 Quartz Task在Tomcat中重複運行問題解決

問題描述 Spring Quartz是很常用的定時任務框架。把一個Quartz的工程部署到Tomcat中啓動,意外地發現,每個Task都在同一時間跑了兩次,而本地在開發的過程中卻沒有問題。 問題排查 爲了防止多線程問題,有部分Ta

原创 Java四種引用類型詳解

前言 爲了滿足對不同情況的垃圾回收需求,Java從版本1.2開始,引入了4種引用類型(其實是額外增加了三種)的概念。本文將詳細介紹這四種引用。 Java 4種引用類型 Java中的4中引用類型分別爲強引用(String Refer

原创 設計模式,創建型模式之原型模式

1 概述 原型模式比較好理解,即以某個對象爲原型,創建該對象的副本。我們可以不用知道對象內部的屬性以及內部的狀態,是迪米特法則的很好體現。 2 原型模式 原型模式一般用在較爲複雜對象的創建,並且希望保留對象所持有的狀態。Java對

原创 Spring Scheduler重啓的正確打開方式

背景 定時任務是一個比較常見的功能,在某些情況下,需要重新啓動或者是重設Scheduler Job,但是官方的API上都沒有提供類似restart的方法,那該如何完成此需求呢? Spring Quartz Spring Quart

原创 設計模式,行爲模式之責任鏈模式

1 概述 責任鏈模式(Chain of Responsibility Pattern)是常見的行爲模式,它將處理器封裝成一條處理鏈,讓請求可以在鏈上傳遞。鏈上的處理器自行決定是否對請求進行處理。 2 責任鏈模式 一個典型的責任鏈模

原创 Typecho上手指南

前言 本文將介紹如何搭建基於Typecho的個人網站,以及分享一些遇到問題的解決方案。 Why Typecho Typecho是一個由國人開發的輕量級CMS,和WordPress一樣,可以快速建立個人博客網站。So Why Typ

原创 設計模式,行爲模式之中介者模式

1 概述 中介者模式(Mediator Pattern)是一種行爲模式,通過定義一箇中介對象,來管理一系列對象之間的依賴,從而解耦原有對象之間的關係。 2 中介者模式 大量的對象相互依賴,會大大增加系統複雜度,提高維護成本。中介者

原创 設計模式,創建型模式之工廠模式

1 概述 創建型模式,提供了一種創建對象的最佳實踐。工廠方法模式的核心思想,是通過統一的工廠類來獲取對象,而不需要調用類的構造方法。 2 優點 可以將類的實例化過程延緩到子類。調用者無需知道接口/抽象類的具體實現是什麼,利用工廠

原创 設計模式,行爲模式之備忘錄模式

1 概述 備忘錄模式(Memento Pattern),又叫Token模式,它提供了一種方式,來捕捉對象某一時刻的內部狀態,並將其保存成備忘錄(Memento),如此一來,對象可以根據此備忘錄恢復到之前的狀態。 2 備忘錄模式 幾

原创 設計模式,結構模式之外觀模式

1 概述 外觀模式,也叫門面模式,是一種常見結構模式,它是面向對象設計封裝思想的體現。 2 外觀模式 所謂外觀,其實是一個額外的類,它包含了複雜多變的子系統,並只對外提供簡單的接口。相比於子系統,外觀類提供的功能有限,因爲它只包含

原创 設計模式,結構模式之橋接模式

1 概述 上一篇文章介紹了外觀模式,接下來介紹橋接模式。橋接模式有時也被稱爲橋樑模式,也是一種常見結構模式,它主要體現了面向對象設計中的兩個思想: 面向接口編程。 合成複用原則,即組合優先於繼承。 2 橋接模式 橋接模式的目的