原创 DDD領域驅動設計-充血模型、貧血領域模型 貧血模型 充血模型

貧血模型即事務腳本模式 充血模型即領域模型模式 貧血模型 最早廣泛應用源於EJB2,最強盛時期則是由Spring創造,把 “行爲”(邏輯、過程) “狀態”(數據,對應到語言就是對象成員變量) 分離到不同的對象中: 只有狀態的對象就

原创 Redis常見故障解決方案 1 重啓和故障轉移後的部分重同步 2 主從數據不一致 3 數據延遲 4 髒數據 5 數據安全性

1 重啓和故障轉移後的部分重同步 Redis 4.0 開始,當一個實例在故障轉移後被提升爲 master 時,它仍然能夠與舊 master 的 slave 進行部分重同步。爲此,slave 會記住舊 master 的舊 replicatio

原创 大廠都在用的MySQL主從複製、讀寫分離及高可用方案 1 單機 =》集羣 2 MySQL主從複製 3 主從複製的缺點及解決方案

1 單機 =》集羣 隨着數據量的增大,讀寫併發的增加,系統可用性要求的提升,單機 MySQL 出現危機: 容量問題,難以擴容,考慮數據庫拆分、分庫分表 讀寫壓力,QPS 過大,特別是分析類需求會影響到業務事務,考慮多機集羣、主從複製

原创 如何設計一個RPC 1 從使用者考慮 2 客戶端的設計 3 設計服務端

很多語言都內置了RPC技術。 Java RMI .NET Remoting 遠古時期,就有很多嘗試: Corba(Common ObjectRequest Broker Architecture)公共對象請求代理體系結構,OMG組織在19

原创 原來大廠的Redis分佈式鎖都這麼設計的! 1 本地鎖 2 分佈式鎖 總結

1 本地鎖 常用的即 synchronize 或 Lock 等 JDK 自帶的鎖,只能鎖住當前進程,僅適用於單體架構服務。 而在分佈式多服務實例場景下必須使用分佈式鎖 2 分佈式鎖 2.1 分佈式鎖的原理 廁所佔坑理論 可同時去一個地方

原创 大廠數據庫事務實踐-事務生效就能保證正確回滾? 反面教材

AOP實現事務:使用try?c/atch包裹@Transactional註解的方法,當方法出現異常並滿足一定條件時,在catch裏可設置事務回滾,沒有異常則直接提交事務。 “一定條件”包括: 只有異常傳播出了標記了@Transactio

原创 面試阿里被P8質問:ConcurrentHashMap真的線程安全嗎? 1 線程重用導致用戶信息錯亂 2 ConcurrentHashMap真的安全嗎? 3 知己知彼,百戰百勝 4 總結

沒啥深入實踐的理論系同學,在使用併發工具時,總是認爲把HashMap改爲ConcurrentHashMap,就完美解決併發了呀。或者使用寫時複製的CopyOnWriteArrayList,性能更佳呀!技術言論雖然自由,但面對魔鬼面試官時,我

原创 阿里P8架構師教你kill祖傳石山代碼重複/大量ifelse 1 crud 工程師之“痛” 2 工廠+模板方法模式,消除多if和重複代碼 3 註解+反射消除重複代碼 4 屬性拷貝 5 總結

文章收錄在我的 GitHub 倉庫,歡迎Star/fork: Java-Interview-Tutorial https://github.com/Wasabi1234/Java-Interview-Tutorial 本文就教你如何優雅

原创 剛教完面試官OAuth 2.0爲什麼要先獲取授權碼code OAuth 2.0 的角色 一定要授權碼嗎? 授權碼許可類型的通信過程 開發微信小程序場景

文章收錄在我的 GitHub 倉庫,歡迎Star/fork: Java-Interview-Tutorial https://github.com/Wasabi1234/Java-Interview-Tutorial xx軟件最終是通過

原创 RocketMQ生產消息源碼解析 從UT看Producer API 啓動過程 啓動過程的實現: 消息發送過程 sendKernelImpl() 總結 面試場景快問快答

基於最新的release-4.7.1代碼分析。 客戶端是個單獨模塊,在rocketmq/client 從UT看Producer API 閱讀源碼,不推薦從入口開始看到底,畢竟你也看不到底。而應該帶着問題分析源碼:Producer

原创 DDD領域驅動設計實戰(三)- 理解實體 1 前言 2 爲什麼使用實體 3 唯一標識 4 各種狀態的實體 5 創建實體

1 前言 實體是領域模型中的領域對象。 傳統開發人員總將關注點放在數據,而不是領域。因爲在軟件開發中,DB佔據主導地位。首先考慮的是數據的屬性(即數據庫的列)和關聯關係(外鍵關聯),而不是富有行爲的領域概念。導致將數據模型直接反映在對象模型

原创 深度解析Redis線程模型設計原理 1 單線程模型設計 2 文件事件處理器 3 總結

全是乾貨的技術號: 本文已收錄在github,歡迎 star/fork: https://github.com/Wasabi1234/Java-Interview-Tutorial 1 單線程模型設計 單線程模型爲何效率高 純內存操

原创 聽說你還不懂 Java 的服務定位器模式(Service Locator Pattern)? 1 概述 2 構成 3 示例

1 概述 當你想使用 JNDI 查詢定位各種服務時,便可考慮該模式。 由於爲某個服務查找 JNDI 的代價很高,服務定位器模式(後文簡稱爲 SLP)充分利用了緩存技術。在首次請求某服務時,服務定位器在 JNDI 中查找服務,並緩存該服務對象

原创 消息隊列面試解析系列(六)- 異步編程妙用 0 異步的優勢 1 案例引入 2 同步的性能瓶頸 異步實現方案 總結 面試場景題快問快答

0 異步的優勢 太多的線程會造成頻繁的cpu上下文切換,你可以想象一下,假設你的小公司只有8臺電腦,你僱8個程序員一直不停的工作顯然是效率最高的。考慮到程序員要休息不可能連軸轉,僱傭24個人,每天三班倒,效率也還行。 但是,你要僱傭100

原创 你分得清MySQL普通索引和唯一索引了嗎? 1 示例

走過路過不要錯過點擊藍字關注我們0 概念區分普通索引和唯一索引普通索引可以重複,唯一索引和主鍵一樣不能重複。唯一索引可以作爲數據的一個合法驗證手段,例如學生表的身份證號碼字段,我們人爲規定該字段不得重複,那麼就使用唯一索引。(一般設置學號字