一份完整的后端学习路线

·  阅读 13051

前言

大家好呀,我是捡田螺的小男孩。最近很多读者跟我聊天,想要一份后端学习路线。学习方向和路线很重要,清晰的学习路线,能让你在成功道路上事半功倍。所以趁着这个周末,给大家整理一份完整的后端学习路线(偏Java方向)。相信看完后,不管是还在学校读书的学生还是已经工作的伙伴,都会有帮助的。

后端学习路线

  • 公众号:捡田螺的小男孩

1.数据结构与算法

1.1 为什么数据结构很重要?

我记得当时读大一的时候,我们就有一门专业必修课:《C++数据结构与算法》。毫无疑问,数据结构对于程序员来说,非常基础非常重要。程序界有这么一句话,程序=数据结构+算法。可见数据结构的重要性。

日常业务开发中,几乎不会有从0到1实现个数据结构的需求。最多就是用递归算法解析一下文件,用排序算法排下数据。 但是呢,不仅仅于此。如果回到编程语言这块的话,就拿Java来说的话,底层框架经常见数据结构。

比如常用的集合ArrayListLinkedList,底层就是数组和链表的数据结构。再比如我们使用频率超级高的HashMap,JDK8之前,它的底层就是数组+链表。JDK8之后,底层数据结构就是数组+链表+红黑树。只有熟悉数据结构,才能更好掌握这些底层源码知识。

其他编程语言其实也类似,所以学好数据结构真的很重要。

1.2 数据结构与算法相关数据推荐

如何学习数据结构与算法呢?书山有路勤为径,哈哈。所以就是可以多看书!看哪本书的,根据不同开发语言,推荐这几本吧:

《数据结构与算法分析-C语言描述》

《数据结构与算法分析-Java语言描述》

如果精力旺盛的伙伴们,可以啃下这本神书:《算法导论》

电子书已经给你们准备好啦,可以在下面这个GitHub仓库上找到。

github地址

1.3 视频推荐

B站上,浙江大学的一个数据结构的课还挺不错。很经典也比较全,非常适合小白入门。

视频链接:www.bilibili.com/video/BV1JW…

2. 计算机网络

2.1 为什么计算机网络很重要?

计算机网路,是计算机专业的必修课。我们学校的话,是大二会学这么课,课本是这个《计算机网络: 自顶向下方法》。

计算机网络为什么重要呢?举两个简单例子

  • 一个http请求返回了403状态码,有些小伙子不知道是权限的原因。
  • 再比如,你调一个第三方接口,返回超时,你就需要ping一下或者telnet一下,确认网络是不是通的,等等。

2.2 计算机网络相关书推荐

《计算机网络: 自顶向下方法》

本书是经典的计算机网络教材,采用作者独创的自顶向下方法来讲授计算机网络的原理及其协议,自第1版出版以来已经被数百所大学和学院选作教材,被译为14种语言。

《图解HTTP》

本书对互联网基盘——HTTP协议进行了全面系统的介绍。HTTP协议的发展历史娓娓道来,严谨细致地剖析了HTTP协议的结构,列举诸多常见通信场景及实战案例,最后延伸到Web安全、最新技术动向等方面。

《网络是怎样连接的》

本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。

2.3 计算机网络视频推荐

B站的计算机网络微课堂,觉得挺不错的,给大家推荐一下

视频地址:www.bilibili.com/video/BV1c4…

3.数据库

3.1 为什么数据库很重要?

后端就是操作和存储数据,所以作为后端开发,数据库是最主要的学习模块。数据库,也是计算机专业的必修课。我们学校的话,是大三会学这门课,课本教材是这个《数据库系统概论》。

如果连基本的SQL都不会写的话,就不能算后台开发工程师。当然,学习数据库技能,会写SQL语句只是基本素养。想成为一名高级后台开发工程师,还需要学会SQL调优、分库分表等等。

3.2 数据库相关书籍推荐

《sql必知必会》

本书是深受世界各地读者欢迎的SQL经典畅销书,内容丰富,文字简洁明快,针对Oracle、SQL Server、MySQL、DB2、PostgreSQL、SQLite等各种主流数据库提供了大量简明的实例。

《高性能Mysql》

《高性能mysql(第3版)》不但适合数据库管理员(dba)阅读,也适合开发人员参考学习。不管是数据库新手还是专家,相信都能从本书有所收获。

《MySQL技术内幕:innodb存储引擎》

《MySQL技术内幕:InnoDB存储引擎(第2版)》从源代码的角度深度解析了InnoDB的体系结构、实现原理、工作机制,并给出了大量最佳实践,能帮助你系统而深入地掌握InnoDB,更重要的是,它能为你设计管理高性能、高可用的数据库系统提供绝佳的指导。

3.3 数据库相关文章推荐

之前写过很多MySQL数据库相关的文章,每一篇质量都很不错,推荐给大家,相信大家看完会有收获的。

3.4 课程推荐

  • 极客时间的《MySQL 45讲》

MySQL的45讲,真的挺好,课程讲解深入浅出,生动有趣,不仅仅适合开发看,也适合运维看。

3.5 视频推荐

推荐一个适合初级以及中级工程师看的SQl视频,讲师一个老外,内容很不错的。

视频地址:www.bilibili.com/video/BV1UE…

4. 操作系统

4.1 为什么要学习操作系统?

引用一个知乎的回答:

比如你要开发一个网络代理软件,不过是从socket上收一个包,然后转发给另一个socket,看起来,跟操作系统没半毛线关系。

实现过程中,如果你只用一个线程处理网络IO,只要CPU顶得住,延迟一般会在几个毫秒内。但是如果你用了多线程分别处理收/发,网络压力稍大,引入的延迟就会增加,额外延迟就可能突破几十个毫秒。

想搞明白这是为什么,就需要对操作系统调度原理、时间片等概念没有足够深刻的理解。

应用层开发的确只需要接触冰山在海面上的可见部分;但这只够你开发一些蹩脚的软件;冰山藏在海面下的9/10,和冰山的可见部分毕竟是一体的:浮于表面的软件同样会影响冰山的不可见部分、并被冰山的不可见部分影响。如果没有基本了解,当冰山的不可见部分透过可见部分坑到你时,你绝没能力为这些蹩脚软件debug。

4.2 操作系统书籍推荐

《现代操作系统》

本书是操作系统领域的经典之作.书中集中讨论了操作系统的基本原理,包括进程、线程、存储管理、文件系统、输入/输出、死锁等,同时还包含了有关计算机安全、多媒体操作系统、掌上计算机操作系统、微内核、多核处理机上的虚拟机以及操作系统设计等方面的内容。

《程序是怎么跑起来的》

本书从计算机的内部结构开始讲起,以图配文的形式详细讲解了二进制、内存、数据压缩、源文件和可执行文件、操作系统和应用程序的关系、汇编语言、硬件控制方法等内容,目的是让读者了解从用户双击程序图标到程序开始运行之间到底发生了什么。同时专设了“如果是你,你会怎样介绍?”专栏,以小学生、老奶奶为对象讲解程序的运行原理,颇为有趣。本书图文并茂,通俗易懂,非常适合计算机爱好者及相关从业人员阅读。

4.3 操作系统视频推荐

清华大学公开课:操作系统,讲得很好,推荐一波

视频地址:open.163.com/newview/mov…

5. 计算机组成原理

5.1 为什么需要学习计算机组成原理

不管是前端还是后台开发,我们编程的程序,都是在计算机上跑的。日常开发中,可能很少机会接触到计算机底层。但是你知道吗,我们使用的Java、Python、Go等这些高级语言,最终变成计算机的指令,然后操作计算机硬件。当然,这些计算机基础知识点,在学校专业课上学好就可以啦。

如果你是计算机非科班,半路出家的。给你推荐本书,以及一个不错的视频吧

5.2 计算机组成原理书推荐

这本书主要讲了计算机系统体系结构计算机位运算指令集体系结构处理器控制

5.3 视频推荐

哈工大计算机组成原理:

