转:五年java人的一点感悟

转自:五年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对自己不再是个黑盒了。

posted @ 2015-11-05 15:09  shisw  阅读(1177)  评论(0编辑  收藏  举报