原创 Java系統線上生產問題排查一把梭 1 環境 2 監控 分析定位問題的最佳實踐 迷茫時的最佳實踐 總結

1 環境 1.1 Dev 可以隨意使用任何熟悉的工具排查。只要問題能重現,排查就不會太難,最多就是把程序調試到各種框架源碼,所以這也是爲何面試都會問源碼,不求都看過,但要有思路知道如何去看能解決問題。 1.2 Test 比開發環境少了deb

原创 Spring嵌套事務是怎麼回滾的? 源碼解析 內層事務 外層事務 修正

事務的傳播機制 多數據源的切換問題 更深入理解 Spring 事務。 用戶註冊完成後,需要給該用戶登記一門PUA必修課,並更新該門課的登記用戶數。 爲此,我添加了兩個表。 課程表 course,記錄課程名稱和註冊的用戶數。 用戶選課

原创 你怎麼總是能寫出兩三千行的controller類? 1 程序的modularity 2 大類是怎麼來的?

你一定經常見到一個兩三千行的 controller 類,類之所以發展成如此龐大,有如下原因: 長函數太多 類裏面有特別多的字段和函數 量變引起質變,可能每個函數都很短小,但數量太多 1 程序的modularity 你思考過爲什麼你不會把

原创 一文搞懂Java的SPI機制 1 簡介 源碼 使用 適用場景

1 簡介 SPI,Service Provider Interface,一種服務發現機制。 有了SPI,即可實現服務接口與服務實現的解耦: 服務提供者(如 springboot starter)提供出 SPI 接口。身爲服務提供者,在

原创 圖的表示:如何存儲微博、微信等社交網絡中的好友關係? 什麼是“圖”?(Graph) 存儲 如何存儲微博、微信等社交網絡中的好友關係?

x博中,兩個人可以互相關注,互加好友,那如何存儲這些社交網絡的好友關係呢? 這就要用到:圖。 什麼是“圖”?(Graph) 和樹比起來,這是一種更加複雜的非線性表結構。 樹的元素稱爲節點,圖中元素叫作頂點(vertex)。圖中的一個頂點可以

原创 這麼多日誌級別(log levels),編程新手們到底該如何選用?

記錄消息的方法各不相同,按嚴重性順序排列: ERROR WARN INFO DEBUG TRACE 該如何決定何時使用哪個?什麼是好的啓發式使用? 我通常贊同以下約定: TRACE 只有當我將'跟蹤'代碼,並試圖找到一個功能的一部分具

原创 如何分析Redis的架構設計? 數據模型 內存 or 外存? 訪問模式選型 KV對的定位 各操作的具體邏輯 重啓後快速提供服務

Redis本身內容繁雜,要是上來就研究一細節點,如連接池、數據結構,雖可直接學到某個點的詳盡源碼內容,甚至儘快解決一些事故,但容易溺死在細節汪洋,無法整體把控Redis。 最好是先建立起“架構”。想精通Redis,須能領略其總體架構,再深入

原创 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 本文就教你如何優雅