這是位大神提供的乾貨多多:
轉自:http://www.zuoxiaolong.com/blog/article.ftl?id=32
這篇文章主要來源於和羣裏猿友的聊天,有猿友問LZ該如何學習一個框架。LZ想了想,這確實是一個值得探究的問題,於是這篇博文就應運而生了。接下來LZ就和各位猿友分享一下LZ個人學習框架的一些方式和方法,或許對大部分人還是有一些啓迪作用的。
找到它的老家
對LZ個人來說,當LZ想要學習一個框架的時候,首要做的就是找到它的老家。打開你的瀏覽器,輸入網址:www.google.com(爲何不是百度?因爲我們學習的框架幾乎沒有china的),然後輸入你想學習的框架,比如spring(本文以它爲例,其餘其實都是類似的)。
第一個出現的一般就是它的老家,就像下面這樣。
擦,劇情不該是這樣的,導演掐了重新來一遍啊。該死的google老是這樣。據之前LZ的某老師說,這都是度娘乾的。
好吧,甭管是誰幹的,我們只管不斷F5即可,最終你會看到下面的畫面。
bingo。畫面出來了。這就是spring的老家,我們想要研究它就從它開始吧。接下來請你默默的打開它的鏈接。是的,默默的。
直入正題,找例子
接下來我們就要直入正題了,進入它的頁面後,你會看到這樣的導航。
看到了嗎?看到了嗎?
guides,LZ蹩腳的英文大概看出來它就是嚮導的意思,於是我們果斷進來一看究竟。進來以後,你會發現一堆嚮導,這裏就是你的百寶箱。
裏面有各種各樣的例子供你使用。接下來你需要做的就是按照其中某一個一步一步的做下去,直到完成你的目的。比如你想做一個任務調度器,那麼就果斷進入Scheduling Tasks。接下來,你就看到了這樣一個無腦學習的頁面。
看到了嗎,你只需要ctrl+C/V就可以完成你的任務。不過這只是一個開始,因爲這畢竟只是一個簡單的例子,你還需要根據你當前的需要進行一些改變。如果你需要的正是這個例子,那麼就再好不過了。
尋找文檔
通常情況下,在你完成任務的過程當中,總會遇到這樣或者那樣的問題,就算沒有遇到,如果想要學習一個框架的話,一個完整的說明文檔往往也是你需要的。在接下來的過程當中,我們的任務就是尋找文檔。這個過程往往是最困難和痛苦的,這與LZ蹩腳的英文有很大關係,所以每次找文檔都讓LZ痛苦並快樂着。
不過這裏面總有一些大概的規律,比如doc、document、documentation這樣的字樣總是那麼的親切。而且我們不需要擔心一個框架沒有文檔,因爲對於開發它們的人來說,我們就是客戶,就是上帝,所以他們必須要讓上帝能看懂他們寫的東西。否則的話,他們寫的東西是沒有客戶的,沒有客戶就意味着沒有創造價值,沒有創造價值就意味着可能會被炒魷魚,被炒魷魚就意味着可能會被媳婦嫌棄,被媳婦嫌棄就意味着可能會被@#¥&綠#&%¥&*
LZ並不會把文檔看的太深入,主要就是看一些自己開發需要的東西,還有很重要的一點就是,從當中找到框架的核心實現原理。比如spring當中,IOC的相關內容就是它的核心實現原理,因爲spring的所有框架(比如AOP、security等等)都是建立在IOC的基礎之上的。
尋找入口,跟蹤源碼
這下例子也看過了,任務也完成了,文檔也有了,如果我們想要更加深入的瞭解一個框架,那麼源碼就是必不可少的一個環節了。說起來還是得感謝JAVA的開發氛圍,幾乎所有的東西都是開源的,所以你總能找到源碼。
標題當中提到了入口,所謂尋找入口,就是尋找一個框架的切入點。比如spring的入口就在web.xml當中的監聽器,而struts2的入口就是web.xml當中的過濾器,常用緩存的入口往往存在spring管理的緩存的定製工廠bean當中等等。
找到入口,你就能從頭開始調試,瞭解整個框架初始化的過程,以及初始化後是如何工作的。在跟蹤源碼的過程中,最好結合你的例子,搞清楚你的例子是如何運行的。比如剛纔的定時器調度,搞清楚spring是如何幫你進行調度的,比如執行任務的線程是如何分配的,任務的觸發是如何進行的等等。
找到框架的優劣勢並努力體會它
說到這裏,請各位猿友想象一下,當你在逛商場的時候,如果你想要買某一樣東西,一般情況下,你總會在各個品牌或者同一個品牌的不同類型之間相互比較,如果你從不這麼做,請允許LZ尊稱你爲“土豪”。
如果你這麼做了,請仔細的想想,你是在比較什麼?
當然是優勢和劣勢了!
對於我們程序猿來說,框架就是一個一個的商品,而我們就是這些商品的客戶。如果你想要做一個能買到物美價廉的商品的客戶,就必須瞭解各個商品的優劣勢。只有瞭解了各個商品的優劣勢,我們才能在衆多的框架當中選擇合適的框架,你說是嗎?
所以,不用說,我們要想了解一個框架,就必須知道它的優劣勢,尤其是劣勢。優勢一般在框架的老家當中就能找到,因爲這是在爲他們的項目吹牛皮呢,他們的官網自然不會忘了這一項。至於劣勢,就需要自己根據例子、源碼以及其實現原理好好體會一下了。
結束語
框架說到底就是一個商品,我們只是其中一個用戶罷了。因此LZ不建議各位猿友把框架的研究當做畢生夢想,更不建議各位淪陷於研究各種各樣的框架,或者去嘗試各種框架的例子,並很自豪的對着鏡子說“你好厲害,你竟然會這麼多框架”。注意!請你至少完成了以上幾件事,再說你會這個框架吧。
框架只是我們針對特定場景所作出的選擇,因此我們只需要有學習框架的能力即可,千萬不要想着能把全世界所有品牌的牛奶都嘗試着喝一遍,如果你非要這麼做的話,LZ保證你一定會死於非命的。這就像你買藥一樣,你只需要知道當你感冒的時候應該吃什麼藥,當你拉肚子的時候應該吃什麼藥就好。更好的情況是,當你萬一有其它毛病時,你也可以通過一些途徑找到適合你的藥。
話已至此,LZ就囉嗦到這裏吧。總之,深入的研究一下少數幾個優秀的框架,還是非常有益的,但不要貪多,學會適可而止即可。
版權聲明:本文版權歸作者(左瀟龍)所有,歡迎轉載。但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
|
|
|
|
|
|
|
|
</ul>
<div class="article_tag_div">
<p>關鍵字:
<a onclick="javascript:searchArticles('tag','程序猿')" href="javascript:void(0)" >程序猿</a>
<a onclick="javascript:searchArticles('tag','如何學習')" href="javascript:void(0)" >如何學習</a>
<a onclick="javascript:searchArticles('tag','框架學習')" href="javascript:void(0)" >框架學習</a>
</p>
</div>
<div class="article_category_div">
<p>分類:
<a onclick="javascript:searchArticles('category','編程之路')" href="javascript:void(0)" >編程之路</a>
</p>
</div>
<div class="nextinfo">
<p>上一篇:<a href="http://www.zuoxiaolong.com/blog/article.ftl?id=33">雜談---程序猿的幾種分類,你躺槍了嗎?</a></p>
</div>
<div class="nextinfo">
<p>下一篇:<a href="http://www.zuoxiaolong.com/blog/article.ftl?id=31">深入理解計算機系統(4.1)---X86的孿生兄弟,Y86指令體系結構</a></p>
</div>
<!-- 評論列表 -->
<div class="feedback_area_title">評論列表(共<span id="comment_size">10</span>條評論)</div>
<div class="feedbackNoItems"></div>
<div class="feedbackItem" id="comment_list">
<div id="comment_div_663" class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a comment_id="663" class="reply_button" href="javascript:void(0)">回覆</a>
<a comment_id="663" class="quite_button" href="javascript:void(0)">引用</a>
</span>
</div>
<a href="javascript:void(0)" class="layer">#1樓</a>
時間:<span class="comment_date">2014-03-01 09:26:00</span>
來源:<a id="commenter_a_663" href="javascript:void(0)">yonghu86</a>
</div>
<div class="feedbackCon">
<div id="comment_content_663" class="blog_comment_body">
這個頂下
站內搜索
<!-- 用戶中心模塊 -->
<div class="user_profile">
<h3>用戶中心</h3>
<table id="login_table" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="font-size: 12px;">用戶名:</td>
<td><input class="text_input" type="text" name="username"/></td>
<td><a id="login_register_button" href="#" class="button">登錄 | 註冊</a></td>
</tr>
<tr>
<td style="font-size: 12px;">密 碼:</td>
<td><input class="text_input" type="password" name="password"/></td>
<td>
<!--
<a href="#" id="qq_login_button"><img width="50" height="20" src="http://www.zuoxiaolong.com/resources/img/qq_login.png" title="使用QQ登錄"></a>
-->
</td>
</tr>
<tr>
<td> </td>
<td colspan="2" id="login_error_td" style="font-size:11px;">用戶名支持字母,數字,下劃線和中文</td>
</tr>
</tbody>
</table>
</div>
<!-- 關注模塊 -->
<div class="follow_me">
<h3>關注我</h3>
<div class="follow_me_link">
<ul>
<li><a class="rss" href="http://www.zuoxiaolong.com/blog/feed.xml" target="_blank">RSS訂閱</a></li>
<li><a class="douyu" href="http://www.douyu.com/zuoxiaolong" target="_blank">鬥魚直播</a></li>
<li><a class="github" href="http://github.com/xiaolongzuo" target="_blank">Github</a></li>
</ul>
</div>
</div>
<!-- 排行榜模塊 -->
<div class="charts_tab" id="lp_right_select">
<!-- 排行榜切換 -->
<div class="charts_top">
<ul class="hd" id="tab">
<li class="cur"><a href="/blog/article_list.ftl?orderColumn=access_times¤t=1" title="點擊查看更多">點擊排行</a></li>
<li><a href="/blog/article_list.ftl?orderColumn=create_date¤t=1" title="點擊查看更多">最新文章</a></li>
<li><a href="/blog/article_list.ftl?orderColumn=good_times¤t=1" title="點擊查看更多">站長推薦</a></li>
</ul>
</div>
<div class="ms-main" id="ms-main">
<div style="display: block;" class="display_none charts_list">
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=80" title="勤快的程序猿都沒啥前途的,趕緊改掉你的壞毛病吧!">勤快的程序猿都沒啥前途的,趕緊...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=8" title="記錄2015年年初跳槽的經歷!">記錄2015年年初跳槽的經歷!</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=177" title="一個最新發現,原來程序員的最終歸宿在這裏。">一個最新發現,原來程序員的最終...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=25" title="六種流行的語言大餐---C、C++、python、Java、php、C#你更喜歡哪一個呢?">六種流行的語言大餐---C、C++、pyt...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=41" title="雜談---第一次真正的高併發編程體驗">雜談---第一次真正的高併發編程...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=89" title="雜談---這些大忌,你在面試的時候發生過嗎?(NO.1)">雜談---這些大忌,你在面試的時候...</a></li>
</ul>
</div>
<div class="display_none charts_list">
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=261" title="一個屌絲程序猿的人生(五十九)">一個屌絲程序猿的人生(五十九)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=260" title="一個屌絲程序猿的人生(五十八)">一個屌絲程序猿的人生(五十八)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=259" title="一個屌絲程序猿的人生(五十七)">一個屌絲程序猿的人生(五十七)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=258" title="一個屌絲程序猿的人生(五十六)">一個屌絲程序猿的人生(五十六)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=257" title="一個屌絲程序猿的人生(五十五)">一個屌絲程序猿的人生(五十五)</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=256" title="QQ羣管理員申請帖(本次截止日期爲2017-03-25)">QQ羣管理員申請帖(本次截止日期...</a></li>
</ul>
</div>
<div class="display_none charts_list">
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=80" title="勤快的程序猿都沒啥前途的,趕緊改掉你的壞毛病吧!">勤快的程序猿都沒啥前途的,趕緊...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=8" title="記錄2015年年初跳槽的經歷!">記錄2015年年初跳槽的經歷!</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=184" title="回答阿里社招面試如何準備,順便談談對於Java程序猿學習當中各個階段的建議">回答阿里社招面試如何準備,順便...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=176" title="送給即將畢業的同學,談談畢業後第一份工作和追女生的問題。">送給即將畢業的同學,談談畢業後...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=177" title="一個最新發現,原來程序員的最終歸宿在這裏。">一個最新發現,原來程序員的最終...</a></li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=56" title="淺談程序猿的職業規劃,看你如何決定自己的未來吧。">淺談程序猿的職業規劃,看你如何...</a></li>
</ul>
</div>
</div>
</div>
<!-- 最新評論模塊 -->
<div class="new_comments">
<h3>最新評論</h3>
<ul>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=261">1.《一個屌絲程序猿的人生(五十九)》</a>
</div>
<div class="new_comments_comment_body">
越來越有感覺了
</div>
<div>
<p class="new_comments_author">----成都市網友</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=260">2.《一個屌絲程序猿的人生(五十八)》</a>
</div>
<div class="new_comments_comment_body">
這情節很刺激嘛!扎心了,老鐵...
</div>
<div>
<p class="new_comments_author">----北京市網友</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=188">3.《一個屌絲程序猿的人生(一)》</a>
</div>
<div class="new_comments_comment_body">
挺有意思,試試不註冊可以評論不
</div>
<div>
<p class="new_comments_author">----大連市網友</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=18">4.《高併發下的九死一生,一個不小心就掉入萬丈深淵》</a>
</div>
<div class="new_comments_comment_body">
樓主再解釋下爲什麼高併發下該函數就會出現exception就好了?
</div>
<div>
<p class="new_comments_author">----ismallboy</p>
</div>
<div style="clear:both"></div>
</div>
</li>
<li>
<div class="new_comments_div">
<div>
<a href="/blog/article.ftl?id=110">5.《(十五)建造者模式詳解(都市異能版)》</a>
</div>
<div class="new_comments_comment_body">
@ 赫連勃勃大王引用Doppelgenger和具體的Builder類之間的關係不是聚合嗎,應該是實線+...
</div>
<div>
<p class="new_comments_author">----麥浪無垠</p>
</div>
<div style="clear:both"></div>
</div>
</li>
</ul>
</div>
<!-- 標籤模塊 -->
<div class="tag_div">
<h3>標籤雲</h3>
<ul>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="jquery源碼">
</form>
<li><a onclick="javascript:searchArticles('tag','jquery源碼')" href="javascript:void(0)" title="jquery源碼">jquery源碼</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="面試準備">
</form>
<li><a onclick="javascript:searchArticles('tag','面試準備')" href="javascript:void(0)" title="面試準備">面試準備</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="阿里巴巴">
</form>
<li><a onclick="javascript:searchArticles('tag','阿里巴巴')" href="javascript:void(0)" title="阿里巴巴">阿里巴巴</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="hotspot源碼">
</form>
<li><a onclick="javascript:searchArticles('tag','hotspot源碼')" href="javascript:void(0)" title="hotspot源碼">hotspot源碼</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="JVM源碼">
</form>
<li><a onclick="javascript:searchArticles('tag','JVM源碼')" href="javascript:void(0)" title="JVM源碼">JVM源碼</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="程序猿的工作">
</form>
<li><a onclick="javascript:searchArticles('tag','程序猿的工作')" href="javascript:void(0)" title="程序猿的工作">程序猿的工作</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="tcp/ip">
</form>
<li><a onclick="javascript:searchArticles('tag','tcp/ip')" href="javascript:void(0)" title="tcp/ip">tcp/ip</a></li>
<form id="" action="http://www.zuoxiaolong.com/blog/article_list.ftl" type="POST">
<input type="hidden" name="tag" value="程序員面試">
</form>
<li><a onclick="javascript:searchArticles('tag','程序員面試')" href="javascript:void(0)" title="程序員面試">程序員面試</a></li>
</ul>
</div>
<!-- 圖文模塊 -->
<div class="tuwen">
<h3>隨機推薦</h3>
<ul>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=18" title="高併發下的九死一生,一個不小心就掉入萬丈深淵"><img src="http://www.zuoxiaolong.com/resources/img/common/article_01.jpg"><b>高併發下的九死一生,...</b></a>
<p><span class="tulanmu"><a href="#">左瀟龍</a></span><span
class="tutime">2014-09-06</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=235" title="萬能的林蕭說:我來告訴你,一個草根程序員如何進入BAT。"><img src="http://www.zuoxiaolong.com/resources/img/common/article_15.jpg"><b>萬能的林蕭說:我來告...</b></a>
<p><span class="tulanmu"><a href="#">左瀟龍</a></span><span
class="tutime">2016-10-31</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=75" title="算法(JAVA)----兩道小小課後題"><img src="http://www.zuoxiaolong.com/resources/img/common/article_15.jpg"><b>算法(JAVA)----兩道小...</b></a>
<p><span class="tulanmu"><a href="#">左瀟龍</a></span><span
class="tutime">2013-09-18</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=60" title="強迫自己學習(實踐篇),以及關於寫博客的幾點建議"><img src="http://www.zuoxiaolong.com/resources/img/common/article_16.jpg"><b>強迫自己學習(實踐篇)...</b></a>
<p><span class="tulanmu"><a href="#">左瀟龍</a></span><span
class="tutime">2013-10-01</span>
</p>
</li>
<li><a href="http://www.zuoxiaolong.com/blog/article.ftl?id=103" title="(二十二)訪問者模式詳解(僞動態雙分派)"><img src="http://www.zuoxiaolong.com/resources/img/common/article_03.jpg"><b>(二十二)訪問者模式詳...</b></a>
<p><span class="tulanmu"><a href="#">左瀟龍</a></span><span
class="tutime">2013-08-17</span>
</p>
</li>
</ul>
</div>
<!-- 鏈接模塊 -->
<div class="links">
<h3><span>[<a href="#">申請友情鏈接</a>]</span>友情鏈接</h3>
<ul>
<li><a href="http://www.qidian.com" target="_blank">起點中文網</a> </li>
<li><a href="http://www.csdn.net" target="_blank">CSDN</a></li>
<li><a href="http://www.cnblogs.com" target="_blank">博客園</a></li>
<li><a href="http://blog.chinaunix.net" target="_blank">chinaunix</a></li>
<li><a href="http://blog.51cto.com" target="_blank">51CTO</a></li>
<li><a href="http://www.iteye.com" target="_blank">iteye</a> </li>
</ul>
</div> </div>
支持(0)
反對(0)