你们后端,到底要学啥?

程序员鱼皮

共 4139字,需浏览 9分钟

 ·

2021-12-22 23:22

最近有小伙伴问我,一名后端工程师的学习路线是什么?其实现在很多程序员都不是科班出生的,包括我自己,大学压根没学过什么计算机相关的课程。非科班出生的程序员的劣势在于基础会稍差,比如计算机基础、计算机网络等都了解的不多,不过没关系,只要你利用业余时间系统的来学习,照样可以做到后来居上。但是问题是,我们的学习路径是什么?该如何学,网上课程那么多,我到底该看哪一个?打开自己的收藏夹,数不清的资料全部在吃灰,到头来一个也没学。

其实同类型的资料我们保存1-2个就足够了,然后一段时间内专心学习一门知识,猥琐发育,最后惊艳所有人。

ok,废话不多说,我今天要分享的就是后端工程师的学习路径和相关的书籍、视频,由于后端语言居多,所以本文不会分享语言相关的内容。

计算机组成原理

首先要讲的自然就是计算机组成原理相关的知识了,当然这并不是和你单单的介绍计算机是什么组成的,不是教你如何组装电脑,而是告诉你比如计算机是如何运算我们的数据的、CPU这个大脑是如何高效处理我们的逻辑的、CPU又是如何与内存之间通信的,加快执行我们的程序在CPU维度有哪些优化以及我们运行程序的时候如何解决CPU和内存、内存和磁盘之间的速度鸿沟等等...

这里我和大家推荐 《计算机组成与设计 硬件/软件接口》 这本书

学习这本书你可以获取以下知识:

  1. 计算机是怎么从大型设备逐渐发展到今天的个人PC机,以及计算机系统结构中的8个伟大的思想:面向摩尔定律的设计、抽象的简化设计、加速大概率事件、通过并行提高性能、通过流水线提供性能、通过预测提供性能、存储器层次、通过冗余提高可靠性。
  2. 如何判断一个CPU的性能?最直白的反应就是CPU够不够快,也就是我们的程序要跑多久,这个响应时间我们一般称之为CPU执行时间,这里需要注意的是CPU执行时间并不包含程序执行期间涉及的IO,再细分的话,又可以分为用户CPU时间和系统CPU时间
  3. 有无符号数和无符号数是如何表示的?CPU如何进行比较运算、分支判断、循环执行的?我们的代码其实是要经过编译、汇编、链接这样几个流程的,加法、减法、乘法、除法以及浮点数相关的运算在计算机层面是如何被实现的。
  4. CPU是如何进行数据冒险,控制冒险的?流水线技术是如何提供吞吐的,处理器的数据通路和控制同路是如何设计的。
  5. 再接下来就是存储器相关的知识了,比如虚拟内存技术、程序分段技术、分页技术,当发生缺页后如何找到磁盘页的,以及为了提升地址的查询速度,做了哪些优化,页表的好处与坏处是什么?TLB的好处与坏处是什么?

