原创 Buffer Pool緩存頁不夠時,如何淘汰緩存? Buffer Pool緩存頁不夠時,如何淘汰緩存?

Buffer Pool緩存頁不夠時,如何淘汰緩存? 若BP緩存頁不夠了,咋辦? 執行CRUD都會將磁盤數據頁加載到緩存頁,那在加載數據到緩存頁時,必然是要加載到空閒緩存頁,所以必須要從free中找個空閒緩存頁,然後把磁盤數據頁加載到該空閒緩

原创 SQL實戰研究InnoDB架構設計

update `user` set `name`='xxx' where `id`=1; 業務系統通過一個數據庫連接發給MySQL,經過SQL接口、解析器、優化器、執行器,解析SQL語句,生成執行計劃,接着由執行器負責執行該計劃,調用In

原创 阿里面試官居然不懂Spring是如何解決循環依賴的?

BeanPostProcessor的after方法中會完成動態代理對象的創建。 在創建代理對象之前,是否需要原始對象? 需要原始對象! 若剛開始先創建了原始對象,然後又創建了代理對象,則對外暴露引用時,應該用原始對象還是用代理對象呢? 程

原创 更新數據時,MySQL的聚簇索引是如何變化的?

文章已收錄在我的 GitHub 倉庫,歡迎Star/fork: Java-Interview-Tutorial 聽說點贊、評論、收藏的人長得都很好看哦。 搜索一個主鍵id對應的行,先去頂層的索引頁88裏通過二分查找,定位到你應該去下

原创 如何設計秒殺系統 如何設計秒殺系統

如何設計秒殺系統 1 秒殺的問題 服務單一、獨立部署 秒殺服務即使自己扛不住高併發而宕機,也不要造成服務雪崩。 秒殺鏈接加密 避免惡意攻擊,機器人模擬秒殺請求 避免鏈接暴露,自己工作人員,提前秒殺商品 庫存預熱、快速扣減 秒殺讀多寫少。

原创 圖解MySQL系列(4)-Buffer Pool中的free鏈表

1 MySQL如何初始化Buffer Pool Buffer Pool中有N多緩存頁,每個緩存頁還有個描述信息。DB啓動後,按BP大小向os申請一塊內存區域,作爲BP的內存區域。 當內存區域申請完後,DB按默認緩存頁及對應描述信息快,在BP

原创 線上MySQL頻繁抖動的性能優化實戰

平時執行的更新語句,都是從磁盤上加載數據頁到DB內存的緩存頁,接着就直接更新內存裏的緩存頁,同時還更新對應的redo log寫入一個buffer中。 既然更新了BP裏的緩存頁,緩存頁就會變成髒頁,就得有時機把那髒頁給刷到磁盤文件,髒頁刷盤機

原创 一行數據是怎麼存儲在磁盤的?

MySQL物理數據模型 每一行數據都是放在數據頁,按數據頁爲單位把磁盤上的數據加載到內存的緩存頁裏來,也是按照頁爲單位,把緩存頁的數據刷入磁盤上的數據頁中。 表、行和字段是邏輯上的概念,而表空間、數據區和數據頁就是物理概念。表空間、數據頁這

原创 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,須能領略其總體架構,再深入