原创 並行設計模式--Future、Callback、Promise

在異步處理過程中需要大量使用Future,Callback,Promise,深入學習分析這幾種異步編程的原理。Java中的線程經常有面試題問Java中創建線程有哪些方式,大多數回答是Thread,Runnable,Callable,然而這是

原创 Java--爲什麼需要主動關閉文件?

在Java編程中,對於一些文件的使用往往需要主動釋放,比如InputStream,OutputStream,SocketChannel等等,那麼有沒有想過爲什麼要主動釋放這些資源?難道GC回收時不會釋放嗎?本文主要是對這一系列問題分析解答。

原创 工作--如何封裝第三方服務?

業務開發中經常會對接某某第三方服務,因此會經常寫一些SDK供服務使用,一種比較好的做法就是使用命令模式封裝第三方服務,命令模式對於調用方來說簡潔明瞭,也正是封裝最根本的目的,便於調用方使用。命令模式定義命令模式是一種行爲型模式,其會把具體的

原创 並行設計模式--Thread Specific Storge模式

多線程的不安全在於共享了變量實例,因此Thread Specific Storge模式的思路是把變量與單一線程綁定,那麼就不存在共享,自然就避免了加鎖消耗以及其他高併發所需要的策略。 Thread Specific Storge一般有兩種策

原创 工作--用戶登錄註冊相關設計

最近做一個網站,網站需要用戶登錄註冊,自然也就需要一套高擴展性的用戶模塊設計,該篇文章記錄筆者遇到問題的解決方案,希望對你有幫助。用戶表設計登錄包含郵箱密碼登錄以及第三方登錄,且第三方登錄存在不確定性,可能隨時增加或者減少某個渠道。 因此在

原创 IDEA插件ASM Bytecode Outline

這款插件對於我學習JVM上的其他語言幫助非常大,很多高級語法糖反編譯之後能夠明白背後的原理,目前插件已經上傳到JetBrains官方倉庫,歡迎試用。 插件地址: https://plugins.jetbrains.com/plugin/11

原创 造輪子--文件分享工具

背景一般工作中會有我想把某個文件分享給別人,但是又不想直接發給對方,因此需要一箇中轉站,我把文件上傳到這個中轉站,然後中轉站給我一個可以查看的url,我再把url發給要查看的人。 或者是想把一個文件分享給別人但是由於操作系統不同或者使用的文

原创 造輪子--Excel報表工具

由於公司內部之前對於excel封裝操作並不是很方便,而且對於特殊的需求不是很容易滿足,這個月的任務是遷移部分業務小報表順便重構下,因此這裏造個輪子,便於導入和導出對應的excel報表。代碼https://github.com/mrdear/

原创 設計模式--策略模式的思考

策略模式是一種簡單的設計模式,但是其在業務開發中是一種非常有用的設計模式.舉個例子,當你的業務需要針對不同的場景(可以簡單理解爲枚舉類),執行不同的策略時那麼使用策略模式可以幫助你更好的寫出低耦合與高可擴展的代碼.標準策略模式策略模式: 把

原创 (轉)比AtomicLong還高效的LongAdder源碼解析

接觸到AtomicLong的原因是在看guava的LoadingCache相關代碼時,關於LoadingCache,其實思路也非常簡單清晰:用模板模式解決了緩存不命中時獲取數據的邏輯,這個思路我早前也正好在項目中使用到。 言歸正傳,爲什麼說

原创 關於大量CLOSE_WAIT連接分析

問題場景某日線上登錄出現故障,排查日誌發現HttpClient請求時隨機分配到的端口被佔用,導致第三方登錄拉取信息時無法拉取成功,錯誤如下: java.net.BindException: Address already in use (B

原创 並行設計模式--immutable模式

線程不安全的原因是共享了變量且對該共享變量的操作存在原子性、可見性等問題,因此一種解決思路就是構造不可變的對象,沒有修改操作也就不存在併發競爭,自然也不需要額外的鎖,同步等操作,這種設計叫做immutable object模式,本文主要理解

原创 Java--死鎖以及死鎖的排查

最近遇到了死鎖的問題,所以這裏分析並總結下死鎖,給出一套排查解決方案。死鎖示例一清單一 public class SynchronizedDeadLock { private static final Object lockA = n

原创 設計模式--裝飾者模式思考

裝飾者模式實際上是一直提倡的組合代替繼承的實踐方式,個人認爲要理解裝飾者模式首先需要理解爲什麼需要組合代替繼承,繼承又是爲什麼讓人深惡痛絕.爲什麼建議使用組合代替繼承?面向對象的特性有繼承與封裝,但兩者卻又有一點矛盾,繼承意味子類依賴了父類

原创 Java--CAS操作分析

CAS操作在Java中的應用很廣泛,比如ConcurrentHashMap,ReentrantLock等,其常被用來解決獨佔鎖對線程阻塞而導致的性能低下問題,是高效併發必備的一種優化方法.JMM一般的理解Java內存模型爲主內存與工作內存,