菜单

基础技术

相关源文件

目的与范围

本页面概述了后端架构师需要掌握的核心基础技术。这些基本构建块构成了设计和实现健壮、高效、可扩展后端系统的基础。本页面涵盖了数据结构、算法、并发模型和操作系统概念,它们构成了高级后端技术的基础。

虽然本节侧重于核心技术基础,但更具体的实现细节可以在 系统设计基础设施与运维 等相关页面中找到。

基础技术概述

基础技术代表了构成所有后端系统的基础知识领域。掌握这些领域能够使架构师在系统设计、性能优化和可扩展性方面做出明智的决策。

图示:基础技术及其应用

来源:README.md21-88

数据结构

数据结构是有组织地存储和访问数据的结构。它们是更复杂系统的构建块,直接影响性能、内存使用和代码复杂性。

常见数据结构

图示:常见数据结构分类

来源:README.md21-35

后端系统关键数据结构

数据结构主要用例性能特征后端应用
队列任务调度、缓冲O(1) 插入/删除消息队列、请求处理
集合唯一集合O(1) 查找(平均)缓存、去重
列表/数组顺序数据O(1) 访问,O(n) 插入数据处理、分页
映射/字典键值对关联O(1) 查找(平均)配置、缓存、索引
分层数据O(log n) 操作数据库索引、文件系统
位图(BitSet)紧凑的位集合O(1) 操作布隆过滤器、权限

队列实现

Java 提供了多种针对不同场景优化的队列实现

  • ConcurrentLinkedQueue:使用 CAS(Compare-And-Swap)的非阻塞线程安全实现
  • ArrayBlockingQueue:由数组支持的有界阻塞队列
  • LinkedBlockingQueue:由链表节点支持的、可选有界的阻塞队列
  • DelayQueue:用于延迟处理的专用队列
  • PriorityBlockingQueue:按优先级排序的阻塞队列

来源:README.md369-373

基于树的数据结构

树结构对后端系统尤其重要,特别是在数据库实现中

  • B树和B+树:是数据库索引实现的基础(MySQL 使用 B+ 树来实现其聚集索引)
  • 红黑树:用于映射/集合实现的自平衡二叉搜索树
  • LSM树(Log-Structured Merge Trees):用于 HBase、LevelDB 和 RocksDB 等数据库,通过批量写入优化写入密集型工作负载

来源:README.md391-437

算法

算法是执行计算、数据处理和自动推理的系统化过程。它们决定了软件系统的效率和能力。

算法类别

图示:算法类别和示例

来源:README.md36-61

后端系统关键算法

排序算法

排序是许多后端流程中的基本操作。不同的算法具有不同的特性

算法平均时间复杂度空间复杂度稳定性最佳用途
快速排序O(n log n)O(log n)不稳定通用、内存排序
归并排序O(n log n)O(n)稳定外部排序、性能可预测
堆排序O(n log n)O(1)不稳定内存受限环境
计数排序O(n+k)O(k)稳定整数范围小
桶排序O(n+k)O(n+k)稳定数据均匀分布
基数排序O(nk)O(n+k)稳定固定长度整数

来源:README.md446-501

搜索和过滤算法

  • 二分查找:在已排序数组中高效查找,复杂度为 O(log n)
  • 布隆过滤器:一种概率性数据结构,用于成员资格测试,允许假阳性但无假阴性
  • 字符串匹配(KMP 等):高效查找文本中的模式

来源:README.md497-553

图算法

图算法对于许多后端操作至关重要

  • 深度优先搜索 (DFS):用于遍历/搜索树或图结构
  • 广度优先搜索 (BFS):图或树的逐层遍历
  • Dijkstra 算法:在图中查找最短路径
  • 最小生成树算法:优化网络设计

来源:README.md531-566

并发

并发使系统能够同时处理多个任务,这对于构建高性能、响应迅速的后端系统至关重要。

并发模型

图示:并发模型和同步机制

来源:README.md62-80

Java 并发

