鍍金池/ 教程/ 大數(shù)據(jù)/ 從哪里開始讀起,怎么讀
Redis 數(shù)據(jù)淘汰機(jī)制
積分排行榜
小剖 Memcache
Redis 數(shù)據(jù)結(jié)構(gòu) intset
分布式鎖
從哪里開始讀起,怎么讀
Redis 數(shù)據(jù)結(jié)構(gòu) dict
不在浮沙筑高臺(tái)
Redis 集群(上)
Redis 監(jiān)視器
源碼閱讀工具
Redis 日志和斷言
內(nèi)存數(shù)據(jù)管理
Redis 數(shù)據(jù)結(jié)構(gòu)綜述
源碼日志
Web 服務(wù)器存儲(chǔ) session
消息中間件
Redis 與 Lua 腳本
什么樣的源代碼適合閱讀
Redis 數(shù)據(jù)結(jié)構(gòu) sds
Memcached slab 分配策略
訂閱發(fā)布機(jī)制
Redis 是如何提供服務(wù)的
Redis 事務(wù)機(jī)制
Redis 集群(下)
主從復(fù)制
Redis 應(yīng)用
RDB 持久化策略
Redis 數(shù)據(jù)遷移
Redis 事件驅(qū)動(dòng)詳解
初探 Redis
Redis 與 Memcache
AOF 持久化策略
Redis 數(shù)據(jù)結(jié)構(gòu) redisOb
作者簡(jiǎn)介
Redis 數(shù)據(jù)結(jié)構(gòu) ziplist
Redis 數(shù)據(jù)結(jié)構(gòu) skiplist
Redis 哨兵機(jī)制

從哪里開始讀起,怎么讀

這個(gè)問題簡(jiǎn)單,程序從哪里開始就哪里開始讀起。譬如,C 代碼,當(dāng)然是從 main(),其他語言也是類似的。但閱讀的時(shí)候,要帶著問題去讀。

帶著最簡(jiǎn)單的問題,開始閱讀源碼。

拿到一個(gè)別人寫的代碼,或多或少,細(xì)節(jié)有很多,不可能一開始就能把所有的細(xì)節(jié)都吃透,所以需要一個(gè)簡(jiǎn)單的問題先把整個(gè)代碼系統(tǒng)的閱讀一遍,知道里面的整體框架是怎么樣的。譬如 Memcache/Redis 這種 key/value 系統(tǒng),當(dāng)它們收到一個(gè) set/get key 請(qǐng)求,是如何做相應(yīng)的呢?整個(gè)服務(wù)是如何運(yùn)作起來的?譬如 Django,當(dāng)它拿到一個(gè) HTTP 請(qǐng)求,是如何做相應(yīng)的呢?帶著這些簡(jiǎn)單的問題,瀏覽源代碼能更快了解它們的代碼框架是怎么樣的,對(duì)于之后繼續(xù)閱讀里面的模塊,也是非常有好處的。

讀源代碼,框架才是最先需要了解的,細(xì)節(jié)才是最重要的。

看到一個(gè)函數(shù), 首先要做的是知道這個(gè)函數(shù)到底做了什么, 而不是他底層是怎么實(shí)現(xiàn)的。這有點(diǎn)類似于英語中的閱讀理解,遇到文中陌生的單詞,首先是根據(jù)上下文來判斷它是什么意思,到最后真的不能理解再回頭拿字典去查單詞。

忽略變量聲明。好的開源 C 代碼會(huì)將所有變量提前聲明,即放在函數(shù)的開頭。實(shí)際上,沒必要例會(huì)這一大坨的變量,等遇到用到這個(gè)變量的時(shí)候自然就能懂得這個(gè)參數(shù)是用來做什么,而不用我們首次見到就猜測(cè)它的用處。 畫出函數(shù)的調(diào)用鏈,用自己認(rèn)為最合適的圖表說明問題。有時(shí)候 Redis 里面的調(diào)用鏈比較長(zhǎng),經(jīng)常畫滿一張 A4 紙。在每個(gè)函數(shù)旁邊都標(biāo)注它所完成的事情,這是收集線索的一個(gè)過程,可能會(huì)非常的枯燥。

我會(huì)在小冊(cè)子的最后推薦幾款源碼閱讀的軟件。

上一篇:源碼日志下一篇:消息中間件