zoukankan      html  css  js  c++  java
  • 超硬核Java学习路线图+学习资源+实战项目汇总,看完以后不用再问我怎么学Java了!

    之前写过很多次关于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基础

    这里的Java基础包括基本语法,集合类框架,以及一些高级特性,比如反射,注解等等。

    Java基础的知识点非常多,所以要真正搞懂也没有那么简单,另外,随着时间推移,一些新特性也需要得到我们的重视,比如时下流行的JDK8。

    设计模式

    我一直觉得设计模式可以和Java基础一块学,所以我也把它放在这里。当然,一些真正使用到设计模式的地方,譬如JDK的集合类,IO流等等,也需要你足够重视。

    Java Web技术

    Java Web技术包括J2EE,以及web框架,乃至一系列常用的组件。

    1 J2EE主要包括的就是servlet,jsp这些比较复古的web开发组件了。虽然现在直接用它们的情况比较少,但是我们还是需要花一些时间去掌握它们的。

    2 web框架常用的就是Spring了,相应的,hibernate和mybatis也需要了解一下。

    3 同时,JavaWeb开发时的常用类库,比如jnuit单元测试,log4j日志工具,以及构建工具maven,都属于我们要掌握的范畴。

    4 最后,要注意的是,Web相关的一些基本知识,比如HTTP协议,网络安全基础,也是我们要考虑的部分。

    Java并发技术

    Java的并发技术泛指Java的多线程技术,以及JUC包里的并发类,比如线程池,并发工具类,阻塞队列等等。

    Java并发技术完全可以独立出来学习,是Java进阶知识的一大重点。

    Java网络编程和服务器

    这一块内容是Java中比较复杂但也很重要的一块内容。比如BIO,NIO,AIO的一些使用和原理,以及tomcat这类web服务器,甚至是netty这种网络编程框架,都是可以去了解和学习的内容。

    Jvm基础与调优

    JVM是提供Java程序运行的一个进程,学习JVM知识,也是我们的必经之路。除了看懂《深入理解jvm虚拟机》以外,我们还要学习的内容就是JVM调优,使用合适的工具诊断问题,最后解决问题。

    这部分内容在面试中呈现的不仅仅是GC,内存分区,以及类加载器,也包括了我所说的JVM调优问题。

    3 Linux

    作为后台同学,常年被面试官问linux相关的问题,所以觉得学好linux还是蛮重要的,除了基本命令以外,最好还能了解一些shell脚本,甚至是内核相关的知识,这方面是我的一个弱项。

    4 数据相关

    在这个路线图里,数据部分囊括了非常多的内容,我们可以来看看都有哪些是我们需要掌握的。

    关系数据库Mysql

    这个不必多说,人手都要会,不管是基础的crud,索引,抑或是进阶的存储引擎,分布式方案等,我们都需要对应掌握。

    缓存

    如Redis,memcache一类的缓存,作为后端开发者的我们也需要对应掌握,当然,它们的高级特性,以及分布式方案,也是必备的知识点。

    搜索引擎

    基于Lucene的solr,elasticsearch这类搜索引擎,并不是后端必备的内容,不过学一学也没有坏处啦。

    大数据

    海量数据处理的场景越来越多,大数据技术如hadoop,storm等也越来越火,但是大数据应用一般会由专业的大数据工程师来做,所以我们学一些基本内容也就足够了。

    5 算法和数据结构

    算法一直是校招同学面前的一座大山,作为后端同学来讲,除了基本的数据结构算法以外,也要会一些高级的算法,譬如dp,搜索,贪心等等。

    另外,通过LeetCode等题库来刷题的方式来巩固算法也是公认的好办法了。

    6 分布式

    最后一个部分,也是内容最多,覆盖面最广泛的部分了。分布式相关的技术实在太多了,我们这里也会做一下简单的归纳。

    大型网站架构

    先了解大型网站架构的发展会对分布式的学习有更好的理解,毕竟架构的发展也对应着分布式技术的发展。

    分布式理论

    这部分内容包括分布式的发展演化,base理论和cap理论等等,学习分布式技术之前,最好能对这部分概念有一定了解。

    一致性问题

    强一致性的解决方案:事务和锁,弱一致性的方案:消息队列。

    分布式session

    一个常见的分布式解决方案,很实用。

    分布式缓存

    和上面说的缓存一样,只不过这里侧重缓存的分布式方案

    分布式数据库

    这里指的数据库的分布式方案,也包括hbase这种分布式数据库。

    负载均衡

    负载均衡也是一个值得探讨的话题,一般我们讨论的是七层和四层负载均衡。

    消息队列

    消息队列是一个比较复杂的分布式组件,我们可以了解常用消息队列比如amq,kafka等的实现。

    服务化

    服务化的核心包括rpc,服务注册中心等等。分布式服务相关技术也是后端同学必须掌握的内容。

    虚拟化

    虚拟化同样不是后端同学必须掌握的内容,只不过现在越来越多的服务部署方式使用的是docker和云服务的方式。所以了解一下也没有什么不好的。

    二、硬核Java学习资源清单

    学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难。基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单。

    Java入门学习资源

    这里主要推荐的是几个技术学习网站,基本上都是视频学习资源。

    1 慕课网

    慕课网是做得比较好的程序员学习网站了。里面主要提供的是视频学习资源,主要适用于入门,当然其中也有一些进阶的内容,不过一般都是收费的。

    2 极客学院

    极客学院是我最早用于视频学习的网站,当时主要是听室友推荐,看了一些之后发现确实还不错。不过比起慕课网,极客学院的内容可能少一点。

    3 w3cSchool

    这个想必不说大家也知道,最适合入门的学习网站之一,有很多的学习资源,但是也只适合入门,你可以在一天内看完一门语言或技术,大概了解怎么使用。

    4 中国MOOC

    以前我以为这个和慕课网一样,后来发现这个网站主要是做教育资源的,更像是在学校里上课,里面的很多资源都是高校老师提供的,所以想学习一些计算机基础理论知识可以看看这个网站。

    5 网易云课堂&腾讯课堂

    这两个网站大家也都知道,只不过他们不是专门做IT学习资源的,相对来说这方面的学习资源也会比较少一点。

    Java后端技术专栏

    对于校园招聘来说,最重要的还是基础知识。下面的博客专栏出自我的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工程师书单

    我之前专门写了一篇文章介绍了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学习路线图和一些学习资源之后,接下来就是最劲爆的实战项目清单了。毕竟学了那么多基础和理论知识后,最终还是要落地到项目中,才能算是一个合格的Java工程师。

    这里安利的这些项目,基本上都是GitHub上的开源项目,包含了很多实战类的硬核项目,比如电商,分布式这类的常用技术方案,除此之外还有技术大牛的实战demo,比如springboot和springcloud的demo和实现,当然了,我还会推荐一些Java面试方面的优质项目,这些项目虽然不是实战类的,但是对于准备求职面试的你来说,也是非常实用,干货满满的。

    标星10w+ 超级硬核的技术面试指南

    https://github.com/CyC2018/CS-Notes

    技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、Java、Python、C++

    其中还包含了LeetCode和剑指offer题解,可以说是非常硬核;了。

    硬核Java工程师面试指南

    **https://github.com/Snailclimb/JavaGuide

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。

    https://github.com/h2pl/Java-Tutorial

    【Java工程师面试复习指南】本仓库涵盖大部分Java程序员所需要掌握的核心知识,整合了互联网上的很多优质Java技术文章,力求打造为最完整最实用的Java开发者学习指南。

    硬核开源,标星30k的硬核电商实战项目

    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容器化部署。

    技术博主【纯洁的微笑】springboot和springcloud入门demo

    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爬虫进行数据填充。

    B站收藏 7.1w+!GitHub 标星 5.1k+!这门神课拯救了我薄弱的计算机基础

    https://github.com/1c7/Crash-Course-Computer-Science-Chinese

    这门《Computer Science》一共 40 集,都是英文的可能对英语不好的同学来说难度太大,但是不要慌,国内一些爱好者早已经把它们翻译成中文,也就是我在开头说的《计算机科学速成课》。这门课在 b 站上收获了 6.1 w+ 收藏,1.3w+ 点赞,1.3w+ 投币,在 GitHub 上同样也有 3.9k+ 的 star,妥妥的超级受欢迎的课!

    一份来自亚马逊工程师的Google面试指南,GitHub收获9.8万星,已翻译成中文

    https://github.com/jwasham/coding-interview-university/blob/master/translations/README-cn.md

    作者Washam本人并非计算机学位,但在儿时就已经展现出对计算机的浓厚兴趣,从事的工作是关于web程序的构建、服务器的构建。

    作为一名非专业人士转行,Washam已经算是相当成功。然而,他还是想去Google工作,真正地去理解计算机系统、算法效率、数据结构性能、低级别编程语言及其工作原理。

    可对这些知识都不了解的他,怎么会被Google应聘呢?

    于是他在网上收集了各类计算机专业知识,以及进入谷歌工作的员工分享的资源,并系统地整理了这些资料。

    Washam强调,想去Google工作首先不要妄自菲薄。Google的工程师都是才智过人的。但是,就算是工作在 Google 的他们,仍然会因为觉得自己不够聪明而感到一种不安。

    到这里,这份硬核干货就结束啦,如果这些内容还不能让你搞清楚怎么学习Java,那我只能一口老血。。。好啦,别忘了点个在看和分享哦,赞赏随意,希望对你有用。

    觉得有用就点个在看吧!

  • 相关阅读:
    Ext JS学习第三天 我们所熟悉的javascript(二)
    Ext JS学习第二天 我们所熟悉的javascript(一)
    Ext JS学习第十七天 事件机制event(二)
    Ext JS学习第十六天 事件机制event(一)
    Ext JS学习第十五天 Ext基础之 Ext.DomQuery
    Ext JS学习第十四天 Ext基础之 Ext.DomHelper
    Ext JS学习第十三天 Ext基础之 Ext.Element
    Ext JS学习第十天 Ext基础之 扩展原生的javascript对象(二)
    针对错误 “服务器提交了协议冲突. Section=ResponseHeader Detail=CR 后面必须是 LF” 的原因分析
    C# 使用HttpWebRequest通过PHP接口 上传文件
  • 原文地址:https://www.cnblogs.com/xll1025/p/12989809.html
Copyright © 2011-2022 走看看