许多Java开发人员都希望通过某种Java成长路线图,来解答有关:该学习哪些技术,使用哪些工具以及框架之类的问题。

在此,我将向大家展示一张根据自己多年经验总结出的路线图。该路线图在保持简单可行的基础上,介绍了各种具有业界标准、且方便多数人遵循的工具和程序库。

该路线图如下所示,希望能够对您起到指导和借鉴的作用。

 

如图不清晰,可以关注微信公众号Java技术栈,在后台回复关键字 "19javamap" 获取高清版。

Java开发人员的必备技能

下面,我们将根据上述Java路线图,来一起探讨那些开发人员必须学习和掌握的工具、框架、程序库、以及API。

1、工具

在路线图中,工具部分主要分为两块。

第一部分是作为主要工具的IDE。它能够起到编译、运行、调试、分析、测试、比较文件与代码、以及重构等作用。

第二部分是构建工具。您需要使用例如Maven和Gradle之类的工具,来构建和部署项目。当然,您也可以选择使用比较传统甚至有些老旧的ANT。不过,在处理所有新的Java项目时,我个人更偏好使用Maven或Gradle。

2、JDK API

JDK API是其次需要学习和掌握的方面。根据它对于大多数Java开发人员的重要程度,我将Java集合框架(Collections Framework)、Java并发性(Concurrency)、Java IO与Java 8 API等核心领域都归纳到了此类之中。下面我们逐一进行讨论:

2.1 Java集合框架

这是每个Java开发人员都应该认真学习的Java重要API之一。该API提供了Java中标准数据结构的实现,例如:链表、集合、堆栈、队列、哈希表、以及优先级队列等。

您至少应该了解的常规对象包括:ArrayList、HashMap、HashSet、LinkedHashSet、以及TreeSet等。它们都有各自不同的属性。

例如:ArrayList是一个可以增长的动态数组;HashMap是一种哈希表的标准实现,可以被用于存储各种键值对;而HashSet则是一套实现类的集合,它不允许有重复元素的出现。

 

2.2 Java并发性

在Java集合之后,另一个关键的Java API便是多线程与并发性。我个人认为:如果您想成为一名合格的Java开发人员,那么就必须对Java Concurrency API具有扎实的理解和掌握。

您不仅应该对Thread、Runnable、对象锁定(Object locking)、以及同步等基本概念有深入的了解,而且还应该熟悉死锁、活动锁(livelock)、竞争条件、以及如何处理等相关概念。

同时,您也应该了解一些高级的Java概念,例如:如何在Java 5及其后续版本中添加各种同步器,包括:CyclicBarrier、CountDownLatch、Phaser、CompleteableFuture等,以及如何通过Futures在Java中执行异步操作等方面。

 

2.3 Java IO

通过采访了100多名Java程序员,我注意并发现到:相比Java集合和Java多线程API,他们对于Java IO和NIO API的了解真是少之又少。虽然多数人已经将大量时间花费在了学习前面两个API上,但是我们丝毫不应该忽略其他关键的API。

有过编写核心Java应用程序的读者应该体会到:经常需要使用java.io包中的File、InputStream、OutputStream、Reader和Writer等类。它们都是Java IO API的核心。

同理,如果您想编写基于套接字的应用程序,那么就需要通过java.nio API来了解ByteBuffer、FileChannel、Selector和其他关键类。

不过在网上,有关传授Java IO和Java NIO API的资源并不多,你可以通过The Complete Java Masterclass课程资源,来全面掌握此类API。当然,该课程也会涉及到Java API的许多其他基本概念。

 

2.4 Java 8的各项功能

Java程序员应该学习并掌握的下一个重要API是Java 8的各项功能。可以毫不夸张地说,这些功能彻底改变了如今Java的编程方式。

因此,作为一名Java开发人员,您不应该错过了解与使用Lambda表达式、Stream API、Optional类、以及全新Date and Time API的机会。

Java 8已经发布5年多了,如今大多数库都已停止了支持低于Java 8的版本。因此如果您想顺利地实现Java应用程序的编写与调试的话,请赶快抓紧时间学习Java 8的各项新功能。

关注微信公众号:Java技术栈,在后台回复:Java,可以获取我整理的 N 篇最新 Java 8-12 新特性教程,都是干货。

 

3、框架

Java的魅力在于它拥有一个充满活力的生态系统,这意味着其许多框架和程序库能够被用于几乎所有的领域。

