草庐IT

后端开发学习路线

果冻同学 2023-11-12 原文

不知不觉已经五月份了,距离“金九银十”的秋招季还有不到四个月的时间。由于一直忙着做项目,之前在工作方面并没有做什么准备。本人是非计算机专业的,只学过c语言和数据结构基础,目前初步打算从事后端开发相关工作。

写这篇文章之前也在网上查了很多资料,看了许多大神写的学习路线和规划,个人感觉面试所需要的技能树大概是编程语言 + 数据结构与算法 + 操作系统 + 计算机网络 + 设计模式 + 数据库 + Linux + 计算机原理 + 编译原理。计算机原理和编译原理是计算机科班的专业课,学过的话会对自身能力有一定提升。

1. 编程语言

编程语言是实现思想和算法的基础,所有想法最终都需要使用某种语言来实现。由于之前做项目接触过挺多 C++,只是没有系统学习过。再加上本身对底层操作也比较感兴趣,因此选择 C++ 作为编程语言。

豆瓣上评分较高的书有《C++ Primer》,但这本书写的过于全面详细,上来看这么厚一本书不光浪费时间,还容易被劝退。因此可以从《Essential C++ 中文版》入门,看完之后可以对 C++ 有一个大概的了解,之后再看《C++ Primer》,再到《Effective C++中文版》。编程语言相对其他知识来说并不是最重要的,因此在学这部分的时候最好短时间、高强度地啃下来,战线拉太长的话不但会耽误时间,也会影响学习效果。

当然,编程语言的选择要结合自身兴趣和职业规划来确定,这部分学习内容是因人而异的。

2. 数据结构与算法

数据结构与算法在学习内容里非常非常重要! 不但笔试会考查,面试的时候也经常会要求手撕代码。

如果之前没学习过数据结构或是已经忘的差不多了的话,可以看一下《大话数据结构》,书里的内容都是大白话,而且还图文并茂,便于快速了解数据结构相关知识点。

至于算法,推荐看书+刷题结合的学习方式。参考书可以选择《剑指Offer:名企面试官精讲典型编程题(第2版)》,刷题推荐使用LeetCode。牛客网上也有面试速刷TOP101题单,可以配合使用。

《剑指 offer》作为大经典,是一定要刷两遍以上的,很多题都是面试时的原题,里面包含了很多笔试常用的思想方法,需要反复看。此外,刷题还需要不断地总结和回顾才能达到有效刷题。在巩固完弱项的情况下,建议将 LeetCode 前 300 题刷熟练。此外,还可以参考一下《labuladong总结的算法小抄》,对算法的理解很有帮助。