总之,学习了计算机组成之后,内功绝对可以大增。如果觉得书本知识枯燥难以阅读的话,我这里再给你推荐个视频:计算机科学速成课(https://www.bilibili.com/video/BV1EW411u7th)

非常生动形象的课,一共40集,每集大概10分钟,全部看完7个小时足矣,非常适合入门,这个视频配上书籍,简直完美。

操作系统

学习计算机组成原理之后,我们会了解计算机各个硬件之间是如何协调工作的,那么接下来就是肝操作系统了,操作系统是处于计算机硬件与软件资源之间的程序。从程序员的角度来看,学习操作系统可以帮助我们更好的了解程序是如何被调度的等等。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务,操作系统也提供一个让用户与系统交互的操作界面。这里和大家推荐 《现代操作系统》 这本书

通过学习这本书你可以获得以下知识:

  1. 进程是什么、进程的模型、进程的创建、进程的终止、进程的层次结构、进程的实现、多道程序的设计模型
  2. 线程是什么、线程模型、用户空间的线程、内核空间的线程、单线程与多线程的优缺点
  3. 进程间可以通过哪些方式来通信,什么是进程间的竞争条件、临界区
  4. 调度过程涉及到的算法,比如先来先服务、短作业优先算法、最短剩余时间优先以及比较公平的时间片轮转调度
  5. 常见的页面置换算法有哪些,比如最优页面置换算法、最近未使用页面置换算法以及最近最少使用页面置换算法等等
  6. 文件系统的了解,比如有关文件的构造、命名、访问、使用、保护、实现和管理是怎么设计的
  7. IO设备的了解,比如如何读写IO设备的内容,常见的有内存映射IO、直接存储器存取
  8. 了解什么是死锁,造成死锁的条件以及解决死锁的经典方法,如何预防死锁等等

如果觉的书本知识难以阅读的话,这里也推荐个视频操作系统-清华大学(https://www.bilibili.com/video/BV1wq4y1M7qf)

这是由清华大学的老师讲的操作系统视频课,简单、通俗易懂,每段视频的时长也不长,大概就10来分钟。

TCP/IP

当具备了计算机组成、操作系统的基础知识后,接下来就可以看看网络相关的内容了,计算机网络中面试官最喜欢问的就是TCP/IP相关的知识了,关于这方面的知识,我推荐一本书 《图解》TCP/IP

这本书全文基本都是图文结合的,阅读起来非常轻松,不得不说这个日本作者很牛逼,可以把很复杂的网络协议解释的这么简单,关键图文的方式更加容易记忆。

我这里还推荐一本掘金小册 《深入理解 TCP 协议:从原理到实战》

这本小册,我记得当时花了2-3天就看完了,整个阅读体验非常丝滑,也是非常通俗易懂的书籍,如果想要应付面试,这本小册绝对是个不错的选择。总之通过以上两本书,你可以获得以下知识:

  1. 网络的分层模型
  2. TCP协议为什么是可靠的协议
  3. 什么叫面向连接、基于字节流、全双工的协议
  4. 数据包是如何被拆分的,MTU和MSS分别是什么,位于哪一层
  5. 为什么TCP、IP的握手需要三次,挥手要四次,挥手三次行不行
  6. 三次握手太慢,有没有更快的方式
  7. TIME_WAIT是什么状态?TIME_WAIT是哪一方的状态,为什么TIME_WAIT那一方需要持续2个MSL的时间
  8. 不知道你有没有遇到过"Connection Reset" 或者"Connection refused" ,它们代表什么意思
  9. 发送方没收到接收方的ACK怎么办,发送方重传的机制是怎么样的,多久重传才合适
  10. 如果接收方没有能力接受大量的数据怎么办,这就引入了滑动窗口的概念,滑动窗口是如何控制数据窗口大小的
  11. 一开始发送方并不知道接收方能接收多少数据,那如何发送数据呢,每次发一点太慢,每次发很多对方又接收不了

总之,如果你的工作不是搞网络的,又不想花费大量时间来阅读TCP相关的知识,那么上面两本书个人觉得足够了。

数据结构与算法

这方面我看的书比较少,所以不打算推荐书籍,数据结构与算法可能大家更加注重的算法,BAT等大厂的面试离不开算法,以前听到小道消息,据说字节跳动的面试官一般算法题都会从leetcode上挑选原题,并且也不会太难,所以这方面的知识,我还是直接建议大家动手练写,直接去leetcode上刷题,比如每日2道,一个月下来就是60道

如图所示,具体的算法分类大概这么多,大家刷题的时候,注意不要把精力全部都放在一种类型上,尽量广一点,当然有很多冷门的类型,个人觉得也不必花费太多时间,像热门的算法如数组、字符串、动态规划、图、链表等可以多花点心思。

这里再推荐一个学习数据结构的有趣网站 visualgo(https://visualgo.net/zh)

这个网站通过动图的方式帮助你了解各种数据结构是怎么样的形式。

比如对于这个二叉搜索树来说,每次走到哪个节点,对应的代码还给你展示出来,确实很生动。

MySQL

MySQL应该是每个后端工程师必备的技能,当然这里说的不是简单的CURD,而是稍微高级点的,比如索引知识、架构模式、高可用等等,由于现在MySQL基本都是使用InnoDB存储引擎,因此我推荐 《MySQL技术内幕 InnoDB存储引擎》

通过这本书,你可以了解到以下知识:

  1. MySQL几种存储引擎的介绍与比较
  2. InnoDB的架构模式
  3. 插入缓冲、两次写、自适应哈希、异步IO、刷新邻接页分别是为了解决什么问题
  4. 日志类型,比如错误日志、慢查询日志、二进制日志等
  5. 索引相关知识,为什么用b+树索引,聚集索引和辅助索引的区别,b+树索引的分裂与管理,什么情况下用联合索引,覆盖索引为什么好
  6. 锁相关的知识,InndoDB会涉及哪些锁,行锁有哪些算法,死锁怎么避免
  7. 什么是脏读、幻读,如何解决
  8. 事务相关的知识,这个是重中之重了,比如redo log、undo log是干什么的,事务的隔离级别有哪些,它们有什么区别?XA事务是在什么地方体现的,长事务会有什么问题

自古MySQL就是后端同学面试中的必考技能,并且随着互联网卷的程度越来越高了,MySQL问的姿势也多了,因此这方面是需要多花时间学习的。

当然如果条件允许的话,也推荐看林晓斌老师的《MySQL45讲》,但是这门课不适合新手小白,适合有一定MySQL基础的从业人员,看完绝对收获满满。

Redis

说了数据库,就得说缓存了,说到缓存,那就是当下最流行的NoSQL数据库Redis,Redis面试的重要程度不亚于MySQL,我这里和大家推荐 《redis的设计与实现》

通过这本书,你可以获得以下知识:

  1. 基本的底层数据结构以及优缺点,比如SDS、整数集合、跳跃表、压缩列表
  2. 哈希表是如何解决冲突的
  3. 持久化相关的,AOF和RDB的区别,它们的优缺点是什么,AOF和RDB的过程会阻塞主进程吗
  4. redis的过期键是如何删除的
  5. redis的事件模型,文件事件和时间事件分别是什么
  6. serverCron函数是干嘛的
  7. 主从复制模式下,旧版和新版的复制模式有什么区别
  8. 哨兵、分片
  9. lua脚本解决原子性的问题

这本书侧重原理与实现,阅读起来也是通俗易懂,适合新手小白和需要进阶的工程师。

最后

创作不易,各位的「三连」就是对作者最大的支持,也是作者最大的创作动力,我们下期见。

往期推荐

我竟然被一个AI机器人坑了!

没有服务器,也能做网站!?

一键生成几千套代码模板,这个神器有多刺激!

万万没想到,这都能发现 Bug?!

这款内网穿透神器,免费!


浏览 29
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报