是时候拿出我的Github70k点赞的Java学习路线指南了。

先说一个初学者很容易犯的错误:上来就通过项目学习。

很多初学者上来就像通过做项目学习,特别是在公司,我觉得这个是不太可取的。 如果的 Java基础或者 Spring Boot 基础不好的话,建议自己先提前学习一下之后再开始看视频或者通过其他方式做项目。 还有点事,我不知道为什么大家都会说边跟着项目边学习做的话效果最好,我觉得这个要加一个前提是你对这门技术有基本的了解或者说你对编程有了一定的了解。

关于如何学习且听我从一个电商系统网站的创建来说起。假如我们要创建一个基于Java的分布式/微服务电商系统的话,我们可以按照下面的学习路线来做:

首选第一步我们肯定是要从 Java 基础来学习的(如果你没有计算机基础知识的话推荐看一下《计算机导论》这类入门书籍)。

step 1:Java 基础

《Java 核心技术卷 1/2》 和 《Head First Java》 这两本书在我看来都是入门 Java 的很不错的书籍 (《Java 核心技术卷 1/2》 知识点更全,我更推荐这本书),我倒是觉得 《Java 编程思想》 有点属于新手劝退书的意思,慎看,建议有点基础后再看。你也可以边看视频边看书学习(黑马、尚硅谷、慕课网的视频都还行)。对于 Java8 新特性的东西,我建议你基础学好之后可以看一下,暂时看不太明白也没关系,后面抽时间再回过头来看。

看完之后,你可以用自己学的东西实现一个简单的 Java 程序,也可以尝试用 Java 解决一些编程问题,以此来将自己学到的东西付诸于实践。

不太建议学习 Java基础的时候通过做游戏来巩固。为什么培训班喜欢通过这种方式呢?说白点就是为了找到你的G点(不好意思开车了哈)。新手学习完Java基础后做游戏一般是不太现实的,还不如找一些简单的程序问题解决一下比如简单的算法题。

记得多总结!打好基础!把自己重要的东西都记录下来。 API 文档放在自己可以看到的地方,以备自己可以随时查阅。为了能让自己写出更优秀的代码,《Effective Java》、《重构》 这两本书没事也可以看看。

另外,学习完之后可以看一下下面这几篇文章,检查一下自己的学习情况。这几篇文章不是我吹,可能是全网最具价值的 Java 基础知识总结,毕竟是在我的 JavaGuide开源的,经过了各路大佬以及我的不断完善。

我们的网站需要运行在“操作系统”之上(一般是部署在Linux系统),并且我们与网站的每次交互都需要经过“网络”,需要经历三次握手和四次挥手才能简历连接,需要HTTP才能发出请求已经拿到网站后台的相应。所以第二步,我推荐可以适当花时间看一下 操作系统与计算机网络 方面的知识。

step 3(可选):数据结构与算法

如果你想进入大厂的话,我推荐你在学习完 Java 基础之后,就开始每天抽出一点时间来学习算法和数据结构。为了提高自己的编程能力,你也可以坚持刷 Leetcode。就目前国内外的大厂面试来说,刷 Leetcode 可以说已经成了不得不走的一条路。

对于想要入门算法和数据结构的朋友,建议看这两本书 《算法图解》 和 《大话数据结构》,这两本书虽然算不上很经典的书籍,但是比较有趣,对于刚入门算法和数据结构的朋友非常友好。《算法导论》 非常经典,但是对于刚入门的就不那么友好了。

另外,还有一本非常赞的算法书推荐给各位,这本书的名字就叫 《算法》,书中的代码都是用 Java 语言编写。这本书的优点太多太多比如它的讲解基础而全面、对阅读者比较友好等等。我觉得这本书唯一的缺点就是太厚了 (小声 BB,可能和作者讲解某些知识点的时候有点啰嗦有关)。除了这本书之外,《剑指 offer》 、《编程珠玑》 、《编程之美》 这三本书都被很多大佬推荐过了,对于算法面试非常有帮助。《算法之美》 这本书也非常不错,非常适合闲暇的时候看。

我们网站的页面搭建需要前端的知识,我们前端也后端的交互也需要前端的知识。所以第四步,我推荐你可以了解一下前端知识,不过不需要学的太精通。自己对与前端知识有了基本的了解之后通过

step 4:前端知识