视频地址:www.bilibili.com/video/BV1WW…

6. 缓存

6.1 为什么需要学习缓存

如果需要频繁查询数据库,使用缓存的话,就可以减少数据库的压力,提高接口性能。一般缓存用得比较多的话,有Redis,memcache,以及JVM本地缓存。

6.2 缓存相关书籍推荐

《Redis设计与实现》

系统而全面地描述了 Redis 内部运行机制。图示丰富,描述清晰,并给出大量参考信息,是NoSQL数据库开发人员案头必备。包括大部分Redis单机特征,以及所有多机特性。

本书全面讲解Redis基本功能及其应用,并结合线上开发与运维监控中的实际使用案例,深入分析并总结了实际开发运维中遇到的“陷阱”,以及背后的原因, 包含大规模集群开发与管理的场景、应用案例与开发技巧,为高效开发运维提供了大量实际经验和建议。

6.3 Redis相关文章推荐

6.4 视频推荐

Redis入门的话,推荐B站这个视频:《尚硅谷- Redis6 入门到精通》

视频地址:www.bilibili.com/video/BV1Rv…

7. 后端主流开发语言

当前主流后端开发语言如下:

7.1 Java

笔者目前是Java开发工程师。Java一般用来做应用的,它作为热门服务端语言活跃多年了,很多公司都有找Java程序员,市场有很多需求。所以说,选择学习Java,也许不是最好的,但是一定不会太差。当前那些银行金融机构,后端几乎都是Java语言。

学习Java,看书的话,推荐这两本书吧

《Java编程思想》

Java界的神书!本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,作者都会用小而直接的编程示例讲解明白。从Java的基础语法到最高级特性(深入的面向对象概念、多线程、自动项目构建、单元测试和调试等),本书都能逐步指导你轻松掌握。

《深入理解Java虚拟机》

这是一本从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典。

当然,Java相关的好书还有很多很多:

一份Java程序员的珍藏书单,请您注意查收

至于视频的话,如果你是零基础入门的,推荐看韩顺平的视频:零基础30天学会Java

7.2 C++

如果你还在读大学,你想进腾讯公司,那学好C++还是有挺大机会的。因为腾讯还是找挺多C++后台的。书籍的话,推荐这基本:《C++ Primer》、《Effective C++》、《C++ 标准程序库》

入门视频的话,可以看这个:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难

视频地址:www.bilibili.com/video/BV1et…

7.3 Python

python,可以用来做数据分析、机器学习,还也可以用来做后端开发、Web开发、前端、人工智能、大数据等等。它功能那个非常强大,而且比较简单,所以还是很受广大开发者欢迎的。入门python的话,可以看这本书

《Python编程:入门到实践》

这是一本入门好书,真的是手把手教你的,初学者成就感满满。

《流畅的Python》

很棒的书籍,从最底层去理解Python。适合想要扩充知识的中级和高级Python程序员。

7.4 Go

当前很多大厂,如腾讯、宇宙条、虾皮等等,都有用Go语言。所以学Go语言也是一个不错的选择。推荐几本关于Go语言的不错书籍。

《Go专家编程》

《Go专家编程》深入地讲解了Go语言常见特性的内部机制和实现方式,大部分内容源自对Go语言源码的分析,并从中提炼出实现原理。通过阅读本书,读者可以快速、轻松地了解Go语言的内部运作机制。

《The Go Programming Language》

这本书代码例子相当好,基本上很多概念,文字看不懂的话,多读几遍代码,很容易就能理解了

8. 消息队列

消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。消息队列本质上就是,生产者把消息发到队列存储,然后消息者消费的过程,它主要解决应用耦合,异步消息,流量削锋等问题。

对于后端程序员来说,消息队列是必学的!可以看这几本书哈

《Kafka权威指南》

本书详细介绍了如何部署Kafka集群、开发可靠的基于事件驱动的微服务,以及基于Kafka平台构建可伸缩的流式应用程序。通过详尽示例,你将会了解到Kafka的设计原则、可靠性保证、关键API,以及复制协议、控制器和存储层等架构细节。

《RabbitMQ实战指南》

《RabbitMQ实战指南》从消息中间件的概念和RabbitMQ的历史切入,主要阐述RabbitMQ的安装、使用、配置、管理、运维、原理、扩展等方面的细节。

学习视频的话,推荐:尚硅谷Kafka教程(消息队列kafka快速入门)

视频地址:www.bilibili.com/video/BV1a4…

9. Java Web

学好Java web的话,你就可以自己开发个网站啦,想想是不是很开心呀。Java web包括前端基础(如html,css,js等等)、servlet、JSP、Filter、Session、Cookie、springmvc等等。

推荐这个视频:尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版

视频地址:www.bilibili.com/video/BV1Y7…

10. 设计模式

如果你每天都是流水线式地写代码,如何在写代码中找到乐趣呢?最好的方式就是:使用设计模式优化自己的业务代码。

设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

学习设计模式,需要知道这六大原则:

  • 开闭原则:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。
  • 里氏代换原则: 任何基类可以出现的地方,子类一定可以出现。使用抽象类继承,不使用具体类继承。
  • 依赖倒转原则: 针对接口编程,依赖于抽象而不依赖于具体。
  • 接口隔离原则: 使用多个隔离的接口,比使用单个接口要好。它强调降低依赖,降低耦合。
  • 迪米特法则: 一个软件实体应当尽可能少地与其他实体发生相互作用,通过中间类建立联系。
  • 合成复用原则: 尽量使用合成/聚合的方式,而不是使用继承。

学习设计模式,书籍的话,推荐这几本书

《Head First 设计模式》

本书涵盖了23个设计模式,例子简单易懂,抛砖引玉,读起来很有意思的。真的是一本非常赞的设计模式入门书籍

《设计模式》

这本书结合设计实作例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。适合大学计算机专业的学生、研究生及相关人员参考。

《图解设计模式》

194张图表 + Java示例代码 = 轻松理解GoF的23种设计模式

学习视频的话,推荐B站这个:尚硅谷Java设计模式(图解+框架源码剖析)

视频地址:www.bilibili.com/video/BV1G4…

11. 代码优化

想成为一位高级开发工程甚至资深技术专家,不掌握常规的代码优化技巧,是说不过去的。我们日常开发中即使是增删改查,也是有很多地方值得优化代码的。

推荐几本优化代码的书:

《重构:改善既有代码的设计》

本书作者给出了一系列行之有效的整洁代码操作实践,些实践在本书中体现为一条条规则,并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。

《代码整洁之道》

本书作者给出了一系列行之有效的整洁代码操作实践,些实践在本书中体现为一条条规则,并辅以来自现实项目的正、反两面的范例。只要遵循这些规则,就能编写出干净的代码,从而有效提升代码质量。

《Effective java》

本书一共包含90个条目,每个条目讨论Java程序设计中的一条规则。这些规则反映了最有经验的优秀程序员在实践中常用的一些有益的做法。

12. 分布式

当前系统架构,都是分布式部署的。有关于分布式,我们主要有这些知识点需要学习:

12.1 分布式锁

作为分布式锁一般有数据库锁、redis分布式锁、还有zookeeper分布式锁。

之前写过一篇有关于redis分布式锁的文章:

七种方案!探讨Redis分布式锁的正确使用姿势

12.2 分布式一致性算法

分布式一致性算法有PAXOS、Raft、Zab

给大家推荐一本书吧:

《从Paxos到Zookeeper 分布式一致性原理与实践》

《Paxos到Zookeeper:分布式一致性原理与实践》从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议。

12.3 分布式事务

面试的时候,大厂特别喜欢问分布式事务。有关于分布式事务,需要知道数据一致性、CAP理论、BASE理论、分布式事务解决方案(如TCC、2PC、本地消息等等)。

推荐下我之前写得一篇文章。

后端程序员必备:分布式事务基础篇

12.4 一致性哈希算法

一鼓作气学会“一致性哈希”,就靠这 18 张图了

12.5 微服务

Dubbo、Spring Cloud、Zookeeper、RPC、 Eureka、Gateway、Sentinel这些名字是不是都比较熟悉了呢?

如果是新手的话,建议先从Dubbo开始学。对RPC、分布式概念基本了解后,就开始啃 Spring Cloud 全家桶。

推荐下B站,尚硅谷的Dubbo教程

视频地址:www.bilibili.com/video/BV1ns…

还有尚硅谷 SpringCloud的视频教程

视频地址:www.bilibili.com/video/BV18E…

顺便推荐下这本书:《微服务架构设计模式》

本书将教会你如何开发和部署生产级别的微服务架构应用。这套宝贵的架构设计模式建立在数十年的分布式系统经验之上,Chris 还为开发服务添加了新的模式,并将它们组合成可在真实条件下可靠地扩展和执行的系统。本书不仅仅是一个模式目录,还提供了经验驱动的建议,以帮助你设计、实现、测试和部署基于微服务的应用程序。

13. Spring、 SpringMVC、MyBatis、SpringBoot、SpringSecurity、netty

Java开发,日常都需要用到的框架。推荐B站相关学习视频:

14.开发规范

写代码一定要遵循规范,因为不规范的代码维护起来成本很高,又容易出bug。

推荐 一本书:

《阿里巴巴 Java 开发手册》

它结合作者的开发经验和架构历程,提炼阿里巴巴集团技术团队的集体编程经验和软件设计智慧,浓缩成为立体的编程规范和最佳实践。

视频的话,推荐这个:华山版《Java开发手册》独家讲解

视频地址:developer.aliyun.com/live/1201

15. 版本管里工具

版本管理系统有SVn和Git,一般我们都是用Git。

熟悉和使用Git,是每位开发必备的技能。你需要知道怎么提交代码、推送代码到远程、从远程拉取代码、回退代码、合并代码以解决代码冲突。

推荐学习Git的视频:【尚硅谷】5h打通Git全套教程IDEA版

菜鸟教程www.runoob.com/git/git-tut…

之前写过一年关于Git的文章,写得挺好的:程序员必备基础:Git 命令全方位学习

16.安全相关

安全这一块,还是挺重要的。作为后台开发工程师,需要掌握加密解密过程、加签验签、web安全常见问题、服务器安全漏洞问题、基本授权认证实现。

之前写过一篇有关安全漏洞问题的,感兴趣可以看下。

程序员必备基础:10种常见安全漏洞浅析

17. 搜索引擎

我们日常开发的,经常有搜索的功能实现,数据量比较大时,搜索功能一般是基于Elasticsearch实现的。

  • Lucene 是apache软件基金会 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎
  • Elasticsearch 是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
  • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。

Elasticsearch入门的话,看这本书的《Elasticsearch实战》,虽然比较老了,新手还是可以的

当然,最好还是看官方文档吧。

18. linux

绝大多数企业,他们的项目都是不是在Linux服务器上的。因此,有必要学习Linux基本命令以及shell脚本的编写。

如果有条件的话,建议大家自己购买一台云服务器,并且在本地搭建 Linux 虚拟机环境,搞起来!

推荐这本书:《鸟哥的 Linux 私房菜 —— 基础篇》

如果想要入门,这本就是最好的选择了.讲得非常非常细致。

学习视频:【小白入门 通俗易懂】2021韩顺平 一周学会Linux

视频地址:www.bilibili.com/video/BV1Sv…

19.Java 练手项目

推荐几个练手的Java项目:

20. leetcode

当前互联网环境,如果想要进大厂的话,必须要要刷leetcode。因为每个大厂都会安排1~2到leetcode算法题。如果你打算换工作,那还是建议提前刷下leetcode题目。把leetcode题目哪些中等难度和简单的题目,都刷一遍就差不多啦。

如果你看书的话,推荐《剑指offer》以及《labuladong算法小抄》

在线刷题地址:leetcode-cn.com/

如果你看视频的话,推荐这个:这可能是B站讲的最好的数据结构算法-leetcode真题解析(2021年最新版)

视频地址:www.bilibili.com/video/BV1a5…

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改