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


開篇

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

萬變不離其宗

無論你學習的新知識是什么,首先可以簡單的百度 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. 看完https://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相關的方法。

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

作者: 一杯熱咖啡AAA
出處: https://www.cnblogs.com/AdaiCoffee/
本文以學習、研究和分享為主,歡迎轉載。如果文中有不妥或者錯誤的地方還望指出,以免誤人子弟。如果你有更好的想法和意見,可以留言討論,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM