初学者福音!多是最适合你的Java学习路线和方法推荐。

我本身总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 35k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclimb...

前言

大一的时候,我仅仅接触过 C 语言,对 C 语言的掌握程度仅仅是能够完成老师布置的课后习题。那时候个人主要的精力都放在了参加各类课外活动,跟着一个很不错的社团尝试了不少我以前从何尝试过的事情:露营、户外烧烤、公交车演讲、环跑古城墙、徒步旅行、异地求生、圣诞节卖苹果等等。前端

到了大二我才接触到 HTML、CSS、JS、Java、Linux、PHP 这些名词。最开始接触 Java 的时候由于工做的须要我选择的安卓方向,我本身是在学习了大概 3 个月的安卓方向的知识后才转向 Java 后台方向的。最开始本身学习的时候,走了一些弯路,可是整体路线相对来讲仍是没问题的。我读的第一本 Java Web 方向的书籍是《Java Web 整合开发王者归来》,这本书我如今已经不推荐别人看了,一是内容太冗杂,二是年代比较久远致使不少东西在如今都不适用了。git

不少人在学完 Java 基础以后,不知道后面该如何进行下一步地进行学习,或者不知道如何去学习。如何系统地学习 Java 一直是困扰着不少新手或者期待在 Java 方向进阶的小伙伴的一个问题。我也在知乎上回答了好几个相似的问题,我以为既然不少人都须要这方面的指导,那我就写一篇本身对于如何系统学习 Java 后端的见解。恰好关注公众号的不少朋友都是学 Java 不过久的,但愿这篇文章对学习 Java 的朋友能有一点启示做用。github

因为我我的能力有限,下面的学习路线以及方法推荐必定还有不少欠缺的地方。欢迎有想法的朋友在评论区说一下本身的见解。面试

学习路线以及方法推荐

下面的学习路线以及方法是笔主根据我的学习经历总结改进后得出,我相信照着这条学习路线来你的学习效率会很是高。 学习某个知识点的过程当中若是不知道看什么书的话,能够看公众号发的这篇文章 :Java 学习必备书籍推荐终极版!。建议使用 Intellij IDEA 进行编码,能够单独抽时间学习 Intellij IDEA 的使用。算法

下面提到的一些视频,公众号“JavaGuide”后台回复关键“1”便可获取!编程

step 1:Java 基础

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

看完以后,你能够用本身学的东西实现一个简单的 Java 程序,也能够尝试用 Java 解决一些编程问题,以此来将本身学到的东西付诸于实践。前端框架

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

学习完以后能够看一下关于 Java 基础你不得不会的 34 个问题 ,检测一下本身的掌握状况,这 34 个问题都时 Java 中比较重要的知识点,最重要的是在 Java 后端面试中的出场率很是高。数据结构

step 2:多线程的简单使用

多线程这部份内容可能会比较难以理解和上手,前期能够先简单地了解一下基础,到了后面有精力和能力后再回来仔细看。推荐《Java 并发编程之美》 或者 《实战 Java 高并发程序设计》 这两本书。我目前也在重构一份我以前写的多线程学习指南,后面会更新在公众号里面。

学习完多线程以后能够经过下面这些问题检测本身是否掌握,下面这些问题的答案以及常见多线程知识点的总结 在这里:https://github.com/Snailclimb...

Java 多线程知识基础:

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

Java 多线程知识进阶:

  1. synchronized 关键字:①说一说本身对于 synchronized 关键字的了解;②说说本身是怎么使用 synchronized 关键字,在项目中用到了吗;③讲一下 synchronized 关键字的底层原理;④说说 JDK1.6 以后的 synchronized 关键字底层作了哪些优化,能够详细介绍一下这些优化吗;⑤谈谈 synchronized 和 ReentrantLock 的区别。
  2. volatile 关键字: ①讲一下 Java 内存模型;②说说 synchronized 关键字和 volatile 关键字的区别。
  3. ThreadLocal:①简介;② 原理;③ 内存泄露问题。
  4. 线程池:①为何要用线程池?;②实现 Runnable 接口和 Callable 接口的区别;③ 执行 execute() 方法和 submit() 方法的区别是什么呢?;④ 如何建立线程池。
  5. Atomic 原子类: ①介绍一下 Atomic 原子类;② JUC 包中的原子类是哪 4 类?;③ 讲讲 AtomicInteger 的使用;④ 能不能给我简单介绍一下 AtomicInteger 类的原理。
  6. AQS :①简介;②原理;③ AQS 经常使用组件。

step 3(可选):操做系统与计算机网络

操做系统这方面我以为掌握操做系统的基础知识和 Linux 的经常使用命令就行以及一些重要概念就好了。

我没啥操做系统方面的书籍能够推荐,我推荐一个 Github 上开源的哈工大《操做系统》课程给你们吧!地址:https://github.com/hoverwinte...

对于 Linux 咱们要掌握基本的使用就须要对一些经常使用命令很是熟悉好比:目录切换命令、目录操做命令、文件的操做命令、压缩或者解压文件的命令等等。

