原创 項目中的if else太多了,該怎麼重構?

前言if else過多的話,一般都是用策略模式來進行重構,策略模式也非常的簡單。先定義一個接口,各種處理分支實現這個接口,定義好 條件->處理類的映射關係,然後根據條件找到響應的處理類執行即可,當有新的分支的話,只需要增加一個接口實現類,增

原创 定時任務方案大百科

原文地址:https://crossoverjie.top 前言 節前有更新一篇定時任務的相關文章《延時消息之時間輪》,有朋友提出希望可以完整的介紹下常見的定時任務方案,於是便有了這篇文章。 <!--more--> Timer 本次會主

原创 手把手實現一條延時消息

前言 近期在維護公司的調度平臺,其中有個關鍵功能那就是定時任務;定時任務大家平時肯定接觸的不少,比如 JDK 中的 Timer、ScheduledExecutorService、調度框架 Quartz 等。 通常用於實現 XX 時間後的延

原创 不要小看小小的 emoji 表情

前言好久沒更新了,最近事比較多,或許下個月就會恢復到正常的發文頻次。這篇文章得從一個 emoji 表情開始,我之前開源的一個 IM 項目中有朋友提到希望可以支持 emoji 表情傳輸。https://github.com/crossov

原创 再一次生產 CPU 高負載排查實踐

前言 前幾日早上打開郵箱收到一封監控報警郵件:某某 ip 服務器 CPU 負載較高,請研發儘快排查解決,發送時間正好是凌晨。 其實早在去年我也處理過類似的問題,並記錄下來:《一次生產 CPU 100% 排查優化實踐》 不過本次問題產生的原

原创 分表後需要注意的二三事

前言 本篇是上一篇《一次分表踩坑實踐的探討》,所以還沒看過的朋友建議先看上文。 還是先來簡單回顧下上次提到了哪些內容: 分表策略:哈希、時間歸檔等。 分表字段的選擇。 數據遷移方案。 而本篇文章的背景是在我們上線這段時間遇到的一些問題

原创 年輕人的第一篇博客

前言 寫這篇文章的前因是有位讀者留言提到了相關的話題,其實在之前有一篇《如何成爲一位「不那麼差」的程序員》時有簡要提到但沒有細說;這次就借這個機會好好聊聊這個事情的前因後果。 爲什麼要寫博客 爲什麼要寫博客? 我覺得大部分人應

原创 線程池沒你想的那麼簡單(續)

前言 前段時間寫過一篇《線程池沒你想的那麼簡單》,和大家一起擼了一個基本的線程池,具備: 線程池基本調度功能。 線程池自動擴容縮容。 隊列緩存線程。 關閉線程池。 這些功能,最後也留下了三個待實現的 features 。 執行帶有返

原创 『併發包入坑指北』之向大佬彙報任務

前言 在面試過程中聊到併發相關的內容時,不少面試官都喜歡問這類問題: 當 N 個線程同時完成某項任務時,如何知道他們都已經執行完畢了。 這也是本次討論的話題之一,所以本篇爲『併發包入坑指北』的第二篇;來聊聊常見的併發工具。 <!--mor

原创 一個線程罷工的詭異事件

背景 事情(事故)是這樣的,突然收到報警,線上某個應用裏業務邏輯沒有執行,導致的結果是數據庫裏的某些數據沒有更新。 雖然是前人寫的代碼,但作爲 Bug maker&killer 只能咬着牙上了。 <!--more--> 因爲之前沒有接觸過

原创 一致性 Hash 算法的實際應用

前言 記得一年前分享過一篇《一致性 Hash 算法分析》,當時只是分析了這個算法的實現原理、解決了什麼問題等。 但沒有實際實現一個這樣的算法,畢竟要加深印象還得自己擼一遍,於是本次就當前的一個路由需求來着手實現一次。 背景 看過《爲自己搭

原创 利用策略模式優化過多 if else 代碼

前言 不出意外,這應該是年前最後一次分享,本次來一點實際開發中會用到的小技巧。 比如平時大家是否都會寫類似這樣的代碼: if(a){ //dosomething }else if(b){ //doshomething }el

原创 長連接的心跳及重連設計

前言 說道“心跳”這個詞大家都不陌生,當然不是指男女之間的心跳,而是和長連接相關的。 顧名思義就是證明是否還活着的依據。 什麼場景下需要心跳呢? 目前我們接觸到的大多是一些基於長連接的應用需要心跳來“保活”。 由於在長連接的場景下,客戶端

原创 爲自己搭建一個分佈式 IM 系統二【從查找算法聊起】

前言 最近這段時間確實有點忙,這篇的目錄還是在飛機上敲出來了的。 言歸正傳,上週更新了 cim 第一版;沒想到反響熱烈,最高時上了 GitHub Trending Java 版塊的首位,一天收到了 300+ 的 star。 現在總共也

原创 爲自己搭建一個分佈式 IM(即時通訊) 系統

前言 大家新年快樂! 新的一年第一篇技術文章希望開個好頭,所以元旦三天我也沒怎麼閒着,希望給大家帶來一篇比較感興趣的乾貨內容。 老讀者應該還記得我在去年國慶節前分享過一篇《設計一個百萬級的消息推送系統》;雖然我在文中有貼一些僞代碼,依然有