Java程序員應(yīng)該如何學(xué)習(xí)框架源碼烈疚?

不管對(duì)于哪個(gè)段位的程序員來(lái)說(shuō),讀源碼都是一件好處頗多的事情聪轿,特別于初學(xué)者而言爷肝,這能迅速的吸納優(yōu)秀框架精華代碼營(yíng)養(yǎng),迅速成長(zhǎng)陆错。不巧的是灯抛,晦澀難懂的源碼,很容易讓人心生怯意音瓷。今天分享一下讀源碼的方法对嚼。

一、了解框架解決了什么問(wèn)題

這不光對(duì)讀源碼有幫助绳慎,對(duì)整個(gè)學(xué)習(xí)都很有幫助纵竖。思考一個(gè)問(wèn)題:你學(xué)習(xí) Vue\React 的原因,除了它們?nèi)缛罩刑煨臃撸俨粚W(xué)習(xí)都不好意思找工作了靡砌,還摻雜了一些它們的某些優(yōu)秀特性能給我?guī)?lái)某些好處的思考么?


新潮的框架珊楼,開發(fā)者需要而且也應(yīng)該去了解通殃,相比之前的技術(shù)體系,這個(gè)框架到底解決了什么問(wèn)題厕宗,優(yōu)勢(shì)在哪画舌,懷著目的去學(xué)習(xí)才不至于迷茫堕担。例如 Vue\React 最大的優(yōu)點(diǎn)是什么呢?組件化吧骗炉,帶著框架是如何解決這個(gè)問(wèn)題的疑問(wèn)去學(xué)習(xí)照宝,定能事半功倍。

二句葵、了解框架的設(shè)計(jì)思想

我們看不懂源碼(或者看起來(lái)舉步維艱)厕鹃,并不是因?yàn)椴欢骋痪湔Z(yǔ)法,而是不明白作者的思路乍丈。舉一個(gè)簡(jiǎn)單的例子:

?//這個(gè)方法可以獲得point2頂角的弧度值
? ? functiongetAngle(point1,?point2,?point3){
? ? ? ?var?bb?=?(point2.y?-?point1.y)*(point2.y?-?point1.y)?+?(point2.x?-?point1.x)*(point2.x?-?point1.x);
? ? ? ? var?aa?=?(point3.y?-?point1.y)*(point3.y?-?point1.y)?+?(point3.x?-?point1.x)*(point3.x?-?point1.x);
? ? ? ?var?cc?=?(point3.y?-?point2.y)*(point3.y?-?point2.y)?+?(point3.x?-?point2.x)*(point3.x?-?point2.x);
? ? ? ? var?cosa?=?(bb?+?cc?-?aa)/(2*Math.sqrt(bb)*Math.sqrt(cc));
? ? ? ?return?Math.acos(cosa);
? ? }

getAngle方法接收三個(gè)坐標(biāo)參數(shù)剂碴,可以計(jì)算出 point2 頂角的弧度值,如果不告訴你這使用了運(yùn)用三角形的余弦定理轻专,恐怕你看半天也看不出來(lái)這是怎么算出來(lái)的忆矛。

了解框架的設(shè)計(jì)思想的方法:

? 1.到框架的官網(wǎng)看文檔。開源的框架请垛,甭管詳不詳細(xì)催训,這肯定是第一手權(quán)威資料

? 2.到網(wǎng)上搜別人的分析總結(jié)(源碼分析也不會(huì)少),大多數(shù)情況下宗收,都會(huì)有大神已經(jīng)研究過(guò)了漫拭,站在巨人的肩膀上,能省不少事

另外混稽,設(shè)計(jì)思想是整個(gè)框架層面的采驻,對(duì)于每一個(gè)實(shí)現(xiàn)細(xì)節(jié),又會(huì)使用不少設(shè)計(jì)模式匈勋,例如函數(shù)式編程(Js 中最為常用)礼旅、單例模式、代理模式洽洁、工廠模式等等痘系,這就需要平時(shí)的積累了。有一定代碼量的積累之后饿自,建議閱讀一些設(shè)計(jì)模式類的書籍碎浇,對(duì)自己的代碼設(shè)計(jì),以及閱讀別人的源碼璃俗,都很有益處。

三悉默、搭建調(diào)試環(huán)境城豁,摸清執(zhí)行主脈絡(luò)

細(xì)分到每個(gè)模塊,要對(duì)模塊功能有個(gè)整體的把握抄课,如何去做到這個(gè)“把握”唱星?除了官方文檔和網(wǎng)上查閱的資料雳旅,最好的辦法就是寫一個(gè)簡(jiǎn)單的 Demo,搭建好測(cè)試環(huán)境间聊,增加一些調(diào)試信息攒盈,自然能理清除框架的生命周期中,每一步需要調(diào)用那個(gè)模塊(對(duì)于目錄結(jié)構(gòu)很清晰的優(yōu)秀框架哎榴,有時(shí)候也可以憑直覺猜測(cè)型豁,打印日志確認(rèn))

