大家好,又见面了,我是你们的朋友全栈君。
Java 研发技术学习路线
一、Java 基础阶段
基础阶段的学习说白了就是 Java SE 的学习,这是基础的阶段。目标是让初学者进入编程的殿堂,具备基本的编程思维。在这个阶段我们可以再细分为如下内容:
1、Java 基础语法
主要学习:变量、数据类型、控制语句等基本概念。这些技术是所有编程语言都有的内容,很基础也很重要。
2、面向对象
面向对象是深入学习 Java 语言的核心,也是真正进入 Java 世界的重难点。 这里会有各种各样的概念,非常重要。但是,大家在学习面向对象的时候,先注意 “开始学习语法和概念,不要期望一口气学的很透彻。面向对象,需要大家在后面做项目时才能深入体会,如何将面向对象思想应用于实践”。因此,我建议大家不要在此处过于纠结概念,能学多少学多少,遇到不懂的概念,先记结论开始用,快速往后学,不要停留过长的时间在此处。
3、异常
异常是 Java 安全机制的核心,也是让我们程序更易懂更稳定的核心。初学异常重在理解概念、学习如何解决异常的思路。
4、数组
数组是常用的概念。在学习本内容的时候,掌握核心 “数组也是对象,数组的元素相当于对象的成员变量”,理解了这一句话,就掌握了数组的一大半了。数组学习时顺便学习一下一些基本的算法,比如:排序、二分法等。这样,既可以学习数组,也能复习前面的控制语句、面向对象等知识。因此,在此处可以多做练习, 停留时间长一点。
5、常用类
重点掌握常用类的用法,学习 API 的查询和使用。如果你想更深入,学习时可以阅读这些常用类的底层源码,开始培养高手的格局。
6、容器
容器是开发中常用的内容。学习容器时,既要学习相关类和接口的使用,也要明白容器的底层原理。容器的底层实现和数据结构知识紧密挂钩。也是,我们在工作和面试中经常会碰到的问题。因此,容器需要初学者花大力气学习,并且要深入底层,明白底层的核心机制。
7、多线程
多线程是 Java 语言的特点。我们在后续学习服务器编程时,服务器的底层核心机制就是基于 “多线程” 实现的。因此,我们需要掌握多线程的基本原理和应用。为了后续学习并发编程,打下基础。同时也要学习一下 “生产者消费者模式”、“锁机制”、 “TheadLocal”、“线程池” 等一些高端的概念。
8、网络编程
网络编程是 Java 在互联网时代击败 C++ 的关键。我们需要掌握 TCP 编 程、UDP 编程的经典模式,但是不需要太深入去学习。因为,大多数项目开发时底层都做好了封装。
9、Java 8 及以上版本新特性
学有余地的同学可以尝试着学习,初学阶段并不作要求。Java 8 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的 Stream API 等。Java 9 发布于 2017 年 9 月 22 日,带来了很多新特性,其中最主要的变化是已经实现的模块化系统。美国时间 2018 年 09 月 25 日,Oralce 正式发布了 Java 11,这是据 Java 8 以后支持的首个长期版本。Java 8 扩展支持到 2025 年,而 Java 11 扩展支持到 2026 年。Java 11 长期支持,也已经包含了 9 和 10 的全部功能,9 和 10 自然就活到头了。
二、Java WEB 服务器开发阶段
学习 Java,大多数人最终会进入服务器编程、企业级开发领域。因此,为了能够完整地编写项目。这个阶段我们也要学习一些 Java 之外的技术:网页开发和设计、数据库编程和设计。Java 之内的技术有:Servlet、JSP、标签库、服务器等。这都是大家进入开发领域必须要学习的内容,光会 Java SE 是不能实现就业、不能独立开发项目的。但是,学完本阶段的技能,大家就可以独立开发一些项目、具备初步的就业能力了。
1、网页开发和设计
Java 程序员主要完成服务器端的开发,但是对于浏览器端如何展现数据也是很有必要掌握的。网页开发的基本知识可以说是必学的技能。HTML、CSS、 JavaScript、JQuery、Bootstrap 等。网页开发也是专门的专业,Java 初学者去学习,掌握基本概念即可,不需要深入太多细节。大家在学习的时候,把握好 “度”。
2、数据库编程和设计
数据库是绝大多数项目的存储的核心,因此,作为 Java 程序员也必须掌握。在学习数据库技术时,重点掌握 SQL 查询、表的设计范式、JDBC 技术、ORM 思想和 Mybatis 框架。其他关于数据库管理的知识不需要掌握太多。(大多数项目首选 MySQL,其次Oracle、SQL Server、PostgreSQL…)
3、Tomcat
Tomcat 服务器是一个开源的轻量级 WEB 应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试 Servlet、JSP 程序的首选。
4、Servlet 和 JSP 技术
Servlet 和 JSP 是 Java 服务器开发的核心技术,也是必备技能。重点掌握如下知识: HTTP 协议、Servlet、JSP、EL 表达式和标签库,以及 Java WEB 项目如何在 Tomcat 服务器环境下部署。虽然在前后端分离模式盛行的时代,JSP 略显颓势,但 Servlet 和 JSP 中所涉及的诸多概念(Cookies、Session、Token、Filter、Listener、MVC 模式)也是目前Java WEB 攻城猫必备的。
5、做一个简单的 JSP 项目
学到现在,大家已经具备初步的项目开发能力。非常有必要通过一个项目,将所学的知识串联一遍,强化所学成果。同时,也通过项目开发的学习,真正进入 Java 企业级开发的行列。
三、Java EE 阶段
Java EE 框架作为企业使用的重要技术, 其本质是写更少的代码,做更多的事情, 从而大大减码量, 让程序员更加关注业务的实现。 自己写的少了,都是用别人写好的东西就要明白别人写了什么,学习框架重难点不仅仅是如果使用框架而是要明白别人到底写了什么。 但是也要掌握好 ”度”, 不要一味追求底层, 要 ”择其重”, 否则可能出现东西太多, 永远也学习不完的情况。
1、MyBatis
学习 MyBatis 框架要知道它是一个持久层框架。它的主要职责就是完成数据库操作,因此也要求我们有一定的 SQL 基础。MyBatis 灵活就体现在所有 SQL 都是程序员编写,想要什么样的结果就写什么样的 SQL 命令,剩下大部分的事情都交给 MyBatis 完成了。我们把 Mybatis 放到了学完 JDBC 之后,这样既可以巩固 JDBC 和数据库知识,也能在即将要做的项目中开始使用 Mybatis,这样更贴合企业实战。
2、Spring
学习 Spring 框架的目标很明确, 就是学习好 IOC/DI、 AOP、 声明式事务。 单独使用 Spring 很简单,重点是学习了核心功能后如何把这些功能运行。目前大部分技术都需要被 Spring 整合, 所以 Spring 是很重要的框架。 Spring 框架不是专注于某一层, 哪里都有 Spring 的影子。所以基础语法学习好后要多做几个项目, 才能真正的感受到 Spring 的魅力。
3、Spring MVC
Spring MVC 做为 MVC 框架, 其关注点就是控制器的编写。如何接收参数, 如何传递内容到页面,还有大量注解这些都是核心。学习时把握好主脉, 要从运行原理入手, 清楚的知道里面的核心组件, 学习起来就事半功倍了。
4、Maven
Maven 是项目构建工具,必须先要弄清楚分布式的概念。 从学习了 Maven 后每个项目可能不是一个 Project 而是很多个, 所以重难点是项目和项目之间的关系以及 Maven 中 POM 的配置。
5、Shiro
Shiro 应用场景都是在权限、安全上,应用场景很明确,所以就导致 Shiro 里面有着大量专业术语。 学习 Shiro 从架构图出发,清晰的记忆所有专业术语。我们分两大块学习 Shiro ,分别是:认证和授权。
6、做一个完整的 SSM 项目
学到现在,大家已经完全具备 Java EE 项目的独立开发能力。非常有必要通过一个完整项目,将所学的知识串联一遍,强化所学成果。同时,也通过项目开发的学习,真正进入 Java 企业级开发的行列。
7、Spring Boot
学完 MyBatis、Spring、Spring MVC 整合后,一定会被其繁琐的配置,搞得头昏脑胀,那么你就可以好好感受一下 Spring Boot 的魅力喽。从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “约定大于配置” 的理念让你的项目快速运行起来。用大佬的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 jar 包,Spring Boot 整合了所有的框架。
8、做一个 Spring Boot 项目
通过之前 SSM 项目的练习,相信大家已经对 WEB 项目开发有一定的理解,那么现在就用 Spring Boot 框架来加深印象,感受目前 Java 企业级开发的主流框架的便捷性。分享几个热门项目,供大家学习参考。
BootDo 面向学习型的开源框架,减少过度封装,展现技术本质。
mall 一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
RuoYi 基于SpringBoot的权限管理系统。
9、版本控制工具
版本控制工具就是帮助我们记录和跟踪项目中各文件内容的修改变化。在团队协作开发中必不可少,SVN、Git 是目前开发团队的首选,所以大家必须熟练掌握。
四、高级技术阶段
高级技术阶段是随着电商火热后被大量使用的,这些技术大部分都是为了解决”高负载”,”高并发”等使用。
1、Linux
Linux 是操作系统,学习 Linux 就是为了让自己开发的项目发布到 Linux 中,所以学习 Linux 的主要要求是如何把项目运行的环境都配置出来。作为 Java 程序员不要求掌握特别深的 Linux 知识,掌握基本操作即可。
2、Dubbo
Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
3、Spring Cloud
首先,尽管 Spring Cloud 带有 “Cloud” 这个单词,但它并不是云计算解决方案,而是一个基于 Spring Boot 实现的云原生应用开发工具,它为基于 JVM 的云原生应用开发中涉及的配置管理、服务发现、熔断器、智能路由、微代理、控制总线、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
4、Spring Cloud Alibaba
很多人可能会问,既然已经有了 Spring Cloud 这个微服务的框架,为什么又要使用 Spring Cloud Alibaba 这个框架?最重要的原因在于 Spring Cloud 中,几乎所有的组件都使用 Netflix 公司的产品,然后在其基础上做了一层封装。然而 Netflix 的服务发现组件 Eureka 已经停止更新,而其他的众多组件预计会在2020年陆续停止维护。所以急需其他的一些替代产品,也就是 Spring Cloud Alibaba,目前正处于蓬勃发展的态式。
看看官方是怎么定义 Spring Cloud Alibaba 的:
Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
5、Spring Security
一个能够为基于 Spring 的企业应用系统提供声明式的安全訪问控制解决方式的安全框架(简单说是对访问权限进行控制嘛),应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。Spring Security 的主要核心功能为认证和授权,所有的架构也是基于这两个核心功能去实现的。
6、Docker
Docker 是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的 Docker 应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。诸多高级技术都可以基于 Docker,实现快速安装部署,因此推荐优先学习。
7、Redis
NoSQL 数据库在企业中使用越来越多,主要的优点就是效率高。每个 NoSQL 数据 库有着自己独有的操作 API,所以在能够熟练安装 Redis 基础上,更要熟练使用 Jedis、Spring Data Redis 操作 Redis。
8、MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
9、Rabbit MQ
基于队列实现,明白队列概念后,把 Rabbit MQ 安装上可以很快的上手。
10、RocketMQ
RocketMQ 是一款分布式消息中间件,最初是由阿里巴巴消息中间件团队研发并大规模应用于生产系统,满足线上海量消息堆积的需求, 在2016年底捐赠给 Apache 开源基金会成为孵化项目,经过不到一年时间正式成为了 Apache 顶级项目;早期阿里曾经基于 ActiveMQ 研发消息系统, 随着业务消息的规模增大,瓶颈逐渐显现,后来也考虑过 Kafka,但因为在低延迟和高可靠性方面没有选择,最后才自主研发了 RocketMQ, 各方面的性能都比目前已有的消息队列要好,RocketMQ 和 Kafka 在概念和原理上都非常相似,所以也经常被拿来对比;RocketMQ 默认采用长轮询的拉模式, 单机支持千万级别的消息堆积,可以非常好的应用在海量消息系统中。
11、Lucene
Lucene 是一套用于全文检索和搜寻的开源程序库,提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,Lucene 并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品。
12、Solr
Solr 搜索,先要能够搭建 SolrCloud。 学会使用 SolrJ 之后,还需要明白”索引”, 搜索算法,Solr 实现原理才能掌握好 Solr。
13、ElasticSearch
ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful WEB 接口。Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch 用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在 Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby 和许多其他语言中都是可用的。
14、Nginx
先要弄清楚反向代理的概念,代理本机目录和代理其他主机。 熟练安装 Nginx 和 配置 Nginx 是学习 Nginx 的重点。
15、MyCat
为了保留关系型数据的优点,MyCat 作为一个解决 MySql 不能分库分表的解决方案。学习 MyCat 先从配置 MySQL 主从备份开始,然后熟练配置 MyCat 配置文件。
16、Vue
Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合。
…
作为开发人员,我们需要跟上技术发展的步伐。每天,我们都在学习新的编程语言、框架和库。但是,技术和时尚一样,正在以光速变化。这是一场没有赢家的比赛,因为技术的发展没有终点。
五、设计模式和框架底层深化阶段
设计模式是解决特定问题的较优代码编写方案。在程序开发中时时刻刻都有着设计模式。 学习设计模式必须理解代码是为了解决什么问题。可以先把所有设计模式都学习完, 对于 GOF23 设计模式有一个基本的认识。 然后在学习成熟框架的底层代码,这样技能将框架学习更深入也能让自己的底功更扎实。 学习设计模式可以拆分成多个小块学习,不建议一次性占用大量时间。
框架学习分为两种:
一种是使用,一种是明白实现原理。 如果学习框架只是为了知道如果搭建框架的环境, 如果使用框架,框架的学习还是比较容易的。但是如果想要非常清楚的明白每个功能是如何实现的就必须清楚的知道框架底层。 学习框架底层可以帮助我们在出现异常时快速的想到是什么原因出现这个错误。 因为 我们知道自己写的代码,也知道别人写了什么,出现了错误肯定会更好的解决。
MyBatis 框架底层可以从 SqlSessionFactory 入手, 一个类一个方法的往下跟踪,一直跟踪到 SqlSession 关闭。
Spring 的底层源码要从 BeanFactory 和 ApplicationContext 入手,知道 Spring 容器作用。
SpringMVC 底层源码可以从 DispatcherServlet 入手,观察所有核心组件的运行过程。
每个框架可以自己绘制一份流程图, 这样更利于自己把整个框架的运行原理弄清晰框架底层内容可以在边学习框架边学习。
【注】框架底层的学习适合学有余力的同学。如果掌握框架的使用都比较吃力,可以先放一下。熟练使用框架以后再深入底层。
目前各个主流编程语言优缺点及应用场景分析
C
C 语言
是一门面向过程的静态语言。
优点 | 缺点 |
---|---|
代码量小,运行速度快,功能强大 | 危险性高,开发周期长 |
语法机制灵活,可以直接访问硬件 | 复用性差,维护性不高,扩展性不高,可读性不高 |
几乎现代编程语言都脱胎于 C 语言,被誉为“上帝语言” | 不具备运行时的检查机制 |
C 语言更适合广泛应用于计算机的底层开发,例如系统软件:编译器、JVM、驱动、操作系统内核、嵌入式软件、固件等。
C++
C++
是 C语言
的继承,是一门面向对象的静态语言。
优点 | 缺点 |
---|---|
运行效率高,高效安全 | 内容较多,学习难度大 |
跨平台性非常好,几乎所有处理器和操作系统都支持 C/C++ | 为了满足程序的复用性和可读性,往往程序尺寸比较大,同比其他语言代码量大 |
C++ 功能在 C语言的基础上增加面向对象的特点,代码可读性好,复用性高,运行效率高 | 相对 Java 来说,没有垃圾回收机制,可能引起内存泄漏,更依赖程序员手动释放 |
C++ 对程序员的要求较高,学好了是“万金油”。前至各种客户端,后至网络编程,硬件底层。因为C++ 是广博的,它涵盖面如此之大,让它如何能简单。
Java
Java
的热度一直让它处于编程语言榜首的位置,它是面向对象的静态语言。
优点 | 缺点 |
---|---|
市场需求旺盛,国内外大公司岗位多,容易,有大量的开源库 | 对内存的使用率高于 C++ |
Google 的 Android 是目前人气最高的移动平台,Java 是 Android 的语言基础,也衍生出诸多编程序语言 | Java 程序启动时间较长 |
一次编写,到处运行,强大的可伸缩性,多样化和功能强大的开发工具支持 | Java 学习的复杂性越来越高,由于无法定义一个好的标准开发框架,每个程序员来到新的公司时必须先了解框架,延缓了开发的时间 |
Java 更适合做 Android 开发,以及服务端后台开发。是目前大多数互联网企业后台开发首选。
Python
Python
很容易上手,作为解释型非编译的脚本语言来说,优缺点也很明显。
优点 | 缺点 |
---|---|
简单,易掌握,带来了巨大生产力 | 执行速度低于编译型语言,Python 3 和 2 不兼容 |
易于学习,广泛的工具及功能库(特别是人工智能方面) | 代码不能加密,很多时候必须开放源码 |
移植性很强(包括嵌入式产品),粘合剂语言(不同语言高效拼接,组合使用) | 线程不能利用多 CPU,GIL 即全局解释器锁,任何时刻仅有一个线程在执行 |
目前在网络爬虫、数据分析、人工智能、AI 领域等 Python 的地位还是很高的,使用者需要具备一定的专业领域知识,特别是数学方面,对开发者要求比较高。语言只是工具,算法才是核心!
Golang
简称 Go 语言
,它是一个有动态语言感觉的静态语言,写起来的效率很高。
优点 | 缺点 |
---|---|
简单,易掌握,开发速度快,效率高 | 软件包管理不支持版本,有时候升级容易导致项目不可运行,所以需要自己控制相应的版本信息 |
可直接编译成机器码,不依赖其他库,glibc 的版本有一定要求,部署就是扔一个文件上去就完成了 | 垃圾回收器(GC)不太完善,同时并发很大的情况下,处理很大的日志,GC 没有那么快,内存回收也不是很给力 |
内置 Runtime,支持垃圾回收,并行和并发效果很好 | goroutine(协程)的调度时机,具体什么时候会被执行,是不确定的,会导致逻辑出错 |
Go 的开发者包括 Unix 的创始人和 C 语言的创始人,更适合高并发的网络程序和本地程序。国外如 Google、AWS、Cloudflare、CoreOS 等,国内如阿里、字节跳动、七牛等都已经开始大规模使用 Go 语言开发其云计算相关产品。
C#
C#
是微软公司发布的一种面向对象的静态语言。
优点 | 缺点 |
---|---|
类库多,上手快,利于快速开发 | 性能上的匮乏 |
全面集成 .Net 库,不仅仅是一个语言,更像是一个极具匠心的产品 | 移动平台和硬件领域的比较乏力 |
相比 Java,有更先进的语法体系(后生的,很多语法都是其它语言的改进) | 作为微软的产品,到了非微软的操作系统上,很多Framework 里面的类库就不好使了 |
C# 目前更适合于 Windows 的桌面应用开发,在 WEB 开发也有市场。
PHP
PHP
也很容易上手,也是解释型非编译的脚本语言。
优点 | 缺点 |
---|---|
简单,易掌握,开发速度快 | 对多线程、核心异步网络的支持不太好 |
框架多,开源项目多 | 目前只支持 WEB 开发,对桌面应用和手机应用支持不好 |
有很多公共类库和插件 | 提供的数据结构和函数的接口粒度比较粗 |
目前 PHP 更适合需要快速开发的 WEB 程序,是业务开发、快速实现的利器。
一些个人建议
1、关心家人,孝敬父母;
2、常翻面试题;
3、培养个人爱好;
4、运动健身;
5、多交流,提升交际能力,拓展人脉圈;
6、尽可能全栈发展,前端、后端、测试、产品、设计、运营等都可以去学,涉猎总归是有好处的;
7、关注行业动态;
8、结交其他行业的朋友。
技术有价,健康无价!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/133002.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...