原创 std::string中的反向迭代器rbegin()和rend()

在std::string中,有個接口是rbegin()和rend(),分別表示string字符串的倒數第一個字符和正數第一個字符; rbegin():表示string字符串的倒數第一個字符 rend():表示string字符串的正數第一個

原创 skiplist原理與實現

今天繼續介紹分佈式系統當中常用的數據結構,今天要介紹的數據結構非常了不起,和之前介紹的布隆過濾器一樣,是一個功能強大原理簡單的數據結構。並且它的缺點和短板更少,應用更加廣泛,比如廣泛使用的Redis就有用到它。   SkipList簡介

原创 對std::list的封裝

由於工作的原因,需要在線程安全的情況下對std::list<T>進行該list進行訪問,因此就簡單的封裝了下,代碼如下: template<typename T> class List { public: List () {}

原创 智能指針對比

智能指針對比: (1)、boost::shared_ptr<T>  -- 基於引用計數器refcount(原子的) <1>、構造函數中refcount+1,析構函數中refcount-1,當refcount的值減到爲0時,該對象就會被銷燬

原创 boost::scoped_ptr與std::unique_ptr

boost::scoped_ptr與std::unique_ptr都是類模板,封裝了指針 兩者都禁用了拷貝構造和賦值函數,因此不能作爲STL容器中的元素,因爲在執行push_back()時需要調用賦值函數。   std::unique_p

原创 EPOLLOUT/EPOLLIN事件觸發的條件

1、EPOLLOUT事件觸發的條件? (1)、一次write操作,寫滿了發送緩衝區,返回錯誤碼爲EAGAIN(11)。 (2)、對端讀取了一些數據,又重新可寫了,此時會觸發EPOLLOUT。   簡單地說:內核緩衝區由不可寫變爲可寫時會觸

原创 如果派生類沒有重寫基類中的虛函數會怎麼樣?

class Base { public: virtual void gun() { std::cout << "Base gun" << std::endl; } }; class Derived :

原创 PG內核分析 Q&A

  今天查找postgreSQL相關的資料時,查找到該文章,覺得寫得比較好   https://www.cnblogs.com/liuhaifeng/p/12184902.html

原创 memcmp()庫函數實現

今天用到了memcpy()庫函數,自己實現了一個,如下: int memcmp(const void *str1, const void *str2, size_t count) { assert((NULL != str1) &&

原创 hdfs爲什麼要用block以及block大小的設置

1、在HDFS裏面,文件存儲爲什麼要以Block塊的方式存儲? 目的:減少磁盤尋道的時間。   (1)、不設置block:因爲數據是分散的存放磁盤上的,讀取數據時需要不停的進行磁盤尋道,開銷比較大。 (2)、使用block: 一次可以讀取

原创 HDFS的Block size的默認大小

今天無意中聽到了同事說關於HDFS中每個block的大小,特意查了下: 從Hadoop的官網上看了各個版本的說明文檔中關於 Data Blocks 的說明,發現是從2.7.3版本開始,官方關於Data Blocks 的說明中,block

原创 MySQL Innodb存儲引擎使用B+樹做索引的優點

  對於數據庫來說,索引和表數據都是存放在磁盤上的,一般使用B+樹作爲索引 MySQL Innodb存儲引擎使用了B+樹作爲索引的優點,主要有以下原因: 1、索引和表數據都是存放在磁盤上的,如果磁盤上的數據量過大時,無法一次性的將數據裝入

原创 group by 的實現原理

轉載:https://cloud.tencent.com/developer/article/1513067 寫過 Sql 的同學應該都知道 group by 是用來對數據進行分組的,一般與聚合函數一起使用,對分組後的數據進行聚合。雖然大

原创 HDFS的讀/寫流程

1.HDFS讀流程 HDFS讀流程 1.1 、Client通過FileSystem.open(filePath)方法,與NN節點進行【rpc】協議通信,校驗是否有權限是否存在,假如都ok,返回該文件的部分或全部的block的列表(包含各

原创 RocksDB事務實現TransactionDB分析

基本概念 1. LSN (log sequence number) RocksDB中的每一條記錄(KeyValue)都有一個LogSequenceNumber(後面統稱lsn),從最初的0開始,每次寫入加1。該值爲邏輯量,區別於InnoD