谈谈Java程序员进阶的那些知识和方向
谈谈Java程序员进阶的那些知识和方向
记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackoverflow/github的搬运工,其实个人觉得也没什么不好的,闻道有先后,术业有专攻,确实有工作岗位就需要这样的职位。但是计算机行业的发展有其方向,工程师的职业发展也有其方向,随着经验的积累,可能这样的人回头再看看自己写的代码也会觉得不太好。那么如果有一天这样的人想换工作,或者应聘体质比较完整的公司,可能还是需要潜心修炼的,下面笔者从两个方面谈谈Java程序员进阶的那些知识和方向,笔者不打算从基础的东西讲起,比如Java语言基础,多线程,IO,如果有责方面的需求请参考领域内的那些神著,但是切记,最好看原版,远离粗制滥造的翻译版。
1. Paradigm
除了Java语言基础,通常在每种语言中还有很多paradigm,这些paradigm往往是衡量老鸟和新手的地方,比如函数命名,异常处理,泛型等等,下面用异常处理的两种类型来说明,笔者见过很多的Java程序员写过很多年的代码仍然分不清楚其中的区别。
Checked 和 unchecked exceptions
Unchecked exceptions
一般用于表示程序中的Bug, 比如函数调用中的非法参数异常,Java 创始人对Unchecked exceptions的解释是Unchecked exceptions是通常不可以恢复的运行时异常,换句话说,Unchecked exceptions 其实就是RuntimeException,常用的Unchecked exceptions有IllegalArgumentException, NullPointerException, 和 IllegalStateException,Unchecked exceptions通常不需要添加到函数签名列表,并且在调用方不需要强制使用try..catch。
Checked exceptions
通常用于表示函数执行过程中的一些pre condition 没有得到满足,这些条件通常超出了函数的控制范围,比如无效输入,数据库连接问题,网络异常,文件丢失等问题,Checked exceptions的父类是Exception,Checked exceptions需要添加到函数签名列表,并且在调用方需要强制使用try..catch来捕获Checked exceptions。
2. 效率和速度
记得有一次一个朋友的老板和客户谈了一个项目,客户想先看看效果然后做决定某些功能是不是他想要的,于是老板问下面的一个工程师需要多久做出一个demo,这个人想了一天,说最快也要一个月,老板觉得太慢,于是问另外一个工程师,他给出的结论是demo只需要3天,结果3天的确实做完了,而且没有加班。那么为什么差这么多呢,脚本语言,脚本语言可以大幅的提升工作效率,特别是原型设计阶段,下面以Groovy操作XML为例加以说明。假设有很多这样的XML数据需要处理,试想一下如果使用Java会是一番什么样的景象呢。
<books>
<book name="Effective C++">
<author>Scott Meyers</author>
</book>
<book name="More Effective C++">
<author>Scott Meyers</author>
</book>
<book name="C++ Primer">
<author>Stanley B. Lippman</author>
</book>
<book name="Core Java">
<author>Cay S. Horstmann</author>
</book>
<book name="Effective Java">
<author>Joshua Bloch</author>
</book>
</books>
下面演示一下如何通过Groovy Script驾驭上面那段XML, 输出配对的书名和作者,并且过滤出所有Scott Meyers的著作,可以看出,除了打印输出,几乎所有的需求只要一行代码就可以解决。
println"--solidmango design start--"
languages = new XmlParser().parse(‘TestXML.xml') println "Books and authors" languages.each {
println "<<${it.@name}>> authored by ${it.author[0].text()}"
} def languagesByAuthor = { authorName ->
languages.findAll { it.author[0].text() == authorName }.collect {
it.@name }.join(', ')
} println"-------------------------"
println "Languages by Scott Meyers:" + languagesByAuthor('Scott Meyers') println"--solidmango design end--"
输出:
--solidmango design start--
Books and authors
<<Effective C++>> authored by Scott Meyers
<<More Effective C++>> authored by Scott Meyers
<<C++ Primer>> authored by Stanley B. Lippman
<<Core Java>> authored by Cay S. Horstmann
<<Effective Java>> authored by Joshua Bloch
-------------------------
Languages by Scott Meyers:Effective C++, More Effective C++
--solidmango design end--
小节
人总是要成长的,大公司在招聘的时候通常会考量一下面试者是否懂球,希望大家共同进步。
谈谈Java程序员进阶的那些知识和方向的更多相关文章
- Java程序员进阶架构师推荐阅读书籍
[IT168 技术]作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些 ...
- Java程序员进阶路线-高级java程序员养成
1. 引言 搞Java的弟兄们肯定都想要达到更高的境界,用更少的代码解决更多的问题,用更清晰的结构为可能的传承和维护做准备.想想当初自己摸着石头过河,也看过不少人介绍的学习路线,十多年走过来多少还是有 ...
- Kotlin 喧嚣过后,谈谈 Java 程序员未来的出路
http://blog.jobbole.com/111422 Java 生态圈 Java 的生态环境开放.自由,在Sun/Oracle.Google.Apache.Eclipse基金会等各大厂商,还有 ...
- Java程序员必须掌握的知识
1.语法:Java程序员必须比较熟悉语法,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息 知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项, ...
- JAVA程序员必须要学习的知识
Java是热门的语言之一,TIOBE编程语排名Java排名第二,仅在C语言之后.Java可以用来开发web应用和桌面应用,更重要的是Java具有跨平台性:write once, run everywh ...
- Java程序员应更新的知识
2013: 你应该更新的Java知识之常用程序库(一) 你应该更新的Java知识之常用程序库(二) 你应该更新的Java知识之Observer 你应该更新的Java知识之集合初始化 你应该更新的Jav ...
- Java程序员的日常——存储过程知识普及
存储过程是保存可以接受或返回用户提供参数的SQL语句集合.在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装.可以在数据库中定义子程序,然后把子程序存储在数据库服务器, ...
- java程序员学习路线图 java程序员进阶路线
- java程序员需要掌握些什么知识
java程序员需要掌握些什么知识 合格的程序员应具有实际开发能力的Java和J2EE.如今的IT企业需求量大,但人才紧缺的.企业需要大量掌握Java/JEE/Oracle/WebLogic/Websp ...
随机推荐
- 使用css3制作蚂蚁线
涉及知识点:background-clip.animation; 代码请查看codepen:https://codepen.io/guoxianqiang/pen/jVXPbm
- I/O优化篇
转载:http://blog.csdn.net/gzh0222/article/details/9227393 很不错 1.系统学习 IO性能对于一个系统的影响是至关重要的.一个系统经过多项优化以后, ...
- Replication的犄角旮旯(二)--寻找订阅端丢失的记录
<Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...
- 继续送假期干货——响应式图片工具smartImg
中午看<众妙之门>看到一个响应式图片处理工具(点此查看)的介绍,然后就心血来潮想着不妨自己写一个基于JQ的吧,于是就又有了这么一个干货给大家. smartImg 的全部文件可以从我的Git ...
- UWP开发随笔——UWP新控件!AutoSuggestBox!
摘要 要开发一款优秀的application,控件肯定是必不可少的,uwp就为开发者提供了各种各样的系统控件,AutoSuggestBox就是uwp极具特色的控件之一,也是相对于之前win8.1的ua ...
- js中各种跨域问题实战小结(一)
什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...
- .NET Framework中重点类型的继承关系
继承关系 Object ├─Array │ └─T[] ├─ArrayList ├─List<T> └─String 集合类型的接口 下图展示了集合类型的各种接口的相互关系.注意,下图中所 ...
- 跨站请求伪造CSRF
CSRF是Cross Site Request Forgery的缩写,乍一看和XSS差不多的样子,但是其原理正好相反,XSS是利用合法用户获取其信息,而CSRF是伪造成合法用户发起请求. 在XSS危害 ...
- 消息队列-rabbitMQ
消息队列两个用处:服务间解耦,缓解压力(削峰平谷),以前用过ZMQ.狼厂内部的NMQ,现在接触了java开源的kafka和RabbitMQ.目前先不求甚解,有个大概的认识. RabbitMQ的安装和入 ...
- ubuntu:solve the problem of 'E:Problem with MergeList /var/lib/apt/lists/'
just run this command: sudo rm /var/lib/apt/lists/* -vfR it will remove all the software package wit ...