这一步主要是学习前端基础 (HTML、CSS、JavaScript),当然 BootStrap、Layui 等等比较简单的前端框架你也可以了解一下。网上有很多这方面资源,我只推荐一个大部分初学这些知识都会看的网站:http://www.w3school.com.cn/ ,这个网站用来回顾知识也很不错 。推荐先把 HTML、CSS、JS 的基础知识过一遍,然后通过一个实际的前端项目来巩固。

另外,没记错的话 Spring Boot官方推荐的是模板引擎是 thymeleaf ,这东西和HTML很像,了解了基本语法之后很容易上手。 结合layui,booystrap这些框架的话也能做成比较美观的页面。开发一些简单的页面比如一个后端项目就是为了做个简单的前端页面做某些操作的话直接用thymeleaf就好。

现在都是前后端分离,就目前来看大部分项目都优先选择 React、Angular、Vue 这些厉害的框架来开发,这些框架的上手要求要高一些。如果你想往全栈方向发展的话(笔主目前的方向,我用 React 在公司做过两个小型项目),建议先把 JS 基础打好,然后再选择 React、Angular、Vue 其中的一个来认真学习一下。国内使用 Vue 比较多一点,国外一般用的是 React 和 Angular。

如何和后端交互呢?一般使用在 React、Vue这些框架的时候使用Axios比较多。

我们网站的数据比如用户信息、订单信息都需要存储,所以,下一步我推荐你学习 MySQl这个被广泛运用于各大网站的数据库。不光要学会如何写 sql 语句,更好的是还要搞清诸如索引这类重要的概念。

step 5:MySQL

学习 MySQL 的基本使用,基本的增删改查,SQL 命令,索引、存储过程这些都学一下吧!推荐书籍 《SQL 基础教程(第 2 版)》(入门级)、《高性能 MySQL : 第 3 版》(进阶)、《MySQL 必知必会》。

正式开发之前我们还要一些准备工具比如熟悉你的ide,熟悉Maven来帮助我们引入相关jar依赖,使用 Docker来帮助我们安装常用的软件。

step 6:常用工具

非常重要!非常重要!特别是 Git和 Docker。

  1. IDEA:熟悉基本操作以及常用快捷。
  2. Maven :建议学习常用框架之前可以提前花半天时间学习一下Maven的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。
  3. Git :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。(Git 入门)
  4. Docker :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。(Docker 入门)

利用常用框架可以极大程度简化我们的开发工作。学习完了常用工具之后,我们就可以开始常用框架的学习啦!

step 7:常用框架

学习 Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis、shiro 等框架的使用, (可选) 熟悉 Spring 原理(大厂面试必备),然后很有必要学习一下 SpringBoot ,学好 SpringBoot 真的很重要。很多公司对于应届生都是直接上手 SpringBoot,不过如果时间允许的话,我觉得可以简单把 Spring、SpringMVC 过一遍,这个完全不影响你学习最重要的 SpringBoot 。

关于 SpringBoot ,推荐看一下笔主开源的 Spring Boot 教程 (SpringBoot 核心知识点总结。 基于 Spring Boot 2.19+)。

Spring 真的很重要! 一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。

学习玩了上面这些东西之后,我们就可以开发一个简单的网站了。但是,我们的网站上线之后,访问量逐渐变大,我们原有的实现没办法支撑了怎么办?我们要考虑用上多线程以及分布式了!

step 8:多线程

多线程这部分内容可能会比较难以理解和上手,前期可以先简单地了解一下基础,到了后面有精力和能力后再回来仔细看。推荐 《Java 并发编程之美》 或者 《实战 Java 高并发程序设计》 这两本书。

学习完多线程之后可以通过下面这些问题检测自己是否掌握。

Java 多线程知识基础:

  • 什么是线程和进程?
  • 请简要描述线程与进程的关系,区别及优缺点?
  • 说说并发与并行的区别?
  • 为什么要使用多线程呢?
  • 使用多线程可能带来什么问题?
  • 说说线程的生命周期和状态?
  • 什么是上下文切换?
  • 什么是线程死锁?如何避免死锁?
  • 说说 sleep() 方法和 wait() 方法区别和共同点?
  • 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?

