校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 如何高效閱讀源代碼?

如何高效閱讀源代碼?

熱門標(biāo)簽:機(jī)器人電銷新聞 青島企業(yè)電銷機(jī)器人 遼寧申請400電話怎么收費(fèi) 購買電銷機(jī)器人源碼 百度地圖標(biāo)注的圖片怎么弄的 做地圖標(biāo)注可行嗎 外呼系統(tǒng)通信主機(jī) 石家莊市關(guān)于400電話申請 在百度地圖標(biāo)注

閱讀源碼是每個優(yōu)秀開發(fā)工程師的必經(jīng)之路,那么這篇文章就來講解下為什么要閱讀源碼以及如何閱讀源碼。

首先來說下為什么要讀源碼,有學(xué)習(xí)源碼的必要嗎?

為什么要閱讀源碼?

關(guān)于為什么閱讀和學(xué)習(xí)源碼,我個人認(rèn)為可能有以下幾點(diǎn):

(一)吊打面試官,應(yīng)對面試

為了找到更好的工作,應(yīng)對面試,因?yàn)樵诿嬖囍锌隙〞柕皆创a級別的問題,比如:為什么 HashMap 是線程不安全的?

如果你沒有閱讀過源碼,面試官可能會對回答的結(jié)果不滿意,進(jìn)而導(dǎo)致面試結(jié)果不太理想,但如果你對源碼有所研究,并能夠很好地問答面試官的問題,這可能就是你的加分點(diǎn),可以形成自己獨(dú)特的競爭力,吊打面試官,升職加薪不是夢。

(二)解決問題(bug)

在開發(fā)過程中,我們或多或少會遇到 bug,比如:在 foreach 循環(huán)里進(jìn)行元素的 remove/add 操作,為啥有可能會報 ConcurrentModificationException 異常?

我們可以先在 Google、Stack Overflow 以及對應(yīng)項目的 Issues 里看有沒有類似問題以及解決辦法,如果沒有的話,我們只能通過閱讀源碼的方式去解決了。如果我們對相關(guān)源碼有所涉獵,就可以快速定位到問題所在。

(三)提升編程能力

讀一本好書,就是和許多高尚的人談話。 -歌德

和閱讀一本好書一樣,閱讀源碼就是和編程大牛面對面交流的機(jī)會,在許多優(yōu)秀的開源項目中,它們的編碼規(guī)范和架構(gòu)設(shè)計都是很棒的,另外在設(shè)計上也使用了大量的設(shè)計模式,通過閱讀和學(xué)習(xí)源碼,能夠快速提升我們的編碼水平,以及對設(shè)計模式有更深的理解。

同時,在我們閱讀完一個源碼后,可以觸類旁通,能夠快速地對其他框架的源碼進(jìn)行閱讀和學(xué)習(xí),減少時間成本。

除了上述提到的原因之外,可能還有許多,在這里就不一一贅述了,那么在確定了要閱讀源碼之后,就讓我們看下如何閱讀源碼吧!

如何閱讀源碼?

如何閱讀源碼取決于你為什么要讀源碼,比如:

下面大概說下閱讀源碼的幾點(diǎn)建議:

在閱讀之前,可以先從開源項目的官網(wǎng)上看它的架構(gòu)設(shè)計和功能文檔,了解這個項目的整體架構(gòu)、模塊組成以及各個模塊之間的聯(lián)系。

如果沒有對應(yīng)的項目文檔,可以根據(jù)代碼的模塊進(jìn)行梳理,以形成對項目的初步了解,或者查看已有的源碼解析文章或者書籍系統(tǒng)源碼,在閱讀源碼之前,了解項目的架構(gòu)和思路會使閱讀源碼事半功倍。

在了解一個類的時候,可以使用 ctrl+F12 來查看類中的成員變量和方法。

可以通過 IDEA 的 Diagrams 功能去了解一個類的繼承關(guān)系。

多打斷點(diǎn)調(diào)試,斷點(diǎn)追蹤源碼是很好的閱讀源碼的方式,可以先通過 debug 了解下調(diào)用邏輯,都和哪些類有關(guān)聯(lián),有大致了解后再通過 debug 了解整體代碼的功能實(shí)現(xiàn),各個類都起到了什么作用,有沒有涉及到設(shè)計模式等。

