原创 設計模式--動態代理的思考

在一些第三方框架中經常能看到動態代理的案例,尤其是RPC框架,ORM框架等,該篇將分析這些實現的原理,另外延伸在業務中的使用示例.動態代理模式關於代理模式在之前的關於IOC與AOP的一些理解中已經有了一些分析,所以在此不再敘述,只需要理解以

原创 設計模式--模板方法模式的思考

模板方法同樣也是一種很實用的方法,目的是提高代碼複用,並且統一大體的算法流程,比如一個一臺電腦主機,定義好放置CPU,硬盤,內存等空位後,就形成了一個骨架,那麼這個就是模板,具體的CPU,內存,硬盤是什麼牌子型號則不需要考慮,這些是具體到業

原创 設計模式--組合模式的思考

組合模式是一種抽象樹形結構的模式,其在業務開發中也是一種很有用的設計模式,下面開始分析.組合模式業務中有很多樹形結構的表示,比如下面的目錄結構 -- 男裝 -- 上衣 -- 品牌1 -- 品牌2

原创 工作--JWT實戰總結

公司的登錄模塊也從Session切換到JWT挺長一段時間了,抽時間來總結一下遇到的問題以及解決方案.爲什麼用JWT?在JWT之前,公司是利用傳統的Session來實現登錄狀態的保持,分佈式下則利用Redis實現Session共享集中管理,共

原创 並行設計模式--生產者消費者

Producer-Consumer與其說是模式,更不如說是一種思想,這種思想在很多模式中都有相應的體現,比如線程池,對象池,MQ等等。 Producer-Consumer的本質是在生產者與消費者之間引入一個通道(Channel暫且理解爲一個

原创 Java--讀寫鎖的實現原理

最近做的一個小項目中有這樣的需求: 整個項目有一份config.json保存着項目的一些配置,是存儲在本地文件的一個資源,並且應用中存在讀寫(讀>>寫)更新問題。既然讀寫併發操作,那麼就涉及到操作互斥,這裏自然想到了讀寫鎖,也順便對自己讀寫

原创 設計模式--觀察者模式的思考

觀察者模式在業務開發中相當有用的模式,本身挺簡單的,理解了一番後就立即對目前手上的項目做了一些優化,該文記錄一些自己的理解與應用,希望對你有啓發.觀察者模式觀察者模式描述的是一種一對多的關係,這裏的一可能是某個狀態發生變化,也可能是某一個事

原创 Java--StringBuilder,StringBuffer,StringJoiner

開始自己的一個半年計劃,也就是java相關常用類的源碼閱讀,通過閱讀查漏補缺,加深基礎知識的運用與理解.簡介StringBuilder,StringBuffer三個類在平時工作中很常用,因此詳細瞭解下還是很必須的,由類圖可以很清晰的得到其底

原创 Java--Enum的思考

枚舉類是Java5引進的特性,其目的是替換int枚舉模式或者String枚舉模式,使得語義更加清晰,另外也解決了行爲和枚舉綁定的問題.int枚舉模式在枚舉類之前該模式被廣泛使用,如果是int類型常量就被成爲int枚舉模式,同理是字符串類型常

原创 (轉)Java--棧與隊列

Java中棧與隊列相比集合來說不是很常用的數據結構,因此經常被忽略.個人覺得還是有必要掌握下,以備不時之需. Java中實際上提供了java.util.Stack來實現棧結構,但官方目前已不推薦使用,而是使用java.util.Deque雙

原创 設計模式--Builder模式的思考

在日常開發中總是會遇到多參數的情況,那麼對於多參數,尤其是可選參數衆多的情況,可能有如下的一些解決方案.重疊構造器模式重疊構造器模式在Java代碼中很常見,其解決的問題是參數過多情況下又不想給調用方帶來過多的實例化對象負擔.在這種情況下調用

原创 網站升級HTTPS與HTTP2記錄

最近看到兩篇文章對於HTTPS與HTTP2兩者講解的很詳細,分享並實踐一下,正好近期搗鼓了一個個人站點https://mrdear.cn/,可以用來實驗. 文章地址 爲什麼要把網站升級到HTTPS 怎樣把網站升級到http/2升級HTTPS

原创 設計模式--適配器模式的思考

個人認爲適配器模式是一種加中間層來解決問題的思想,爲的是減少開發工作量,提高代碼複用率.另外在對於第三方的服務中使用適配器層則可以很好的把自己系統與第三方依賴解耦,降低依賴.什麼是適配器模式適配器模式: 將一個類的接口轉換爲客戶所期望的另一

原创 算法回顧--如何寫遞歸?

遞歸書寫方法嚴格定義遞歸函數作用,包括參數,返回值,side effect先一般再特殊每次遞歸必須縮小問題規模每次問題規模縮小程度必須爲1總之遞歸就是”裝傻”的把原始的思路表現出來,不需要關心具體過程,只需要不停的縮小問題規模,然後答案自然

原创 Java學習記錄--自動拆箱與裝箱

先提問題什麼是自動拆箱與裝箱?什麼情況下會自動拆箱與裝箱?對性能的影響?使用建議什麼是自動拆箱與裝箱?自動拆箱與裝箱是Java5引入的新特性,目的是解決基本類型與包裝類型之間切換的麻煩. 裝箱 Integer num = 1;編譯之後的代碼