目前,被Java开发人员经常使用到的框架和程序库包括:Spring、Spring Boot、Hibernate、Log4j、以及JUnit等。

3.1 Spring框架

Spring Framework是最流行的Java框架之一。实际上过去五年里,我在几乎所有工作过的Java应用程序中,都使用了该框架。推荐:Spring 常犯的十大错误!

Spring Framework不但能够让开发人员编写出简洁的代码,而且还能够通过依赖注入(Dependency Injection)和控制反转(Inversion of Control)等功能,轻松地测试与维护代码。它拥有丰富API,可适用于大多数日常任务,恐怕这也就是为什么Java开发人员应该学习Spring框架的原因。

3.2 Hibernate

在我的路线图中,第二个推荐给Java开发人员学习的框架是Hibernate。它是基于Java持久性的API(JPA,Java Persistence API)。更准确地说,Hibernate早于JPA,但是由于JPA是在Java中实现了持久层的标准API,因此Hibernate也能够实现它。

由于大多数Java应用程序都需要与数据库进行交互,因此开发人员可以通过Java Hibernate之类的框架,使用JDBC来处理Java中的数据库相关操作。另外,由于Hibernate提供了开箱即用的缓存和事务等基本功能,因此开发人员能够拥有更多的时间,去专注于应用程序的逻辑,而不用考虑如何去实现缓存。显然,Hibernate大幅提高了Java应用程序的性能。

3.3 Spring Boot

我在此推荐的第三个框架是Spring Boot。就像Spring能够使得创建Java应用程序更加容易那样,延续了Spring简化化理念的Spring Boot,通过自动配置之类的功能,消除了创建和配置基于Spring的Java应用程序的各种麻烦步骤。

另外,其入门级的POM功能,将常用的依赖项分组成为了多个简单且可重用的POM。

关注微信公众号:Java技术栈,在后台回复:boot,可以获取我整理的 N 篇最新 Spring Boot 教程,都是干货。

 

4、测试

测试,尤其是单元测试、集成测试和自动化测试,是任何Java开发人员必修的一项基本技能。其中,JUnit和Mockito是两种被Java开发人员最为熟悉、且欢迎的单元测试和模拟库。

当然,您也可以去学习一下更高级的程序库,例如:用于业务驱动测试的Cucumber,用于集成测试的Robot Framework,以及您肯定“绕不开”的JUnit。

在常见的PowerMock、Mockito和EasyMock三种模拟库中,我强烈建议您学习Mockito。由于目前有许多Java开发人员和公司都在使用它,因此它已逐渐成为了在Java中创建模拟对象的标准库。

5、实用程序库

一直以来,Java都拥有着丰富的开源程序库,它们可以帮助开发人员实现从日志记录到机器学习,从发送HTTP请求到解析JSON等,几乎所有的工作。

值得一提的是:Apache Commons和Google Guava这两个实用程序库,它们是Java JDK库的有效补充。

希望该清单能够帮助您编写出更加优秀,运行效率更高的Java程序代码。

作者:Javin Paul

原文:The 2019 Java Developer Roadmap

转自:51CTO官微

大家也可以关注微信公众号:Java技术栈,栈长将继续分享更多 Java 系列干货,在公众号后台回复:Java,可以获取栈长已经整理好的历史 Java 系列干货文章。

 

