原创 逆波蘭表達式

逆波蘭表達式又叫做後綴表達式。在通常的表達式中,二元運算符總是置於與之相關的兩個運算對象之間,這種表示法也稱爲中綴表示。波蘭邏輯學家J.Lukasiewicz於1929年提出了另一種表示表達式的方法,按此方法,每一運算符都置於其運算對象之

原创 socket相關函數

socket相關函數 socket函數 socket函數返回套接字描述符 int socket(int socket,int type,int protocol) 若成功返回非負描述符,失敗返回-1. family 說明

原创 HihoCoder第四周(Trie圖)

問題 河蟹先生將要給與他們一篇從互聯網上收集來的文章,和一本厚厚的河蟹詞典,而他們要做的是判斷這篇文章中是否存在那些屬於河蟹詞典中的詞語 樸素方法:枚舉每一個單詞,然後枚舉文章中可能的起始位置,然後進行匹配,看能否成功。如果說詞

原创 STL源碼剖析—Iterator與Traits

獲取迭代器的類型 如果函數中想要獲取迭代器的類型該怎麼做呢?下面提供一種方法: template <class I, class T> void func_impl(I iter, T t) { T tmp; // .

原创 STL源碼剖析—空間配置器

allocator 由於對象的創建分爲分配內存和調用構造函數兩部分,STL allocator使用 alloc::allocate()來分配內存,::construct()構造對象。 construct construct()函數只有

原创 Redis設計與實現——數據結構(四)

整數集合 簡介 整數集合(intset)是集合鍵的底層實現之一: 當一個集合只包含整數值元素, 並且這個集合的元素數量不多時, Redis 就會使用整數集合作爲集合鍵的底層實現。 實現 每個 intset.h/intset 結構表示一個整

原创 PhxRPC源碼分析(三) RPC

RPC 整個RPC的定義基本都在hsha_server這個文件。主要有一下幾個類: DataFlow :數據流,所有請求和應答分別保存在兩個線程安全的隊列中。 HshaServerStat HshaServerQos: 統計運行狀態,獨

原创 C++11多線程

創建線程 std::thread thObj(<CALLBACK>); 其中的函數可以是函數指針,函數對象,lambda函數。線程創建完成即開始運行。 #include <thread> void thread_function(){

原创 C++智能指針

std::shared_ptr 初始化 構造函數初始化: std::shared_ptr<int> p(new int(1)); std::make_shared< T >初始化 std::shared_ptr<int> p = std:

原创 PhxRPC源碼分析(一)BlockTcpStream

phxrpc簡介 phxrpc是微信開源的輕量級rpc框架,支持協程模式,代碼量不大,很適合拿來學習一個。 定製輸入輸出流 phxrpc使用標準輸入輸出的方式封裝了socket,使用<<和>>來實現讀寫。 實現類圖如下: strea

原创 雲風coroutine源碼分析

前言 現在C++的開發開始流行使用coroutine,也就是協程。我看騰訊的幾個開源項目裏面都有協程的實現。使用協程可以用同步的寫法,達到異步的性能。它的基本原理其實就是在IO等待的時候切換出去,在適當的時刻再切換回來。雲風用200行代碼

原创 Redis設計與實現——數據結構(五)

對象 Redis 並沒有直接使用之前的數據結構來實現鍵值對數據庫, 而是基於這些數據結構創建了一個對象系統, 這個系統包含字符串對象、列表對象、哈希對象、集合對象和有序集合對象這五種類型的對象, 每種對象都用到了至少一種我們前面所介紹的數

原创 Docker入門

一直對docker很感興趣,今天按照官網的Guides學習一個。 安裝 我的機器是騰訊雲1元學生主機,centos,香港節點,還能當梯子,美滋滋。安裝就不多說了,按官網來就行了,直接Get Started。 Get Started p

原创 HihoCoder第十二週——樹上DP

刷油漆 題目 給定一棵樹,每個節點有一個權值,將包含1號結點的一部分連通的結點進行塗漆(這裏的連通指的是這一些塗漆的結點可以互相到達並且不會經過沒有塗漆的結點),使權值和最大。 分析 f(t, m)表示,在以t爲根的一棵樹中,選出包含根節

原创 Google Protocol Buffer

Protocol Buffer是谷歌的一種序列化格式 使用 首先定義.proto文件 syntax ="proto2"; package tutorial; message Person{ required string nam