MapFlow

PUBLIC LEARNING ROADMAP

通用C++软件开发工程师(后端高性能/客户端方向)个性化学习路径 学习技能树

由 Skill Tree Engine 确定性生成的只读快照

31 个知识节点 · intermediate

发布者:xiaochou

知识目录

基础概念

C++基础语法与语言入门

从零掌握变量、数据类型、控制流、函数、数组等基础写法,建立编译-运行循环,是零基础者的唯一起跑点

建议预留 90 分钟

学习目标

  • 掌握基础类型、变量作用域与控制结构
  • 建立文件-编译-运行的最小工作流

关键概念

  • 变量与基本类型
  • 控制流
  • 函数
  • 数组

为什么学习

  • 目标要求独立编写正确C++代码,语法必须达到能熟练书写并解释每行的程度

如何检验理解

  • 在不查资料下写出并运行一个含分支循环与数组操作的单文件程序
  • 能逐行解释自己代码中每个声明与控制流的作用

基础概念

Git与版本控制入门

掌握clone/commit/branch/merge,用于管理个人项目作品并与远程仓库协作,是工程化与读开源的基础

建议预留 60 分钟

学习目标

  • 掌握git日常提交与回退操作
  • 理解分支与远程仓库工作流

关键概念

  • commit
  • branch
  • merge
  • remote

为什么学习

  • 目标要求产出可管理、可提交的项目作品并阅读开源代码,Git是基础工具需能熟练操作

如何检验理解

  • 能对一个真实目录完成init/commit/分支/合并操作
  • 能从GitHub成功clone并提交一次改动

核心技能

类与对象基础

学习封装、构造析构、访问控制、this指针等OOP核心概念,是所有面向对象编程的根基

建议预留 120 分钟

学习目标

  • 掌握类的定义、构造析构与封装
  • 理解this指针与对象生命周期

关键概念

  • 封装
  • 构造函数
  • 析构函数
  • this

为什么学习

  • 工程与面试都要求熟练运用类设计,需能在小项目中靠手工正确写出类

如何检验理解

  • 能独立写出含构造/析构/封装的类并解释生命周期
  • 能通过类正确管理一个简单资源对象

核心技能

编译工具链与CMake基础

理解g++编译流程、头文件与编译单元分工、链接及CMake,支撑后续中小型项目构建

建议预留 60 分钟

学习目标

  • 掌握g++多文件编译与常见选项
  • 掌握CMake最小项目搭建

关键概念

  • 编译单元
  • 链接
  • 头文件
  • CMake

为什么学习

  • 构建工具为标配,目标要求能独立构建中小型项目产物

如何检验理解

  • 能用单条g++命令编译多文件到可执行文件
  • 能写一个构建单个目标的CMakeLists并运行成功

核心技能

指针、引用与内存管理基础

掌握指针/引用/new-delete与对象生命周期,是理解后续资源管理与定位内存问题的地基

建议预留 90 分钟

学习目标

  • 掌握指针/引用与new-delete配对
  • 理解堆栈与对象作用域生命周期

关键概念

  • 指针
  • 引用
  • new/delete
  • 堆栈分配

为什么学习

  • 目标把指针安全与内存管理列为必修,需在概念上彻底搞清指针引用的本质区别

如何检验理解

  • 能解释指针与引用的区别并正确选型
  • 能识别堆/栈上对象的生命周期差异

核心技能

C++11核心特性总览(auto/nullptr/范围for)

掌握auto、decltype、nullptr、范围for等语言现代化基础,是后续一切现代C++写法前提

建议预留 75 分钟

学习目标

  • 掌握auto/decltype类型推导
  • 掌握nullptr与范围for

关键概念

  • auto
  • decltype
  • nullptr
  • 范围for

为什么学习

  • 现代特性是目标熟练项,需在代码中主动改用modern写法

如何检验理解

  • 能自动用auto与范围for改写旧式代码
  • 能解释nullptr相对NULL的优势

补充知识

文件输入输出与流处理

学习iostream与文件流基本用法,便于写出读文件/写日志的后端命令行小工具

建议预留 60 分钟

学习目标

  • 掌握ifstream/ofstream基本读写
  • 掌握格式化输出

关键概念

  • iostream
  • 文件流
  • 格式化

为什么学习

  • 项目需文件读写但非核心难点,掌握基本文件流操作即可

如何检验理解

  • 能用文件流读写一个文本配置文件并验证结果

核心技能

模板编程基础与模板推导

学习函数/类模板与参数推导,是理解STL容器底层泛型机制与面试的基础

建议预留 120 分钟

学习目标

  • 掌握函数/类模板与推导规则
  • 理解特化与偏特化契机

关键概念

  • 函数模板
  • 类模板
  • 模板推导
  • 特化

