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

我用笨辦法啃下了一個(gè)開(kāi)源項(xiàng)目的源碼!

開(kāi)源
閱讀源碼有一個(gè)非常非常有用的技巧,那就是你別下載了源碼到本地IDE里然后直接胡亂的翻看,那是不行的。

前言

這篇文章,給大家簡(jiǎn)單介紹一下很多同學(xué)都非常關(guān)心的一個(gè)問(wèn)題:如何閱讀一個(gè)開(kāi)源項(xiàng)目的源碼。

我相信很多同學(xué)都希望能夠去閱讀一些源碼來(lái)提升自己的技術(shù)水平,畢竟在面試的時(shí)候,很多大廠都經(jīng)常會(huì)扣到非常深入的底層源碼。


1、從最簡(jiǎn)單的源碼開(kāi)始:別幻想一步登天

其實(shí)開(kāi)源項(xiàng)目有很多種,比如說(shuō)有Spring這種框架類的,還有比如數(shù)據(jù)庫(kù)連接池、log4j等這種工具類的。

當(dāng)然還有特別重型的中間件類的,比如說(shuō)RocketMQ、Kafka、Redis。更有甚者也有上百萬(wàn)行代碼的大數(shù)據(jù)類的,比如Hadoop、Spark。

所以如果很多同學(xué)想要讀源碼的話,面臨的第一個(gè)問(wèn)題:不知道從何下手。

那么是不是說(shuō)只要隨便挑選一個(gè)開(kāi)源技術(shù)的源碼,采用愚公移山的精神,直接硬著頭皮去讀,堅(jiān)持就是勝利,鐵杵一定就能磨成針嗎?

不是的!其實(shí)很多同學(xué)始終都沒(méi)掌握到閱讀源碼的順序、技巧和方法,所以導(dǎo)致嘗試看過(guò)一些源碼,卻還是看不懂。

首先你要明白一個(gè)前提,比如說(shuō)Kafka的作者,Hadoop的作者,他們本身都是有很多年經(jīng)驗(yàn),技術(shù)功底極為扎實(shí),都是技術(shù)大牛的人,站在一個(gè)很高的角度去設(shè)計(jì)和開(kāi)發(fā)出來(lái)了這些極為出色的分布式系統(tǒng)。

那么如果你的技術(shù)實(shí)力達(dá)不到他們的水平,你覺(jué)得你直接去讀他們寫(xiě)出來(lái)的源碼,就能看懂嗎?

那估計(jì)是很難的,因?yàn)槔锩嫣N(yùn)含的各種底層技術(shù)細(xì)節(jié),分布式架構(gòu)設(shè)計(jì)思想,還有復(fù)雜的算法和機(jī)制,都不是你能理解的。

所以建議大家第一點(diǎn),想看源碼,先挑一個(gè)最最簡(jiǎn)單的,適合自己技術(shù)水平的去看。

給大家舉個(gè)例子,比如說(shuō)你平時(shí)常用的一些源碼都有什么?顯而易見(jiàn),每個(gè)人都會(huì)用Spring Web MVC、Spring、MyBatis、Spring Boot,等等。

其實(shí)這些開(kāi)源框架的源碼也不能說(shuō)就簡(jiǎn)單了,他們同樣蘊(yùn)含了開(kāi)源作者深厚的技術(shù)功底在里面。

但是你要考慮一點(diǎn),這些開(kāi)源項(xiàng)目已經(jīng)相對(duì)來(lái)說(shuō)是普通人可以優(yōu)先觸碰的了。因?yàn)樗麄儾皇欠植际较到y(tǒng),不涉及到復(fù)雜的架構(gòu),網(wǎng)絡(luò)通信,IO,等技術(shù)細(xì)節(jié)。

他們大多就是依賴一些底層的Java基礎(chǔ)技術(shù),比如說(shuō)動(dòng)態(tài)代理、Servlet、HTTP協(xié)議、JDBC等等。

而他們依賴的那些基礎(chǔ),大多數(shù)普通工程師都是掌握的,你完全可以優(yōu)先嘗試去閱讀一些這種開(kāi)源框架類的源碼。

2、循序漸進(jìn):先搞定底層依賴的技術(shù)

好,現(xiàn)在假如說(shuō)你經(jīng)過(guò)了幾個(gè)月的努力,把一些開(kāi)源框架的源碼,比如上面說(shuō)的SSM三大框架的源碼都看過(guò)了,現(xiàn)在你的技術(shù)實(shí)力有了進(jìn)一步的提升。

這些提升,主要體現(xiàn)在對(duì)開(kāi)源項(xiàng)目的設(shè)計(jì)思想,組件設(shè)計(jì),組件交互,還有框架封裝,等等,都有了進(jìn)一步的理解。

接下來(lái),你就可以嘗試去讀一些更難一點(diǎn)的源碼。

給大家舉個(gè)例子,假設(shè)你這個(gè)時(shí)候去閱讀Kafka的源碼。沒(méi)問(wèn)題。但是這里有一些是你需要注意的地方,Kafka的底層是重度依賴ZooKeeper的

如果你不把ZooKeeper給掌握精通的話,會(huì)導(dǎo)致Kafka你也難以理解。

所以這個(gè)時(shí)候你得先把底層依賴的技術(shù)給搞定,那么你就得回過(guò)頭去先閱讀ZooKeeper的源碼,把ZK這個(gè)技術(shù)先給搞精通一些。

同理,如果你在研究ZK的時(shí)候,發(fā)現(xiàn)他底層有一些技術(shù)是你掌握不好的,比如你發(fā)現(xiàn)他大量運(yùn)用了Java并發(fā)包下的東西。

因此如果你對(duì)Java并發(fā)包掌握的不夠好,那么建議你去把Java并發(fā)包下的源碼先仔細(xì)研究一下。

通過(guò)這種方式,你可以自行追蹤到自己還不熟悉的很多底層技術(shù),然后一個(gè)一個(gè)擊破,把這些底層依賴的技術(shù)的源碼你可以先研究透徹一些。

然后,你再一步一步往上層的技術(shù)去研究,這樣看那些復(fù)雜技術(shù)的源碼就會(huì)輕松很多了。


3、一定要以Hello World作為入口來(lái)閱讀

閱讀源碼有一個(gè)非常非常有用的技巧,那就是你別下載了源碼到本地IDE里然后直接胡亂的翻看,那是不行的。

一般建議就是基于一個(gè)開(kāi)源技術(shù)寫(xiě)一個(gè)最最基本的HelloWorld程序,就是一個(gè)入門(mén)級(jí)的程序,然后把他的核心功能給跑通。

舉個(gè)例子,假如說(shuō)你要閱讀ZooKeeper的源碼,那么你先寫(xiě)一個(gè)ZK的HelloWorld程序。

比如說(shuō)先連接,然后創(chuàng)建一個(gè)znode,對(duì)znode注冊(cè)一個(gè)監(jiān)聽(tīng)。接著觸發(fā)這個(gè)監(jiān)聽(tīng),接著再關(guān)閉連接,就這樣的一個(gè)簡(jiǎn)單的程序。

然后就可以打斷點(diǎn),跟蹤這個(gè)Hello World級(jí)別的源碼一步一步調(diào)試追蹤,他是如何發(fā)起和建立連接的,底層的代碼流程是什么樣的。

4、抓大放小,邊寫(xiě)注釋邊畫(huà)圖

在看源碼的過(guò)程中,很多人會(huì)被核心流程中混雜的一些特殊業(yè)務(wù)邏輯的處理給搞懵。

給大家舉個(gè)例子,看下面的代碼,是一段隨手寫(xiě)出來(lái)演示的:

checkUser();

fetchFromPeers();

countMetrics();

大家可以看到,上面就三行代碼,從方法名稱就可以看出來(lái),先是做了一個(gè)權(quán)限檢查之類的操作,然后是核心業(yè)務(wù)邏輯去抓取數(shù)據(jù),最后是做了一些metric指標(biāo)統(tǒng)計(jì)。

那么很多同學(xué)看源碼的時(shí)候,就喜歡把每一行代碼都看懂,最后不停的點(diǎn)到很深層的地方去,把自己給繞暈了。最后淹死在源碼的海洋里。。。

其實(shí)這個(gè)是不對(duì)的,這就是沒(méi)有掌握源碼閱讀的一大典型原則:

抓大放小

比如上面的三行代碼,你應(yīng)該直接跳過(guò)第一行和第三行,連看都別去看,直接進(jìn)入第二行核心邏輯。

也就是說(shuō),你只需要抓最核心的代碼流程就可以了,那些無(wú)關(guān)緊要的代碼,千萬(wàn)別有強(qiáng)迫癥點(diǎn)進(jìn)去反復(fù)看,那樣絕對(duì)會(huì)讓你對(duì)源碼從入門(mén)到放棄。

所以,再次強(qiáng)調(diào)!強(qiáng)調(diào)!強(qiáng)調(diào)!重要的事情說(shuō)三遍。閱讀源碼,你一定要有粗大的神經(jīng),反復(fù)告訴自己,剛開(kāi)始先把握代碼的主流程即可。

很多細(xì)節(jié)看不懂直接跳過(guò)去,別有強(qiáng)迫癥讓自己看明白每個(gè)細(xì)節(jié)。

