基于 ChatGPT 建议优化,更聚焦"能读Ceph代码"的目标
在每个阶段完成后,将 [ ] 改为 [x]
| 层次 | 目标 | 你是否达到? |
|---|---|---|
| 第一层 | 能读Ceph核心路径代码,追踪数据流 | [ ] |
| 第二层 | 能加日志、改简单逻辑、修小bug | [ ] |
| 第三层 | 能独立设计模块(暂不急) | - |
| 周 | 内容 | 状态 | 开始 | 完成 |
|---|---|---|---|---|
| 前 | 用户态工程思维(异步/状态机概念) | [ ] | ||
| 1-2 | C++基础语法+面向对象 | [ ] | ||
| 3 | STL+智能指针 | [ ] | ||
| 4 | 现代C++特性(auto/lambda/range-for) | [ ] | ||
| 5 | 并发与异步(重点) | [ ] | ||
| 6 | Python基础 | [ ] | ||
| 6 | Shell基础 | [ ] | ||
| 7 | 进Ceph源码,边看边补 | [ ] |
| 内容 | 状态 |
|---|---|
| 模板基础阅读能力 | [ ] |
| move语义深入 | [ ] |
| std::function | [ ] |
| 异常机制阅读能力 | [ ] |
| 内容 | 状态 |
|---|---|
| 高级模板元编程 | [ ] |
| Boost深入 | [ ] |
| Seastar/Crimson | [ ] |
| 复杂Python特性 | [ ] |
- 理解同步 vs 异步的区别
- 理解回调模式
- 理解状态机思维
- 理解消息队列模型
- 理解线程模型
- 能说出"请求来了 → 入队 → 异步处理 → 回调"的流程
- 读代码时会问"这个函数在哪个线程执行?"
- 读代码时会问"这个请求当前在什么状态?"
- 类与对象
- 构造函数/析构函数
- public/private/protected
- 引用 &
- 函数重载
- 默认参数
- const T& 和 const成员函数
- namespace
- new/delete概念
- 继承
- 虚函数 virtual
- 多态
- 抽象基类
- override
- RAII概念
- 栈对象 vs 堆对象
- 拷贝构造/赋值
- 智能指针:unique_ptr/shared_ptr/weak_ptr
- 移动语义基本概念
- 写小型类层次(基类+子类)
- 写观察构造/析构顺序
- 用shared_ptr管理对象关系
- 读 src/include/RefCountedObj.h
- 读 src/msg/Message.h(理解继承)
- std::string
- std::vector
- std::map / std::unordered_map
- std::set
- std::pair
- std::optional(见到能认)
- 迭代器基本用法
- 能看懂插入、查找、遍历
- 知道大概语义
- 用vector/map组织对象
- 用shared_ptr打印构造/析构日志
- 读 src/include/buffer.h(bufferlist)
- 找 osd_types.h 中 std::map 的使用
- auto 类型推导
- nullptr
- range-based for
- lambda基本形式
- emplace_back
- enum class
- using 取代 typedef
- std::function
- 看懂auto推导结果
- 看懂lambda捕获列表 [=] [&] [x] [&x]
- 理解emplace_back比push_back快在哪
- 读 src/osd/OSD.cc 找 auto, lambda 的使用
- 线程基础知识
- mutex/lock_guard/unique_lock
- condition_variable
- 原子操作 atomic
- 生产者-消费者模型
- 回调概念
- 状态机概念
- 能写出简单工作队列
- 理解"入队→线程处理→回调"流程
- 读代码能判断"哪个线程?需要锁吗?"
- 实现线程安全队列
- 实现生产者-消费者
- 读 src/common/Finisher.h(回调队列)
- 读 src/osd/OpRequest.h(请求队列)
- 基础语法
- 列表/字典/集合
- 函数
- 文件读写
- subprocess(调用命令)
- json(解析数据)
- argparse(命令行参数)
- 能读脚本
- 能改脚本参数
- 能写日志分析小工具
- 看 src/pybind/mgr/ 下的Python代码
- 看测试脚本
- 变量
- 条件判断
- 循环
- 函数
- 管道/重定向
- grep/sed/awk基本用法
- 能看懂常见脚本
- 能改常见脚本
- 能写简单自动化命令
- 写批量获取OSD状态的脚本
- 写日志错误统计脚本
- 看懂函数模板
- 看懂类模板
- 看懂 template
- 看懂常见类型推导
- 不怕看到模板定义
- 复杂模板元编程
- SFINAE深入
- Concepts
- src/include/buffer.h
- src/include/types.h
- src/common/dout.h
- src/common/config.h
- src/osd/osd_types.h
- 画出OSD的对象关系图
- 画出OSD的线程分布图
- 画出写请求流程图
- 找到 OSD::handle_message() 入口
- 追踪OSDMap的生命周期
- 理解bufferlist设计目的
- 追踪一个写请求路径
- 找到日志输出宏dout
- 正确做法:学到"能看懂代码"就够,边看边补
- 正确做法:大多数时候只需"能读懂大概"
- 正确做法:这是读Ceph的关键,必须重视
- 正确做法:每学一个特性,立刻写30行代码验证
- C++参考:https://en.cppreference.com/
- Ceph文档:https://docs.ceph.com/
- Ceph源码:https://github.com/ceph/ceph
- Seastar教程(可选):http://seastar.io/tutorial.html