为什么学习

  • STL与泛型是现代C++核心,需理解模板实例化与推导机制以读懂容器源码

如何检验理解

  • 能写一个可复用的模板函数并解释实例化过程
  • 能为常见类型编写简单的类模板

核心技能

const与constexpr编译期求值

掌握const语义与constexpr,理解编译期常量,是面试内存与只读语义的高频考点

建议预留 75 分钟

学习目标

  • 掌握const的各类修饰语义
  • 理解constexpr编译期求值

关键概念

  • const
  • constexpr
  • 只读语义

为什么学习

  • const语义是语言机理与面试必考,需要理解其编译期/运行期含义

如何检验理解

  • 能正确写出const成员函数并解释语义
  • 区分constexpr编译期与const运行期求值

核心技能

Alignment、内存布局与对象表示

理解对象大小、对齐、结构体内存布局与位域,是面试语言底层机理与内存优化的考点

建议预留 60 分钟

学习目标

  • 理解对象大小与内存布局
  • 掌握对齐与位域场景

关键概念

  • 内存对齐
  • 对象表示
  • 位域

为什么学习

  • 目标要求掌握虚表/内存布局等底层机理用于面试,需理解struct对齐与对象表示

如何检验理解

  • 能预测并验证一个结构体sizeof与内存offset
  • 能解释对象对齐可能引入的内存空洞

补充知识

命名空间与控制流代码组织

学习头文件原则、using声明与代码分层实践,帮助写出可读可维护的工程代码

建议预留 60 分钟

学习目标

  • 掌握头文件包含与防御式声明
  • 理解命名空间组织

关键概念

  • 命名空间
  • 头文件原则
  • include guard

为什么学习

  • 代码规范与可读性是软性要求,需掌握头文件与命名空间的良好组织习惯

如何检验理解

  • 能合理划分声明/定义/实现分层并说明理由

基础概念

操作系统基础(进程线程/虚拟内存/堆栈)

了解进程与线程、虚拟内存、堆栈区别,是理解C++运行时内存行为与并发基础

建议预留 60 分钟

学习目标

  • 理解进程线程与虚拟内存
  • 理解堆栈与地址空间概念

关键概念

  • 进程
  • 线程
  • 虚拟内存
  • 堆栈

为什么学习

  • 目标建议了解OS概念以加深对程序与内存运行的理解,达入门应用级别即可

如何检验理解

  • 能解释进程与线程、堆与栈的区别
  • 能结合内存分配理解程序崩溃的可能原因

核心技能

GDB调试与Valgrind/ASan入门

掌握GDB断点/单步/查看变量与内存,配合Valgrind与ASan检查,定位崩溃与越界

建议预留 90 分钟

学习目标

  • 掌握GDB断点、单步、查看变量
  • 掌握ASan等sanitizer构建与报告解读

关键概念

  • GDB断点
  • 单步执行
  • AddressSanitizer
  • Valgrind

为什么学习

  • 调试工具链是目标必修成熟工具,需能在真实崩溃现场熟练用GDB与sanitizer定位

如何检验理解

  • 能用GDB对一个崩溃程序设断点并查看变量定位根因
  • 能用ASan/Valgrind跑出一个程序并指出越界报告

核心技能

右值引用与移动语义

理解左/右值、移动构造、移动赋值、std::move与完美转发,是理解STL高效与拷贝控制核心

建议预留 120 分钟

学习目标

  • 掌握左/右值与移动构造
  • 理解std::move与完美转发意图

关键概念

  • 右值引用
  • 移动语义
  • std::move
  • 完美转发

为什么学习

  • 移动语义是现代C++性能与面试核心依赖,需理解其原理并能在自制类中运用

如何检验理解

  • 能解释std::move与拷贝的区别
  • 能判断值语义下何时发生移动以提升效率

核心技能

STL标准库容器

熟练vector/list/deque/map/unordered_map等容器与迭代器失效规则,是STL能力地图核心

建议预留 120 分钟

学习目标

  • 掌握各容器特性与复杂度对比
  • 掌握迭代器失效与元素删除安全写法

关键概念

  • vector
  • map/unordered_map
  • 迭代器失效
  • 复杂度

为什么学习

  • STL熟练是本目标最高优先级之一,需达到针对场景秒选容器并规避失效的正确运用

如何检验理解

  • 能据访问/插入场景选出合适容器并解释复杂度
  • 能写出代码规避vector/list迭代器失效问题

核心技能

lambda表达式与函数对象

学习lambda捕获、泛型lambda与std::function回调,是STL算法与事件回调的常用手段

建议预留 90 分钟

学习目标

  • 掌握lambda捕获列表与语法
  • 掌握std::function封装回调

关键概念

  • lambda捕获
  • 泛型lambda
  • std::function

为什么学习

  • 现代C++常写lambda传参,需掌握捕获语义避免悬垂问题

