我自己总结的Java学习的系统知识点以及面试问题,已经开源,目前已经 35k+ Star。会一直完善下去,欢迎建议和指导,同时也欢迎Star: https://github.com/Snailclimb...
大一的时候,我仅仅接触过 C 语言,对 C 语言的掌握程度仅仅是可以完成老师布置的课后习题。那时候我的主要的精力都放在了参加各种课外活动,跟着一个很不错的社团尝试了很多我之前从未尝试过的事情:露营、户外烧烤、公交车演讲、环跑古城墙、徒步旅行、异地求生、圣诞节卖苹果等等。
到了大二我才接触到 HTML、CSS、JS、Java、Linux、PHP 这些名词。最开始接触 Java 的时候因为工作的需要我选择的安卓方向,我自己是在学习了大概 3 个月的安卓方向的知识后才转向 Java 后台方向的。最开始自己学习的时候,走了一些弯路,但是总体路线相对来说还是没问题的。我读的第一本 Java Web 方向的书籍是《Java Web 整合开发王者归来》,这本书我现在已经不推荐别人看了,一是内容太冗杂,二是年代比较久远导致很多东西在现在都不适用了。
很多人在学完 Java 基础之后,不知道后面该如何进行下一步地进行学习,或者不知道如何去学习。如何系统地学习 Java 一直是困扰着很多新手或者期待在 Java 方向进阶的小伙伴的一个问题。我也在知乎上回答了好几个类似的问题,我觉得既然很多人都需要这方面的指导,那我就写一篇自己对于如何系统学习 Java 后端的看法。刚好关注公众号的很多朋友都是学 Java 不太久的,希望这篇文章对学习 Java 的朋友能有一点启示作用。
由于我个人能力有限,下面的学习路线以及方法推荐一定还有很多欠缺的地方。欢迎有想法的朋友在评论区说一下自己的看法。
下面的学习路线以及方法是笔主根据个人学习经历总结改进后得出,我相信照着这条学习路线来你的学习效率会非常高。学习某个知识点的过程中如果不知道看什么书的话,可以看公众号发的这篇文章 : 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... 。
操作系统这方面我觉得掌握操作系统的基础知识和 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” 即可免费无套路获取。