此外,大家一定要形成一個(gè)習(xí)慣,在看源碼的過(guò)程中盡量多自己對(duì)源碼寫(xiě)一些注釋。

你應(yīng)該結(jié)合自己的理解,盡可能把自己對(duì)源碼閱讀過(guò)程中的思考都寫(xiě)成注釋寫(xiě)在源碼里。

這個(gè)習(xí)慣可以促使你一邊閱讀一邊思考,而且有自己注釋的源碼,是你寶貴的財(cái)富。

此外,還有一個(gè)非常重要的點(diǎn),那就是一定要多畫(huà)圖

你可以嘗試在閱讀的過(guò)程中,提取源碼運(yùn)行的核心流程,一邊讀源碼,一邊自己畫(huà)在圖上,可以用那種畫(huà)圖軟件來(lái)作圖即可。

大家記住,人腦對(duì)圖片的敏感度,是遠(yuǎn)高于對(duì)文字或者代碼的,這個(gè)是大腦機(jī)制決定的。

筆者公眾號(hào)寫(xiě)的很多篇文章,里面對(duì)各種技術(shù)的講解,無(wú)一不是通過(guò)大量的畫(huà)圖。相比于冗長(zhǎng)的文字描述,圖片會(huì)讓人容易理解接受的多。

通過(guò)畫(huà)圖,能幫助你抽象和總結(jié)出源碼的核心流程,以后如果你要回顧和復(fù)習(xí),直接看圖即可。

5、反復(fù)三遍:真正理解源碼

另外一個(gè)要注意的點(diǎn),源碼這個(gè)東西,是多看幾遍理解的就會(huì)越深刻。

因?yàn)槟憧吹谝槐椋凑丈厦嬲f(shuō)的抓大放小的思路,可能很多東西就直接略過(guò)去了,因?yàn)閯傞_(kāi)始你看不懂一些非核心代碼在干什么。

但是第一遍看完以后,通過(guò)寫(xiě)注釋,自己動(dòng)手畫(huà)圖,對(duì)一個(gè)開(kāi)源項(xiàng)目的核心流程、架構(gòu)以及原理都有了一定的理解了。

此時(shí)再去讀第二遍源碼,再過(guò)一遍,你會(huì)發(fā)現(xiàn)之前很多看不懂的細(xì)節(jié)都能看懂了。然后再看第三遍源碼,你會(huì)發(fā)現(xiàn)大多數(shù)的代碼自己都能看懂了。

所以說(shuō)任何一個(gè)源碼,都是要至少反復(fù)看三遍的過(guò)程,不是看一遍就可以完成的。

6、借力打力:參考源碼分析書(shū)籍及博客

其實(shí)現(xiàn)在有很多對(duì)熱門(mén)開(kāi)源項(xiàng)目進(jìn)行源碼分析的書(shū)籍以及博客,你大致可以認(rèn)為就是一些技術(shù)比較牛的兄弟自己看了源碼之后,寫(xiě)出來(lái)的一些分析和感悟。

但是那畢竟是別人的東西,如果你上來(lái)就直接看源碼分析書(shū)籍或者博客,那么不一定可以看懂,因?yàn)槲淖值男畔鬟f未必能很好的讓你理解有些復(fù)雜的東西。

所以比較建議的方式,就是先自己嘗試看幾遍,有了一定的理解之后,此時(shí)可以借助源碼分析書(shū)籍或者是博客,參考其他技術(shù)牛的同學(xué)對(duì)這個(gè)源碼理解,結(jié)合自己之前的一些思考,綜合起來(lái)進(jìn)行分析,相信一定會(huì)大有裨益。

你會(huì)發(fā)現(xiàn)人家的一些理解可以很好的補(bǔ)充你沒(méi)想明白的一些問(wèn)題,或者是忽略的一些細(xì)節(jié)。

不過(guò),需要提醒的一點(diǎn),網(wǎng)上不少博客,包括一些書(shū)籍,他們寫(xiě)出的一些源碼分析,可能是錯(cuò)誤的。

所以,盡信書(shū)不如無(wú)書(shū),你需要帶著一定的糾錯(cuò)眼光。在和你的理解相悖時(shí),不一定就是你錯(cuò)了。

7、最后寄語(yǔ):用幾年時(shí)間鍛造自己的核心技術(shù)

其實(shí)上面那個(gè)過(guò)程說(shuō)起來(lái)很簡(jiǎn)單,做起來(lái)非常的困難。

因?yàn)樵谏厦嫒魏我粋€(gè)步驟,閱讀的過(guò)程中你都有大量的東西是不會(huì)的,而且會(huì)覺(jué)得很難,甚至經(jīng)常有想放棄的沖動(dòng)。

