成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何找到并快速上手一個開源項目

開源
參與一個成熟社區的開源有一點一定要記住,就是要仔細閱讀貢獻者文檔。里面往往會寫清楚如何構建代碼、代碼規范、提交規范等信息,這些都捋清楚后提交的 PR 才更容易被社區接受。

如何找到自己感興趣的開源項目

首先第一步先想清楚自己搞開源的目的是什么:

  • 參考社區大佬的代碼,提升技術
  • 豐富個人履歷,提高面試通過率

更功利一點就是想成為某個項目的 Committer/PMC

  • 單純喜歡分享,熱愛開源,認可開源改變世界??。

我人為前面三種都是一個目的,提升自己獲得后續的好處;最后一種則是妥妥的純熱愛。

以我個人來說,我兩者都沾一點;我相信大部分人都是前面三類的目的,到這里我可能要先澆點冷水。

往往一個開源項目從你熟悉它開始到提第一個 PR 然后到合并中間經歷的時間可能是大大超出你的預期的。

特別是越大型越專業的項目(我相信你也是想加入這類有一定知名度的項目)。

因為開源社區大部分都是執行異步溝通,與即時通訊的快速反饋不同,甚至還有不少 reviewer 處于不同的時區。

所以一開始就想做好心理預期,不要指望著我給某個項目提交一個很牛逼的功能,然后他們快速 review 合并,然后給你 commit 權限。

而且有不少開源項目是由某一個公司主導的,比如(Pulsar、Golang、Kafka),他們可能對于外部社區來的新手并不那么上心,一個 PR 晾在那里幾個月沒人理都是很正常的。

所以我建議一開始選擇的項目有以下幾個篩選標準:

  • 盡量是自己日常在用,熟悉的項目。
  • 最近有在及時更新維護的項目。
  • 對社區新人的接納程度是否足夠包容。
  • 這點可以在 Github 里查找標簽為 help want/contribution welcome 的 issue 或者是 PR。
  • 查看這些 issue/ PR 最近的活躍時間,貢獻者是否為新人。
  • 往往一個包容度較高的項目以上信息都是很活躍的。
  • 項目主要維護者是否來著不同的公司,是否足夠活躍。

圖片圖片

圖片圖片

推薦幾個我認為比較符合我剛才提到的條件的項目:

如何快速上手一個開源項目

如果找到了自己想貢獻的項目,如果自己還不太熟悉的話,那就可以嘗試以下步驟來快速上手它。

單元測試

首先第一個就是單元測試,單元測試是一個非常不錯的方式來上手一個新的開源項目,但重點不是去看現有的單測,而是自己去寫??。

寫過單元測試的小伙伴就知道,如果要達到 90% 以上的覆蓋率時需要對自己寫的每一行代碼都得了解,甚至在寫的過程中會發現部分代碼是不是沒有必要,從而再幫助自己梳理一遍業務。

所以寫單測確實是快速熟悉某個項目的方法,但這針對于一些邏輯簡單的項目;對于一些業務復雜的項目建議還是快速跑通官方推薦一個功能。

以 Pulsar 為例

以 Apache Pulsar為例,那就先跑一個消息的生產者和消費者 demo;跑通了之后再嘗試看看它客戶端已有的單測代碼,然后嘗試改一些斷言,此時就會發現預期值為什么會這么定義。https://github.com/apache/pulsar/blob/631b13ad23d7e48c6e82d38f97c23d129062cb7c/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java#L1077

圖片圖片

圖片圖片

比如這里的一個 consumer 取消訂閱兩次時候就會拋出異常,此時我們就可以根據異常的地方找到源碼里對連接狀態的判斷條件。

就可以得知:當客戶端取消訂閱時會修改連接狀態。

HertzBeat

下面以 Apache HertzBeat為例來看看當時我是如何貢獻單元測試的。

圖片圖片

通過官方的架構圖可以得知 HertzBeat 是通過一個 collector 去直連目標采集數據的。

比如通過 Redis 的客戶端去獲取監控數據,然后再存放到自己的時序數據庫中進行展示。

