点击蓝色“程序员书单”关注我哟
记得加个“星标”,才不会错过好内容!
之前写过很多次关于Java学习指南、Java技术路线图的文章。但是总还是有小伙伴来问我,Java怎么学,项目怎么做,资源怎么找,真是让人头秃。
于是这次黄小斜决定来一波狠的,把所有这些内容都整理起来,做成一份非常硬核的Java学习指南+路线图,一篇文章搞定Java学习,360度无死角(可能)如果你们喜欢这类硬核的文章,以后我也会继续这么硬核下去的!不要忘了分享噢。
以下就是本文的主要内容,万字长文,你可悠着点看,拒绝到收藏夹吃灰!
一、Java学习路线图
1 计算机基础
2 Java编程
Java基础
设计模式
Java Web技术
Java并发技术
Java网络编程和服务器
Jvm基础与调优
3 Linux
4 数据相关
关系数据库Mysql
缓存
搜索引擎
大数据
5 算法和数据结构
6 分布式
大型网站架构
分布式理论
一致性问题
分布式session
分布式缓存
分布式数据库
负载均衡
消息队列
服务化
虚拟化
二、硬核Java学习资源清单
Java入门学习资源
Java后端技术专栏
Java工程师书单
技术社区推荐
技术大牛推荐
三、硬核Java实战项目清单
标星10w+ 超级硬核的技术面试指南
硬核Java工程师面试指南
硬核开源,标星30k的硬核电商实战项目
技术博主【纯洁的微笑】springboot和springcloud入门demo
牛客网中级项目课和高级项目课
B站收藏 7.1w+!GitHub 标星 5.1k+!这门神课拯救了我薄弱的计算机基础
一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文
一、Java学习路线图
学习路线图往往是学习一样技术的入门指南。网上搜到的Java学习路线图也是一抓一大把。
今天我只选一张图,仅此一图,足以包罗Java后端技术的知识点。所谓不求最好,但求最全,学习Java后端的同学完全可以参考这张图进行学习路线安排。
当然,有一些知识点是可选的,并不是说上面有的你都要会啦。我在复习秋招的过程中就是基于此图进行复习的,感觉效果还是不错的。
闲言少叙,我们还是看看这张图上都包含哪些有价值的信息吧。再次说明,本文只对路线图做一个简单地解读,仅供参考。大家可以根据自身情况来制定合理的学习计划,相信也会大有裨益。
这部分内容是计算机相关专业同学的课程,但是非科班的小伙伴(譬如在下)就需要花时间恶补了。特别是计算机网络,操作系统,数据结构这三门课程。
至于编译原理,个人大概懂一点就行了,我也只看过简单的概念和状态机相关的内容,并不是特别重要。
这里的Java编程部分包含了很多内容。我们可以分别看看,大概归纳一下就是这几个部分。
这里的Java基础包括基本语法,集合类框架,以及一些高级特性,比如反射,注解等等。
Java基础的知识点非常多,所以要真正搞懂也没有那么简单,另外,随着时间推移,一些新特性也需要得到我们的重视,比如时下流行的JDK8。
我一直觉得设计模式可以和Java基础一块学,所以我也把它放在这里。当然,一些真正使用到设计模式的地方,譬如JDK的集合类,IO流等等,也需要你足够重视。
Java Web技术包括J2EE,以及web框架,乃至一系列常用的组件。
1 J2EE主要包括的就是servlet,jsp这些比较复古的web开发组件了。虽然现在直接用它们的情况比较少,但是我们还是需要花一些时间去掌握它们的。
2 web框架常用的就是Spring了,相应的,hibernate和mybatis也需要了解一下。
3 同时,JavaWeb开发时的常用类库,比如jnuit单元测试,log4j日志工具,以及构建工具maven,都属于我们要掌握的范畴。
4 最后,要注意的是,Web相关的一些基本知识,比如HTTP协议,网络安全基础,也是我们要考虑的部分。
Java的并发技术泛指Java的多线程技术,以及JUC包里的并发类,比如线程池,并发工具类,阻塞队列等等。
Java并发技术完全可以独立出来学习,是Java进阶知识的一大重点。
这一块内容是Java中比较复杂但也很重要的一块内容。比如BIO,NIO,AIO的一些使用和原理,以及tomcat这类web服务器,甚至是netty这种网络编程框架,都是可以去了解和学习的内容。
JVM是提供Java程序运行的一个进程,学习JVM知识,也是我们的必经之路。除了看懂《深入理解jvm虚拟机》以外,我们还要学习的内容就是JVM调优,使用合适的工具诊断问题,最后解决问题。
这部分内容在面试中呈现的不仅仅是GC,内存分区,以及类加载器,也包括了我所说的JVM调优问题。
作为后台同学,常年被面试官问linux相关的问题,所以觉得学好linux还是蛮重要的,除了基本命令以外,最好还能了解一些shell脚本,甚至是内核相关的知识,这方面是我的一个弱项。
在这个路线图里,数据部分囊括了非常多的内容,我们可以来看看都有哪些是我们需要掌握的。
这个不必多说,人手都要会,不管是基础的crud,索引,抑或是进阶的存储引擎,分布式方案等,我们都需要对应掌握。
如Redis,memcache一类的缓存,作为后端开发者的我们也需要对应掌握,当然,它们的高级特性,以及分布式方案,也是必备的知识点。
基于Lucene的solr,elasticsearch这类搜索引擎,并不是后端必备的内容,不过学一学也没有坏处啦。
海量数据处理的场景越来越多,大数据技术如hadoop,storm等也越来越火,但是大数据应用一般会由专业的大数据工程师来做,所以我们学一些基本内容也就足够了。
算法一直是校招同学面前的一座大山,作为后端同学来讲,除了基本的数据结构算法以外,也要会一些高级的算法,譬如dp,搜索,贪心等等。
另外,通过LeetCode等题库来刷题的方式来巩固算法也是公认的好办法了。
最后一个部分,也是内容最多,覆盖面最广泛的部分了。分布式相关的技术实在太多了,我们这里也会做一下简单的归纳。
先了解大型网站架构的发展会对分布式的学习有更好的理解,毕竟架构的发展也对应着分布式技术的发展。
这部分内容包括分布式的发展演化,base理论和cap理论等等,学习分布式技术之前,最好能对这部分概念有一定了解。
强一致性的解决方案:事务和锁,弱一致性的方案:消息队列。
一个常见的分布式解决方案,很实用。
和上面说的缓存一样,只不过这里侧重缓存的分布式方案
这里指的数据库的分布式方案,也包括hbase这种分布式数据库。
负载均衡也是一个值得探讨的话题,一般我们讨论的是七层和四层负载均衡。
消息队列是一个比较复杂的分布式组件,我们可以了解常用消息队列比如amq,kafka等的实现。
服务化的核心包括rpc,服务注册中心等等。分布式服务相关技术也是后端同学必须掌握的内容。
虚拟化同样不是后端同学必须掌握的内容,只不过现在越来越多的服务部署方式使用的是docker和云服务的方式。所以了解一下也没有什么不好的。
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难。基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单。
这里主要推荐的是几个技术学习网站,基本上都是视频学习资源。
1 慕课网
慕课网是做得比较好的程序员学习网站了。里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的。
2 极客学院
极客学院是我最早用于视频学习的网站,当时主要是听室友推荐,看了一些之后发现确实还不错。不过比起慕课网,极客学院的内容可能少一点。
3 w3cSchool
这个想必不说大家也知道,最适合入门的学习网站之一,有很多的学习资源,但是也只适合入门,你可以在一天内看完一门语言或技术,大概了解怎么使用。
4 中国MOOC
以前我以为这个和慕课网一样,后来发现这个网站主要是做教育资源的,更像是在学校里上课,里面的很多资源都是高校老师提供的,所以想学习一些计算机基础理论知识可以看看这个网站。
5 网易云课堂&腾讯课堂
这两个网站大家也都知道,只不过他们不是专门做IT学习资源的,相对来说这方面的学习资源也会比较少一点。
对于校园招聘来说,最重要的还是基础知识。下面的博客专栏出自我的GitHub:
https://github.com/h2pl/Java-Tutorial
这些专栏中有一些文章是我自己原创的,也有一些文章是转载自技术大牛的,基本都是是我在学习Java后端的两年时间内陆续完成的。
总的来说算是比较全面了,做后端方向的同学可以参考一下。
深入浅出Java核心技术
https://github.com/h2pl/Java-Tutorial
本专栏主要介绍Java基础,并且会结合实现原理以及具体实例来讲解。同时还介绍了Java集合类,设计模式以及Java8的相关知识。
深入理解JVM虚拟机
https://github.com/h2pl/Java-Tutorial
带你走进JVM的世界,整合高质量文章以阐述虚拟机的原理及相关技术,让开发者更好地了解Java的底层运行原理以及相应的调优方法。
Java并发指南
https://github.com/h2pl/Java-Tutorial
本专栏主要介绍Java并发编程相关的基本原理以及进阶知识。主要包括Java多线程基础,Java并发编程基本原理以及JUC并发包的使用和源码解析。
Java网络编程与NIO
https://github.com/h2pl/Java-Tutorial
Java网络编程一直是很重要的一部分内容,其中涉及了socket的使用,以及Java网络编程的IO模型,譬如BIO,NIO,AIO,当然也包括Linux的网络编程模型。
了解这部分知识对于理解网络编程有很多帮助。另外还补充了两个涉及NIO的重要技术:Tomcat和Netty。
JavaWeb技术世界
https://github.com/h2pl/Java-Tutorial
从这里开始打开去往JavaWeb世界的大门。什么是J2EE,什么是JavaWeb,以及这个生态中常用的一些技术:Maven,Spring,Tomcat,Junit,log4j等等。
我们不仅要了解怎么使用它们,更要去了解它们为什么出现,其中一些技术的实现原理是什么。
Spring与SpringMVC源码解析
https://github.com/h2pl/Java-Tutorial
本专栏主要讲解Spring和SpringMVC的实现原理。Spring是最流行的Java框架之一。
本专栏文章主要包括IOC的实现原理分析,AOP的实现原理分析,事务的实现源码分析等,当然也有SpringMVC的源码解析文章。
重新学习MySQL与Redis
https://github.com/h2pl/Java-Tutorial
本专栏介绍MySQL的基本知识,比如基本架构,存储引擎,索引原理,主从复制,事务等内容。当然也会讲解一些和sql语句优化有关的知识。
同时本专栏里也介绍了Redis的基本实现原理,包括数据结构,主从复制,集群方案,分布式锁等实现。
分布式系统理论与实践
https://github.com/h2pl/Java-Tutorial
本专栏介绍分布式的基本理论和相关技术,比如CAP和BASE理论,一致性算法,以及ZooKeeper这类的分布式协调服务。
在分布式实践方面,我们会讲到负载均衡,缓存,分布式事务,分布式锁,以及Dubbo这样的微服务,也包括消息队列,数据库中间件等等。
后端技术杂谈
https://github.com/h2pl/Java-Tutorial
本专栏涵盖了大后端的众多技术文章,当你在Java后端方面有一定基础以后,再多了解一些相关技术总是有好处的。
除了Java后端的文章以外,还会涉及Hadoop生态,云计算技术,搜索引擎,甚至包括一些数据挖掘和AI的文章。
总的来说选取了一些不错的基础类文章,能让你对大后端有一个更直观的认识。
我之前专门写了一篇文章介绍了Java工程师的书单,可以这里重点列举一些好书,推荐给大家。
《计算机网络:自顶向下》
计算机网络的学习可以用本书,这本从应用层讲到物理层,感觉这种方式学起来更轻松。
《图解算法》《啊哈算法》
这两部书籍非常适合学习算法的入门,前者主要用图解的形式覆盖了大部分常用算法,包括dp,贪心等等,可以作为入门书,后者则把很多常用算法都进行了实现,包括搜索,图,树等一些比较高级的常用算法。
《剑指offer》这本书还是要强烈推荐的,毕竟是面试题经常参考的书籍,当然最好有前面基本的铺垫再看,可能收获更大,这本书在面试之前一般都要嚼烂。如果想看Java版本的代码,可以到我的Github仓库中查看。
《head first java》这本书对新手很友好,适合有些基础再看收获可能会更大,学习Java不可多得的一本好书。
《Java核心技术卷一》 这本书还是比较适合入门的,属于比较典型的Java技术教科书,当然,这种厚皮书要看完还是很有难度的。
《深入理解JVM虚拟机》 这本书是Java开发者必须看的书,很多jvm的文章都是提取这本书的内容。JVM是Java虚拟机,赋予了Java程序生命,所以好好看看把,我自己就已经看了三遍了。
《Java并发编程艺术》 这本书是国内作者写的Java并发书籍,比上面那一本更简单易懂,适合作为并发编程的入门书籍,当然,学习并发原理之前,还是先把Java的多线程搞懂吧。
《深入JavaWeb技术内幕》这本书是Java Web的集大成之作,涵盖了大部分Java Web开发的知识点,不过一本书显然无法把所有细节都讲完,但是作为Java Web的入门或者进阶书籍来看的话还是很不错的。
《Redis设计与实现》该书全面而完整地讲解了 Redis 的内部运行机制,对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍。这本书把Redis的基本原理讲的一清二楚,包括数据结构,持久化,集群等内容,有空应该看看。
《大型网站技术架构》 这本淘宝系技术指南还是非常值得推崇的,可以说是把大型网站的现代架构进行了一次简单的总结,内容涵盖了各方面,主要讲的是概念,很适合没接触过架构的同学入门。看完以后你会觉得后端技术原来这么博大精深。
《分布式服务框架原理与实践》 上面那本书讲的是分布式架构的实践,而这本书更专注于分布式服务的原理讲解和对应实践,很好地讲述了分布式服务的基本概念,相关技术,以及解决方案等,对于想要学习分布式服务框架的同学来说是本好书。
《从Paxos到Zookeeper分布式一致性原理与实践》 说起分布式系统,我们需要了解它的原理,相关理论及技术,这本书也是从这个角度出发,讲解了分布式系统的一些常用概念,并且带出了分布式一哥zookeeper,可以说是想学分布式技术的同学必看的书籍。
《大数据技术原理与应用》 作为大数据方面的一本教材,厦大教授写的这本书还是非常赞的,从最基础的原理方面讲解了Hadoop的生态系统,并且把每个组件的原理都讲得比较清楚,另外也加入了spark,storm等内容,可以说是大数据入门非常好的一本书了。
学习Java后端两年的时间里,接触过很多的资料,网站和课程,也走了不少弯路,所以这里也总结一些比较好的资源推荐给大家。
0 CSDN和博客园
主流的技术交流平台,虽然广告越打越多了,但是还是有很多不错的博文的。
1 importnew
专注Java学习资源分享,适合Java初学者。
2 并发编程网
主要分享Java相关进阶内容,适合Java提高。
3 推酷
一个不错的技术分享社区。
4 segmentfault
有点像国内的Stack Overflow,适合交流代码问题的地方。
5 掘金
一个很有极客范的技术社区,强推,有很多技术大牛分享优质文章。
6 开发者头条
一个整合优质技术博客的社区,里面基本上都是精选的高质量博文,适合技术学习提升。
7 v2ex
一个极客社区,除了交流技术以外还会有很多和程序员生活相关的话题分享。
8 知乎
这个就不必多说了。我在知乎上也有Java技术和校招的专栏,有兴趣的同学可以看看:
https://www.zhihu.com/people/h2pl
9 简书
简书上有些技术文章也很不错,有空大家也可以去看看。
10 Github
有一些GitHub的项目还是非常不错的,其中也有仓库会分享技术文章。
我的GitHub:https://github.com/h2pl
1 江南白衣
这位大大绝对是我的Java书单启蒙导师,他推荐的Java后端书架让我受益匪浅。
2 码农翻身刘欣
一位工作15年的IBM架构师,用最浅显易懂的文章讲解技术的那些事,力荐,他的文章帮我解决了很多困惑。
3 CoolShell
陈皓老师的博客相信很多人都看过,干货很多,酷壳应该算是国内早期技术人里最有影响力的个人博客之一了。
4 廖雪峰
学习Git和Python,看它的博客就够了。
5 HollisChuang
阿里一位研发大佬的博客,主要分享Java技术文章,内容还不错。
6 梁桂钊
阿里另一位研发大佬,博客里的后端技术文章非常丰富。
7 chenssy
这位大佬分享的Java技术文章也很多,并且有很多基础方面的文章,新手可以多看看。
8 Java Doop
一位魔都Java开发者的技术博客,里面有一些不错的讲解源码的文章,数量不是很多,但是质量都挺不错的。
给你们安利了Java学习路线图和一些学习资源之后,接下来就是最劲爆的实战项目清单了。毕竟学了那么多基础和理论知识后,最终还是要落地到项目中,才能算是一个合格的Java工程师。
这里安利的这些项目,基本上都是GitHub上的开源项目,包含了很多实战类的硬核项目,比如电商,分布式这类的常用技术方案,除此之外还有技术大牛的实战demo,比如springboot和springcloud的demo和实现,当然了,我还会推荐一些Java面试方面的优质项目,这些项目虽然不是实战类的,但是对于准备求职面试的你来说,也是非常实用,干货满满的。
https://github.com/CyC2018/CS-Notes
技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、Java、Python、C++
其中还包含了LeetCode和剑指offer题解,可以说是非常硬核;了。
**https://github.com/Snailclimb/JavaGuide
【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。
https://github.com/h2pl/Java-Tutorial
【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南。
https://github.com/macrozheng/mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
https://github.com/macrozheng/mall-learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(25k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot2.1.3、MyBatis3.4.6、Elasticsearch6.2.2、RabbitMQ3.7.15、Redis3.2、Mongodb3.2、Mysql5.7等技术,采用Docker容器化部署。
https://github.com/ityouknow/spring-boot-examples
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。
https://github.com/ityouknow/spring-cloud-examples
Spring Cloud 学习案例,服务发现、服务治理、链路追踪、服务监控等,以最简单、最实用为标准
牛客网的这两个项目课可以说是很接地气了,一个模仿头条一个模仿知乎,下面这两个项目是我跟着课程做的,可能还有一些问题。
https://github.com/h2pl/toutiao
仿照今日头条toutiao.com做的一个Java web项目,是一个信息流+社交的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能。本项目实现了一个比较完善的信息流+社交的网站。
https://github.com/h2pl/zhihu
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。
https://github.com/1c7/Crash-Course-Computer-Science-Chinese
这门《Computer Science》一共 40 集,都是英文的可能对英语不好的同学来说难度太大,但是不要慌,国内一些爱好者早已经把它们翻译成中文,也就是我在开头说的《计算机科学速成课》。这门课在 b 站上收获了 6.1 w+ 收藏,1.3w+ 点赞,1.3w+ 投币,在 GitHub 上同样也有 3.9k+ 的 star,妥妥的超级受欢迎的课!
https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md
作者Washam本人并非计算机学位,但在儿时就已经展现出对计算机的浓厚兴趣,从事的工作是关于web程序的构建、服务器的构建。
作为一名非专业人士转行,Washam已经算是相当成功。然而,他还是想去Google工作,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。
可对这些知识都不了解的他,怎么会被Google应聘呢?
于是他在网上收集了各类计算机专业知识,以及进入谷歌工作的员工分享的资源,并系统地整理了这些资料。
Washam强调,想去Google工作首先不要妄自菲薄。Google的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为觉得自己不够聪明而感到一种不安。
到这里,这份硬核干货就结束啦,如果这些内容还不能让你搞清楚怎么学习Java,那我只能一口老血。。。好啦,别忘了点个在看和分享哦,赞赏随意,希望对你有用。
觉得有用就点个在看吧!