计算机网络方面的学习,我以为掌握基本的知识就好了,不须要太深究,通常面试对这方面要求也不高,毕竟不是专门作网络的。推荐 《网络是怎样链接的》《图解 HTTP》 这两本书来看,这两本书都属于比较有趣易懂的类型,也适合没有基础的人来看。

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

若是你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程以后,就开始天天抽出一点时间来学习算法和数据结构。为了提升本身的编程能力,你也能够坚持刷 Leetcode 。就目前国内外的大厂面试来讲,刷 Leetcode 能够说已经成了不起不走的一条路。

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

另外,还有一本很是赞的算法书推荐给各位,这本书的名字就叫《算法》,书中的代码都是用 Java 语言编写。这本书的优势太多太多好比它的讲解基础而全面、对阅读者比较友好等等。我以为这本书惟一的缺点就是太厚了 (小声 BB,可能和做者讲解某些知识点的时候优势啰嗦有关)。除了这本书以外,《剑指 offer》《编程珠玑》《编程之美》 这三本书都被不少大佬推荐过了,对于算法面试很是有帮助。《算法之美》 这本书也很是不错,很是适合闲暇的时候看。其余算法资源,详见算法学习资源推荐:https://github.com/Snailclimb...

《算法》

step 5:前端知识

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

step 5:MySQL

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

MySQL 学习资源推荐以及重要知识点总结: https://github.com/Snailclimb...

step 6:Maven

建议学习经常使用框架以前能够提早花半天时间学习一下Maven的使用。(处处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 能够为你省不少事情)

step 7:经常使用框架

学习 Struts2(可不用学)、SpringSpringMVCHibernateMybatisshiro 等框架的使用, (可选) 熟悉 Spring 原理(大厂面试必备),而后颇有必要学习一下 SpringBoot。我也遇到不少公司对于应届生直接上手SpringBoot,不过我仍是推荐你把 SpringSpringMVC 好好学一下。

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

推荐看文档+视频结合的方式,中途配合实战来学习。

step 8:高性能网站架构

学习 Dubbo、Zookeeper、常见的消息队列(好比ActiveMq、RabbitMQ)、RedisElasticsearch 的使用(这些东西能够经过黑马视频最后一个分布式项目来学,边看视频,边本身作,查阅网上博客,效果更好)。

必定要学会拓展知识,养成自主学习的意识。黑马项目对这些知识点的介绍都比较走马观花。

step 9:其余

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

另外,如今微服务特别火,不少公司在面试也明确要求须要微服务方面的知识。若是有精力的话能够去学一下SpringCloud生态系统以及其余微服务经常使用框架。

总结

我上面主要归纳一下每一步要学习的内容,对学习规划有一个建议。知道要学什么以后,如何去学呢?我以为学习每一个知识点能够考虑这样去入手:官网(大几率是英文,不推荐初学者看)书籍(知识更加系统彻底,推荐)视频(比较容易理解,推荐,特别是初学的时候)网上博客(解决某一知识点的问题的时候能够看看)

这里给各位一个建议,看视频的过程当中最好跟着一块儿练,要作笔记!!! 最好能够边看视频边找一本书籍看,看视频没弄懂的知识点必定要尽快解决,如何解决?首先百度/Google,经过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,必定要进行项目实战!不少人这时候就会问没有实际项目让我作怎么办?我以为能够经过下面这几种方式:

  1. 在网上找一个符合本身能力与找工做需求的实战项目视频或者博客跟着老师一块儿作。作的过程当中,你要有本身的思考,不要浅尝辄止,对于不少知识点,别人的讲解可能只是知足项目就够了,你本身想多点知识的话,对于重要的知识点就要本身学会去往深出学。
  2. Github 或者码云上面有不少实战类别项目,你能够选择一个来研究,为了让本身对这个项目更加理解,在理解原有代码的基础上,你能够对原有项目进行改进或者增长功能。
  3. 本身动手去作一个本身想完成的东西,遇到不会的东西就临时去学,现学现卖。

作项目不光要作,还要改进,改善。另外,若是你的老师有相关 Java 后台项目的话,你也能够主动申请参与进来。

必定要学会分配本身时间,要学的东西不少,真的不少,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。必定不要把精力都花在了学各类框架上,算法和数据结构真的很重要!

学习的过程当中有一个能够参考的文档很重要,很是有助于本身的学习,我当初弄 JavaGuide: https://github.com/Snailclimb... 的很大一部分目的就是由于这个。JavaGuide 目前已经接近40K star,关闭了 128 个 issue 和 169 个 pr。客观来讲,相比于博客,JavaGuide 里面的内容由于更多人的参与变得更加准确和完善。

公众号

若是你们想要实时关注我更新的文章以及分享的干货的话,能够关注个人公众号。

《Java面试突击》: 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本公众号后台回复 "Java面试突击" 便可免费领取!

Java工程师必备学习资源: 一些Java工程师经常使用学习资源公众号后台回复关键字 “1” 便可免费无套路获取。

个人公众号

相关文章
相关标签/搜索