所以這個采集的過程就是比較核心的邏輯,我們可以看看他的接口定義。

圖片圖片

一共就三個接口,分別是:

  • collect采集接口:在 Metrics 中定義了采集的目標信息(地址、端口等)
  • 采集完后的數據寫入到 Builder 供后續的寫入存儲
  • preCheck:提前做一些參數校驗
  • supportProtocol:返回定義的協議類型,通過這個類型找到對應采集器

圖片圖片

然后就交由不同的實現類去采集不同的指標。

這里我以 RedisCommonCollectImpl為例,主要的單測邏輯就是模擬 Redis 客戶端的返回數據,然后在 Collect 的代碼里查看不同的處理邏輯,其實就是要覆蓋各種分支以及異常的情況。

最后再斷言采集到的數據與預期是否匹配即可,貼一段核心邏輯:

圖片圖片

至于應該返回什么預期結果,有些 collector 可能會在代碼注釋里寫清楚,但這個 Redis 沒有寫。

不過也有辦法,我們可以把代碼在本地跑起來之后進入管理臺查看內置的監控模版。

圖片圖片

這里是用于定義會監控哪些字段的地方,這樣我們就可以在代碼預先生成好預期返回值了。

圖片圖片

具體的單測代碼請看這里:https://github.com/apache/hertzbeat/blob/master/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java#L46

總結

參與一個成熟社區的開源有一點一定要記住,就是要仔細閱讀貢獻者文檔。

里面往往會寫清楚如何構建代碼、代碼規范、提交規范等信息,這些都捋清楚后提交的 PR 才更容易被社區接受。

后面會繼續更新集成測試與 e2e 測試等內容。

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2021-03-02 14:50:57

開源技術 項目

2015-07-29 10:00:16

開源項目

2014-10-21 10:25:50

程序員

2022-12-12 11:14:06

LinuxID

2013-08-19 12:40:18

開源項目

2020-03-02 10:30:45

阿里互聯網技術

2020-03-02 15:27:28

阿里新人項目

2017-03-06 11:02:59

產品軟件Power Desig

2022-01-04 09:01:10

開源項目開源技術

2023-08-07 08:12:12

開源項目社區性質feature

2013-06-18 11:37:42

XFSRHEL 6.4

2019-06-27 10:15:46

架構代碼項目

2013-11-19 12:53:33

OA信息化

2022-08-19 07:13:45

SQL方法編程

2020-11-12 19:37:49

Web 開發項目

2015-09-08 10:32:21

開源項目選擇方式

2015-09-11 10:29:13

開源項目閱讀

2012-06-27 10:16:12

開源項目CodePlex

2021-08-10 07:27:42

Elasticsear集群開源

2018-06-19 16:04:27

Dubbo應用Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91网站在线观看视频 | 婷婷五月色综合香五月 | 色婷婷狠狠| 粉色午夜视频 | 日日淫| 天天草天天干天天 | 国产欧美一区二区精品忘忧草 | 成人在线一区二区 | 成人在线精品视频 | 欧美精品国产一区二区 | 国产成人综合亚洲欧美94在线 | 中文字幕高清免费日韩视频在线 | 国产999精品久久久 午夜天堂精品久久久久 | 孕妇一级毛片 | 欧美888| 国产精品久久二区 | 国产99免费视频 | 国产一区二区三区四区 | 日本不卡在线观看 | 国产精品区二区三区日本 | 精品国产一区二区三区在线观看 | 午夜a区 | 日本不卡高字幕在线2019 | 色资源站 | 精品毛片 | 精品国产一区二区久久 | 成年人黄色一级毛片 | 精品久久久久国产免费第一页 | 中文字幕国产 | 国产高清在线精品一区二区三区 | 国产成人高清成人av片在线看 | 国产精品3区 | 91精品久久久久 | 国产精品三级 | 国产成人自拍一区 | 国产精品精品视频一区二区三区 | 最近日韩中文字幕 | 日韩中文字幕在线不卡 | 三极网站| 我要看黄色录像一级片 | 久久久国产一区二区三区四区小说 |