另外,優(yōu)秀的開源項目中肯定會有許多地方應(yīng)用到了設(shè)計模式,建議在閱讀源碼之前,需要對常用的設(shè)計模式有大致的了解,不然閱讀源碼的效率會大大降低。

如果遇到讀不懂某部分源碼的時候,可以先跳過,之后再回來看,如果屬于搞不懂這部分就茶不思飯不想的人,可以在網(wǎng)上找是否有該部分源碼的解析或者文檔,也可以自己通過源碼注釋和測試用例去閱讀學(xué)習(xí)。

一般優(yōu)秀的開源項目都會有單元測試,可以通過對應(yīng)類的單元測試去了解方法的含義和用法,加深對源碼邏輯的理解。

在閱讀源碼的時候,可以在代碼上加上注釋和總結(jié),同時還可以畫出時序圖和類圖,這樣對閱讀源碼有很大的幫助,可以很清楚地知道類之間的調(diào)用關(guān)系和依賴關(guān)系,也方便以后回顧,重新閱讀。

在這里推薦大家一個 IDEA 插件 SequenceDiagram,可以根據(jù)源碼生成調(diào)用時序圖,便于閱讀源碼。

剛開始閱讀源碼,不建議直接看框架源碼,可以先從 jdk 源碼看起:

jdk 源碼也是非常龐大的,可以分模塊來閱讀,下面是建議的閱讀順序:

java.lang 包下的基本包裝類(Integer、Long、Double、Float 等),還有字符串相關(guān)類(String、StringBuffer、StringBuilder 等)、常用類(Object、Exception、Thread、ThreadLocal 等)。java.lang.ref 包下的引用類(WeakReference、SoftReference 等)java.lang.annotation 包下的注解的相關(guān)類java.lang.reflect 包下的反射的相關(guān)類java.util 包下為一些工具類,主要由各種容器和集合類(Map、Set、List 等)java.util.concurrent 為并發(fā)包系統(tǒng)源碼,主要是原子類、鎖以及并發(fā)工具類java.io 和 java.nio 可以結(jié)合著看java.time 主要包含時間相關(guān)的類,可以學(xué)習(xí)下 Java 8 新增的幾個 包下為網(wǎng)絡(luò)通信相關(guān)的類,可以閱讀下 Socket 和 HTTPClient 相關(guān)代碼

其他包下的代碼也可以做下了解,JDK源碼閱讀筆記:

再有了一定的源碼閱讀經(jīng)驗(yàn)后,可以再去學(xué)習(xí) Spring、Spring Boot、Dubbo、Spring Cloud 等框架的源碼。

總結(jié)

主要介紹了為什么讀源碼以及如何讀源碼,供大家參考,每個人都有適合自己的閱讀源碼的方式,希望可以在學(xué)習(xí)中去摸索出一套屬于自己的方式。

閱讀源碼不是一蹴而就的,這是持久戰(zhàn),只要你能夠堅持下來,肯定受益匪淺。閱讀源碼的過程比較枯燥,可以在社群里一起討論學(xué)習(xí),這樣可能效率更高些。

寫得不好的或者大家有什么更好的建議,也歡迎留言討論。

標(biāo)簽:郴州 蚌埠 西雙版納 榆林 茂名 廣東 銅仁 銅仁

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何高效閱讀源代碼?》,本文關(guān)鍵詞  如何,高效,閱讀,源代碼,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何高效閱讀源代碼?》相關(guān)的同類信息!
  • 本頁收集關(guān)于如何高效閱讀源代碼?的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 洮南市| 密山市| 芮城县| 顺平县| 新竹市| 长葛市| 葫芦岛市| 伊通| 饶平县| 卢湾区| 吉木乃县| 西丰县| 革吉县| 毕节市| 哈密市| 务川| 利川市| 金昌市| 富宁县| 横山县| 米脂县| 江永县| 丰镇市| 平塘县| 辽源市| 怀仁县| 宁安市| 开化县| 南涧| 宁武县| 辰溪县| 临夏市| 鄂州市| 沂南县| 祁门县| 西充县| 黄浦区| 剑阁县| 贡觉县| 临江市| 康马县|