1.安裝
這里的安裝并不是對(duì)著手冊(cè)執(zhí)行一下命令送悔,而是要通過(guò)安裝過(guò)程扯再,獲取到如下一些關(guān)鍵的信息:
- 這個(gè)系統(tǒng)的依賴組件传黄,而依賴的組件又是系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)的基礎(chǔ);
- 安裝目錄也能夠提供一些使用和運(yùn)行的基本信息荚板;
- 系統(tǒng)提供了哪些工具方便我們使用(帶著問(wèn)題去學(xué)習(xí)效率是最高的)。
2.運(yùn)行
安裝完成后吩屹,我們需要真正將系統(tǒng)運(yùn)行起來(lái)跪另,運(yùn)行系統(tǒng)的時(shí)候有兩個(gè)地方要特別關(guān)注:命令行
和配置文件
,它們主要提供了兩個(gè)非常關(guān)鍵的信息:
- 系統(tǒng)具備哪些能力(提供哪些可配置化的參數(shù)煤搜,這些參數(shù)是做什么的以及不同的配置帶來(lái)的影響是什么)免绿;
- 系統(tǒng)將會(huì)如何運(yùn)行。
3.原理研究
在完成前兩個(gè)步驟后擦盾,我們對(duì)系統(tǒng)已經(jīng)有了初步的感覺(jué)和理解嘲驾,此時(shí)可以更進(jìn)一步去研究其原理。其實(shí)在研究命令行和配置項(xiàng)的時(shí)候已經(jīng)涉及一部分原理了迹卢,但是并不是很系統(tǒng)辽故,因此我們要專門針對(duì)原理進(jìn)行系統(tǒng)性的研究。這里的關(guān)鍵就是系統(tǒng)性
三個(gè)字腐碱,怎么才算系統(tǒng)性呢誊垢?主要體現(xiàn)在如下幾個(gè)方面:
3.1關(guān)鍵特性的基本實(shí)現(xiàn)原理
每個(gè)應(yīng)用廣泛的開源項(xiàng)目之所以能夠受到大眾的歡迎,肯定是有一些賣點(diǎn)的,有一些它們的應(yīng)用場(chǎng)景喂走,常見的有高性能殃饿、高可用、可擴(kuò)展等特性芋肠,那到底這些項(xiàng)目是如何做到其所宣稱的那么牛的呢乎芳?這些牛的地方就是我們需要深入學(xué)習(xí)的地方
3.2優(yōu)缺點(diǎn)對(duì)比分析
只有清楚掌握技術(shù)方案的優(yōu)缺點(diǎn)后才算真正的掌握這門技術(shù),也只有掌握了技術(shù)方案的優(yōu)缺點(diǎn)后才能在架構(gòu)設(shè)計(jì)的時(shí)候做出合理的選擇帖池。優(yōu)缺點(diǎn)主要通過(guò)對(duì)比來(lái)分析奈惑,即:我們將兩個(gè)類似的系統(tǒng)進(jìn)行對(duì)比,看看它們的實(shí)現(xiàn)差異碘裕,以及不同的實(shí)現(xiàn)優(yōu)缺點(diǎn)都是什么携取。
3.3 如何系統(tǒng)性學(xué)習(xí)一個(gè)開源項(xiàng)目
- 通讀項(xiàng)目的設(shè)計(jì)文檔:例如 Kafka 的設(shè)計(jì)文檔,基本涵蓋了消息隊(duì)列設(shè)計(jì)的關(guān)鍵決策部分帮孔;Disruptor 的設(shè)計(jì)白皮書雷滋,詳細(xì)的闡述了 Java 單機(jī)高性能的設(shè)計(jì)技巧(官方文檔是學(xué)習(xí)一個(gè)項(xiàng)目的必須資料)。
- 閱讀網(wǎng)上已有的分析文檔:多對(duì)比一些文兢,同一個(gè)東西晤斩,每個(gè)人的理解并不一定相同。
- Demo 驗(yàn)證:如果有些技術(shù)點(diǎn)難以查到資料姆坚,自己又不確定澳泵,則可以真正去寫 Demo 進(jìn)行驗(yàn)證,通過(guò)打印一些日志或者調(diào)試兼呵,能清晰的理解具體的細(xì)節(jié)兔辅。
4.測(cè)試
測(cè)試一定要在原理研究之后做,不能安裝完成立馬就測(cè)試击喂!原因在于如果對(duì)系統(tǒng)不熟悉维苔,很可能出現(xiàn)命令行、配置參數(shù)沒(méi)用對(duì)懂昂,或者運(yùn)行模式選擇不對(duì)介时,導(dǎo)致沒(méi)有根據(jù)業(yè)務(wù)的特點(diǎn)搭建正確的環(huán)境、沒(méi)有設(shè)計(jì)合理的測(cè)試用例凌彬,從而使得最終的測(cè)試結(jié)果得出了錯(cuò)誤結(jié)論沸柔,誤導(dǎo)了設(shè)計(jì)決策
5.源碼分析
源碼研究的主要目的是學(xué)習(xí)原理背后的具體編碼如何實(shí)現(xiàn),通過(guò)學(xué)習(xí)這些技巧來(lái)提升我們自己的技術(shù)能力铲敛。如 Redis 的 RDB 快照褐澎、Nginx 的多 Reactor 模型、Disruptor 如何使用 volatile 以及 CAS 來(lái)做無(wú)鎖設(shè)計(jì)伐蒋、Netty 的 Zero-Copy 等乱凿,這些技巧都很精巧顽素,掌握后能夠大大提升自己的編碼能力
怎么學(xué)習(xí)
如果感覺(jué)自己時(shí)間和精力不夠,與其蜻蜓點(diǎn)水每個(gè)開源項(xiàng)目都去簡(jiǎn)單了解一下徒蟆,還不如集中精力將一個(gè)開源項(xiàng)目研究通透胁出,就算是每個(gè)季度只學(xué)習(xí)一個(gè)開源項(xiàng)目,積累幾年后這個(gè)數(shù)量也是很客觀的段审;而且一旦你將一個(gè)項(xiàng)目研究透以后全蝶,再去研究其他類似項(xiàng)目,你會(huì)發(fā)現(xiàn)自己學(xué)習(xí)的非乘峦鳎快抑淫,因?yàn)楣残缘牟糠帜阋呀?jīng)都掌握了,只需要掌握新項(xiàng)目差異的部分即可