聊聊后端程序员的知识体系-第一篇

聊聊后端程序员的知识体系-第一篇

亲爱的读者您好,感谢您在阅读我的文章。

出于发布渠道的考虑,我可能在各个渠道更新文章不够及时。

因此,如果您喜欢我的文章,想阅读更多我的文字,

您可转到我的个人博客或者公众账号阅读文章: 聊聊后端程序员的知识体系-第一篇

0xFF 写在前面

"路漫漫其修远兮,吾将上下而求索!"

0x00 计算机科学基础知识

0x01 硬件相关

首先思考这个问题:为什么我需要了解计算机硬件? 在我看来,有这么几个原因:

第一,“爱美之心,人皆有之!” 计算机硬件中很多设计非常优美,这些优美的设计自然会吸引人们去追逐他。例如,计算机如何表示一个负数、浮点数等。

第二,只有充分了解了硬件,才能设计出足够高性能的程序。试想,如果你不知晓CPU缓存一致性协议,甚至不知晓L1、L2缓存,怎么可能写出高性能并发程序?

第三,计算机硬件的许多设计思想,对我们平常设计系统大有裨益。举个例子:稀疏索引跟CPU缓存与主寸的组相联映射的设计思想便十分相似。 聊聊后端程序员的知识体系-第一篇

我这边尽量罗列一些跟我们平常工作相关的硬件知识,供各位参考。

  1. 计算机如何表示一个数,包括正整数、负数、浮点数等;
  2. CPU的组成以及了解各个寄存器如何协作完成一次完整的函数调用; 聊聊后端程序员的知识体系-第一篇
  3. CPU L1/L2缓存作用以及缓存一致性协议MESI;
  4. 计算机访问时间金字塔; 聊聊后端程序员的知识体系-第一篇
  5. 中断:包括常见的硬件中断、软中断;
  6. CPU是如何访问主存(By总线),外存(DMA)的;

0x02 操作系统相关

操作系统是计算机学科必学科目,其重要性不言自明,不再赘述。同样罗列下比较实用的操作系统相关知识点:

  1. 进程与线程的本质,进程调度的原理;
  2. OS如何管理物理内存、虚拟内存,OS是如何跟硬件配合完成虚拟内存到物理内存的转换的;
  3. OS是如何运行一个可执行程序的? 虚拟内存空间构成如何?
  4. 进程同步原理与思想;
  5. OS如何管理磁盘(Bitmap)、文件系统;
  6. OS是如何支持系统调用的,系统调用与库函数有何区别?

0x03 网络相关

网络相关知识中,最重要的有两块:

第一、TCP协议

TCP协议在平常工作中非常重要,如果熟悉tcp协议,那么一个合格的后端程序员借助于tcpdump输出的结果,搭上眼一看便应该可以知道 出现的问题是Client端还是Server端的问题。

  1. 最基本的三次握手、四次挥手以及其中涉及的种种状态(不要仅限于知道这个知识点,要去考虑为什么这么设计,不那么设计。) 聊聊后端程序员的知识体系-第一篇
  2. TCP协议设计原理,包括窗口控制(滑动窗口思想)、拥塞控制等

第二、Http协议

平常工作中,会遇到个别同学搞不定Tcp协议与Http协议,这样子是非常不应该的。关于Http协议你不需要了解太多,但是你最起码应该要知道这些:

  1. Http协议大概长什么样(Header、Body)
  2. 5XX, 3XX等各种Code的含义
  3. Post跟GET的区别,以及有多少种POST数据的方式?

0x04 数据结构与算法

这一块水很深,做一个简单的罗列吧:

第一、掌握最基本的算法思想,包括但不限于:位运算、递归与递推、前缀与差分、二分、双指针(对撞、快满、滑动窗口)、排序(离散化、中位数)、 倍增、贪心等

第二、掌握最基本的数据结构,包括但不限于:栈(单调栈思想解决NextSmaller问题)、队列(单调队列解决窗口最值问题)、链表、Hash、字符串(P进制哈希、KMP)、Trie、堆等

第三、掌握两种搜索思想:DFS、BFS,了解其区别,会进行最基本的剪枝优化

第四、掌握动态规划思想,具体包括:线性DP、背包问题、区间DP、树形DP、数位统计DP、状态压缩DP、倍增优化DP等

最后、图论,能够将具体的问题转化为图的几类问题(最短路、最小生成树、二分图匹配、网络最大流等)

0x10 高性能服务器设计

0x20 数据库与缓存

0x30 分布式系统

本文由博客群发一文多发等运营工具平台 OpenWrite 发布