Java 后端开发学习路线(修订版)
共 6982字,需浏览 14分钟
·
2021-10-12 23:39
大家好,我是帅地。
接下来的一段时间,帅地会总结各种技术栈的学习路线,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波。
我写的每一份学习路线,不会很全面,因为我认为,东西列的太多,反而不利于新手的学习,所以我列举的,都是比较必要的知识,这篇文章我之前也写过,本次补充的详细一些,并且把之前缺失的资料都提供上了
本文有点长,我搞个目录吧:
下面推荐的所有书籍,都可以在这里下载:https://www.iamshuaidi.com/753.html
一、Java 技术栈的学习
1、Java 入门
一开始肯定要了解一波 Java 语言的特性,很多人都关心一开始看什么资料,其实我不推荐入门阶段看的太多太杂,因为你不知道哪些是有用的,哪些是过时的,或者在目前阶段用不到的。
对于初学者尤其是没有一点编程基础的人来说,要渡过这个从零到一的过程,往其实是非常艰难的,挫败感会非常强。如果有人领路,或者选择一门优质的课程,效果会好的很多。没事,这篇文章就来当作你们的领路人!!!
下面这些学习资料都是我曾经读过或者看过的,没看过的我也不会介绍。还是那句话,资料和视频都是辅助,顶多领你入门,剩下的还是靠自己。
学习书籍推荐:《Java核心卷1》,这个算是入门书籍吧,入门书籍我看的不多,暂时介绍这一本,不过我觉得大家直接看视频入门就可以了,就看尚学堂高琪 300 集就可以了:Java300集,帅地看完直接拿捏Java
看完基础的可以看《Java编程思想》,这本书也很好,解决了我很多疑惑,不过有点难度,我是选择性看的。
2、Java 进阶
想要靠 Java 来吃饭,单单靠看书刷视频肯定是不够的,咱们还得深入学习一波 Java 语言的特性,为了让大家少走弯路,我总结了如下核心知识:
集合模块:主要是包括各种常用集合:例如 Set(包括HashSet,TreeSet), Map(包括 HashMap,HashTable),List(包括ArrayList,LinkedList)等等,上面列举的都得学习它的源码
多线程:synchronize,volatile,线程池,并发包(如lock等等),太多了,学了你们自然知道,我也不说的太详细了。
推荐看《Java 并发编程艺术》+《Java并发编程实战》,这两本就够了,《Java并发编程艺术》感觉得看三四遍才行,第一遍看了就忘光了,第二遍会有其他的收获,第三遍就可以吊打面试官了,书籍的下载方式我上面已经说了。
各种文件流:file,inputStream,outputStream等等,反正就是各种文件流,看书时你们自然会看到,必须多实践,再次强调,文件这块,得多代码时间,不详细介绍。
虚拟机:虚拟机是必须学习的了,重点是 GC 部分,推荐看《深入理解Java虚拟机:JVM 高级特性与最佳实践》,一本就差不多够了,多看四五遍就行了。
其他:还有很多,如反射,注解,异常等。
3、JavaWeb 入门
学了上面那么多,啥程序、网站也没写出来,有点难受?没事,这个时候,我们就要开始撸网站了,如果是以 Java 作为开发语言的,那么 JavaWeb 是必须学的了。这个时候你可以入门学习下这些(注意,不用深入,快速找个视频入门就可以了)
1、mysql、html+css+js 、 tomcat、xml等。推荐看视频,自己去搜索 JavaWeb 的视频,那么哪里不会补哪里,这些知识,几个小时就可以入门一门的了。至于 msyql,入门推荐看《mysql不知必会》,进阶看《mysql技术内幕》,看完就差不多了。
2、servlet+jsp 系列。
不建议直接学习框架,也是应该先学习 servlet,这些底层才是最重要滴。servlet 可以跟着视频学,至于 jsp 其实很少用了,不过还是可以了解一下。
4、框架的学习框
Servlet 写太麻烦了,只有认真学过 servlet 的人才能吹框架的好处,所以必须先学 servlet 再来学习框架,主要有三大框架:Spring + SpringMVC + Mybatis,入门跟着视频学就可以了,B 站一搜一大堆。
其实 SpringMVC 也是属于 Spring 吧,MVC 只是一种思想,这里学习顺序是先建议学习 Spring,直接看视频入门学习就可以了,后面再买书,掌握到什么程度?最后是要能知道一些原理,例如IOC,AOP的原理,使用了什么设计模式等等。
不过现在搭 ssm 太麻烦,基本都是用 SpringBoot 了,所以 SpringBoot 也必须,不过我建议你先学 ssm,之后再学习 SpringBoot,这样你才能知道 SpringBoot 哪里好,之后有时间的话,也要学习下 SpringCloud,没办法,现在太倦了,不学点微服务,分布式,都不敢去面试了。
5、中间件的学习
必须学的中间件:redis,Redis 基本面试必问,工作也基本的都会使用到,所以必须掌握,推荐书籍《Redis 设计与实现》、《Redis开发与运维》。两本书刷完,就差不多了,或者说第一本书刷完就差不多了。
其他的话,像消息队列啊,分布式等相关框架,有时间也可以学习一波。
6、一个完整的项目
把上面的 Java 基础以及框架学了,就要做个完整的项目了,我只能说,项目非常非常重要,这时候自学以及跨行业的劣势就非常大了,因为面试的过程,一定会问项目,而且必须是你自己亲自做过的项目,假如你只是看视频,没有动手实践,很容易就会被问懵。所以一定一定一定要亲自动手做一个项目。
当然不是说这个问题就成了死结了,大家可以选择实操课程去解决自己在项目经验上的缺失,个人认为,找个视频跟着学就可以了。
一定要至少做一个项目;一定要至少做一个项目;一定要至少做一个项目;
关于项目的推荐,楼主也正在总结收集中,后面应该会整理出来。
不过,作为应届生,单单只会 Java 是很难进大公司的,算法 + 计算机基础也是极其重要的,特别是大公司,这方面问的特别多。
二、数据结构与算法的学习
大学第一学期你入门了某种语言之后,就要开始学习数据结构与算法L。当然,不一定是第一学期,对于非科班的也一样,也是建议这个学习顺序。当然,你有自己的目标,完全可以按照自己的来。
我的文章是主写数据结构与算法的,我秋招也是靠着这个优势拿到 offer 的,所以我认为数据结构与算法是非常非常重要的,可能你会听到工作都基本没用到这些知识啊,或者库函数都帮我们封装好了啊,我们干嘛要学。
如果你这样想的,那你就错了。对于想要找工作的来说,这方面的知识是必考的,所以你得学;对于已经工作的来说,这方面的知识,可以让你学习到很多设计思想,所谓 数据结构 + 算法 = 程序,而且你学了这个,你会发现学习其他知识,上手的特别快。综上,数据结构与算法必学。
好吧,上面扯了这么多,就是告诉你,数据结构与算法的重要性,好了,下面我介绍下入门数据结构必学的有哪些,不过你跟着书本的学习顺序来就是了。
1、基础数据结构的学习
1、时间复杂度、空间复杂度
2、链表、队列、栈
3、树(二叉树,查找二叉树、AVL树,红黑树等)
4、图(图有好多种算法,深度/广度搜索,最短路径、最小生存树等)
如果你是科班的,那么这些我觉得你大一第二学期都学完是最好的了,没学完也问题不大,有些人可能是先教《离散数学》这本课,为数据结构与算法做铺垫。
书籍推荐:《大话数据结构》、《数据结构与算法分析:C语言描述版》,学哪一本?都可以,问题不大,我当时学的是第二本。大家记得根据自己的语言去学,我上面列举的,都是用 c 语言来实现的。
视频:我只看过《小甲鱼的数据结构与算法》视频,你们自己看着办吧。
2、算法的学习
在大一大二,真心建议你们把算法基本功打好,后面就真的没啥时间刷题之类的了,因为无论你以后要学习哪个方向的,算法都是实用的,会一些算法,说话也都自信了。算法的学习,刷题是必须的了,但不建议盲目刷题,而是先学习一些算法思想,在找对应的题刷,要学的主要有:
1、十大排序算法:学弟学妹别再看教材了,帅地肝了一星期的十大排序算法
2、递归、贪心、回溯、动态规划、枚举等
推荐书籍:《阿哈算法》、《算法设计与分析基础》适合入门;《算法第四版》、《算法导论》、《编程之美》适合进阶
视频:这种还是挺建议看书,我没看过视频,,这里就不介绍了。
3、保持算法的学习
算法的学习,真的是靠积累的,而刷题是必须的。而且学校都会举办一些比赛,这里还是比较建议大家去参见的,这样也能让你更加有激情着去学习。当然,每年都会有很多 ACM 编程大赛,要不要参加呢?这个看你了,也不是说参加就一定好,看你自己吧,具体可以参考我之前一篇文章说的:普普通通,我的三年大学
大家可以在 leetcode 长期保持刷题,一天一两道,或者一个星期三四道都行。
这里给大家推荐一份刷题笔记,学完应付面试基本问题不大:
三、计算机基础的学习
看过我文章的都知道,我一直强大计算机基础的重要性,所以这里必须列举要学的有哪些。刚才说了选择一门语言深入,你在深入学习的过程中,肯定也在学习学校开设的专业课,包括:计算机网络 + 操作系统 + 数据库 + 汇编 + 计算机组成原理 + 编译原理 等等。
而这些,我认为是非常重要的,对于秋招的同学来说,只要你会这些,就算你是深入学习 Java的,然后你去应聘 C++ 岗,我觉得也问题不大,你和面试官说我不会 C++ 就可以了,大不了到时候转岗。
我虽然是 Java 技术栈的,但是我面的公司,都不是 Java 技术栈的,例如 小米,Shopee,字节跳动,腾讯等。但是,这些都问题不大,你只要会这些基础 + 算法。
而且,在秋招,特别是对于一些大公司,关于语言的,其实问的也不是很多,基础问的特别多,所以你会基础,面试会占很多优势。下面按照学习的优先级,给这些课程排个序。
其实给他们排优先级是不大好的,这样给他们排,感觉容易被大佬喷,不过没办法,对于小白来说,我还是想排以下顺序
1、计算机网络 + 操作系统
2、数据库 + 计算机组成原理(数据库相应你们可能已经先学过 MySQL 了)
3、汇编 + 编译原理
不过,如果你们还是在校的大一大二,那么可以根据你们课程的学习顺序来,但是,我建议有时间的可以提前学,不一定要等到学校教了才学,反正大部分老师讲的很一般,但时候你学过的话,可以当做复习,或者学其他。
不过呢,比较重要的是计算机网络 + 操作系统 + 数据库,这三门我单独拿出来说一下重点吧。
四、计算机网络
无论你是从事啥岗位,无论是校招还是社招,计算机网络基本都会问,特特是腾讯,字节,shopee,小米等这些非 Java 系的公司,问的更多。这块认真学,一个半月就可以搞定了。
计算机网络就是一堆协议的构成,下面是一些比较重要的知识点,学的时候可以重点关注下。
物理层、链路层:
MTU,MAC地址,以太网协议。
广播与 ARP 协议
网络层
ip 地址分类
IP 地址与 MAC 地址区别
子网划分,子网掩码
ICMP 协议及其应用
路由寻址
局域网,广域网区别
传输层(主要就是 TCP)
TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
TCP滑动窗口原理,TCP 超时重传时间选择
TCP 拥塞控制,TCP 流量控制
TCP 三次握手与四次挥手以及状态码的变化
TCP连接释放中TIME_WAIT状态的作用
SYN 泛洪攻击
TCP 粘包,心跳包
UDP 如何实现可靠传输
UDP 与 TCP 的区别
UDP 以及 TCP 的应用场景
应用层
DNS 原理以及应用
HTTP 报文格式,HTTP1.0、HTTP1.1、HTTP2.0 之间的区别
HTTP 请求方法的区别:GET、HEAD、POST、PUT、DELETE
HTTP 状态码
HTTP 与 HTTPS 的区别
数字证书,对称加密与非对称加密
cookie与session区别
输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)
书籍推荐:零基础可以先看《图解HTTP》,当然,也可以直接看《计算机网网络:自顶向下》这本书,这本书建议看两遍以及以上,还有时间的可以看《TCP/IP详解卷1:协议》。
帅地也写过一个极简入门教程:别看教材了,帅地熬夜肝了一份计算机网络极简入门教程
五、操作系统
操作系统和计算机网络差不多,不过计算机网络会问的多一些,操作系统会少一些,总结起来大致:
1、进程与线程区别
2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量
3、互斥锁与自旋锁的底层区别
4、孤儿进程与僵尸进程
5、死锁及避免
6、多线程与多进程比较
7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket
8、管道与消息队列对比
9、fork进程的底层:读时共享,写时复制
10、线程上下文切换的流程
11、进程上下文切换的流程
12、进程的调度算法
13、阻塞IO与非阻塞IO
14、同步与异步的概念
15、静态链接与动态链接的过程
16、虚拟内存概念(非常重要)
17、MMU地址翻译的具体流程
18、缺页处理过程
19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法
书籍推荐:《现代操作系统》
这里也有一门合并的视频:计网+操作系统+计组入门教程
六、MySQL
数据库一般主流的有 MySQL 和 Oracle,不过建议大家学习 MySQL 了,因为大部分公司都是使用 MySQL,也是属于面试必问,而且工作中 MySQL 也是接触的最多的,毕竟工作 crud 才是常态。
下面这些是我认为比较重要的知识点:
1、一条 sql 语句是如何执行的?也就是说,从客户端执行了一条 sql 命令,服务端会进行哪些处理?(例如验证身份,是否启用缓存啥的)。
2、索引相关:索引是如何实现的?多种引擎的实现区别?聚族索引,非聚族索引,二级索引,唯一索引、最左匹配原则等等(非常重要)。
3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原子性?不同的事务看到的数据怎么就不一样了?难道每个事务都拷贝一份视图?MVCC 的实现原理(重要)等等。
4、各种锁相关:例如表锁,行锁,间隙锁,共享锁,排他锁。这些锁的出现主要是用来解决哪些问题?(重要)
5、日志相关:redolog,binlog,undolog,这些日志的实现原理,为了解决怎么问题?日志也是非常重要的吧,面试也问的挺多。
6、数据库的主从备份、如何保证数据不丢失、如何保证高可用等等。
7、一些故障排查的命令,例如慢查询,sql 的执行计划,索引统计的刷新等等。
对于 2-4 这四个相关知识,面试被问到的频率是最高的,有时候面试会让你说一说索引,如果你知道的多的话就可以疯狂扯一波了。
书籍:《MySQL必知必会》和《MySQL技术内幕》
七、学习的顺序
对于Java,算法,计算机基础的学习顺序,假如你时间多,例如你大一或者大二,那么我觉得可以按照这个学习顺序:
1、先选一门语言入门,例如 C 语言或者 Java
2、之后学习数据结构与算法
3、之后一边学习我上面说的 Java 技术栈,一边学习计算机基础,并行学习并不矛盾
假如你很急,时间不多了,那么我建议你先说我上面说的 Java 相关的知识,然后做项目,之后再回过头来学习算法和基础知识。
八、总结
我觉得对于大学四年来学,上面这些是最核心的,也是必须学的。但是仅仅是上面这些还是不够的,上面的这些一两年就可以学完的。
所以你还有很多其他时间,那么你可以学一些自己感兴趣的,多折腾,多抖鼓,而我上面学的,希望你都学。
最后,是希望各位还在校的学生,大一可以好好浪,但也要保持应有的学习时间,之后,就好好学习吧。不管你是名校还是非名校,我觉得你在只要这几年认真学,进大公司的几率,真的非常大,这绝对不是鸡汤。
最后也欢迎大家加入帅地的知识星球。帅地会在星球知无不言,无论是 offer 选择,职业规划还是学习路线,帅地都会在 48 小时以内答复你的问题,并且根据你自身的情况,为你量身定制学习路线。
你有任何的疑惑,帅地都会答复你,并且星球里也有一群和你相同年龄的小伙伴在奋斗,都是未来的卷王
星球还提供了超全学习攻略,小白只需要跟着我提供的攻略学习就可以了
帅地会在星球会提供如下服务
1、【一对一咨询服务】48 小时以内超详细回答你的任何问题,包括写作等等,这是知识星球最重要的功能。最近一周就回答了十几个 offer 选择,校招等学习路线问题。
2、【学习攻略】校招这方面比较有经验,帅地会提供完整的学习攻略,小白跟着帅地说的学习就行,。
3、简历修改,项目等学习资源,offer 收割机嘉宾分享等等。
目前星球是专注于校招,在校生学习指导这块,一定可以让你少走弯路,已经有 640+ 位小伙伴加入,这里还有一些 20 元的优惠卷,如果你信的过帅地,那么欢迎你的加入。
点击阅读原文可以了解详情