歪国人整理的 2019 年 Java 开发路线图,值得参考!的更多相关文章

  1. 盘点 Java 开发 2020 年发生的几件大事,你必须得知道!

    2021 年了,在过去的一年 Java 软件开发行业都发生了哪些重大事件呢? 这篇栈长带大家回顾一下,其实在元旦的<滚蛋吧,2020>也略有介绍,这篇就更加详细的总结一下. 1.Java ...

  2. Java开发最佳实践(一) ——《Java开发手册》之"编程规约"

    Java开发手册版本更新说明 专有名词解释 一. 编程规约 (一) 命名风格 (二) 常量定义 (三) 代码格式 (四) OOP 规约 (五) 集合处理 (六) 并发处理 (七) 控制语句 (八) 注 ...

  3. 阿里JAVA开发手册零度的思考理解(一)

    转载请注明原创出处,谢谢! 缘由 阿里JAVA开发手册已经发表有很长时间了,值得认真研究思考推广 阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好 ...

  4. 2019年学Java开发有优势吗?

    随着信息科技的发展,在我们的日程生活和工作中到处充斥和使用着互联网信息技术.事实说明,互联网已经越来越广泛地深入到人们生活的方方面面,Java技术服务市场需求空缺会越来越大.学会一门IT技术,将拥有更 ...

  5. java开发面试大全刷题整理

    题目源自Java团长公众号,内容个人整理,来源于各大博客,未经允许,不准摘抄,仅供分享,不做商业使用. 本分享多数为浅层知识体系,更为底层的还请自行多写写代码,若有不对之处,望广大的人才指点,不喜勿喷 ...

  6. 2019最新最全Java开发面试常见问题答案总结

    2019最新最全Java开发面试常见问题答案总结 马上准备9月份出去面试Java开发,自己学习丢西瓜捡芝麻,学了的都忘了,所以有机会自己做个学习笔记,摘录自各个博文以及总结. 1.JAVA面向对象的特 ...

  7. Java开发中常用jar包整理及使用

    本文整理了我自己在Java开发中常用的jar包以及常用的API记录. <!-- https://mvnrepository.com/artifact/org.apache.commons/com ...

  8. 整理了2019年上千道Java面试题,近500页文档,用了1个月时间!

    spring 面试题 1.一般问题 1.1.不同版本的 spring Framework 有哪些主要功能? 1.2.什么是 spring Framework? 1.3.列举 spring Framew ...

  9. 《码出高效:Java开发手册》第四章学习记录,内容想当的多,前后花了几天的时间才整理好。

    <码出高效:Java开发手册>第四章学习记录,内容想当的多,前后花了几天的时间才整理好. https://naotu.baidu.com/file/e667435a4638cbaa15eb ...

随机推荐

  1. Swgger2的简单使用

    编写接口文档是一个非常枯燥的工作,我们采用Swagger2这套自动化文档工具来生成文档,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档 ...

  2. Java自学-面向对象 方法

    Java类的方法 在LOL中,一个英雄可以做很多事情,比如超神,超鬼,坑队友 能做什么在类里面就叫做方法 示例 1 : 什么是方法 比如队友残血正在逃跑,你过去把路给别人挡住了,导致他被杀掉. 这就是 ...

  3. 【MySQL】数据库事务深入分析

    一.前言 只有InnoDB引擎支持事务,下边的内容均以InnoDB引擎为默认条件 二.常见的并发问题 1.脏读 一个事务读取了另一个事务未提交的数据 2.不可重复读 一个事务对同一数据的读取结果前后不 ...

  4. 有关MFC类与其窗口句柄

    Attach,其实就是让一个CWnd对象的HWND成员指向这个窗口句柄.这就是Attach主要完成的任务. Detach.如前所述,WNDCLASS其实和CWnd根本没有什么关系.它们之间只是通过CW ...

  5. uniapp之w-picker使用采坑

    1. uniapp之w-picker使用采坑 1.1. 前言 由于我是先在index页面集合了这个组件,发现该文件内容实在太多了,不好维护,所以打算把内容一个个抽成组件,在抽w-picker时,遇到了 ...

  6. QT制作一个位图画图板程序

    本文学习如何创建一个Qt绘制程序,用户将能够通过使用不同的尺寸和画笔的颜色来表达他们的创造力. 主要功能:保存画板内容为图片.清除画板内容.设置画板大小.设置画笔颜色 新建基于QMainWindow的 ...

  7. ES6 对象解构赋值(浅拷贝 VS 深拷贝)

    对象的扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中. 拷贝对象 let aa = { age: 18, name: 'aaa' } let bb = {...aa}; co ...

  8. 自动化测试模型 Selenium IDE Selenium Gird2

    1.线性测试 每个测试脚本相对独立,且不产生其他依赖与调用,其实就是单纯的来模拟用户完整的 操作场景.前一篇所写的测试脚本就属于线性测试. 优点:每个脚本完整且独立 缺点:测试用例的开发与维护成本高 ...

  9. springboot读取静态资源文件的方式

    springboot的请求路径一般会经过Controller处理,但是静态资源文件在请求之后是直接返回的.这涉及到俩个配置项. spring.mvc.static-path-pattern=/** s ...

  10. Docker11-实战-部署多套环境

    目录 创建本地挂载目录 准备一个简单的java web项目 启动Tomcat容器:通过挂载不同的代码目录和运行端口来区分 案例:修改测试环境代码 创建本地挂载目录 在宿主host主机上面创建两个目录, ...