Java通过各种机制提供了丰富的并发支持

  • 基于线程的并发:基本线程、线程池、执行器框架
  • 同步synchronized 关键字、锁、原子变量
  • 并发集合:线程安全的集合实现
  • 高级并发工具:CompletableFuture、Fork/Join 框架

来源:README.md570-578

线程安全

线程安全可确保在并发环境中的正确操作

  • 不变性:创建后不可修改的对象天然是线程安全的
  • 线程封闭:将数据访问限制在单个线程中
  • 同步:控制对共享资源的访问
  • 原子操作:看起来瞬时发生的操作
  • 并发集合:专为并发访问设计的集合

来源:README.md578-580

锁和同步

各种锁定机制服务于不同的目的

锁类型描述用例
重入锁允许同一线程重新获取锁大多数通用锁定需求
读写锁允许多个线程并发读取,但只允许一个线程独占写入读密集型工作负载
公平与非公平控制锁是否按请求顺序授予防止饥饿
乐观与悲观乐观假设冲突很少,悲观防止冲突取决于冲突频率
CAS(比较并交换)非阻塞同步原语高并发场景

来源:README.md620-690

事务和一致性

事务管理对数据库操作至关重要

  • ACID 属性:原子性、一致性、隔离性、持久性
  • 隔离级别:读未提交、读已提交、可重复读、串行化
  • MVCC(多版本并发控制):允许读取者在不阻塞写入者的情况下进行操作

来源:README.md583-618

操作系统

理解操作系统概念对于高效的后端系统设计和性能优化至关重要。

核心操作系统概念

图示:操作系统组件和类型

来源:README.md81-88

进程和线程管理

进程和线程是基本的执行单元

  • 进程:一个正在执行的程序的实例,拥有自己的内存空间
  • 线程:进程内的轻量级执行单元,共享进程的资源
  • 上下文切换:在进程或线程之间切换时保存和恢复 CPU 状态的机制
  • 调度:决定哪个进程或线程获得 CPU 时间的算法

来源:README.md84-86

CPU 和内存架构

了解 CPU 和内存架构会影响性能优化

  • CPU 缓存:现代 CPU 拥有多个缓存级别(L1、L2、L3)

    • L1 缓存:通常为 32KB,访问速度最快
    • L2 缓存:通常为 256KB,速度中等
    • L3 缓存:通常为 12MB,速度较慢但仍比 RAM 快
    • 内存访问需要大约 200 个 CPU 周期,而缓存访问只需要大约 1 个周期
  • 内存层次结构:从寄存器到磁盘存储,容量不断增加但速度不断降低

  • 虚拟内存:将虚拟地址映射到物理地址,实现进程隔离和内存超额认购

来源:README.md81-88 README.md719-722

Linux 用于后端开发

Linux 是后端服务器的主导操作系统。关键方面包括

  • 进程管理:命令如 pstopkill
  • 文件系统:了解 inode、权限、挂载点
  • 网络配置:如 ifconfignetstatiptables 等命令
  • 性能监控:如 sarvmstatiostat 等工具
  • Shell 脚本:自动化重复任务

来源:README.md739-742

与高级后端技术的集成

了解这些基础技术如何支持更高级别的后端组件,对于有效的架构设计至关重要。

图示:基础技术如何支持后端系统

来源:README.md21-88 README.md1128-1169

对后端架构师的重要性

后端架构师必须掌握这些基础技术,因为它们

  1. 决定性能边界:所选的数据结构和算法设定了系统性能的基本限制
  2. 影响可扩展性:理解并发模型能够设计出有效扩展的系统
  3. 影响资源利用:了解操作系统行为有助于优化资源使用
  4. 指导技术选型:基础知识有助于评估和选择合适的技术
  5. 便于故障排除:对基础知识的深入了解对于诊断复杂的系统问题至关重要

总结

基础技术构成了后端系统的基石。精通数据结构、算法、并发和操作系统,可以使架构师在系统设计、优化和权衡方面做出明智的决策。虽然更高级的框架和工具可能会抽象化这些基础知识,但理解它们对于设计真正有效、高效且可扩展的后端系统仍然至关重要。