对于初级开发人员,还停留在Java语言本身的使用上,这个时候的目标就是怎么从小白变成“代码熟练工”。要想成为熟练工,就得“横向”学习Java语言的各个技术点和周边技术点,比如:
对于框架的掌握,基本上也是以熟练使用为主,当然了,最好能够选择一两个框架进行深入研究,这些框架包括:
对于数据库我们也要熟练使用,这里推荐大家熟悉三种数据库的使用,包括MySQL、PostgreSQL、Oracle,这三种数据库产品目前使用率比较高。确定学习哪些数据库产品后,你还要学习如何使用数据库,这里就得学习数据相关的技术了,比如:
除了数据库,对于初级Java开发,最好能够掌握1-3个中间件的使用,比如:
上面介绍的技术都是Java开发必备的技能,还有一些软技能也要掌握,比如Linux系统的操作、网络技术的原理、开发工具IDEA的使用、连接数据库的Navicat使用等等。
中级阶段,最重要的就是优化和思考了,相信已经处于这个阶段的朋友能够理解我说的意思。中级工程师,理论上已经属于代码熟练工了,也就是编码完全没问题。但是人人都会编码,你的核心竞争力在哪?那肯定是你能写出更优美、性能更好的代码,并且能够具备排错技能。
所以在中级阶段,如何学习Java?
在Java基础方面,需要深入理解JVM的原理,能够对垃圾回收及其算法有深入了解,方便排查线上OOM问题。
在各类框架上,不仅仅要会用,还得掌握其原理,甚至遇到一些项目难题,能够读框架源码进行解决,还能借鉴源码的思想写出更优质的代码。
在中级阶段,还有一个特别重要的技能一定要会,那就是设计模式,Java中常见的设计模式大概有23种,这23种设计模式可以分成三组,如下图所示:
除了设计模式,还有一项Java技术能够体现出中级工程师的水平,那就是并发编程,如果你不会并发编程,那么你跟中级Java开发的水平还差一大截。
在并发编程中,像线程的基础概念、线程创建、线程启动、线程停止、线程中断、线程生命周期、线程异常、线程安全、死锁等具体知识一定要掌握。
除了Java的知识外,像中间件,比如Redis,在初级中,你可能更多的是简单使用,比如存或者取String类型的数据,使用起来更简单,但是在中级阶段,往往需要掌握的更多更深,比如使用Hash类型去处理数据,能够解决缓存穿透的问题等等。
在Linux的使用上,不仅仅是掌握几个人人皆知的命令,甚至你还可以像运维人员那样,会部署服务,会发布版本等,这些都是作为一个合格的中级Java开发应该必备的技能。
在初级阶段,遇到问题,大多数情况下,都可以通过咨询经验比你多的同事去解决,但是在中级阶段,你需要具备排障的技能,除了疑难杂症,大多数问题,对于一个编码熟练、掌握各个框架原理的中级工程师来说,排除故障不是一个很难的事。
总结一下中级Java开发,其实就是几个关键词:设计模式、并发编程、性能优化、排障。
高级Java开发一般会在中级Java开发基础上有质的飞跃,初级注重的是熟悉编码,中级注重的是熟悉调优,高级注重的就是全面。这里的全面不仅仅是会编码、会调优,还要会架构、会管理、会沟通等。
那么要想称为高级Java开发,理应具备哪些技能呢?
我总结了以下几点:
以上我觉得是一个高级Java开发必备的软技能,但是作为开发人员,走到高级阶段,在Java或者Java周边技术应该掌握哪些知识点呢?
我觉得以下便是高级Java开发应该要精通的技术:
请注意我这里用的词是“精通”。
在性能调优上,不单单是局限于慢SQL,分库分表等常见调优,更多的是需要掌握JVM调优、数据库调优、Nginx调优、Java程序调优、Tomcat调优等。
在并发编程上,不单单就是写个多线程程序那么简单,更多的是能够灵活使用各种锁,比如乐观锁、悲观锁、自旋锁、偏向锁、轻量级锁、重量级锁、公平锁、非公平锁、可重入锁、非可重入锁、共享锁、排他锁等。特别要精通AQS、Unsafe、Semaphore、CountDownLatch、CyclicBarrier、Exchanger、Phaser等同步工具。在并发编程中,还需要精通多线程设计模式,比如:单线程模式、不可变模式、守护阻塞模式、守护中断模式、生产者消费者模式、读写锁模式、消息单线程模式、工人线程模式、未来模式等。
在分布式上,不能就懂负载均衡、远程调用等基础概念,更多的是要研究分布式事务、分布式锁、分布式单点登录、分布式调度任务、分布式注册中心等,还要精通分布式缓存、分布式通信、分布式调用、分布式消息通知、分布式分流等。
在微服务上,不能单单就是知道个SpringCloud基本概念,你还要精通其各个组件,比如:
在中间件上,不能就只会一个Redis,还得要精通:
在开源框架上,我们既要善于贡献开源框架,还要善于使用开源框架。比如你在开发过程中觉得某个功能是共性的、能够解决行业痛点的,就可以考虑将其贡献为开源框架,可以在很大程度上提升自己的开源思想。在开源项目的使用上,如果能够善于使用,那么可以在很大程度上提高团队的开发效率,比如:
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。