根据我的面试经历,根据个人感觉,公司常考题有:
1. 链表类(链表反转类题目)
2. 二叉树类(二叉树的遍历类型题,最大公祖先类题目)
3. 字符串操作题目
4. dfs/bfs
5. 动态规划(这个考的基本都是 leetcode 上的或者是背包问题,对于动态规划问题其实有很多种类,比较见到的就是一维动态和二维动态),另外还有区间调度类型的题目(贪心算法,也属于动态规划的一种特殊情况。

3. 操作系统

操作系统比较重要的四大模块分别是内存管理 (opens new window)进程管理 (opens new window)文件系统管理 (opens new window)输入输出设备管理 (opens new window)。这是推荐的学习顺序,因为内存管理不仅是最重要、最难的模块,也是和其他模块关联性最大的模块,先把它搞定,后续的模块学起来会相对轻松一些。

B站关于操作系统课程资源很多,比较好的入门课程是清华大学《操作系统》,课程授课的顺序为「内存管理→进程管理→文件系统管理→输入输出设备管理」。此外还有哈工大《操作系统》,这个相对清华的更加细节,老师会用 Linux 内核代码的角度进一步讲解操作系统。

当然也可以直接看书,初学者可以先看一下《操作系统导论》,这本书讲的比较浅而且易懂,然后再看《现代操作系统》,看的差不多了,最后看《深入理解计算机系统》。最后这本可以跳着看,有几章节是用纯汇编演示的,不懂的同学粗略看一看也没关系。

4. 计算机网络

入门 HTTP 最好书籍就是《图解 HTTP》了。如果要入门 TCP/IP 网络模型,推荐《图解 TCP/IP》,这本书也是以大量的图文来介绍了 TCP/IP 网络模式的每一层,但是这个书籍的顺序不是从「应用层→物理层」,而是从「物理层→应用层」顺序开始讲的,这一点我觉得不太好。一上来就把最枯燥的部分讲了,很容易就被劝退了。可以先跳过前面几个章节,先看网络层和传输层的章节,然后再回头看前面的这几个章节。

另外,如果想了解网络是怎么传输,推荐《网络是怎样连接的》,这本书相对比较全面的把访问一个网页的发生的过程讲解了一遍,其中关于电信等运营商是怎么传输的,这部分可以跳过。

对于 TCP/IP 网络模型深入学习的话,推荐《计算机网络:自顶向下方法》,这本书从我们最熟悉 HTTP 开始说起,一层一层的说到最后物理层的,有种挖地洞的感觉,这样的内容编排顺序相对是比较合理的。

但如果要深入 TCP,前面的这些书还远远不够,赋有计算机网络圣经的之说的《TCP/IP 详解 卷一:协议》这本书,是进一步深入学习的好资料,这本书的作者用各种实验的方式来细说各种协议,但真的很枯燥。可以只看 TCP 部分,其他部分选择性看。一定要过几遍这本书的 TCP 部分,涵盖的内容非常全且细。

5. 设计模式

可以通过《大话设计模式》入门,对设计原则和常用的设计模式有个印象。在没有商业项目和工作经验的前提下,应届生很难真正熟悉这些。此外也可以找一下别人博客总结的一些知识。

6. 数据库

数据库方面 MySQL 和 Redis 是两个比较常用的数据库。

MySQL 入门推荐《SQL必知必会》,这一本很薄的书,主要是讲数据库增删查改的 SQL 语法,之后看《MySQL是怎样运行的》。MySQL 用的最多的就是 InnoDB 引擎了,进一步学习 InnoDB 是很有必要的,可以看《MySQL技术内幕》。最后稍微看一看《高性能MySQL》(挑章节看,这本书讲的太深,理解起来比较困难)。

最好在学完这些之后自己动手去部署一个 MySQL,然后挑一些小项目做一做。

介绍下 MySQL 的重点知识,也是面试常面的知识点:
1. 基本语法:select/delete/insert/update、limit、join等
2. 索引:B+树,聚族索引,二级索引,组合索引,最左匹配原则,索引失效、慢查询
3. 事务:事务四大特性ACID,事务隔离级别,MVCC
4. 锁:全局锁、表级锁、行级锁、快照读、当前读、乐观锁、悲观锁、死锁
5. 日志:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)
6. 架构:读写分离、主从架构、分库分表、数据库和缓存双写一致性

Redis 的话推荐圣经级别的书——《Redis设计与实现》。这本书不是教你如何使用 Redis,而是讲解跟你讲Redis是怎么实现,怎么设计的,也就说源码级别的学习,但是书上并没有大段贴代码,作者是用伪代码的方式来讲解,所以读起来不会太难。书本上主要围绕这几大知识点:数据结构、AOF 和 RDB 持久化技术、网络输入输出系统、主从复制、哨兵模式、集群模式。看完基本就入门 Redis 了,不仅会了 Redis 基本命令,还懂 Redis 的实现,剩下的就是学习如何在实战中运用 Redis。这里推荐《Redis实战》,该书通过实际的例子, 展示了使用 Redis 构建多种不同的应用程序的方法。

7. Linux

Linux 的话可以先看《鸟哥的 Linux 私房菜》,对 Linux 整体有了一些了解之后再看一看《Linux 系统编程》

走后端方向的话可以看一下《Linux高性能服务器编程》,都是干货。跟着书上做一个服务器相关的项目,会有助于加深理解。Linux 系统的话纯看书可能事半功倍,最好在 Linux 环境下做两个小项目,对整体学习可能更有用处。

8. 附录

在确定学习路线的过程中查阅了许多资料,也发现了很多有价值的网站。如下:

有关后端开发学习路线的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  9. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  10. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

随机推荐