原创 kafka實現原理

一.kafka定義        Kafka是一款分佈式消息發佈和訂閱系統,它的特點是高性能、高吞吐量。最早設計的目的是作爲LinkedIn的活動流和運營數據的處理管道。這些數據主要是用來對用戶做用戶畫像分析以及服務器性能數據的一些監控。

原创 微服務-限流

一.介紹        互聯網應用發展到今天,從單體應用架構到SOA以及今天的微服務,隨着微服務化的不斷升級進化,服務和服務之間的穩定性變得越來越重要,分佈式系統之所以複雜,主要原因是分佈式系統需要考慮到網絡的延時和不可靠,微服務很重要的

原创 Golang中Mutex的實現

一.Golang中的鎖        Golang的提供的同步機制有sync模塊下的Mutex、WaitGroup以及語言自身提供的chan等。 這些同步的方法都是以runtime中實現的底層同步機制(cas、atomic、spinloc

原创 LRU及其在InnoDB、Redis中的使用

一.頁面置換算法        地址映射過程中,若在頁面中發現所要訪問的頁面不在內存中,則產生缺頁中斷。當發生缺頁中斷時,如果操作系統內存中沒有空閒頁面,則操作系統必須在內存選擇一個頁面將其移出內存,以便爲即將調入的頁面讓出空間。而用來選

原创 Golang對象池實現

一.sync.Pool定義        我們通常用golang來構建高併發場景下的應用,但是由於golang內建的GC機制會影響應用的性能,爲了減少GC,golang提供了對象重用的機制,也就是sync.Pool對象池。 sync.Po

原创 Linux環境基礎

一.Linux的目錄結構 Linux系統中並沒有盤符的概念,而是通過目錄/表示所有文件的開始,並通過掛載(mount)的方式把所有硬盤分區都放置在根目錄下。 目錄名稱 英文原意 說明 usr unix system resources 存

原创 Epoll原理剖析

 從事服務端開發,少不了要接觸網絡編程。epoll 作爲 Linux 下高性能網絡服務器的必備技術至關重要,nginx、Redis、Skynet 和大部分遊戲服務器都使用到這一多路複用技術。 epoll 很重要,但是 epoll 與 se

原创 Golang設計模式-工廠模式

一.介紹 定義一個用於創建對象的接口,讓子類界定實例化哪個類。工廠方法使一個類的實例化延遲到子類。 二.工廠模式和簡單工廠模式的區別        簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶的選擇動態實例化相關的類,

原创 Golang設計模式-觀察者模式

一.觀察者模式介紹  意圖:定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新。 主要解決:一個對象狀態改變給其他對象通知的問題,而且要考慮到易用和低耦合,保證高度的協作。 何時使用:一

原创 Golang-排序

1.冒泡排序 步驟1: 比較相鄰的元素。如果第一個比第二個大,就交換它們兩個; 步驟2: 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數; 步驟3: 針對所有的元素重複以上的步驟,除了最後一個

原创 golang-算法

1.在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 思路: 數組排序後找到重複數字,排序數組

原创 Golang設計模式-簡單工廠模式

一.背景        假設我們在做一款小型翻譯軟件,軟件可以將德語、英語、日語都翻譯成目標中文,並顯示在前端。 二.使用接口        我們會有三個具體的語言翻譯結構體,或許以後還有更多,但現在分別是German Translate

原创 Golang設計模式-單例模式

一.介紹 意圖:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。 主要解決:一個全局使用的類頻繁地創建與銷燬。 何時使用:當您想控制實例數目,節省系統資源的時候。 如何解決:判斷系統是否已經有這個單例,如果有則返回,如果沒有則創建。

原创 Golang逃逸與GC

一.Golang內存管理 我們先來對比下C與Golang的內存分配:       Golang內存分配特點: 預先從操作系統申請一大塊內存。 內存分配算法採用Google的 TCMalloc算法,預先將申請的內存分成不同大小的內存集合

原创 pika的設計與實現

一.介紹 pika 的單線程的性能肯定不如redis, pika是多線程的結構, 因此在線程數比較多的情況下, 某些數據結構的性能可以優於redis pika 肯定不是完全優於redis 的方案, 只是在某些場景下面更適合. 所以目前公司