五年java人的一點感悟
恍然間,發現自己在這個行業裡已經摸爬滾打了五年了,原以為自己就憑已有的專案經驗和工作經歷怎麼著也應該算得上是一個業內比較資歷的人士了,但是今年在換工作的過程中卻遭到了重大的挫折。詳細過程我就不再敘述,在此,只想給大家說一說被拒絕的原因,看看大家有沒有相似的經歷,和類似的感悟。面試官對我的答覆大致是這樣的,我們不需要熟練工,我們需要在某領域擁有超過常人的積累認知,和擁有整套完整思維模式和優秀認知事物能力的人…他很誠懇地告訴我,你還年輕,真的應該好好地靜下心來,深入地研究一些東西,自己寫一些東西,而不是這也用過,那也知道,但是多半都是侷限於僅僅見過,會用,卻從來沒有認真思考過其程式碼背後蘊含的思想,更少有人研究過原始碼,進而體會大師們在某些問題的解決上秉承的思想和思維的風格。個人感覺,這也算是國內大部分程式設計師最讓人悲哀的地方了,當然這也與外界浮躁氛圍的蔓延不無關係。不瞭解這一行的人總覺得程式設計師都是程式碼民工,如果自己也認為自己是敲程式碼的機器的話,我誠懇地建議您儘早轉行吧,也許我這麼說會得罪傷害一些同行,畢竟轉行對任何一個人來說都是有相當的風險和挑戰的。不過這絕對應該是善意的忠告。相反,我強烈地認為,程式設計師應該是最有活力和最有思想的一個群體,只要你不肯讓自己浮於表面,更重要的是,必須勤于思考。如果你認可我這句的話,就請您繼續往下看看我的感慨,否則,那就希望您好好利用好自己的時間做您最需要做的事吧。
由於面試中被問到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對自己不再是個黑盒了。這個過程我目前還在進行中,由於自身能力有限,尚需多少時間能徹底搞清楚還是個未知數,但是我願意繼續努力,今天由於時間原因,先寫到這裡,我會繼續發帖向大家彙報我的進展,更加希望能得到眾多高人的指點,不甚感激,謝謝大家。
相關文章
- 作為面試官的一點點感悟,談談技術人的成長之路面試
- 關於技術分享的一點感悟
- 軟體測試流程的一點感悟
- 學習是ssm框架的一點點感悟與思考SSM框架
- java編譯器的一些感悟Java編譯
- Android Activity生命週期的一點感悟Android
- 過來人的經驗和感悟
- 感悟一
- 關於spring迴圈依賴的一點小感悟Spring
- 一點感悟:當走完所有大廠的實習面試後面試
- 談談最近的一點感悟和之後的學習安排
- 感悟,七點心得總結
- 在centos7下安裝gcc9.3的一點感悟CentOSGC
- 【應用 業務】做資料庫技術支援的一點感悟資料庫
- 兩年程式設計師的感悟,SQL才是重點,JAVA無所謂。程式設計師SQLJava
- ERP的12點應用感悟(轉)
- FinClip一點感悟:我做 ToB 市場這些年
- 關於學習自然碼雙拼輸入法的一點感悟
- 9點上班,17點下班,一位程式設計師在國企工作的感悟程式設計師
- 泥瓦匠 5 年 Java 的成長感悟(下)Java
- iOS開發者的一些前端感悟iOS前端
- 技術人成長的一點思考
- 一個 IT 青年北漂四年的感悟
- 程式設計中的一些感悟程式設計
- 《一個程式猿的生命週期》的感悟
- java中SimpleDateFormat的一點技巧JavaORM
- 學java的一點建議Java
- 關於Java的一點想法Java
- 不做工具人,學會鍛鍊感悟愛與幸福的能力
- 【筆者感悟】筆者的學習感悟【十】
- 【筆者感悟】筆者的學習感悟【九】
- 從技術走向管理的一些感悟
- 軟體架構之道的一次感悟架構
- 專案中使用 TypeScript 的一些感悟TypeScript
- (二)工作三年的一些感悟
- 程式設計感悟總結一程式設計
- Flex開發一週年感悟Flex
- [效能優化]UITableView效能優化的一點感悟及計算UILabel高度的新方法優化UIView