原创 Redis的字符串的底層實現SDS

前言 Redis是使用C語言開發的,C語言又自己字符類型,但是Redis卻沒有直接使用C語言傳統的字符串表示(以空字符串結尾的字符數組),而是自己構建了一種名爲簡單動態字符串(simple dynamic string,SDS)的抽象類型

原创 Redis哨兵模式與高可用集羣

Redis高可用概述 高可用是如今Web服務的一個基本訴求,它是指服務器可以正常訪問的時間,衡量標準是多少時間內可以提供正常服務。在Redis層面內,不僅僅需要能正常提供服務,還需要考慮數據擴容、數據安全等。 Redis主從複製問題 主從

原创 MySQL究竟是如何做到持久性的?

前言 我們學習事務中,對於持久性(durability)是這樣定義的:事務一旦提交,則其所有的修改將會保存到數據庫當做。即使此時系統崩潰,修改的數據也不會丟失。同時數據庫連接中,默認有一個參數autocommit=1表示每次執行一條sql

原创 細說數據庫隔離級別

如果事務都是以串行的方式進行的,數據庫系統處理完一個事務包,然後再處理下一個事務包,並按照事務開啓的時間依次進行。這種方式並不存在事務並行化的競爭,只要保證每個事務的原子性,那麼一致性自然就獲得了保證。 這種方式看起來特別美好,但是結果我

原创 用了這麼久的MySQL,你瞭解MySQL的架構嗎?

前言 數據庫大家都清楚吧,目前市面上主流的數據庫分爲Oracle、MySQL、SQLServer。SQLServer微軟家開發的,我想.Net開發用的多,我們大學數據庫課程所使用的數據庫,安裝很頭疼當時還重裝了系統,考完試第一件事就是把它

原创 TCP爲什麼可以做到可靠傳輸?

TCP的可靠傳輸具體指的是什麼? TCP又稱爲可靠傳輸協議,這個可靠是指數據一定可以毫無遺漏的交給對方。但是是不是說我們開發了一個應用程序給另一個應用程序發送消息,他就一定能夠收到呢?我們開發的時候用了TCP,而且TCP又是可靠的傳輸協議

原创 ZooKeeper ZAB原子廣播協議

  在zookeeper中,主要依賴ZAB( ZooKeeper Atomic Broadcast , ZooKeeper 原子廣播協議)協議來實現分佈式數據一致性,基於該協議,zookeeper實現了一種主備模式的系統架構來保持集羣中各

原创 細說Java垃圾回收

目錄 前言 什麼是垃圾回收? 手動回收垃圾時代 虛擬機接管時代 哪些區域需要垃圾回收? 怎麼定義垃圾? 引用計數法 可達性分析算法 哪些些對象可以作爲GC Root? 虛擬機棧(棧幀中的局部變量表)中的引用對象 方法區中靜態類屬引用的對象

原创 談談樂觀鎖和悲觀鎖

什麼是樂觀什麼是悲觀 有一類人開車小心翼翼,從不超速、違章、酒駕,他總是很悲觀,總擔心會發生車禍,所以偶爾會發生車禍。另一類人麻痹大意,超速、酒駕各種胡來,他總是很悲觀,總感覺我反正就這一次,我不可能運氣這麼差吧?  然而結果是什麼呢?

原创 如果你不瞭解InnoDB的存儲邏輯,可能你並不是真正搞懂MySQL

InnoDB存儲邏輯 InnoDB存儲引擎的邏輯存儲是將所有的數據都邏輯的存放在一個空間中,我們稱之爲表空間(tablespace)。表空間又是由段(segment)、區(extent)、頁(page)組成。如下圖   表空間(Tabl

原创 要去面試阿里,你至少要掌握如下的索引知識。

什麼是索引? 索引其實就是一種數據結構,目的就是爲了幫助我們快速的檢索數據庫中的數據。就好比我們查字典的時候,會先翻一番目錄,這個目錄就是索引。 索引具體採用的是哪種數據結構呢? 常見的MySQL中主要有兩種索引:Hash索引和B+樹索引

原创 MySQL的“order by”是如何對200G文件進行排序的?

前言 學習編程語言的時候,我們第一個行代碼往往是“Hello World”。我們學會的第一個真正意義上的算法,我想就是冒泡排序吧。我們創建一個數組,通過N次比較,每次找出最大或最小的元素,把它放到隊列最末尾就完成將無序數組轉化成爲了有序數

原创 我就執行一個count(*)爲什麼這麼慢?

前言 今天想看一下我的活動有多少用戶參與了,隨手執行了一條語句select count(*) from table;我等待幾秒鐘纔出現結果,我不禁陷入了對社會和人生的大思考。 是我太菜嗎?不這條語句簡單到無法優化,以至於少一個符號就可能報

原创 【手撕面試官】Redis面試連環炮,你能撐到第幾關?(持續更新中)

Redis是什麼? Redis是一種非關係型數據庫,數據都在內存中,讀寫速度非常快。Redis是單線程架構,所以它是線程安全的,內部採用IO多路複用。包含了我們常用的數據結構,同時支持持久化和集羣模式。也可以作爲分佈式鎖,消息中間件來使用

原创 Java類加載器與雙親委派模型

類加載器的作用 類加載器的作用就是把類的字節碼加載到jvm。同時jvm規定,程序員可以用java代碼來自定義類加載器,把類的字節碼信息加載到jvm中。jvm再使用類加載器的時候,並不是一次性把所有的類都加載進來,而是在用到某個類的