一門新技術或者開源項目我是如何從頭開始學習

開篇

對於一門新技術或者開源項目如何從頭開始學習?相信每個人都有不同的想法和見解,下面談談我個人的想法和實踐

萬變不離其宗

無論你學習的新知識是什麼,首先可以簡單的百度 google一下,比如我想要學習netty,那麼就搜索 “netty 介紹”,讀完過後,一定要去官方網站看一下。一般的開源項目都放在github上,且有一個readMe.md文件,我建議你一定要去讀一遍。因為官網上的文檔資訊一定是最全最新的,所有其他網站的資料,幾乎都是從官網上搬運過去的,且很有可能相關資料已經過時。

無論怎樣,對於一門新知識的學習,建議你一定要去官網上看一下文檔

重量級知識

這裡的「重量級知識」是指有難度,有深度,且相對不容易掌握的知識,例如elasticsearch、netty、Java多執行緒、JVM底層,這些知識的學習是需要時間沉澱的,不可能一蹴而就。

這些知識,往往不是簡單掌握用法、API即可,不然很有可能會埋坑,且在將來某個時間爆發。

就拿我親身經歷來說,以前我們有個項目需要使用elasticsearch,且該項目非常緊急,我和另一個同事之前都沒有任何elasticsearch相關經驗,我們從網上簡單了解並學習相關elasticsearch api過後,就直接在項目中使用,而我們判斷elasticsearch是否正確使用的依據,就是 業務 「CRUD」 相關功能是否正常。

受益於elasticsearch開箱即用,我和同事順利的完成了相關任務,但是隨著我深入學習elasticsearch,我發現我們寫的程式碼存在不少問題

  1. elasticsearch沒有配置任何mapping,使用的是默認的dynamic mapping,且沒有任何設置
  2. 數據分片沒有配置,默認只有5個分片,且副本為1,按照官網的資訊,1個分片應該最多不超過50G數據,否則大分片在reindex和故障修復時會很慢,且不穩定
  3. 我們使用的相關elasticsearch API存在不少性能問題,在業務允許的情況下,應該優先使用filter查詢
  4. 應該提高refresh的默認值,以提升寫入速度
  5. … 很多很多問題

雖然我們順利的完成了任務,但是我們的程式碼存在很多問題,且在數據量大的情況下,很致命。(後來已修復)

一件事情,往往有兩面性,像elasticsearch開箱即用功能,非常容易上手,簡單部署一下,再調用相關API,就能實現 「CRUD」,但是便利的背後卻是一大堆問題,如果你不深入學習elasticsearch,包括它的分片、mapping、索引別名、分詞器、routing、template、filter過濾器、聚合、JVM記憶體設置、集群、冷熱數據、副本、kibana、logstash等等。即使現在你的程式碼沒有任何問題,能夠運行,將來在某個時刻,你一定會為你的行為買單!

因此,對於這些「重量級知識」,我建議你一定要深入學習,並且長時間積累,形成體系。並把一些重要的知識點和坑記錄下來,以免忘記。

就拿我學習elasticsearch而言,因為我們項目嚴重依賴elasticsearch,且數據量不少,因此過年期間我專註於elasticsearch。且後續不斷積累相關知識,我的學習步驟如下

首先看官方文檔,且在學習的過程中,一直穿插著在看官方文檔 ,由於elasticsearch知識點很多,官網的文檔也非常多,剛開始學習的時候,僅僅看官網文檔,進展很慢,因為一些elasticsearch術語、行話不是很了解,所以是一邊看影片、部落格、公眾號、一邊看官方文檔。

  1. 看完極客時間 阮一鳴老師 「Elasticsearch核心技術與實戰」(因為當時剛好出了這門課程),但是這門主要講解如何使用,相關api講解較多
  2. 看完中華石杉 ES-頂尖高手 基礎篇和高手進階篇,這門課程講解了很多elasticsearch底層原理,受益匪淺
  3. 看完//blog.csdn.net/laoyang360/ 銘毅天下所有關於elasticsearch的部落格,大約有130篇左右
  4. 看完 銘毅天下的公眾號 所有關於elasticsearch的文章
  5. 看了很多銘毅天下知識星球上的帖子

如果你想要深入學習elasticsearch,我強烈推薦你去看 銘毅天下的部落格、公眾號、知識星球。 這個部落客專註於elasticsearch領域,且已經通過了elasticsearch官方認證工程師。 百度搜索 「銘毅天下」 即可

至此,我的elasticsearch相關領域的知識,已經從最初的簡單使用 api 到現在 已深入理解elasticsearch相關核心知識。

我在學習elasticsearch的過程中,不斷積累相關重點知識和坑,並形成一定知識體系,方便我後期查閱。

我建議你最好也將相關知識記錄下來,最後形成一定體系。

輕量級知識

這裡的「輕量級知識」是指難度較低,且深度較淺,並容易掌握的知識。類似於druid資料庫連接池、easyExcel等等

就拿我學習easyExcel舉例。以前處理excel相關數據的時候,使用的都是poi,但是最近發現同事在使用easyExcel,這引起了我的好奇心,到網上查閱相關資料,發現easyExcel相比poi、jxl有不少優點,且有完善的中文文檔和社區(其實就是qq群和釘釘群,有問題可以到群裡面提問),於是我也嘗試使用easyExcel來處理excel相關數據。

第一步: 我到github easyExcel首頁,讀完整個readMe.md 文檔(全是中文),建議你一定要讀完,以免錯過重要資訊。

第二步: 通過文檔資訊,我知道easyExcel是個maven工程,並且有著完善的單元測試,我隨即clone()最新的程式碼到本地

第三步: 通過文檔資訊,找到核心單元測試 ReadTest、WriteTest,並跑完這兩個類所有的測試方法

第四步: 讀取docs目錄下相關easyExcel相關資訊

這裡不得不提一下,easyExcel的單元測試用例,寫的非常好,並且很完善,基本上所有和excel相關的處理,你基本上都可以找到相關的測試用例程式碼。每一個單元測試,你都可以成功運行,且還有程式碼注釋和實際的控制台輸出,如果你想深入了解底層邏輯,還可以debug程式碼。

每一個測試用例都有詳細的注釋:

每一個測試用例都有詳細的輸出:

通過easyExcel的單元測試用例,僅僅一個下午的時間,我就完全掌握了easyExcel處理excel相關的方法。

對於這類「輕量級知識」,通過官方文檔資訊和單元測試用例來學習,真的非常省時省力。如果你是通過部落格或百度查閱一個個知識點,真的很花時間,且資料很可能已經過時。

Tags: