前言:
学到什么程度可以去找实习:
Java 基础,框架,MySQL,Redis,MQ(至少会一个,优先学 RocketMQ)+两个项目。如果是大厂,还需要 JUC,JVM,算法,计网,操作系统之类的基础
下面分享一下楼主实际的 Java 学习路线以及一些学习经验,给大家参考:
ps: 本人基本上都是看黑马的视频学习的,个人认为黑马的这些视频质量都是 Top 级的(下面会附上对应的视频链接),并且这些视频都配有完整的课件,强烈建议视频配合着它的课件一起学习,效率会比较高(微信搜索黑马程序员公众号,点击获取资源,然后搜索对应课程的课件就可以下载了)
Part00 前置知识
在学习路线开始前,我建议先学一些常用工具的使用,这里建议学一下 Linux、Git、Docker 的常用命令,个人认为这对后面的学习过程有比较大的帮助。
学 Linux 是因为在后面你可能需要部署一些数据库、中间件到 Linux 系统上,或者项目完成后也可以将它部署到服务器上。可以用虚拟机或者租一台服务器来学习(建议租一台服务器,阿里云学生优惠 99 块钱一年,并且无限流量)。
Git 是一个用于代码管理的软件,学这个是为了能够把你写的代码(项目、Demo 等)保存起来并且提交到远程仓库。
学 Docker 可以减少在 Linux 上配环境时的麻烦。
在这一阶段主要是掌握这些工具的使用,不用死记硬背它们的命令,要多实践、多用,然后熟能生巧。大概学到能够基本使用就可以了,不需要花特别多的时间。
【黑马程序员新版 Linux 零基础快速入门到精通,全涵盖 linux 系统知识、常用软件环境部署、Shell 脚本、云平台实践、大数据集群项目实战等】https://www.bilibili.com/video/BV1n84y1i7td (看完前四章就可以)
【黑马程序员 Docker 快速入门到项目部署,MySQL 部署 + Nginx 部署 + docker 自定义镜像 + DockerCompose 项目实战一套搞定】https://www.bilibili.com/video/BV1HP4118797
Part01 Java 基础
【Java 入门基础视频教程,java 零基础自学就选黑马程序员 Java 入门教程(含 Java 项目和 Java 真题)- 哔哩哔哩】 https://b23.tv/CXprerE
这一阶段,需要掌握最基本的 Java 基础知识,比如 面向对象、集合、IO、多线程、Socket 等。这些知识没有特别难的,跟着视频练习、理解就好。
Part02 JavaWeb 入门
【黑马程序员 JavaWeb 开发教程,实现 javaweb 企业开发全流程(涵盖 Spring+MyBatis+SpringMVC+SpringBoot 等)- 哔哩哔哩】 https://b23.tv/MuFtClX
这个视频直接跳过了 SSM 直接讲 Springboot ,倾向于速成。但我认为速成没什么不好的,可以在短时间内对后端开发有一个大致的了解。
学完这一阶段,你就已经对后端开发有了基本的概念,也可以使用 SpringBoot 完成一些基本的 CRUD 操作了。
Part03 做一个简单的入门项目练手
【黑马程序员 Java 项目实战《苍穹外卖》,最适合新手的 SpringBoot+SSM 的企业级 Java 项目实战 - 哔哩哔哩】 https://b23.tv/wq1dQF0
这里推荐黑马的经典项目苍穹外卖。虽然这个项目早就已经烂大街了,也没有什么技术难点。但是对于刚开始学习的新手来说,这是一个超级好的练手项目。通过学习这个项目,跟着视频的思路拆解分析他的业务逻辑,自己动手完成对应的功能,对于快速整合、练习之前的知识有很大帮助。
学完这一阶段,你就已经算是入了 Java 后端开发的大门了。可以独立完成一些简单的 web 项目,完成一些课程设计或者学校作业肯定是没问题了,但距离实习的水平还有距离。
Part04 SSM 框架(大概过一下就可以)
【黑马程序员 SSM 框架教程_Spring+SpringMVC+Maven 高级 + SpringBoot+MyBatisPlus 企业实用开发技术 - 哔哩哔哩】 https://b23.tv/fzKWNnC
因为前面我们是直接跳过了 SSM 学的 Springboot,你可能对 Springboot 的一些概念有些懵懂。所以这时候就需要补充一些传统的 SSM 框架知识。在这一阶段,不需要特别仔细,只需要大致了解一下传统的 SSM 项目是怎么样的,体会 Springboot 是怎么简化的,以及简化了什么。(反正就是大致了解就好了)
Part05 MySQL
【黑马程序员 MySQL 数据库入门到精通,从 mysql 安装到 mysql 高级、mysql 优化全囊括 - 哔哩哔哩】 https://b23.tv/nsAfpGp
通过前面的 JavaWeb 课程,你应该对 MySQL 有了一定的了解。但这还远远不够,还需要掌握 MySQL 的进阶知识。
这一阶段,你需要掌握 MySQL 当中 事物、索引、锁、存储引擎、日志、主从等机制。这些也是面试过程中的高频考点,无论大中小厂都喜欢考,需要充分理解。(视频里的触发器、存储过程、视图部分不用看,直接跳过,后面的运维篇看前 12 集就可以,后面的分库分表实践、读写分离以后做项目的时候用到再说,不是必需的)
Part06 Redis
【黑马程序员 Redis 入门到实战教程,深度透析 redis 底层原理 + redis 分布式锁 + 企业解决方案 + 黑马点评实战项目 - 哔哩哔哩】 https://b23.tv/1BQzFsw
同样,你还需要掌握 Redis 的进阶知识,包括 Redis 数据结构、持久化、主从、哨兵、集群、内存淘汰策略、过期删除策略。(重点就看这些+实战篇,其他可以选择略过)
通过这个视频,你还会在里面的实战章节学到黑马的另一个经典项目:黑马点评。通过这个项目,可以让你对 Redis 有一个全面的认知,包括缓存的三大问题(击穿、穿透、雪崩)、分布式锁、缓存一致性等。这个项目将会是你接触到的第一个有技术难点的项目,学的过程中要有自己的思考(比如为什么要这样做、这样做有什么好处、有没有其他方案、不同方案间的对比),切忌只是跟着视频敲代码。
当你真的完全理解了黑马点评项目里的内容和视频里的其他进阶知识,你就可以很自信的说,你是熟练掌握 Redis 了。
Part07 消息队列(MQ)
目前主流的消息队列一共有三种,分别是 RabbitMQ、RocketMQ、Kafka 。这三个消息队列各有自己的特点和优劣,至少要掌握一个。学习优先级 RocketMQ > Kafka > RabbitMQ 。
在这一阶段,你需要了解 消息队列作用、消息队列模型、死信队列、事务消息 之类的知识。如果你学习了两个及以上的消息队列并且把它们写到了简历上,就需要了解它们之间的 差异、优劣、使用场景等(面试非常喜欢考)。
学完了这一阶段,你就已经基本具备了 Java 后端开发的技术栈了。如果你的目标是找一个中小厂实习,那么只需要再准备两个项目写到简历上就应该没什么问题了。但如果是想冲击大厂,还需要进一步的技术沉淀。
Part08 JUC(并发编程)
【黑马程序员深入学习 Java 并发编程,JUC 并发编程全套教程】https://www.bilibili.com/video/BV16J411h7Rd
虽然这个视频是 2020 年的,但是个人认为讲的很好,内容也基本上覆盖了所有需要掌握的 JUC 知识,比较推荐。
这一阶段你需要掌握 JUC 包下的常用工具、线程同步机制、乐观锁、悲观锁、线程安全集合等。这些内容都比较重要,都是中大厂面试常考的点。刚开始学可能会感觉比较生硬、比较难,也是建议配合课件一起学习,遇到实在不懂的可以先跳过,之后再回头看。
Part09 JVM
【黑马程序员 JVM 虚拟机入门到实战全套视频教程,java 大厂面试必会的 jvm 一套搞定(丰富的实战案例及最热面试题)】https://www.bilibili.com/video/BV1r94y1b7eS (看完前面的基础篇就可以,后面的实战篇等准备面试的时候再回来看也可以)
这一阶段,你需要掌握有关 JVM 的核心知识,包括 字节码组成、JVM 内存划分、类加载机制、双亲委派机制、垃圾回收机制等。这些也是大厂面试中容易考到的问题。
Part10 微服务 (可选)
【黑马程序员 SpringCloud 微服务开发与实战,java 黑马商城项目微服务实战开发(涵盖 MybatisPlus、Docker、MQ、ES、Redis 高级等)】https://www.bilibili.com/video/BV1S142197x7
之前学习的内容里做的项目都是单体架构的项目,所谓单体架构,可以理解为就是一个 SpringBoot 应用程序。而微服务则是把一个大项目拆分为了很多个单体 SpringBoot 应用程序,然后它们直接互相协作、通信,这样便于项目的分工以及维护。
这一阶段,你会学习到微服务拆分的思想以及微服务框架 SpringCloud Alibaba 的常用组件,包括 Nacos、OpenFeign、Gateway、Seata、Sentinel 等。还会学习到一个微服务项目,黑马商城,以及搜索引擎 ElasticSearch 。但是微服务并不是必学的,可以根据个人情况来选择。
好了,学到这里,你基本上已经掌握了冲击大厂实习的技术栈了。接下来就是准备你的项目、简历还有面试了。
Part11 准备项目
这一阶段我们需要准备两个项目写到你的简历上面。
在前面的学习过程中,你已经学习到了三个项目 苍穹外卖、黑马点评、黑马商城。但是注意不能直接把它们写到简历上面,因为这些项目都是黑马的课程学习项目,很多人都做过。这时候大致有三种方法,第一种就是重新找一些撞车率低的项目,可以去 GitHub、Gitee 或者一些博主的知识星球里去找。
但是 GitHub、Gitee 上的项目要么是 star 很高(导致撞车率高),要么是没有文档很难学习。博主的知识星球虽然一般有详细的教学,但都是付费的,而且有些项目撞车率也不低。
第二种方案便是根据原来学习的项目魔改。所谓魔改,就是根据你自己对这些项目的理解把它们改的面目全非。比如 添加一些技术栈、修改项目核心功能(比如商城项目改成旅游预订项目、点评项目改成贴吧项目等)之类的。因为面试的时候,面试官并不会让你运行展示你的项目,一般只是根据你简历上的项目内容来提问。只要你对你魔改的项目足够熟悉,能够自圆其说,能应对面试官的追问,甚至你都不需要实际修改你的项目。
第三种方案便是自己手搓一个项目,只要你有好的创意,这种当然是最好的方案。但是要注意的是,项目最重要的一般不是项目的功能场景,而是技术亮点、技术栈(用什么技术解决了什么问题、完成了什么功能,这种技术有什么优点,为什么要用这种技术)。可以根据一些技术博客或者视频了解一些 idea 然后把它们运用到项目里。
上面这三种方案各有优劣,可以根据自己情况选择,本人选择的是第二种。
Part12 准备面试
【新版 Java 面试专题视频教程,java 八股文面试全套真题 + 深度详解(含大厂高频面试真题)】https://www.bilibili.com/video/BV1yT411H7YK
面试题复习资源:
小林 coding | Java 面试学习 面试专题 - 飞书云文档
对于面试,一般要准备这些内容:简历上写的技术栈、简历上写的项目、算法(中大厂才用准备)、计算机基础(包括数据结构、计算机网络、操作系统)。
这里推荐上面两个网站,分别是 小林 coding 和黑马的面试专题。根据这两个网站总结的面试题复习,做到能全部理解最好,不懂的可以参考一下 AI 的回答或者看一些技术文章。
准备算法的话,这里推荐 code Top 网站(https://codetop.cc/),这里面把 Leetcode 里的算法题按照考察频率排序了,从前往后刷,刷完大概 80 道以后就可以开始投简历面试了,当然刷的越多越稳。
面试的话,不要一开始就投中大厂,因为中大厂的面试强度比较高,而且很多都有面评机制,你刚开始没有经验表现的太差是有可能被直接拉黑几个月的,所以建议先海投一些中小厂面试练一下手,有经验了再冲中大厂。