Java 多线程知识进阶:

  • synchronized 关键字:① 说一说自己对于 synchronized 关键字的了解;② 说说自己是怎么使用
    synchronized 关键字,在项目中用到了吗;③ 讲一下 synchronized 关键字的底层原理;④ 说说 JDK1.6 之后的
    synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗;⑤ 谈谈 synchronized 和
    ReentrantLock 的区别。

  • volatile 关键字: ① 讲一下 Java 内存模型;② 说说 synchronized 关键字和 volatile 关键字的区别。

  • ThreadLocal:① 简介;② 原理;③ 内存泄露问题。

  • 线程池:① 为什么要用线程池?;② 实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方法和 submit() 方法的区别是什么呢?;④ 如何创建线程池。

  • Atomic 原子类: ① 介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的使用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。

  • AQS :① 简介;② 原理;③ AQS 常用组件。

step 8:分布式

  1. 学习 Dubbo、Zookeeper来实现简单的分布式服务
  2. 学习 Redis 来提高访问速度,减少对 MySQL数据库的依赖;
  3. 学习 Elasticsearch 的使用,来为我们的网站增加搜索功能
  4. 学习常见的消息队列(比如RabbitMQ、Kafka)来解耦我们的服务(ActiveMq不要学了,已经淘汰);

到了这一步你应该是有基础的一个 Java程序员了,我推荐你可以通过一个分布式项目来学习。觉得应该是掌握这些知识点比较好的一种方式了,另外,推荐边看视频边自己做,遇到不懂的知识点要及时查阅网上博客和相关书籍,这样学习效果更好。

一定要学会拓展知识,养成自主学习的意识。 黑马项目对这些知识点的介绍都比较蜻蜓点水。

继续深入学习的话,我们要了解Netty、JVM这些东西。

step 9:深入学习

可以再回来看一下多线程方面的知识,还可以利用业余时间学习一下 NIO 和 Netty ,这样简历上也可以多点东西。如果想去大厂,JVM 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)推荐《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战 Java 虚拟机》,如果嫌看书麻烦的话,你也可以看我整理的文档。

另外,现在微服务特别火,很多公司在面试也明确要求需要微服务方面的知识。如果有精力的话可以去学一下 SpringCloud 生态系统微服务方面的东西。

微服务的概念庞大,技术种类也很多,但是目前大型互联网公司广泛采用的,实话实话这些东西我不在行,自己没有真实做过微服务的项目。不过下面是我自己总结的一些关于微服务比价重要的知识,选学。

step 10:微服务

这部分太多了,选择性学习。

相关技术:

  • 网关 :kong,soul;
  • 分布式调用链: SkyWalking、Zipkin
  • 日志系统: Kibana

Spring Cloud 相关:

  • Eureka:服务注册与发现;
  • Ribbon:负载均衡;
  • Hytrix :熔断;
  • Zuul :网关;
  • Spring Cloud Config:配置中心;

Spring Cloud Alibaba也是很值得学习的:

  • Sentinel :A lightweight powerful flow control component enabling
    reliability and monitoring for microservices. (轻量级的流量控制、熔断降级 Java 库)。

  • dubbo :Apache Dubbo 是一个基于 Java 的高性能开源 RPC 框架。

  • nacos :Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 可以作为 Dubbo 的注册中心来使用。

  • seata : Seata 是一种易于使用,高性能,基于 Java 的开源分布式事务解决方案。

  • RocketMQ :阿里巴巴开源的一款高性能、高吞吐量的分布式消息中间件。

最后,如果你现在也在学习Java,了解Java,渴望成为一名合格的Java开发工程师,在整个Java入门的学习过程当中,有遇见任何关于学习方法,学习路线,学习效率等方面的问题,都可以随时来一起交流探讨,这是我的:Java新手学习群 这里面聚集了很多正在学习Java技术的初学者, 非常活跃,缺乏基础入门的视频教程也可以直接来找我,我这里有完整的Java基础入门精讲视频教程。

