原來大家都是這樣啊,只是我還沒找到從哪里開始,轉載一個文章 http://www./42708 恍然間,發(fā)現(xiàn)自己在這個行業(yè)里已經(jīng)摸爬滾打了五年了,原以為自己就憑已有的項目經(jīng)驗和工作經(jīng)歷怎么著也應該算得上是一個業(yè)內(nèi)比較資歷的人士了,但是今年在換工作的過程中卻遭到了重大的挫折。詳細過程我就不再敘述,在此,只想給大家說一說被拒絕的原因,看看大家有沒有相似的經(jīng)歷,和類似的感悟。面試官對我的答復大致是這樣的,我們不需要熟練工,我們需要在某領域擁有超過常人的積累認知,和擁有整套完整思維模式和優(yōu)秀認知事物能力的人…他很誠懇地告訴我,你還年輕,真的應該好好地靜下心來,深入地研究一些東西,自己寫一些東西,而不是這也用過,那也知道,但是多半都是局限于僅僅見過,會用,卻從來沒有認真思考過其代碼背后蘊含的思想,更少有人研究過源碼,進而體會大師們在某些問題的解決上秉承的思想和思維的風格。個人感覺,這也算是國內(nèi)大部分程序員最讓人悲哀的地方了,當然這也與外界浮躁氛圍的蔓延不無關系。不了解這一行的人總覺得程序員都是代碼民工,如果自己也認為自己是敲代碼的機器的話,我誠懇地建議您盡早轉行吧,也許我這么說會得罪傷害一些同行,畢竟轉行對任何一個人來說都是有相當?shù)娘L險和挑戰(zhàn)的。不過這絕對應該是善意的忠告。相反,我強烈地認為,程序員應該是最有活力和最有思想的一個群體,只要你不肯讓自己浮于表面,更重要的是,必須勤于思考。如果你認可我這句的話,就請您繼續(xù)往下看看我的感慨,否則,那就希望您好好利用好自己的時間做您最需要做的事吧。由于面試中被問到tomcat的時候,讓面試官問得人仰馬翻,啞口無言,所以回來之后洗心革面,下決心要把tomcat好好研究個明白,再也無法容忍自己只知其一不知其二了。于是上阿帕奇的官網(wǎng)上找文檔找資料,當源碼,在一些技術論壇找高人的分析帖子,并且搜羅相關的書籍,無奈一番折騰后都不能讓我滿意,因為一千個人對一個事物或許會有一千個看法和觀點。網(wǎng)上此類介紹tomcat的技術類帖子更多的都是些抄襲,說到這里,本人在此鄭重聲明,做技術的人應該恪守一點職業(yè)道德,那就是責任心(我曾經(jīng)給自己取的網(wǎng)名就是扯嗓門講大道理的人),你想給大家講某個東西的話,必須應該是自己真正親自分析研究過的,這是最最起碼的要求,千萬不能東抄一點西抄一點拼湊,不懂瞎裝,瞎寫,這是極其讓人鄙視的態(tài)度,雖然當下這個時代,大家確實都比較浮躁,而且急功近利,但越是這樣,就更需要大家堅守自己,尤其是做技術的人,對技術必須秉承實事求是,嚴謹,務實的態(tài)度,徹底刨掉那些虛華的東西,這樣我們才敢從心態(tài)上說我們稱得上是一位真正做技術的人。 好了,說了這么多廢話,浪費大家時間了,下面說說我對tomcat源碼研究的幾點展望,眾所周知,tomcat是一個開源的Servlet容器,而這個容器的主要作用就是負責處理和響應客戶請求(我們暫且忽略其他的一些次要的方面)。那么好,我們可以先做這樣一個比喻,tomcat應該可以比作一部機器,這部機器可以接受客戶端的請求,并返回一個結果給客戶端,而且這部機器的原材料是java。那么我們想知道,這部機器的結構是怎么樣的?它的組成部分有哪些,這些組成部分是如何被組織到一塊的?這應該是第一步,即對tomcat的整體組成要有個縱覽,知道tomcat這部機器都有些什么組成部分,知道每一部分主要都負責了什么工作,這一點非常重要;那么第二步,就是,這部機器是如何啟動的?《精通tomcat》一書中把tomcat比作一部發(fā)動機,再恰當不過了,因為在它正常提供處理客戶端請求的服務之前,它得先完成它的啟動,我拿到源碼之后(版本號是TOMCAT_6_0_12),也是參考《精通tomcat》一書的指導,找到Bootstrap類,然后Dubug as Java Application,一步一步跟源碼來研究tomcat的啟動脈絡。大家知道,tomcat是一個基于組件的服務器,那么完成了第一步工作,我想大家應該大體都會知道tomcat里面都包含了哪些組件了,那么通過第二步,我相信大家對這些組件是如何組裝并啟動的這個問題,就會有一個比較初始的認識和了解了。我們在日常工作中的系統(tǒng)設計和開發(fā)處處強調(diào)松耦合的思想,那么我想tomcat里面這些組件的組織將會是一個非常典范的案例值得我們研究和學習,人家是如何組織自身的組件的,如何裝配的,這個問題,需要大家對digester技術有所研究,當然現(xiàn)在digester已經(jīng)作為阿帕奇的一個common項目了,大家可以當相關的文檔和源碼進行深入研究這個技術,我也正在研究學習中,希望大家共同學習共同進步。那么再完成了前兩部,知道tomcat里面都有些什么,并且知道tomcat的啟動流程之后,我覺得就應該對tomcat應答一次請求的全過程進行細致深入的分析了,客戶端發(fā)出向tomcat發(fā)出請求之后,tomcat是如何處理的?最先是那個類那個方法來響應,那個組件最先接到了請求的,之后它具體都做了什么,整個過程的處理邏輯和原則是什么樣的?搞懂了這些,相信對tomcat的任何返回結果就再也不會感到意外和困惑。遺憾的是,我目前只看到很多地方粗粗地這么介紹:請求被發(fā)送到本機端口8080,被監(jiān)聽的HttpConnector獲得,然后再由Connector交給Engine處理,再匹配名為localhost的Host處理,緊接著由Host匹配Context,再找JSPServelt類等等,這些介紹我目前還深表懷疑,貌似正確,其實說得不免有些籠統(tǒng),當然也不能說完全錯誤,因為我目前還沒徹底搞清楚這個問題,也不敢貿(mào)然下結論,我只是跟了源碼后發(fā)現(xiàn),請求來了先運行的是CoyoteAdapter這個類的service方法,實踐出真知,還是希望大家親自跟跟源碼去理清楚其中玄機,看看tomcat接受請求處理請求的過程到底是怎么樣的?我覺得只有搞清楚了這個問題,才敢說自己對tomcat算是真的懂了一些,至少tomcat對自己不再是個黑盒了。這個過程我目前還在進行中,由于自身能力有限,尚需多少時間能徹底搞清楚還是個未知數(shù),但是我愿意繼續(xù)努力,今天由于時間原因,先寫到這里,我會繼續(xù)發(fā)帖向大家匯報我的進展,更加希望能得到眾多高人的指點,不甚感激,謝謝大家。 |
|