转:五年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对自己不再是个黑盒了。
转:五年java人的一点感悟的更多相关文章
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach
一点一点看JDK源码(五)java.util.ArrayList 后篇之forEach liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 代 ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator
一点一点看JDK源码(五)java.util.ArrayList 后篇之sort与Comparator liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JD ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之SubList
一点一点看JDK源码(五)java.util.ArrayList 后篇之SubList liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) S ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历
一点一点看JDK源码(五)java.util.ArrayList 后篇之Spliterator多线程遍历 liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点看J ...
- 一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate
一点一点看JDK源码(五)java.util.ArrayList 后篇之removeIf与Predicate liuyuhang原创,未经允许禁止转载 本文举例使用的是JDK8的API 目录:一点一点 ...
- 分析jQuery源码时记录的一点感悟
分析jQuery源码时记录的一点感悟 1. 链式写法 这是jQuery语法上的最大特色,也许该改改POJO里的set方法,和其他的非get方法什么的,可以把多行代码合并,减去每次 ...
- 20155201 实验五《Java面向对象程序设计》实验报告
20155201 实验五<Java面向对象程序设计>实验报告 一.实验内容 1. 数据结构应用 2. 结对编程:利用IDEA完成网络编程任务,1人负责客户端,1人负责服务器 3. 密码结对 ...
- 20145205 《Java程序设计》实验报告五:Java网络编程及安全
20145205 <Java程序设计>实验报告五:Java网络编程及安全 实验要求 1.掌握Socket程序的编写: 2.掌握密码技术的使用: 3.客户端中输入明文,利用DES算法加密,D ...
- 20145212 实验五《Java网络编程》
20145212 实验五<Java网络编程> 一.实验内容 1.运行下载的TCP代码,结对进行,一人服务器,一人客户端: 2.利用加解密代码包,编译运行代码,一人加密,一人解密: 3.集成 ...
随机推荐
- Maven远程发布项目到tomcat
向tomcat发布项目,每次都要打包传送再运行,非常麻烦.偶然一天发现maven有插件可以直接发布到tomcat.今天把大体过程介绍给大家. 首先在pom中配置tomcat插件: <plugin ...
- 设计模式23:Visitor 访问者模式(行为型模式)
Visitor 访问者模式(行为型模式) 动机(Motivation)在软件构造过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的修改,将会给子类带来繁重的 ...
- mysql 查询条件
1简单查询 select* from 表名 select name as“姓名”fromstu (把name改为名字) 2条件查询 where 后面跟条件 条件要写清楚 3模糊查询 l ...
- 自制Java中的Mutex类
同步问题中,一个很重要的问题是同步的域,什么是同步的域呢?简单以 synchronized 这个关键字来说,就是它所同步的范围.并发编程中很多时候出现的问题没有选好同步范围所导致的.但现有的同步关键字 ...
- 洛谷P2634 [国家集训队]聪聪可可 (点分治)
题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已 ...
- mysql按照天或小时group分组统计
select DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * ) FROM test GROUP BY DATE_FORMAT( ...
- Hadoop 文件命令
* 文件操作 * 查看目录文件 * $ hadoop dfs -ls /user/cl * * 创建文件目录 * $ hadoop dfs -mkdir /user/cl/temp * * 删除文件 ...
- MySQL直接导出CSV文件,并解决中文乱码的问题
需求: 需要导出hr_users 表中的部分字段的数据,以前是用PHP写脚本,然后导出CSV文件. 在MySQL中,它自己就能导出CSV文件 ,只不过是有如下几个问题需要大家解决. 1. 生成文件不成 ...
- UITableViewCell笔记
默认的四种cell的类型 原网站 还有这个带图的 据我自己试验,只有value2不自带imageview 不同的accessoryType 可以看到,一个tabelviewcell的contentvi ...
- mysql 快照读MVCC
mysql的读分快照读和当前读 快照读 是指写的同时,读不阻塞,达到并发的作用 这时候的读 是 记录的历史版本,存在于undo里,当然回滚时就的也是这个undo 当执行一条update语句时,记录本身 ...