如何检验理解

  • 能正确写出捕获特定作用域的lambda并传给算法
  • 能解释引用捕获导致悬垂的场景

核心技能

多态、虚函数与运行期类型识别

掌握继承体系、虚表、override/final与dynamic_cast,是OOP三大特性与面试重灾考点

建议预留 110 分钟

学习目标

  • 掌握虚函数与多态实现
  • 掌握纯虚函数与运行期类型识别

关键概念

  • 虚函数表
  • override
  • dynamic_cast
  • 抽象基类

为什么学习

  • 面向对象设计与语言机理双重要求,需理解虚函数实现原理并能合理设计继承

如何检验理解

  • 能以基类指针实现多态并可解释虚表机制
  • 能用override/final正确约束派生类

核心技能

RAII与现代智能指针

掌握unique/shared/weak_ptr与RAII资源管理范式,是文档化避免内存泄漏的核心武器

建议预留 120 分钟

学习目标

  • 掌握RAII与unique/shared/weak指针
  • 理解智能指针所有权与循环引用

关键概念

  • RAII
  • unique_ptr
  • shared_ptr
  • weak_ptr

为什么学习

  • 目标把内存泄漏定位列为必修,智能指针熟练是其直接解法

如何检验理解

  • 能用三类智能指针重构一段裸指针new/delete代码
  • 能指出循环引用场景并改用weak_ptr

核心技能

运算符重载与拷贝控制规则

掌握五大特殊成员函数、移动赋值与Rule of Zero/Five,是深拷贝浅拷贝面试点核心

建议预留 90 分钟

学习目标

  • 掌握五大特殊成员函数生成规则
  • 掌握Rule of Zero/Five实践

关键概念

  • 拷贝/移动构造
  • Rule of Zero
  • 深拷贝浅拷贝
  • 运算符重载

为什么学习

  • 拷贝控制是语言机理与面试必考,需按Rule of Zero/Five设计正确类

如何检验理解

  • 能据成员类型判断应采用的Rule of Zero或Five
  • 能写出自制类的复制与移动重载并测对

核心技能

STL算法库与函数式组合

掌握<algorithm>排序/查找/变换与lambda组合,用标准库替代手写循环提升代码质量

建议预留 90 分钟

学习目标

  • 掌握常用算法库调用
  • 掌握算法与lambda组合惯用法

关键概念

  • 排序查找
  • transform
  • sort/upper_bound
  • 函数式组合

为什么学习

  • STL算法运用是熟练项,需能把常见任务映射到标准算法并组合lambda

如何检验理解

  • 能用algorithm对容器完成排序、查找、过滤并输出
  • 能把典型手写循环改写为算法+lambda组合

补充知识

标准库基础组件(string/chrono等)

掌握string、chrono、utility等常用组件,是日常后端开发高频工具

建议预留 60 分钟

学习目标

  • 掌握string与chrono常用API
  • 理解utility工具组件用途

关键概念

  • std::string
  • chrono
  • std::pair/tuple

为什么学习

  • 这些组件随实战自然习得,掌握基础API用于写代码即可,非难点

如何检验理解

  • 能写出处理字符串与计时计费的片段代码
  • 能熟练对std::string做拼接与查找转换操作

核心技能

数据结构与基础算法(STL落地)

用手写并用STL容器还原链表、栈、树、哈希及排序,具备复杂度分析能力

建议预留 180 分钟

学习目标

  • 掌握线性表、树、哈希与排序实现
  • 掌握时空复杂度分析方法

关键概念

  • 链表
  • 二叉树
  • 哈希表
  • 复杂度分析

为什么学习

  • 数据结构与算法为目标必修领域,需在面向面试与项目时手写并能分析复杂度

如何检验理解

  • 能用STL容器或手写还原链表/二叉树遍历并分析复杂度
  • 能在项目里为数据选择合适的数据结构

核心技能

开源代码阅读方法论

学会从GitHub下项目、读README、理目录、精读核心模块并借助文档调试理解他人代码

建议预留 120 分钟

学习目标

  • 掌握开源项目阅读与拆解流程
  • 掌握借助调试与文档读懂代码的方法

关键概念

  • README分析
  • 目录结构
  • 示例驱动
  • 按核心模块精读

为什么学习

  • 看懂开源代码是明确里程碑,需有一整套筛选/精读/调试的方法并实践

如何检验理解

  • 能选定一个开源库并讲清其目录结构与核心模块流程
  • 能为某开源项目的最小编译构建并跑通它的示例

补充知识

模板元编程与type_traits概览

概览enable_if、type_traits与可变参数模板,仅达能读懂开源高级模板即可

建议预留 90 分钟

学习目标

  • 认识type_traits与enable_if常见写法
  • 了解SFINAE出现于源码时如何理解