畢竟人的大腦天生就是會(huì)對(duì)困難的事情產(chǎn)生抗拒感,這是本能,天生就是對(duì)舒服、放松的事情有向往。

但是只有那些能克服人的動(dòng)物本能,惰性本能,迎難而上,堅(jiān)韌不拔的同學(xué),才能真正攻克各種技術(shù)難題。

讓自己的大腦不停的開(kāi)動(dòng),不停的思考上面那個(gè)過(guò)程,也許你要持續(xù)一年才能有個(gè)小的開(kāi)悟,持續(xù)三年才能有一定的心得,持續(xù)五年甚至八年,才能說(shuō)真的融匯貫通,打通任督二脈,成為技術(shù)大牛。

但是堅(jiān)持這個(gè)事情同樣是很可怕的,一旦你堅(jiān)持做到了,那么你將鍛造出來(lái)自己最硬核的技術(shù)實(shí)力,遠(yuǎn)遠(yuǎn)不是普通人,或者剛畢業(yè)的年輕同學(xué)可以追上你的。技術(shù)深度、技術(shù)功底,這是每一個(gè)工程師最最硬核的技術(shù)實(shí)力。

希望各位同學(xué)可以從現(xiàn)在開(kāi)始,嘗試著用筆者分享的技巧閱讀源碼。跳出舒適區(qū),去擁抱更大的舒適區(qū)。

真正體驗(yàn)一下讀透源碼之后,根據(jù)報(bào)錯(cuò)日志,從源碼層面精確定位項(xiàng)目問(wèn)題、精確制導(dǎo)線上bug,感受一下這種上帝視角解決問(wèn)題的快感吧!

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2012-06-27 10:16:12

開(kāi)源項(xiàng)目CodePlex

2017-11-07 11:36:57

開(kāi)源項(xiàng)目代碼

2022-02-28 08:23:02

開(kāi)源項(xiàng)目重構(gòu)

2019-01-15 10:02:06

Kubernetes開(kāi)源工具微服務(wù)

2017-06-20 14:29:12

Rec開(kāi)源項(xiàng)目

2019-05-27 08:29:32

啟動(dòng)項(xiàng)目PMP

2011-08-25 09:03:40

2012-11-29 09:49:17

軟件項(xiàng)目項(xiàng)目

2019-04-30 09:05:16

項(xiàng)目啟動(dòng)PMP

2014-10-21 10:25:50

程序員

2013-07-24 15:26:57

MOCO

2015-07-29 10:00:16

開(kāi)源項(xiàng)目

2014-08-27 10:20:10

項(xiàng)目項(xiàng)目分析

2014-08-11 16:32:04

架構(gòu)項(xiàng)目

2020-07-15 15:09:21

Python掃雷游戲Windows

2019-08-06 13:37:55

微服務(wù)架構(gòu)數(shù)據(jù)

2020-08-13 17:59:20

區(qū)塊鏈區(qū)塊鏈項(xiàng)目數(shù)字貨幣

2021-02-24 13:58:07

區(qū)塊鏈比特幣安全

2020-11-15 23:23:21

JavaScriptAPI開(kāi)發(fā)

2012-03-06 09:17:11

開(kāi)源項(xiàng)目運(yùn)作
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲综合伊人 | 日韩精品久久 | 日日日视频 | 亚洲在线中文字幕 | 免费看91 | 91精品国产91久久久久久吃药 | 亚洲日本国产 | 亚洲手机在线 | 亚洲视频二区 | 亚洲成人一区二区 | 国产精品视频久久 | 成年人网站国产 | 日韩免费在线观看视频 | 国产又色又爽又黄又免费 | 欧美极品一区二区 | 免费黄色片在线观看 | 午夜小视频在线播放 | 在线视频成人 | 国产一区精品 | 亚洲乱码国产乱码精品精98午夜 | 亚洲精品大片 | 毛片av免费在线观看 | 天堂av中文在线 | 日韩一区二区免费视频 | 一区二区三区电影在线观看 | 狠狠色综合久久丁香婷婷 | 精品日韩在线 | 日本久草视频 | 91精品国产综合久久香蕉麻豆 | 亚洲免费在线观看视频 | www.伊人.com| 国产精品亚洲成在人线 | 欧美精品一区二区三区在线播放 | 国产精品a久久久久 | 91精品国产91久久久久久三级 | 国产精品国产精品 | 国产在线对白 | 国产精品美女久久久 | 亚洲精品乱码久久久久久黑人 | 91精品麻豆日日躁夜夜躁 | 成人日b视频 |