原创 redis筆記1---基礎

基礎數據結構 redis的所有操作都是原子的,這得益於redis是單線程的結構。redis有5種基本的數據結構,分別是: string:字符串 k-v:鍵值對 list:鏈表 hash:哈希 set:集合 zset:有序集合

原创 redis筆記6 拓展內容

集羣情況下的分佈式鎖 集羣情況下,redis的分佈式鎖有不安全的因素,下面這個場景: 主節點擁有鎖 客戶端獲取鎖後,主節點掛掉 從節點接替,成爲主節點,但是從節點沒有客戶端獲取的鎖 新來的客戶端向現在的主節點獲取鎖,會成功,導致

原创 redis筆記3 持久化、管道、事務、發佈訂閱和內存回收

I/O模型 基本IO模型: 基於epoll的單線程模型 O(N)O(N)O(N)複雜度的數據容易阻塞,提高效率大量採用哈希技術 redis爲每個客戶端保留了一個指令隊列,客戶端的指令通過隊列來排隊進行順序處理,FIFS(fir

原创 Golang的GC和內存逃逸

簡介 每個版本的Golang的垃圾回收都在不斷優化中,而且方法和策略都在變化,因此這裏只是總結出以下幾個關鍵點: 什麼樣的數據需要GC 觸發GC的條件是什麼 GC時發生了什麼 能否從代碼層面上提高GC的效率 GC的基本流程 G

原创 slice和map的高級主題

slice 基礎的內存模型: 傳入一個slice佔用24字節,分別是ptr、len和cap,分別一個字節。 append會再slice後面追加元素,具體參考代碼1 cap沒滿的情況下,直接在後面的內存上追加數據。如果其它sl

原创 Golang的協程調度

調度的基礎,模型關係的映射 GPM模型: G,Goroutinue 被調度器管理的輕量級線程,goroutine使用go關鍵字創建 調度系統的最基本單位goroutine,存儲了goroutine的執行stack信息、goro

原创 CMake構建工程

目標:使用CMake構建多級的目錄的C++項目,包含動態庫的引用。 文件結構: . ├── CMakeLists.txt # 1 ├── build ├── lib # 這裏存放動態庫 │ ├── CMakeLists.tx

原创 編譯過程、靜態庫和動態庫

C/C++代碼到可執行文件 從代碼到最終的程序,分爲4個步驟,分別是: 預編譯:編譯預處理,比如#define和#ifndef之類的,C++的inline也是在這期間處理的 編譯:把代碼轉換成彙編,包括詞法分析、語法分析和語義分

原创 TCP協議總結

TCP三次握手和4次揮手: 四次揮手中,Server端發送FIN,是因爲有些情況下,可能存在客戶端發送完FIN之後,還存在一些未完成的數據,因此讓服務器發送FIN表示數據已經發送完了。 在建立完TCP鏈接之後,Server對cl

原创 二叉樹中最大的二叉搜索子樹

問題描述 思路和代碼 暴力方法是每個節點爲根節點,然後判斷以該節點爲根節點的樹是否是二叉搜索樹,然後求規模最大的,這種方式的時間複雜度是O(N2)O(N^2)O(N2),空間複雜度是O(h)O(h)O(h)。 搜索二叉樹左子樹所

原创 Zookeeper基礎筆記

基礎信息 zookeeper的每個節點,既可以存儲自身的數據,又可以擴展子節點。Zookeeper本身不提供序列化支持,我們可以使用Protobuf或者Thrift等協議把數據序列化處理。 Zookeeper提供以下的基礎操作:

原创 zookeeper的會話

zookeeper 會話 事務:能改變zookeeper一致性的操作都是事務,比如添加節點、刪除節點和更新數據等。 zk爲每個事務分配一個唯一的zxid,用於標記事務的順序。對於競爭,zk使用樂觀鎖的保證高效性。過程如下: 獲取

原创 單調棧及其應用

單調棧 #include <iostream> #include <vector> #include <stack> // 直方圖最大矩形面積 int MaxMatrixArea(const std::vector<int>&

原创 kafka基礎筆記

基礎概念 kafka是一個消息隊列系統,不同的生產者和消費者,可以向kafka寫入自己的數據,實現數據的流動;kafka解耦了生產者和消費者,它的ack機制保證了消息傳遞的可靠性,藉助zookeeper等實現了分佈式的消息隊列。

原创 區間內累加和爲規定值的最長子序列

問題描述 給定一個未排序序列和一個值num,然後求解該序列中的一個連續子序列,使得這個子序列s的累加值等於num,而且s是所有子序列中最長的。要求時空複雜度都是O(N)O(N)O(N) 思路和代碼 暴力方式,輪詢遍歷,這樣的時間複