关键概念

  • type_traits
  • enable_if
  • SFINAE

为什么学习

  • 元编程偏进阶与读源码需要,目标仅为能看懂而非主动编写,降到识别级

如何检验理解

  • 能大致读懂一段enable_if约束了的调用处意图

核心技能

异常安全与错误处理

理解try/catch、noexcept与异常安全级别,写出稳健程序并权衡返回值与异常

建议预留 75 分钟

学习目标

  • 掌握try/catch与noexcept
  • 理解异常安全级别与策略

关键概念

  • 异常抛出捕获
  • noexcept
  • 事务式回滚

为什么学习

  • 目标要求异常/错误处理稳健,需掌握抛出捕获与资源清理的权衡选择

如何检验理解

  • 能编写带异常回滚的资源管理函数
  • 能解释返回值与异常在不同场景的取舍

核心技能

C++17特性(结构化绑定/optional/string_view)

掌握结构化绑定、optional、string_view与变长模板等C++17写法,写出更现代安全的代码

建议预留 100 分钟

学习目标

  • 掌握结构化绑定与if初始化
  • 掌握optional/variant/string_view

关键概念

  • 结构化绑定
  • std::optional
  • std::string_view

为什么学习

  • 现代特性为目标熟练项且是当前通用开发的常见写法,需能主动应用

如何检验理解

  • 能用optional与string_view重构旧接口并减少隐患
  • 能顺手使用结构化绑定遍历容器

核心技能

内存泄漏与指针错误定位实战

面向悬空/野/空指针与double-free/dangling,用ASan针对型修复泄漏与越界,形成防御习惯

建议预留 120 分钟

学习目标

  • 掌握典型指针错误的成因与识别
  • 掌握用扫描工具定位并修复泄漏

关键概念

  • 悬空指针
  • double-free
  • ASan报告
  • 内存泄漏定位

为什么学习

  • 目标把识别并修复指针问题与内存泄漏定位判为熟练核心,是本路径定海神针节点

如何检验理解

  • 能在程序中制造并逐类指出悬空/野/double-free根因
  • 能用ASan/Valgrind找出内存泄漏并修复至报告清零

补充知识

单元测试与可测性设计

了解GoogleTest基本用法并为核心逻辑编写简单单测验证正确性

建议预留 90 分钟

学习目标

  • 掌握GoogleTest断言与用例组织
  • 理解可测性设计思想

关键概念

  • GoogleTest
  • TEST/TEST_F
  • 断言
  • 依赖注入

为什么学习

  • 测试属于合理掌握项,达能为核心纯函数写单测验证即可

如何检验理解

  • 能用GoogleTest给一个函数写断言并跑绿
  • 能拆分接口使核心逻辑可脱离副作用测试

核心技能

面试高频考点系统梳理

汇总虚表/const与static/拷贝控制/STL容器选型/内存模型等考点并形成清晰口头表述

建议预留 150 分钟

学习目标

  • 串起虚表/const/static等机理考点
  • 形成STL与内存面试答题框架

关键概念

  • 虚函数表
  • const/static语义
  • STL选型
  • 内存模型

为什么学习

  • 面试表述是明确目标,需把散落机理知识点串成能条理化讲清的口试体系

如何检验理解

  • 能脱稿讲清虚函数表与多态内存布局
  • 能就STL选型与拷贝控制给出结构化面试回答

核心技能

并发与多线程基础

掌握std::thread/mutex/lock_guard/条件变量与async,理解数据竞争死锁基本问题

建议预留 120 分钟

学习目标

  • 掌握std::thread与互斥锁RAII
  • 理解数据竞争与死锁基本概念

关键概念

  • std::thread
  • mutex
  • lock_guard
  • 竞态与死锁

为什么学习

  • 目标对并发定位为入门级推荐,达会用RAII锁写出无数据竞争的小并发即可

如何检验理解

  • 能改用lock_guard保护共享数据并避免裸锁
  • 能识别一处竞态并说明死锁成因

核心技能

独立完成中小型C++实战项目作品

从需求拆解、模块设计到编码构建,完整产出一个可运行命令行/后端工具并以CMake交付Git仓库

建议预留 600 分钟

学习目标

  • 掌握需求拆解与模块划分
  • 闭环运用CMake+STL+智能指针+测试产出作品

关键概念

  • 需求分析
  • 模块设计
  • 工程交付
  • 作品Demo

为什么学习

  • 完整项目作品是目标最终验收物,需综合运用STL/内存/算法/构建/测试迁移至真实需求

如何检验理解

  • 产出一个可独立运行并文档齐备的CMake项目并被demo演示
  • 项目能在ASan下0泄漏0越界并通过git提交可复现

前置关系与知识联系

结合互动地图查看具体关系类型,再选择下一步。