刚开始学Java,很懵逼,不知道怎么学,能不能给点建议?相关推荐

  1. 没学历学java很难找工作吗

    说实话不是学Java很难找工作,是以后找工作基本都会看学历,学历这个东西说重要也重要,因为它决定了你的简历能不能呈现到面试官面前,如果你的学历不够的话很有可能在第一轮简历就被刷下去了,它根本就不会呈现 ...

  2. 为什么都建议学java而不是python-现在学Python还是Java好呢?

    我们知道不管是Java还是Python都是当今很火的编程语言,所以对于刚开始学习编程的同学来说选择哪一门语言来学习就成了难题.因为我本身是一名程序员,所以如果我主观的给你建议显然是有偏见的,我会建议你 ...

  3. 昆山到哪里学计算机编程,昆山学Java编程要到哪里学

    很多工作了一两年的朋友,在工作中有很多不开心,不如意,让你忍受不了的就是工资也还很低, 工作了一两年的沉淀期,慢慢的有了存款,就想学一个让自己不这么狼狈的职业,互联网发展的之快, 让很多都了解到了编程 ...

  4. 是学Java好呢?还是学C++更有前途?

    目录 1.C++和Java在编程排行榜中的排名 2.Java语言的使用场景 3.C++语言的应用场合 4.最后 最近有不少初学编程的朋友问:他们比较倾向于Java和C++作为他们首选学习语言,但是学J ...

  5. 学Java什么学历_想学java,但是学历不是很高能学吗,

    活到老学到老,人最怕的是不学习. 人们往往在准备去学一个东西的时候,会有一些担心,比如难不难,能不能学会,或者就是学历不高能不能学会等等这些问题. 如果学java的话,学历高不高是其次.Java大家都 ...

  6. 没有基础可以学java吗?零基础学java

    很多人都知道Java作为市场第一大语言,其发展前景也是很可观的.无论IT市场需求如何变动,其Java的霸主地位依然未曾动摇,这足矣见证Java对于IT行业的作用以及价值何其之大.但是有可观的一面必然会 ...

  7. 学java web_你为什么要学Java Web

    在开始这一篇章时,不禁停下写技术的敲着键盘的双手,听着跳跃的音乐,深思,为何 我们要学java  web,我们为什么要学技术,这些繁琐的代码,层出不穷的新东西,安卓,UNity3d,spring,gi ...

  8. 学java需要什么基础_学java需要什么基础?

    展开全部 学java需要数据结32313133353236313431303231363533e58685e5aeb931333431373936构基础.要学好一门编程语言,数据结构是必不可少的知识, ...

  9. 学java怎么做兼职?学Java什么程度才能找兼职?

    生活中很多的程序都是用Java编写而成的,正因如此才有这么多学习Java的同学,有些同学表示我感觉自己学的差不多了,想要找一些兼职一方面锻炼自己,一方面还能赚点外快,那么学Java的到底应该怎么做兼职 ...

  10. 学java的就业方向_学Java以后的就业方向

    原标题:学Java以后的就业方向 Java作为市场上广泛流行的编程语言,前景十分看好,这就吸引了许多有至于从事IT行业的青年人追逐.大家关注的重点无非是,学习java之后,自己的就业方向是怎么样的?今 ...

最新文章

  1. (转).net webconfig使用IConfigurationSectionHandler自定section
  2. 2012年技术图书大盘点
  3. 报表引擎API开发入门— EJB程序数据源
  4. 成功解决ModuleNotFoundError: No module named ‘torch._C‘
  5. 多组测试数据(求和)IV
  6. golang变量的数据类型:整型及其使用细节
  7. 解决iPhone网络软件在睡眠情况断线问题
  8. 海域动态监视监测管理系统_监视和管理备份系统
  9. react生命周期函数_如何优雅的消灭掉react生命周期函数
  10. 使用 Flex 开发 Web 服务客户端
  11. Servlet Session 跟踪
  12. 学了这么多年的人工智能居然还不了解它?
  13. 翻译:where在Swift中的用法
  14. ant design table列表 合并列单元格
  15. “华为杯”山东理工大学第十一届ACM程序设计竞赛(正式赛)网络同步赛
  16. 【延展Extension的使用场景 Objective-C语言】
  17. WebGoat8 M17 Password Reset 密码重置 答案、思路、题解
  18. 三子棋 C语言【详解】
  19. tf.estimator.train_and_evaluate 详解
  20. canal同步mysql数据到rocketmq集群

热门文章

  1. 哈工大计算机技术学制,哈尔滨工业大学研究生学制与学习年限
  2. 百度地图 由起点和终点 获取中间路线的坐标集
  3. Java Thread 和 Park
  4. 一次开发中并发删除插入死锁分析记录
  5. 三星打印机ML-2165W实现wifi连接打印
  6. JS中将对象转化为数组
  7. jsvascript === 和==的区别
  8. 计算机二级真题期刊论文模板,杂志文章格式模板.doc
  9. 使用 eMMC 闪存设备的磨损估计
  10. 一个barcode 多个 sku号_互联网洪流之下:美的已悄悄变成一个科技集团|36氪专访...