五年java人的一點感悟

KenWT發表於2011-09-27

恍然間,發現自己在這個行業裡已經摸爬滾打了五年了,原以為自己就憑已有的專案經驗和工作經歷怎麼著也應該算得上是一個業內比較資歷的人士了,但是今年在換工作的過程中卻遭到了重大的挫折。詳細過程我就不再敘述,在此,只想給大家說一說被拒絕的原因,看看大家有沒有相似的經歷,和類似的感悟。面試官對我的答覆大致是這樣的,我們不需要熟練工,我們需要在某領域擁有超過常人的積累認知,和擁有整套完整思維模式和優秀認知事物能力的人…他很誠懇地告訴我,你還年輕,真的應該好好地靜下心來,深入地研究一些東西,自己寫一些東西,而不是這也用過,那也知道,但是多半都是侷限於僅僅見過,會用,卻從來沒有認真思考過其程式碼背後蘊含的思想,更少有人研究過原始碼,進而體會大師們在某些問題的解決上秉承的思想和思維的風格。個人感覺,這也算是國內大部分程式設計師最讓人悲哀的地方了,當然這也與外界浮躁氛圍的蔓延不無關係。不瞭解這一行的人總覺得程式設計師都是程式碼民工,如果自己也認為自己是敲程式碼的機器的話,我誠懇地建議您儘早轉行吧,也許我這麼說會得罪傷害一些同行,畢竟轉行對任何一個人來說都是有相當的風險和挑戰的。不過這絕對應該是善意的忠告。相反,我強烈地認為,程式設計師應該是最有活力和最有思想的一個群體,只要你不肯讓自己浮於表面,更重要的是,必須勤于思考。如果你認可我這句的話,就請您繼續往下看看我的感慨,否則,那就希望您好好利用好自己的時間做您最需要做的事吧。

由於面試中被問到tomcat的時候,讓面試官問得人仰馬翻,啞口無言,所以回來之後洗心革面,下決心要把tomcat好好研究個明白,再也無法容忍自己只知其一不知其二了。於是上阿帕奇的官網上找文件找資料,當原始碼,在一些技術論壇找高人的分析帖子,並且蒐羅相關的書籍,無奈一番折騰後都不能讓我滿意,因為一千個人對一個事物或許會有一千個看法和觀點。網上此類介紹tomcat的技術類帖子更多的都是些抄襲,說到這裡,本人在此鄭重宣告,做技術的人應該恪守一點職業道德,那就是責任心(我曾經給自己取的網名就是扯嗓門講大道理的人),你想給大家講某個東西的話,必須應該是自己真正親自分析研究過的,這是最最起碼的要求,千萬不能東抄一點西抄一點拼湊,不懂瞎裝,瞎寫,這是極其讓人鄙視的態度,雖然當下這個時代,大家確實都比較浮躁,而且急功近利,但越是這樣,就更需要大家堅守自己,尤其是做技術的人,對技術必須秉承實事求是,嚴謹,務實的態度,徹底刨掉那些虛華的東西,這樣我們才敢從心態上說我們稱得上是一位真正做技術的人。

好了,說了這麼多廢話,浪費大家時間了,下面說說我對tomcat原始碼研究的幾點展望,眾所周知,tomcat是一個開源的Servlet容器,而這個容器的主要作用就是負責處理和響應客戶請求(我們暫且忽略其他的一些次要的方面)。那麼好,我們可以先做這樣一個比喻,tomcat應該可以比作一部機器,這部機器可以接受客戶端的請求,並返回一個結果給客戶端,而且這部機器的原材料是java。那麼我們想知道,這部機器的結構是怎麼樣的?它的組成部分有哪些,這些組成部分是如何被組織到一塊的?這應該是第一步,即對tomcat的整體組成要有個縱覽,知道tomcat這部機器都有些什麼組成部分,知道每一部分主要都負責了什麼工作,這一點非常重要;那麼第二步,就是,這部機器是如何啟動的?《精通tomcat》一書中把tomcat比作一部發動機,再恰當不過了,因為在它正常提供處理客戶端請求的服務之前,它得先完成它的啟動,我拿到原始碼之後(版本號是TOMCAT_6_0_12),也是參考《精通tomcat》一書的指導,找到Bootstrap類,然後Dubug as Java Application,一步一步跟原始碼來研究tomcat的啟動脈絡。大家知道,tomcat是一個基於元件的伺服器,那麼完成了第一步工作,我想大家應該大體都會知道tomcat裡面都包含了哪些元件了,那麼通過第二步,我相信大家對這些元件是如何組裝並啟動的這個問題,就會有一個比較初始的認識和了解了。我們在日常工作中的系統設計和開發處處強調鬆耦合的思想,那麼我想tomcat裡面這些元件的組織將會是一個非常典範的案例值得我們研究和學習,人家是如何組織自身的元件的,如何裝配的,這個問題,需要大家對digester技術有所研究,當然現在digester已經作為阿帕奇的一個common專案了,大家可以當相關的文件和原始碼進行深入研究這個技術,我也正在研究學習中,希望大家共同學習共同進步。那麼再完成了前兩部,知道tomcat裡面都有些什麼,並且知道tomcat的啟動流程之後,我覺得就應該對tomcat應答一次請求的全過程進行細緻深入的分析了,客戶端發出向tomcat發出請求之後,tomcat是如何處理的?最先是那個類那個方法來響應,那個元件最先接到了請求的,之後它具體都做了什麼,整個過程的處理邏輯和原則是什麼樣的?搞懂了這些,相信對tomcat的任何返回結果就再也不會感到意外和困惑。遺憾的是,我目前只看到很多地方粗粗地這麼介紹:請求被髮送到本機埠8080,被監聽的HttpConnector獲得,然後再由Connector交給Engine處理,再匹配名為localhost的Host處理,緊接著由Host匹配Context,再找JSPServelt類等等,這些介紹我目前還深表懷疑,貌似正確,其實說得不免有些籠統,當然也不能說完全錯誤,因為我目前還沒徹底搞清楚這個問題,也不敢貿然下結論,我只是跟了原始碼後發現,請求來了先執行的是CoyoteAdapter這個類的service方法,實踐出真知,還是希望大家親自跟跟原始碼去理清楚其中玄機,看看tomcat接受請求處理請求的過程到底是怎麼樣的?我覺得只有搞清楚了這個問題,才敢說自己對tomcat算是真的懂了一些,至少tomcat對自己不再是個黑盒了。這個過程我目前還在進行中,由於自身能力有限,尚需多少時間能徹底搞清楚還是個未知數,但是我願意繼續努力,今天由於時間原因,先寫到這裡,我會繼續發帖向大家彙報我的進展,更加希望能得到眾多高人的指點,不甚感激,謝謝大家。

相關文章