# 后端

> By [Yuxing Tu](mailto:undefined)

### 后端的定位

后端工程师主要进行业务架构设计和业务逻辑实现。各种应用俗称的“后台”就属于后端范畴。

### 课程学习

后端由于涉及面广，因此需要很多计算机基础知识。通常来说，需要如下四门课的前置知识：

1. 数据结构与算法
2. 计算机网络
3. 操作系统
4. 数据库原理

其中1是一切后端相关技能树的基石，而2与3是理解各种后端逻辑的基础。对于我校学子，大三下学期前掌握1、2、3基本上可以找到后端相关的实习。而4的学习是更加进阶地理解数据的建模与查询策略，涉及到很多系统设计知识，可以最后掌握。

### 课程资源

对应于前期的学习，有如下非常好的课程资源推荐（以下推荐均为可选项并不意味着都要学）。请学会使用Google来搜索以下资源的相关讲解～

1. 数据结构与算法：
   * [Berkeley CS61b](https://inst.eecs.berkeley.edu/~cs61b/sp22/)
2. 计算机网络：
   * [Stanford CS144](https://cs144.github.io/)
   * Unix Network Programming, 俗称UNNP
   * TCP/IP详解卷I II
3. 操作系统：
   * [Operating System: Three Easy Pieces(OSTEP)](https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/chinese)
4. 数据库：
   1. [PingCAP Talent Plan](https://github.com/pingcap/talent-plan)
   2. [CMU 15445/645](https://15445.courses.cs.cmu.edu/fall2021/)

### 学习路线

因为专业、背景、基础不同，后端工程师并没有一个通用的学习路线。因此下面把后端的学习路线分为几个方面并对其难度进行打分，读者可以**自行组合**形成自己的学习路线

### 1. 源码阅读

#### **网络:**&#x20;

* *nginx*��🌟🌟
  * [ ] [*nginx源码解读*](https://static.kancloud.cn/digest/understandingnginx/202586)

#### **存储:**&#x20;

* *redis*��🌟：
  * [ ] <https://www.zhihu.com/question/28677076>
  * [ ] <https://redissrc.readthedocs.io/en/latest/>
* leveldb/boltdb🌟🌟🌟
  * [ ] [leveldb源码解读系列](https://mrcroxx.github.io/categories/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAleveldb/)
  * [ ] [boltdb源码解读系列](https://mrcroxx.github.io/categories/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAboltdb/)

#### **分布式系统:**&#x20;

* CAP定理&#x20;
* Raft/Paxos🌟🌟🌟:
  * [ ] etcd v0.2.x raft module
  * [ ] [深入浅出etcd/raft](https://mrcroxx.github.io/categories/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAetcd/raft/)
* 2PC（2阶段提交）
  * [ ] [Google percolator论文解读](https://zhuanlan.zhihu.com/p/53197633)
  * [ ] [Google Percolator论文原文](https://research.google/pubs/pub36726/)

### 2.项目

### 3. 语言

### 4. Linux使用

### 5. 课设与Lab

### 后端如何选部门

#### 面试难度上

面试难度应该和自身面试情况相匹配

* 算法、基础架构相对业务部门要难
* 缺人的时候不那么难
* 公认的核心部门相对更难

#### 发展前景上

结合部门业务前景去看适不适合自己

* 核心盈利的部门会比较卷，收益可能较高
* 高增长的部门晋升机会多，收益也可能高
* 架构类部门较稳定，业务部门上升机会更多
* 有的成功业务会有部门光环，有利于跳槽


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://1037survival.gitbook.io/survive-in-1037-forest/campus-recruiting/internet-industry-technical-job/backend.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
