我本身总结的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”便可获取!编程
《Java 核心技术卷 1/2》 和 《Head First Java》 这两本书在我看来都是入门 Java 的很不错的书籍 (《Java 核心技术卷 1/2》 知识点更全,我更推荐这本书),我却是以为《Java 编程思想》有点属于新手劝退书的意思,慎看,建议有点基础后再看。你也能够边看视频边看书学习(黑马、尚硅谷、慕课网的视频都还行)。对于 Java8 新特性的东西,我建议你基础学号以后能够看一下,暂时看不太明白也不要紧,后面抽时间再回过头来看。后端
看完以后,你能够用本身学的东西实现一个简单的 Java 程序,也能够尝试用 Java 解决一些编程问题,以此来将本身学到的东西付诸于实践。前端框架
记得多总结!打好基础!把本身重要的东西都记录下来。 API 文档放在本身能够看到的地方,以备本身能够随时查阅。为了能让本身写出更优秀的代码,《Effective Java》、《重构》 这两本书没事也能够看看。网络
学习完以后能够看一下关于 Java 基础你不得不会的 34 个问题 ,检测一下本身的掌握状况,这 34 个问题都时 Java 中比较重要的知识点,最重要的是在 Java 后端面试中的出场率很是高。数据结构
多线程这部份内容可能会比较难以理解和上手,前期能够先简单地了解一下基础,到了后面有精力和能力后再回来仔细看。推荐《Java 并发编程之美》 或者 《实战 Java 高并发程序设计》 这两本书。我目前也在重构一份我以前写的多线程学习指南,后面会更新在公众号里面。
学习完多线程以后能够经过下面这些问题检测本身是否掌握,下面这些问题的答案以及常见多线程知识点的总结 在这里:https://github.com/Snailclimb... 。
Java 多线程知识基础:
Java 多线程知识进阶:
操做系统这方面我以为掌握操做系统的基础知识和 Linux 的经常使用命令就行以及一些重要概念就好了。
我没啥操做系统方面的书籍能够推荐,我推荐一个 Github 上开源的哈工大《操做系统》课程给你们吧!地址:https://github.com/hoverwinte... 。
对于 Linux 咱们要掌握基本的使用就须要对一些经常使用命令很是熟悉好比:目录切换命令、目录操做命令、文件的操做命令、压缩或者解压文件的命令等等。
计算机网络方面的学习,我以为掌握基本的知识就好了,不须要太深究,通常面试对这方面要求也不高,毕竟不是专门作网络的。推荐 《网络是怎样链接的》 、《图解 HTTP》 这两本书来看,这两本书都属于比较有趣易懂的类型,也适合没有基础的人来看。
若是你想进入大厂的话,我推荐你在学习完 Java 基础或者多线程以后,就开始天天抽出一点时间来学习算法和数据结构。为了提升本身的编程能力,你也能够坚持刷 Leetcode 。就目前国内外的大厂面试来讲,刷 Leetcode 能够说已经成了不起不走的一条路。
对于想要入门算法和数据结构的朋友,建议看这两本书 《算法图解》 和 《大话数据结构》,这两本书虽然算不上很经典的书籍,可是比较有趣,对于刚入门算法和数据结构的朋友很是友好。《算法导论》 很是经典,可是对于刚入门的就不那么友好了。
另外,还有一本很是赞的算法书推荐给各位,这本书的名字就叫《算法》,书中的代码都是用 Java 语言编写。这本书的优势太多太多好比它的讲解基础而全面、对阅读者比较友好等等。我以为这本书惟一的缺点就是太厚了 (小声 BB,可能和做者讲解某些知识点的时候优势啰嗦有关)。除了这本书以外,《剑指 offer》 、《编程珠玑》 、《编程之美》 这三本书都被不少大佬推荐过了,对于算法面试很是有帮助。《算法之美》 这本书也很是不错,很是适合闲暇的时候看。其余算法资源,详见算法学习资源推荐:https://github.com/Snailclimb... 。
这一步主要是学习前端基础 (HTML、CSS、JavaScript),固然 BootStrap、VUE 等等前端框架你也能够了解一下。网上有不少这方面资源,我只推荐一个大部分初学这些知识都会看的网站:http://www.w3school.com.cn/ ,这个网站用来回顾知识也很不错 。推荐先把 HTML、CSS、JS 的基础知识过一遍,而后经过一个实际的前端项目来巩固。
学习 MySQL 的基本使用,基本的增删改查,SQL 命令,索引、存储过程这些都学一下吧!推荐书籍 《SQL 基础教程(第 2 版)》(入门级)、《高性能 MySQL : 第 3 版》 (进阶)、《MySQL 必知必会》。
MySQL 学习资源推荐以及重要知识点总结: https://github.com/Snailclimb...
建议学习经常使用框架以前能够提早花半天时间学习一下Maven的使用。(处处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 能够为你省不少事情)
学习 Struts2(可不用学)、Spring、SpringMVC、Hibernate、Mybatis、shiro 等框架的使用, (可选) 熟悉 Spring 原理(大厂面试必备),而后颇有必要学习一下 SpringBoot。我也遇到不少公司对于应届生直接上手SpringBoot,不过我仍是推荐你把 Spring、SpringMVC 好好学一下。
Spring 真的很重要! 必定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的做用域与生命周期、SpringMVC 工做原理详解等等知识点都是很是重要的,必定要搞懂。
推荐看文档+视频结合的方式,中途配合实战来学习。
学习 Dubbo、Zookeeper、常见的消息队列(好比ActiveMq、RabbitMQ)、Redis 、Elasticsearch 的使用(这些东西能够经过黑马视频最后一个分布式项目来学,边看视频,边本身作,查阅网上博客,效果更好)。
必定要学会拓展知识,养成自主学习的意识。黑马项目对这些知识点的介绍都比较走马观花。
能够再回来看一下多线程方面的知识,还能够利用业余时间学习一下 NIO 和 Netty ,这样简历上也能够多点东西。若是想去大厂,JVM 的一些知识也是必学的(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)推荐《深刻理解 Java 虚拟机:JVM 高级特性与最佳实践(最新第二版》和《实战Java虚拟机》,若是嫌看书麻烦的话,你也能够看我整理的文档:。
另外,如今微服务特别火,不少公司在面试也明确要求须要微服务方面的知识。若是有精力的话能够去学一下SpringCloud生态系统以及其余微服务经常使用框架。
我上面主要归纳一下每一步要学习的内容,对学习规划有一个建议。知道要学什么以后,如何去学呢?我以为学习每一个知识点能够考虑这样去入手:官网(大几率是英文,不推荐初学者看)、书籍(知识更加系统彻底,推荐)、视频(比较容易理解,推荐,特别是初学的时候)、网上博客(解决某一知识点的问题的时候能够看看)。
这里给各位一个建议,看视频的过程当中最好跟着一块儿练,要作笔记!!! 最好能够边看视频边找一本书籍看,看视频没弄懂的知识点必定要尽快解决,如何解决?首先百度/Google,经过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,必定要进行项目实战!不少人这时候就会问没有实际项目让我作怎么办?我以为能够经过下面这几种方式:
作项目不光要作,还要改进,改善。另外,若是你的老师有相关 Java 后台项目的话,你也能够主动申请参与进来。
必定要学会分配本身时间,要学的东西不少,真的不少,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。必定不要把精力都花在了学各类框架上,算法和数据结构真的很重要!
学习的过程当中有一个能够参考的文档很重要,很是有助于本身的学习,我当初弄 JavaGuide: https://github.com/Snailclimb... 的很大一部分目的就是由于这个。JavaGuide 目前已经接近40K star,关闭了 128 个 issue 和 169 个 pr。客观来讲,相比于博客,JavaGuide 里面的内容由于更多人的参与变得更加准确和完善。
若是你们想要实时关注我更新的文章以及分享的干货的话,能够关注个人公众号。
《Java面试突击》: 由本文档衍生的专为面试而生的《Java面试突击》V2.0 PDF 版本公众号后台回复 "Java面试突击" 便可免费领取!
Java工程师必备学习资源: 一些Java工程师经常使用学习资源公众号后台回复关键字 “1” 便可免费无套路获取。