四、分清主次

框架源碼就是一顆枝繁葉茂的參天大樹尚蝌,而你要做的事情是從根部往上爬迎变。樹要這么多分支,時(shí)間又是這么昂貴飘言,閱讀的策略很重要衣形。我們的閱讀路徑,要以主要流程為主(也就是樹的主驅(qū)趕姿鸿,這樣才能盡可能快的到達(dá)頂點(diǎn))谆吴,對(duì)于一些細(xì)枝末節(jié),再這之后再來(lái)慢慢啃(或者有必要的時(shí)候)苛预。

例如句狼,要去閱讀 Vue 的源碼,有個(gè)目錄是解析模板碟渺,生成語(yǔ)法樹 AST 從而最終生成 Render Function 的, 其實(shí)這一步最關(guān)鍵的是這個(gè) Render Function 的生成結(jié)果鲜锚,對(duì)于如何去解析模板、生成語(yǔ)法樹苫拍,可以先放一放芜繁,回頭需要的時(shí)候再回頭看。否則你很容易卡死在某個(gè)點(diǎn)上出不來(lái)绒极,從而產(chǎn)生放棄的念頭

五骏令、堅(jiān)持不放棄

技術(shù)策略得當(dāng),遇到棘手過(guò)不去的問(wèn)題也很正常垄提,這時(shí)考驗(yàn)的就是毅力了榔袋,繼續(xù)調(diào)試、搜索資料铡俐、或者找個(gè)大神來(lái)問(wèn)一問(wèn)都行凰兑,只要不放棄就好。

六审丘、學(xué)會(huì)向他人求助

無(wú)論你的自學(xué)能力有多強(qiáng)吏够,無(wú)論你是P4還是P7,總會(huì)有遇到困難的時(shí)候。普通人遇到瓶頸只能自己默默的去一次次沖擊锅知,如果沖擊成功還好播急,是另一片天地;倘若沖擊失敗售睹,輕則灰心喪氣迷失一陣子桩警,重則一蹶不振。

如果有人領(lǐng)路呢昌妹?看過(guò)小說(shuō)的都知道捶枢,沖關(guān)的時(shí)候如果有人指導(dǎo),借鑒前人的經(jīng)驗(yàn)捺宗,可以少走很多彎路柱蟀。人生不過(guò)數(shù)十載,何不把時(shí)間節(jié)省出來(lái)去多學(xué)點(diǎn)東西蚜厉,多做點(diǎn)有意義的事情碍讯。

為了幫大家盡快的提升自己命斧,更有效率的進(jìn)階,我精心準(zhǔn)備了框架源碼系列資料,希望能幫你早日突破自己震捣!

點(diǎn)擊免費(fèi)領(lǐng)壬屑:【Java互聯(lián)網(wǎng)技術(shù)交流】備注:777?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贱勃,一起剝皮案震驚了整個(gè)濱河市刚操,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌伶椿,老刑警劉巖辜伟,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脊另,居然都是意外死亡导狡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門偎痛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)旱捧,“玉大人,你說(shuō)我怎么就攤上這事踩麦∶渡模” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵谓谦,是天一觀的道長(zhǎng)贫橙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)反粥,這世上最難降的妖魔是什么料皇? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任谓松,我火速辦了婚禮,結(jié)果婚禮上践剂,老公的妹妹穿的比我還像新娘。我一直安慰自己娜膘,他們只是感情好逊脯,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竣贪,像睡著了一般军洼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上演怎,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天匕争,我揣著相機(jī)與錄音,去河邊找鬼爷耀。 笑死甘桑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歹叮。 我是一名探鬼主播跑杭,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼咆耿!你這毒婦竟也來(lái)了德谅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤萨螺,失蹤者是張志新(化名)和其女友劉穎窄做,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體慰技,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椭盏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惹盼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庸汗。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖手报,靈堂內(nèi)的尸體忽然破棺而出蚯舱,到底是詐尸還是另有隱情,我是刑警寧澤掩蛤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布枉昏,位于F島的核電站,受9級(jí)特大地震影響揍鸟,放射性物質(zhì)發(fā)生泄漏兄裂。R本人自食惡果不足惜句旱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晰奖。 院中可真熱鬧谈撒,春花似錦、人聲如沸匾南。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛆楞。三九已至溯乒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間豹爹,已是汗流浹背裆悄。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臂聋,地道東北人光稼。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像逻住,于是被迫代替她去往敵國(guó)和親钟哥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348