初级、中级、高级Java开发人员需要掌握的知识

初级、中级、高级Java开发人员需要掌握的知识展开来说说。

2.1 初级Java开发(0-3年经验)

对于初级开发人员,还停留在Java语言本身的使用上,这个时候的目标就是怎么从小白变成“代码熟练工”。要想成为熟练工,就得“横向”学习Java语言的各个技术点和周边技术点,比如:

  • Java 基础:JVM、JDK等;
  • 面向对象编程:OOP概念、抽象、封装、继承、接口等;
  • Java 基础语言结构:变量、类、对象、数组、字符串、列表、Map等
  • 内存管理:垃圾收集、内存分配等
  • Java 高级:反射、异常处理、多线程编程等

对于框架的掌握,基本上也是以熟练使用为主,当然了,最好能够选择一两个框架进行深入研究,这些框架包括:

  • Spring:
  • SpringBoot;
  • SpringCloud;
  • MyBatis;
  • JPA;
  • 等等。

对于数据库我们也要熟练使用,这里推荐大家熟悉三种数据库的使用,包括MySQL、PostgreSQL、Oracle,这三种数据库产品目前使用率比较高。确定学习哪些数据库产品后,你还要学习如何使用数据库,这里就得学习数据相关的技术了,比如:

  • SQL基本知识:数据库服务的搭建、配置、建库、建表;
  • SQL语句的学习:增(Insert)、删(Delete)、改(Update)、查(Select);
  • SQL其他操作:分组(Group By)、排序(Order By)、连接操作(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)、约束、唯一性、主键、外键等等。

除了数据库,对于初级Java开发,最好能够掌握1-3个中间件的使用,比如:

  • Redis:一种键值对非关系型存储数据库,经常用于缓存;
  • MongoDB:一种基于分布式文件存储的数据库;
  • MQ:消息队列,可以选择一种产品进行学习,比如Kafka。

上面介绍的技术都是Java开发必备的技能,还有一些软技能也要掌握,比如Linux系统的操作、网络技术的原理、开发工具IDEA的使用、连接数据库的Navicat使用等等。

2.2 中级Java开发(3-6年经验)

中级阶段,最重要的就是优化思考了,相信已经处于这个阶段的朋友能够理解我说的意思。中级工程师,理论上已经属于代码熟练工了,也就是编码完全没问题。但是人人都会编码,你的核心竞争力在哪?那肯定是你能写出更优美、性能更好的代码,并且能够具备排错技能。

所以在中级阶段,如何学习Java?

在Java基础方面,需要深入理解JVM的原理,能够对垃圾回收及其算法有深入了解,方便排查线上OOM问题。

在各类框架上,不仅仅要会用,还得掌握其原理,甚至遇到一些项目难题,能够读框架源码进行解决,还能借鉴源码的思想写出更优质的代码。

在中级阶段,还有一个特别重要的技能一定要会,那就是设计模式,Java中常见的设计模式大概有23种,这23种设计模式可以分成三组,如下图所示:

除了设计模式,还有一项Java技术能够体现出中级工程师的水平,那就是并发编程,如果你不会并发编程,那么你跟中级Java开发的水平还差一大截。

在并发编程中,像线程的基础概念、线程创建、线程启动、线程停止、线程中断、线程生命周期、线程异常、线程安全、死锁等具体知识一定要掌握。

除了Java的知识外,像中间件,比如Redis,在初级中,你可能更多的是简单使用,比如存或者取String类型的数据,使用起来更简单,但是在中级阶段,往往需要掌握的更多更深,比如使用Hash类型去处理数据,能够解决缓存穿透的问题等等。

在Linux的使用上,不仅仅是掌握几个人人皆知的命令,甚至你还可以像运维人员那样,会部署服务,会发布版本等,这些都是作为一个合格的中级Java开发应该必备的技能。

