谈谈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程序员进阶到架构师,6大核心技能要领详解
" java架构师技能将分为如下6大环节:数据结构和算法,Java高级特性,Java web核心,数据库,Java框架与必备工具,系统架构设计. 希望能真正帮助到从程序员进阶到架构师之路的朋 ...
- 从Java程序员进阶架构师,必看的书单推荐!
算法与数据结构: 数据结构(严蔚敏) java数据结构和算法(美:拉佛) 算法导论 大话数据结构 剑指Offer 程序员面试金典 编程珠玑 编程之美 程序员笔试面试最优解 数据结构与算法经典问题解析( ...
- java程序员进阶必读书单
以下是我推荐给Java开发者们的一些值得一看的好书,从java基础开始到高级,以及从高级进阶到架构等的书单. 基本都是经典之作,可以利用工作闲暇的时间,系统阅读. [外链图片转存失败,源站可能有防盗链 ...
- 从Java程序员进阶为架构师,全套16张图概括最全技能!建议收藏!
如何从程序员进阶到架构师?今天完整的把我积累的经验和技能分享给大家! 作者:陈睿|优知学院创始人 数据结构+算法=程序 数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及 ...
- Java程序员进阶——Spring依赖注入原理分析
Spring依赖注入原理分析 下面谈谈Spring是如何实现反转模式IOC或依赖注入模式DI: 平时,我们需要生成一个对象,使用new语法,如一个类为A public class A{public v ...
- java 内存 开发 经验_有一到五年开发经验的JAVA程序员需要掌握的知识与技能!...
JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为什么他们能达到如此境界? ...
- Java程序员进阶架构师的五个阶段,你到了哪各阶段?
之前有个讨论:实现同样功能,简洁代码一定比复杂代码效率高吗?有的说,还得看算法,如果算法相同,简洁代码效率应该会高一些.有的说,即使算法相同,简洁代码也不见得比复杂代码效率高,而应尽可能减少循环的使用 ...
- 五年Java程序员进阶架构师的一些心得以及职业生涯规划
1. 引言 搞Java的弟兄们肯定都想要达到更高的境界,用更少的代码解决更多的问题,用更清晰的结构为可能的传承和维护做准备.想想当初自己摸着石头过河,也看过不少人介绍的学习路线,十多年走过来多少还是有 ...
- Java程序员进阶架构师推荐阅读书籍
[IT168 技术]作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些 ...
最新文章
- 两个使用 Pandas 读取异常数据结构 Excel 的方法,拿走不谢!
- 25 岁“天才少年”曹原再发一篇 Nature!9 个月的第三篇 Nature!
- 【Windows 逆向】内存地址分析 ( 内存条 | 虚拟内存 | 内存地址及寻址范围 | 内存地址与数据的关系 )
- 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )
- Python中read( )与readlines( )的使用
- linux编码 form表单,Linux curl 模拟form表单提交信息和文件
- Java之Socket与HTTP区别
- python 读取地震道头数据_python地震数据可视化详解
- Python之路【第五篇】:Python基本数据类型
- Android 8款开源游戏引擎
- java三步 网易_Java基础:三步学会Java Socket编程·网易学院·教程
- springboot+vue旅行社旅游拼团系统java
- 德州大学计算机系郭小虎2021,2021年德州农工大学排名U.S.News世界大学排名第130...
- CentOS下MySQL安装失败,报socket '/tmp/mysql.sock错误解决方法
- 《哈佛大学公开课:幸福课》学习笔记(3)
- 一加9 Pro和小米11 Pro哪个好?做了超多功课最终选择了它
- Python:1020 月饼
- Mq报错:Caused by: com.rabbitmq.client.ShutdownSignalException
- C++ 数据存储类型
- com.netflix.client.ClientException: load balancer doer not hava available server for client: XXX 的报错
热门文章
- 集成模型Xgboost!机器学习最热研究方向入门,附学习路线图
- 朴素贝叶斯(NaïveBayes)
- 当代研究生应当掌握的5种Pytorch并行训练方法(单机多卡)
- 纯Python实现Torch API,康奈尔副教授为自己的课程创建了DIY教学库
- 树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者
- 翻遍用AI检测新冠的论文,一篇临床可用的也没有?!
- 知识蒸馏在推荐系统的应用
- 这届清华新生太难了吧!C++作业难到上热搜,特奖都说做不了,大厂猎头已密切关注...
- 男人们聚会时,都聊些什么?
- 牛X!Github项目中文榜,你想知道不想知道的都有!