<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          聊聊如何學(xué)習(xí)開源項目

          共 3717字,需瀏覽 8分鐘

           ·

          2022-11-04 03:45

          工作幾年的程序員同學(xué),有了一定的項目經(jīng)驗,對于編程也有了自己的理解,但他們偶爾也會感到困惑,不知道接下來該如何提升自己。

          在筆者看來:"這個階段的程序員最需要的是提升自身編程能力和視野高度,而學(xué)習(xí)開源項目是最有效的方法之一"。

          這篇文章,筆者聊聊自己的學(xué)習(xí)開源項目的心得,希望對你有所幫助。

          1 學(xué)會使用

          首先,我們需要學(xué)習(xí)如何使用開源項目。

          Github 是全球最大的在線軟件源代碼托管服務(wù)平臺,很多開源項目都托管在他上面。

          在 GIthub 下載源碼后,需要重點關(guān)注類似 Quick Start,Getting started ,Example?之類的文檔,這些文檔告訴初學(xué)者如何使用項目。

          假如項目需要部署,參考項目文檔,在獨立的環(huán)境中,嘗試從零開始,動手部署該項目。

          某些項目也會提供完善的 example 工程·,里面有現(xiàn)成的例子,可以嘗試按照文檔介紹運行入門例子。

          如果入門例子運行順利 ,對于項目初學(xué)者來講是一個很好的開始。若運行中出現(xiàn)異常,也不必慌張,尋找項目中 FAQ 文檔,或者搜索出現(xiàn)問題的關(guān)鍵字(比如異常信息),查詢相關(guān)的解決方案。

          成功運行了項目中第一個基礎(chǔ)例子之后,可以嘗試運行更復(fù)雜的功能例子。

          筆者建議單獨創(chuàng)建一個工程,一個一個功能例子完善整個項目。當(dāng)這個項目越來越充盈,也就證明你掌握得越多。在學(xué)習(xí)過程中,將學(xué)習(xí)的心得記錄在筆記中,便于后續(xù)回溯。

          2 閱讀源碼

          閱讀源碼是深入理解開源項目最重要的一步。

          閱讀源碼之前,嘗試從源碼構(gòu)建該項目。通常開源項目都會提供一份構(gòu)建指南,指導(dǎo)你如何搭建一個用于開發(fā)、調(diào)試和構(gòu)建的環(huán)境。構(gòu)建成功后,嘗試運行該項目。

          查看該項目的架構(gòu)設(shè)計文檔,梳理出整個項目的骨架,可以畫流程圖或者 UML 圖,加深對項目的理解。

          當(dāng)我們了解到整個項目的骨架后,可以挑選感興趣的模塊來閱讀,比如你對網(wǎng)絡(luò)通訊感興趣,就閱讀網(wǎng)絡(luò)層的代碼,深入到實現(xiàn)細(xì)節(jié),如它用了什么庫,采用了什么設(shè)計模式,為什么這樣做等。如果可以,DEBUG 細(xì)節(jié)代碼。

          閱讀源碼的時候,重視單元測試,嘗試去運行單元測試,基本上一個好的單元測試會將該代碼的功能和邊界描述清楚。

          筆者體系化的閱讀源碼是在2014年。彼時,RocketMQ 3.0 剛開源不久,筆者對消息隊列極其感興趣,同時也迫切想了解網(wǎng)絡(luò)編程框架 Netty 到底是如何使用的。

          于是,先從 RocketMQ 網(wǎng)絡(luò)通訊模塊 remoting 開始學(xué)習(xí),因為源碼中有完善的測試用例,先運行單元測試,學(xué)習(xí)網(wǎng)絡(luò)編碼模型。

          在學(xué)習(xí)網(wǎng)絡(luò)編程的過程中,筆者有兩點思維突破:

          ▍一、客戶端的編程模型

          RocketMQ 客戶端網(wǎng)絡(luò)通訊有如下三種方式:

          • oneway : 單向發(fā)送

          • sync :同步調(diào)用

          • callback :異步回調(diào)

          很多技術(shù)的思想是相通的,下圖是螞蟻開源的通訊組件 sofa-bolt 支持的調(diào)用類型。

          c897c70d6c02498fa9cfff3e4f422afe.webp螞蟻通訊框架Bolt調(diào)用類型

          ▍二、服務(wù)端處理器模式

          RocketMQ 服務(wù)端通訊使用經(jīng)典的 Reactor 模式 ,服務(wù)端注冊不同的業(yè)務(wù)處理器,而各個業(yè)務(wù)處理器可以綁定不同的線程池。

                
                void?registerProcessor(
          ??????final?int?requestCode,?
          ??????final?NettyRequestProcessor?processor,
          ??????final?ExecutorService?executor)
          ;
          0aca501122a14698fdb81a6e5f4b859b.webp

          學(xué)完網(wǎng)絡(luò)框架 Remoting 之后,然后結(jié)合 Broker 模塊,學(xué)習(xí) RocketMQ 存儲模型,通過這種方式就可以對 RocketMQ 有了一個相對清晰的認(rèn)識。

          3 知行合一

          筆者大學(xué)剛畢業(yè)的時候,讀李開復(fù)老師的書,書中有一句話,我印象深刻:“I Hear and I Forget, I See and I Remember, I Do and I Understand ” 。

          中國古代哲學(xué)家荀子也說過:"不聞不若聞之,聞之不若見之,見之不若知之,知之不若行之;學(xué)至于行之而止矣"。

          學(xué)習(xí)源碼的過程中,將知識點夯實的關(guān)鍵要訣是動手實踐,并保證實踐之后有輸出產(chǎn)物,也就是知行合一

          筆者總結(jié)了兩點經(jīng)驗,供大家參考。

          ▍一、源碼中的知識點應(yīng)用到項目中

          開源項目中有非常多的優(yōu)秀實踐 ,可以將代碼中的編碼技巧,設(shè)計思想,優(yōu)秀源碼引進到業(yè)務(wù)項目里。

          2014年,藝龍的優(yōu)惠券計算服務(wù)遇到性能瓶頸,筆者負(fù)責(zé)重構(gòu)這個系統(tǒng)。在閱讀 RocketMQ 源碼后,學(xué)習(xí)到了線程池使用精髓:線程池隔離,各司其職 。

          于是,筆者先梳理出業(yè)務(wù)場景,根據(jù)任務(wù)類型,綁定不同的線程池,為了便于擴展同時對外暴露并發(fā)度的配置參數(shù)。在重構(gòu)這個系統(tǒng)的過程中,還引入 RocketMQ 創(chuàng)建線程工具類代碼 。

          重構(gòu)之后,不僅系統(tǒng)的性能提升了5倍,而且筆者的自信心也大大提升,對技術(shù)的理解也更加深刻。

          ▍ 二、造輪子

          當(dāng)我們學(xué)習(xí)了一個開源項目,我們可以參考開源源碼仿寫一個。仿寫的過程就是查漏補缺的過程,也能完善自己的知識體系。

          2016年,sharding-jdbc 開源了,下圖是當(dāng)時 sharding-jdbc 的架構(gòu)設(shè)計圖:

          4cbb952ccbe0b4e3b6c17d348f922cf5.webp

          筆者當(dāng)時對分庫分表著迷,同時腦海里有很多疑問,比如如何封裝 jdbc 的接口,如何實現(xiàn) SQL 解析 ,如何將多個分片的結(jié)果聚合等。

          于是,筆者參考 sharding-jdbc 的源碼,仿寫了一個分庫分表組件。

          3793d7f95a51e545e6349265c82b7d9d.webp

          經(jīng)過這次仿寫,筆者深入實踐了 client 模式分庫分表的原理,并積累了自己的技術(shù)儲備。

          4 參與開源

          “開源理念之一就是非常鼓勵不同的人一起合作”?!狶inux 之父 Linus Torvalds 2016 年 2 月 TED 演講《The mind behind Linux (opens new window)》

          在《教授鼓勵學(xué)生參與開源項目的 5 個理由》這篇文章里,提到了如下五點理由:

          1. 無邊界的學(xué)習(xí)
          2. 專業(yè)的交流
          3. 外在的機會
          4. 更深入的理解計算機科學(xué)

          那么程序員如何參與開源呢 ?參與開源有很多種方式,最常見的有如下幾種:

          1. 直接參與開源項目的開發(fā)
          2. 參考開源項目的社區(qū)比賽
          3. 修復(fù)開源項目中的 Bug
          4. 開源項目文檔編寫
          5. 參與開源項目的測試和 Demo 編寫工作
          6. 參與開源項目推廣

          參與一個開源項目,并與許許多多同樣聰明的工程師協(xié)作,把腦海中的奇思妙想一一實現(xiàn),那是多么美好的事情。

          5 寫到最后

          親愛的程序員朋友,當(dāng)你不知道選擇哪一個開源項目開始學(xué)習(xí)時,希望你立足當(dāng)下,當(dāng)前技術(shù)團隊使用的開源組件,正是你學(xué)習(xí)的方向。

          行動起來,相信你會成為更好的自己,加油。

          833aa417f72ce5f55cd500a86b0f2a9d.webp最近我開通了 股東服務(wù) ,感興趣的可戳: 我開通了付費渠道

          84b6632ce1903dedc5d648704b0c6a12.webp關(guān)注公眾號回復(fù)「 對線 即可免費領(lǐng)取《對線面試官》系列電子書 。

          點擊 ?閱讀原文?? 跳轉(zhuǎn)至Java開源消息推送平臺項目倉庫

          瀏覽 80
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩高清无码免费 | 久久一道本色 | 中文字幕一级二级三级 | wwwav在线观看 | 啪啪免费视频 |