近期小结
最近一个月面试了不少人(一个也没招到)。发现大部分应聘者都有一个问题:基本功不扎实,给人一种培训班出来的感觉。
其中一个工作了9年的开发,居然不知道jvm的gc参数。离开tomcat就不知道怎么开发的大有人在。还有一种人是不求甚解,虽然用过不少开源框架、工具,但问起里面的原理几乎都不清楚,仅限于使用而已。还有就是基础还可以但却沟通不顺的,总是答非所问。例如问他做的某个项目中有什么技术难点,结果他说了10分钟的业务流程。同时,通过应聘者来检查自己是否存在一样的问题,这是一个很好的自我提高方法。
学习guava源码。guava之强大,完全可以作为java开发中的基础工具包。base包中的工具可以让代码变得更优雅,如Joiner,Splitter等可以很方便的进行字符串拼接、分割操作。collect包是对jdk集合的扩展,如对Map<String, List<String>>
这种复合集合的包装,可以让代码变更直观简洁。每个包都有对应的强大功能。推荐文档:英文、中文。看源码最大的收获是学习很多非常优秀的编程思想,经常自问:同样得功能,我能不能实现的这么优雅。
学习fastjson源码。json现在应该是项目开发中必不可少得数据类型了,json的工具包有很多,Json-lib、Gson、Jackson、fastjson是使用的最多的四个json工具包。使用习惯上,个人觉得fastjson是最顺手的(不知道是不是因为是中国人写的缘故)。Json-lib的性能相对较差,其他三个各有争论,网上也能找到很多相关的测试对比数据。json库的主要功能就是序列化和反序列化,所以性能的优化都在这两点上。一篇不错的分析文章
学习过程中发现,上面两个项目的源码都大量使用,或者借鉴了jdk的源码实现,如guava中cache的实现是基于ConcurrentHashMap的扩展,fastjson中的序列化实现采用了类似StringBuiler的实现方法。有时间的时候确实应该去学习一下jdk的源码,这样才能称得上是java开发。甚至更进一步,学习jvm的c++源码。
学习编写python的web框架。人生苦短,我用python。python就像一把瑞士军刀,在任何地方都能派上用场,非常适合作为开发人员的第二语言。语言设计本身有很多先进的思想在里面,完全可以再java开发中借鉴。如自己包装with方法来达到python中的with关键字功能,可以方便进行文件操作。推荐一个很好的python学习网站