在初级阶段,遇到问题,大多数情况下,都可以通过咨询经验比你多的同事去解决,但是在中级阶段,你需要具备排障的技能,除了疑难杂症,大多数问题,对于一个编码熟练、掌握各个框架原理的中级工程师来说,排除故障不是一个很难的事。

总结一下中级Java开发,其实就是几个关键词:设计模式并发编程性能优化排障

2.3 高级Java开发(6年以上)

高级Java开发一般会在中级Java开发基础上有质的飞跃,初级注重的是熟悉编码,中级注重的是熟悉调优,高级注重的就是全面。这里的全面不仅仅是会编码、会调优,还要会架构、会管理、会沟通等。

那么要想称为高级Java开发,理应具备哪些技能呢?

我总结了以下几点:

  • 识别业务问题并设计解决方案;
  • 评估现有架构系统;
  • 解决技术问题和设计缺陷,注重细节;
  • 会合作,善于沟通;

以上我觉得是一个高级Java开发必备的软技能,但是作为开发人员,走到高级阶段,在Java或者Java周边技术应该掌握哪些知识点呢?

我觉得以下便是高级Java开发应该要精通的技术:

请注意我这里用的词是“精通”。

在性能调优上,不单单是局限于慢SQL,分库分表等常见调优,更多的是需要掌握JVM调优、数据库调优、Nginx调优、Java程序调优、Tomcat调优等。

在并发编程上,不单单就是写个多线程程序那么简单,更多的是能够灵活使用各种锁,比如乐观锁、悲观锁、自旋锁、偏向锁、轻量级锁、重量级锁、公平锁、非公平锁、可重入锁、非可重入锁、共享锁、排他锁等。特别要精通AQS、Unsafe、Semaphore、CountDownLatch、CyclicBarrier、Exchanger、Phaser等同步工具。在并发编程中,还需要精通多线程设计模式,比如:单线程模式、不可变模式、守护阻塞模式、守护中断模式、生产者消费者模式、读写锁模式、消息单线程模式、工人线程模式、未来模式等。

在分布式上,不能就懂负载均衡、远程调用等基础概念,更多的是要研究分布式事务、分布式锁、分布式单点登录、分布式调度任务、分布式注册中心等,还要精通分布式缓存、分布式通信、分布式调用、分布式消息通知、分布式分流等。

在微服务上,不能单单就是知道个SpringCloud基本概念,你还要精通其各个组件,比如:

  • 路由网关:Zuul;
  • 客户端负载均衡:Ribbon;
  • 声明式服务调用:Feign;
  • 注册中心:Nacos;
  • 配置服务中心:Config;
  • 调用链路跟踪:Sleuth;
  • 消息总线:BUS;
  • 分布式事务:Seata;
  • 等等。

在中间件上,不能就只会一个Redis,还得要精通:

  • 对象存储:比如华为云OBS、Minio等;
  • RPC框架:Dubbo、gRPC等;
  • 消息队列:RabbitMQ、Apache Kafka、Apache ActiveMQ、Apache RocketMQ等;
  • 注册中心:Zookeeper、Eureka、Nacos等;
  • 分布式日志:Elasticsearch、Logstash、Kibana等;
  • 集成部署:Docker、Jenkins、Git、Maven
  • 等等。

在开源框架上,我们既要善于贡献开源框架,还要善于使用开源框架。比如你在开发过程中觉得某个功能是共性的、能够解决行业痛点的,就可以考虑将其贡献为开源框架,可以在很大程度上提升自己的开源思想。在开源项目的使用上,如果能够善于使用,那么可以在很大程度上提高团队的开发效率,比如:

  • Java 诊断工具:Arthas;
  • 金融级分布式事务解决方案:hmily;
  • Java工具类库:hutool;
  • 即时通讯系统:J-IM;
  • Api文档增强:Knife4j;
  • mybatis 增强工具包:mybatis-plus;
  • 等等。

本文系作者在时代Java发表,未经许可,不得转载。

如有侵权,请联系nowjava@qq.com删除。

编辑于

关注时代Java

关注时代Java