- 将项目概述文件移至根目录 - 将算法学习指南移至 questions 目录 - 将面试准备进度移至根目录 - 删除空的 questions 文件 - 更新 Obsidian 主题配置
122 lines
4.2 KiB
Markdown
122 lines
4.2 KiB
Markdown
# 算法与数据结构学习指南
|
||
|
||
## 概述
|
||
|
||
本项目包含算法和数据结构相关的面试题和详细解释,涵盖了后端面试中最重要的数据结构及其实现。
|
||
|
||
## 核心算法主题
|
||
|
||
### 1. B+ 树(B+ Tree)
|
||
- **位置**:`08-算法与数据结构/B+树原理.md`
|
||
- **重点**:数据库索引、文件系统
|
||
- **核心特性**:多路搜索树、有序叶子节点、高效范围查询
|
||
- **应用**:MySQL、PostgreSQL、文件系统
|
||
|
||
### 2. LRU 缓存(LRU Cache)
|
||
- **位置**:`08-算法与数据结构/LRU缓存实现.md`
|
||
- **重点**:缓存淘汰策略
|
||
- **核心特性**:最近最少使用淘汰、O(1) 操作
|
||
- **应用**:Web 缓存、数据库查询缓存、内存管理
|
||
|
||
### 3. 红黑树(Red-Black Tree)
|
||
- **位置**:`08-算法与数据结构/红黑树原理.md`
|
||
- **重点**:自平衡二叉搜索树
|
||
- **核心特性**:红黑着色、O(log n) 操作
|
||
- **应用**:Java TreeMap、Linux 内核、数据库索引
|
||
|
||
### 4. 跳表(Skip List)
|
||
- **位置**:`08-算法与数据结构/跳表原理.md`
|
||
- **重点**:概率型数据结构
|
||
- **核心特性**:多层链表、O(log n) 操作
|
||
- **应用**:Redis 有序集合、数据库索引、路由表
|
||
|
||
### 5. 时间轮(Timing Wheel)
|
||
- **位置**:`08-算法与数据结构/时间轮算法.md`
|
||
- **重点**:任务调度和延迟执行
|
||
- **核心特性**:分层时间桶、高效任务管理
|
||
- **应用**:分布式系统、消息队列、缓存过期
|
||
|
||
## 文档结构
|
||
|
||
每个算法文档包含:
|
||
|
||
### 核心组件
|
||
1. **原理**:数据结构的详细解释
|
||
2. **图解说明**:图表示例
|
||
3. **代码实现**:完整可运行的代码
|
||
4. **时间复杂度分析**:性能分析
|
||
5. **实际应用场景**:真实用例
|
||
6. **对比**:与其他数据结构的对比
|
||
|
||
### 面试重点
|
||
- **时间复杂度**:所有操作的大 O 分析
|
||
- **空间复杂度**:内存使用分析
|
||
- **实际应用**:在何处以及为何使用每种结构
|
||
- **常见面试问题**:详细答案的 Q&A 部分
|
||
|
||
## 使用指南
|
||
|
||
### 面试准备
|
||
1. 从 **B+ 树**开始 - 数据库理解的基础
|
||
2. 学习 **LRU 缓存** - 系统设计面试必备
|
||
3. 理解 **红黑树** - 理解平衡树
|
||
4. 探索 **跳表** - 理解概率平衡方法
|
||
5. 掌握 **时间轮** - 分布式系统关键
|
||
|
||
### 实际实现
|
||
- 每个文档包含多种实现方法
|
||
- 从基本实现开始,然后探索高级变体
|
||
- 研究并发实现用于生产环境
|
||
- 理解不同方法的权衡
|
||
|
||
### 关键学习点
|
||
1. **理解"为什么"**:不仅是如何,还有为什么每种结构存在
|
||
2. **权衡**:每种结构都有优缺点 - 理解它们
|
||
3. **性能**:始终考虑时间和空间复杂度
|
||
4. **实际应用**:将正确的结构匹配到正确的问题
|
||
|
||
## 相关资源
|
||
|
||
### 系统设计主题
|
||
- `01-分布式系统/数据库分库分表.md`:数据库分片策略
|
||
- `04-消息队列/消息队列(RocketMQ_Kafka).md`:消息队列实现
|
||
- `05-并发编程/限流策略与算法.md`:限流算法
|
||
- `01-分布式系统/一致性哈希.md`:一致性哈希
|
||
|
||
### 性能优化
|
||
- `02-数据库/MySQL索引优化.md`:MySQL 索引优化
|
||
- `01-分布式系统/MySQL主从延迟.md`:数据库复制策略
|
||
- `03-缓存/缓存穿透击穿雪崩.md`:缓存问题和解决方案
|
||
|
||
### 微服务和分布式系统
|
||
- `01-分布式系统/分布式ID生成.md`:分布式 ID 生成
|
||
- `01-分布式系统/分布式事务.md`:分布式事务
|
||
- `07-系统设计/社交信息流设计.md`:Feed 流系统设计
|
||
- `07-系统设计/LBS附近的人设计.md`:负载均衡系统设计
|
||
- `07-系统设计/秒杀系统设计.md`:秒杀系统设计
|
||
- `07-系统设计/短链接系统设计.md`:短链接系统设计
|
||
|
||
## 入门指南
|
||
|
||
1. **阅读每个文档** 理解基础
|
||
2. **运行代码示例** 查看实际效果
|
||
3. **练习面试问题**:每个文档末尾的 Q&A
|
||
4. **对比不同方法**:理解权衡
|
||
|
||
## 贡献
|
||
|
||
这是一个持续维护的文档。欢迎:
|
||
- 添加新的算法主题
|
||
- 改进现有解释
|
||
- 添加更多代码示例
|
||
- 增强 Q&A 部分
|
||
- 分享真实用例
|
||
|
||
## 许可证
|
||
|
||
本项目开源,使用 MIT 许可证。
|
||
|
||
---
|
||
|
||
**注意**:所有文档使用中文编写,以便更清晰易懂。代码示例使用 Java 以便广泛理解。
|