引言

在了解了Java的生态体系和基本概念后,野生程序员要想真正入坑Java程序开发还需要先对Java的技术路线有一个清晰的认识。

本文重在为小白理清学习路线,大神请绕行。

一、基础知识

(1)编程语言

主要学习Java语法。(有C++基础上手更快)

  • 可以通过书或网络教程学习。

  • 不用刻意记忆,关键在于实践。

(2)基本算法

主要学习数据结构、查找算法、排序算法等。

(3)基本网络知识

主要学习计算机网络。

  • TCP/IP协议
    现在的互联网如此发达主要得益于TCP/IP协议。

  • HTTP/HTTPS协议
    现在流行的Web应用主要得益于HTTP/HTTPS协议。

(4)基本的设计模式

如单例模式、模板模式等。

二、工具

(1)操作系统

Linux(CentOS、Ubuntu等)

(2)代码管理

  • SVN
  • Git

(3)持续集成/持续交付/持续部署

即:CI(Continuous Integration)、CD(Continuous Delivery)、CD(Continuous Deployment)。

偏运维范畴,Java开发也应该有一定的了解。

  • Jenkins

(4)Java项目管理工具

  • Maven

  • Gradle

(5)Java集成开发工具

  • IntelliJ IDEA

  • Eclipse
    两者均支持Windows和Mac系统。目前,Java企业级开发中用的比较多的是IDEA,因为它的集成环境非常强大。

三、框架

(1)应用层框架

  • SSH(Struts+Spring+Hibernate)
    已过时,不要再学了。

  • SSM(Spring+SpringMVC+MyBatis)
    目前仍有很多企业在用。**MyBatis是数据库的访问层。**MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,极大地简化了Java操作数据库(增删改查)的流程。

  • Spring Boot
    目前比较流行,更易上手。(建议小白由此入坑)

(2)各种中间件

  • MQ(Message Queue):
    消息队列,如RabbitMQ等。

  • RPC(Remote Procedure Call):
    远程过程调用,是一种通信框架。
    目前比较流行的gRPC、Thrift、Dubbo等都有RPC的影子在里面。

  • ElasticSearch搜索引擎:
    我们可以把它理解成一个数据库。

(3)数据库

  • SQL(Structured Query Language,结构化查询语言):
    即传统的关系型数据库。
    具体的数据库软件有MySQL、PostgreSQL等。

  • NoSQL(Not Only SQL, 非关系型的数据库)
    目前比较流行的有(做缓存的)RedisMemCached,(文档数据库)MogoDB,以及前面提到的(搜索引擎数据库)ElasticSearch

四、架构

(1)分布式/微服务架构

  • Spring Cloud

  • Dubbo(阿里巴巴的)

  • 前面讲的RPC通信框架也可归于此类
    Spring Cloud和Dubbo在某种程度上也可视为一种RPC通信框架。

无论是传统的Servlet + JSP,还是 SSM,以及现在的 SpringBoot,它们都是单体架构。

单体架构在规模比较小的情况下工作情况良好,但是随着系统规模的扩大,它扩展性差、可靠性不高、维护成本高等问题就会暴露出来。

微服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台,使部署、管理和服务功能交付变得更加简单。

(2)虚拟化/容器化技术

  • Docker(易上手)

  • K8S(Kubernetes,k和s之间有8个字母)

五、源码

在学有余力的情况下,我们还应该关注一些优秀系统的源码。如:

  • JDK源码及其部分设计思想

  • Spring全家桶源码

  • JVM细节与排除

  • 高并发/高可用(更多的要来源于实践)

后记

在理清基本的学习路线后,更多的是靠:实践 + 坚持 + 努力。

(内容主要来自CodeSheep的B站视频,特此鸣谢!)

阿汤笔迹微信公众平台

关注**“阿汤笔迹”** 微信公众号,获取更多学习笔记。
原文地址:http://www.atangbiji.com/2020/04/10/JavaTechnologyRoadmap/
博主最新文章在个人博客 http://www.atangbiji.com/ 发布。