编程导航教程

首页

C++ 学习路线 | 26 年最新零基础到精通一条龙(万人收藏⭐️)

2024-05-11 15:06
阅读 6.5w
下载文档
评论
问答
笔记
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
大纲
    11

    编程导航学习网站:学编程、做项目、拿 Offer!

    企业高频面试题库:开始刷题,面试遇原题!

    精选简历模板大全:1 分钟搞定简历!

    AI 资源导航网站:获取最新 AI 黑科技!

    1 对 1 模拟面试:随时随地提升面试能力

    C++ 求职高频面试题:开始刷题

    开篇介绍

    C++ 是一门拥有几十年历史的经典编程语言,从诞生之初就以其高性能、灵活性和强大的系统控制能力而闻名。它是 C 语言的扩展,支持面向对象编程、泛型编程、过程式编程等多种编程范式,因此具有很高的灵活性和可扩展性。

    为什么要学 C++ 呢?

    虽然 C++ 相对于 Java、Python 等高级语言来说更加底层、学习曲线更陡峭,但正是因为它更接近硬件、能够精细控制系统资源,所以在追求极致性能的领域(如游戏引擎、音视频处理、高频交易、操作系统、嵌入式系统等)中,C++ 依然是不可替代的首选语言。

    学好 C++,你能做什么呢?

    你可以开发高性能服务器、游戏引擎、音视频处理系统、嵌入式设备程序、量化交易系统、甚至是操作系统本身,应用场景非常广泛且极具技术含量。

    C++ 标准语法的发展也非常快,目前新的标准已经到 C++ 23 了。而且随着它的发展,它具有了丰富的语法和库支持。大学计算机专业的同学一般也会从 C++(C 语言)开始学起,因为它能帮助你深入理解计算机底层原理。

    很多 AI 框架的底层(如 TensorFlow、PyTorch 的核心部分)都是用 C++ 实现的,因为只有 C++ 能够提供足够的性能来支撑大规模的 AI 计算。掌握 C++ 和 AI 应用开发,将会拥有更强的竞争力。

    💡 想了解更多 AI 工具和资源,可以访问鱼皮的 AI 资源大全。

    AI资源大全网站

    就业方向

    C++ 的就业方向还是非常多的,鱼皮建议大家首先根据自己的兴趣爱好来做选择。

    1)服务端开发(后端开发):C++ 语言在高性能服务器开发、大数据处理、金融领域等都有广泛应用。对于用户量和并发量非常高的系统(比如微信后台、游戏服务器),一般会选择更高性能的 C++ 来开发。服务端开发工程师除了要学习后端通用知识(比如数据库、缓存),还需要更熟悉网络编程、并发编程、内存管理等技术。

    2)系统开发:高性能的 C++ 无疑是系统开发的王牌语言!系统开发工程师负责设计和实现操作系统、驱动程序、嵌入式系统、网络协议栈等系统级软件。从事这个岗位必须熟练掌握 C++ 的语法、各种数据结构和算法、多线程编程、Linux 操作系统等技术。

    3)客户端开发:一般是指开发用户看得到的界面。C++ 在桌面应用程序、移动应用程序和游戏客户端开发中有着广泛应用。C++ 客户端开发工程师和前端开发有着相似的学习要求,都需要掌握 GUI 编程、布局知识、跨平台开发技术。现在主流的开发框架是 Qt(鱼皮的毕设就是用它做的)。

    4)嵌入式开发:C++ 被广泛应用于开发网络设备、汽车电子、智能家居、医疗设备等产品。嵌入式开发工程师和系统开发工程师的学习路径有相似之处,都需要学好 C++ 系统级编程以及操作系统知识。此外,嵌入式开发还需要了解硬件、嵌入式开发平台和相关工具。

    5)游戏开发:C++ 是游戏开发的主语言之一(另一个是 C#),比如当下很火的虚幻引擎(Unreal Engine)的主语言就是 C++!对于游戏开发工程师,最重要的是热爱游戏!游戏开发也分客户端和服务端开发,前者需要熟悉游戏引擎、图形学、物理引擎等技术,后者和服务端开发的要求差不多,都要学好网络编程、并发编程。

    关于游戏开发的详细学习,可以查看:

    • Unity 游戏开发学习路线
    • Unreal Engine 学习路线
    • 游戏服务端开发学习路线

    6)音视频处理:C++ 在音视频编解码、视频渲染、直播推流等领域有着非常广泛的应用!音视频处理工程师除了 C++ 基础知识外,还需要熟悉音视频格式、编解码技术(如 H.264、H.265)、FFmpeg 等相关技术。

    7)图像处理:和音视频处理类似,都属于 C++ 计算类工作。图像处理工程师需要熟悉图像处理算法、计算机视觉、OpenCV 等,掌握各种 C++ 的图像处理库和相关算法。这类工作对数学会有一定要求,有些公司可能把它们定义为"算法工程师"。

    8)量化交易开发:金融领域对交易系统的性能要求极高,C++ 是量化交易系统开发的首选语言。量化交易工程师需要掌握 C++ 高性能编程、金融知识、数学建模等技能。

    9)SDK 开发:C++ 也适用于开发各种 SDK(软件开发工具包)和基础库。SDK 开发工程师需要熟悉 C++ 的语言特性、API 设计、掌握软件开发原则和设计模式,要能够设计出易用、高性能、可靠的接口,提供给其他开发者使用。


    从上面这些岗位我们会发现,虽然都是学 C++,但不同方向的工程师需要侧重掌握的技能和专业知识也是有区别的。但是如果你还没确定选什么具体的方向,不妨先掌握它们都要求的通用技能,即能够熟练使用 C++ 语法来编程,打好基础。

    选 C++ 还是 Java?

    这是很多同学纠结的问题,鱼皮来给大家分析一下。

    首先,明确一点,C++ 和 Java 都是非常优秀的主流编程语言,编程语言和技术没有绝对的优劣之分,只不过在不同的场景下有更优的选择。而且,像很多大神说的一样,语言只是工具,编程思想才是核心。

    如何选择呢?

    • 如果你对操作系统底层、嵌入式、图像处理、音视频处理、游戏开发、高性能计算等方向感兴趣,建议选择 C++。
    • 如果你更喜欢开发业务系统(如电商平台、管理系统)、快速实现功能、思考和实现业务逻辑,就选择 Java。

    简单来说,C++ 更侧重于 “如何让程序跑得更快、更省资源”,而 Java 更侧重于 “如何快速开发出可靠的业务系统”。

    对于身在校园、且时间充裕的同学来说,鱼皮更建议 “我全都要”。可以先学 C 语言或 C++ 打基础(这也是大部分计算机专业学生在高校内学到的第一门编程语言),因为它相对底层,能帮助你接触到更多计算机的概念,比如内存管理、指针、操作系统资源管理、网络通讯等,从而为学习其他编程语言做铺垫。然后再学习 Java 来快速做项目、找工作。

    • 关于 C 语言的详细学习,可以查看 C 语言学习路线
    • 关于 Java 的详细学习,可以查看 Java 学习路线

    此外,因为 Java 和 C++ 都可以作为后端开发语言,所以无论把哪门语言作为主语言,都要重点学好后端开发通用知识,比如数据库、缓存、消息队列、Socket 通讯、Linux、Git、计算机基础知识等。但选择 C++ 的同学要对操作系统、网络和 Linux 更熟悉一些。

    鱼皮专门针对这个问题写了一篇文章,欢迎阅读:C++ 和 Java 应该学哪个

    学习路线图

    下面是完整的 C++ 学习路线图,帮助大家理清学习脉络:

    C++ 学习路线思维导图

    整体学习建议

    1)基础一定要打牢:这是 C++ 相对于 Java 这种上层语言来说最重要的建议!因为 C++ 可以更灵活地操作系统(比如自主分配内存、直接操作指针),所以如果基础不牢固,你不仅不能发挥出 C++ 的高性能等特性,反而还可能写出性能更差、甚至会崩溃的程序。像 C++ 基础特性(指针、引用、内存管理等)、操作系统、计算机网络、算法数据结构等计算机基础都要认真去学。

    2)多动手实践:学 C++ 不能只看不练。一定要多练习语法、多敲代码、多实践做项目。C++ 的很多概念(比如指针、引用、内存管理)光看理论很难理解,必须自己动手写代码、调试程序才能真正掌握。

    3)在 AI 时代,学习 C++ 可以更高效!遇到编译错误可以让 AI 帮你分析、遇到不理解的概念可以问 AI,还可以让 AI 帮你生成一些模板代码。推荐使用鱼皮的 AI 资源大全,里面有各种好用的 AI 编程工具。但是记住,AI 是辅助工具,基础知识还是要自己扎实掌握。

    4)多读优秀代码:C++ 有很多优秀的开源项目和库(如 STL、Boost、muduo 等),多读别人的代码、学习别人是怎么设计和实现的,能够快速提升你的编程能力。

    5)持续学习:C++ 标准一直在更新(C++ 11、14、17、20、23),新特性层出不穷。要保持学习的习惯,关注 C++ 社区的最新动态。

    学习大纲

    不同的 C++ 就业方向,要学的知识也是不同的,但是会有很多交集。

    只要你学习 C++,C++ 的语法、Linux 服务器、操作系统、计算机网络等知识几乎都是必学的!(纯客户端界面开发除外,但最好也学习下)

    本学习路线以 C++ 的主流岗位 —— 服务端开发为例,大致分为以下几个阶段:

    1. C++ 语法基础
    2. C++ 进阶
    3. 计算机基础
    4. 软件开发通用
    5. 后端开发通用
    6. C++ 项目实战
    7. C++ 求职备战

    阶段 1:C++ 语法基础(30-45 天,仅供参考)

    学习建议

    1)不要一上来就啃大部头书籍:对于完全 0 编程基础的同学来说,不建议上来就去看《C Primer Plus》这种很厚的书籍,很容易被劝退。建议先看视频教程,等学完一遍后,再回过头来看书巩固。

    2)选择合适的开发工具:开发工具可以使用 Visual Studio(功能最强大,Windows 推荐)、CLion(JetBrains 出品,跨平台)、VS Code + C++ 插件(轻量级)、Dev C++(最简单易用,适合纯新手)等。

    学习资源

    • ⭐ 2024 黑马程序员 C++ 零基础入门到精通:2024 年最新版,基于 AI 大模型的智能编码辅助,从基础到项目一套通关
    • 黑马程序员 C++ 匠心之作:经典版本,讲解详细
    • 浙大翁恺老师 C 语言入门课:如果学校从 C 语言开始学起,推荐这个。关于 C 语言的详细学习,可以查看 C 语言学习路线
    • ⭐ C++ 在线编程工具:在线练习,无需安装环境,自带语法参考

    知识点

    • 基础概念
      • 变量
      • 常量
      • 关键字
      • 数据类型
      • 运算符
      • 表达式
      • 控制结构
        • 条件分支
        • 循环
    • 开发工具
    • 函数
      • 函数重载
      • 默认参数
    • 基本数据结构
      • 数组
      • 字符串
    • 内存管理
      • 内存模型
      • 动态内存分配
      • 动态内存释放
    • 指针
      • 空指针
      • 野指针
    • 引用
      • 函数参数引用
      • 返回值引用
    • 结构体
      • 定义
      • 访问
    • 命名空间
    • 面向对象编程
      • 类
      • 对象
      • 封装
        • 成员变量
        • 成员函数
        • this 指针
      • 构造函数
      • 析构函数
      • 拷贝构造函数
      • 静态成员
      • 友元
        • 友元函数
        • 友元类
      • 运算符重载
      • 继承
        • 对象初始化顺序
        • 同名成员问题
        • 多继承
        • 虚继承
        • 菱形继承
      • 多态
        • 虚函数
        • 纯虚函数
        • 抽象类
        • 虚析构函数
        • 纯虚析构函数
    • 异常处理
      • 抛出
      • 捕获
      • 异常类型
      • 标准异常
    • STL
      • 容器
        • vector
        • string
        • list
        • pair
        • set
        • map
        • deque
        • stack
      • 迭代器
      • 函数对象
      • 谓词
        • 一元谓词
        • 二元谓词
      • 内置函数对象
      • 算法
        • 排序
        • 查找
    • 类型转换
    • 模板
      • 函数模板
      • 类模板
    • 泛型
    • I / O 操作
      • 文件操作

    阶段 2:C++ 进阶(30-90 天,仅供参考)

    上个阶段我们主要通过看视频来快速入门 C++ 基础编程语法;而这个阶段要做的是巩固基础、学习更多 C++ 的特性、甚至是底层原理,建议大家通过阅读经典书籍的方式来学习。

    学习建议

    1)通过书籍系统学习:视频教程适合快速入门,但是要系统掌握 C++ 的特性和细节,还是要看书。先系统学习 C++ 基础及进阶语法,可以读《C++ Primer Plus》和《Effective C++》这两本经典书籍。

    2)学习顺序很重要:学到这里,建议先去学习本路线阶段 3 的计算机基础,否则后面的书(比如《STL 源码剖析》《Linux 高性能服务器编程》)啃起来会很累。

    学习资源

    基础进阶书籍:

    • ⭐ 《C++ Primer Plus》:C++ 入门经典书籍,全面讲解 C++ 语法
    • ⭐ 《Effective C++》:C++ 最佳实践,教你写出高质量的 C++ 代码
    • 《C++ Primer》:另一本 C++ 经典书籍,比 Primer Plus 更深入一些

    STL 和源码学习:

    • 《STL 源码剖析》:深入理解 STL 的实现原理,需要一定基础
    • ⭐ C++ 参考手册:最新的语法特性和标准库参考

    Linux 服务端编程:

    • 《Linux 高性能服务器编程》:Linux 网络编程入门
    • 《Linux 多线程服务端编程》:深入学习多线程编程
    • 《UNIX 网络编程》卷1:难度较大,选择性阅读
    • 《UNIX 网络编程》卷2:难度较大,选择性阅读
    • 《UNIX 环境高级编程》:难度较大,选择性阅读

    知识点

    • RAII
    • C++ 11 新特性
      • 自动类型推导
      • lambda 表达式
      • 智能指针
      • 移动语义
      • 右值引用
      • 标准多线程库
      • nullptr 关键字
    • 类型转换
      • static_cast
      • reinterpret_cast
      • dynamic_cast
      • const_cast
    • 异常处理
      • 栈解旋
      • 异常接口声明
      • 异常对象生命周期
    • 工具
      • 编译工具
        • GCC
      • 构建工具
        • CMake
      • 调试工具
        • GDB
      • 静态分析工具
        • Clang Static Analyzer
    • 编码规范
      • Google C++ Style
    • 程序执行原理
      • 编译
      • 链接
        • 静态链接
        • 动态链接
    • STL 容器实现原理
      • vector
      • string
      • list
      • pair
      • set
      • map
      • deque
      • stack

    阶段 3:计算机基础

    知识点

    点击可跳转到该知识点的详细学习路线

    • 计算机基础学习路线
    • 数据结构和算法学习路线
    • 操作系统学习路线
    • 计算机网络学习路线

    阶段 4:软件开发通用

    学习建议

    对 C++ 开发来说,Linux 系统是重中之重,比学 Java 的同学要求更高。因为大部分 C++ 项目都是跑在 Linux 服务器上的。建议自己买台云服务器或者在本地搭建虚拟机,多动手实践。

    知识点

    点击可跳转到该知识点的详细学习路线

    • 企业项目开发流程
    • Git 和 GitHub 学习路线
    • Linux 服务器学习路线
    • 设计模式学习路线
    • 软件工程学习路线

    阶段 5:后端开发通用

    学习建议

    C++ 后端开发相比 Java 来说,更注重性能优化、内存管理、并发控制。在企业中,C++ 项目一般都是对性能要求极高的系统。所以学 C++ 后端的同学,除了要学习通用的后端知识外,还要更深入地学习网络编程、并发编程、性能优化等技术。

    知识点

    • 数据库
    • 开发框架
    • 包管理工具
    • Redis
    • 消息队列
    • Nginx
    • 微服务
    • 容器
    • 架构设计

    由于这部分内容的大多数知识点都和 Java 学习路线 一致,此处不再赘述,下面只列举 C++ 学习和 Java 学习中有差异的地方。

    MySQL 数据库

    关于 MySQL 数据库的详细学习,可以查看 MySQL 数据库学习路线

    数据库就是存放数据的库,负责存储、管理和检索数据。

    我们平时看到的网站上的数据,基本都是存放到数据库中的,在用户需要的时候,再通过后端程序从数据库中取出来。

    数据库又分为关系型数据库和非关系型数据库。关系型数据库适用于存储相互之间有关联的数据,比如做一个学生管理系统,要存储学生、班级,一个班级有多个学生,这就是一种关联关系,关系型数据库典型的技术是 MySQL;而非关系型数据库主要用于存储零散的、相互独立的数据,典型的技术是 Redis。

    此处我们主要学习的是关系型数据库,并且以最主流、学习成本相对更低的关系型数据库 MySQL 为主。

    对 C++ 同学来说,对数据库的学习包括以下 4 个方面:

    1. 学习关系型数据库理论:包括关系模型、关系代数、数据库范式、事务理论等,能够帮助你更好地理解数据库的结构和设计。
    2. SQL 语言:作为关系型数据库的标准查询语言,掌握 SQL 是非常重要的!学习过程以实践为主,要能够熟练使用 SQL 来操作数据库(增删改查)。关于 SQL 的详细学习,可以查看 SQL 学习路线
    3. 数据库设计和编程:学习如何根据实际业务场景来设计数据库表、并且学习如何使用 C++ 来操作数据库,这是企业开发中最重要的能力。
    4. 数据库高级:初学数据库时这部分可以跳过。主要是学习数据库的高级特性、底层原理、数据库的分析、运维、性能优化等,可以帮助你更好地运用数据库来解决问题。

    开发框架

    C++ 的开发框架相比 Java 的 Spring Boot 来说,没有那么统一和主流,往往是根据具体的应用场景选择不同的框架。下面介绍几类常用的框架:

    ORM 框架(操作数据库):

    • ODB:C++ 对象关系映射框架
    • QxOrm:另一个 ORM 框架选择

    建议选择一个学习即可,会基本的数据库操作就行。

    Web 开发框架(编写 HTTP 接口):

    • ⭐ Drogon:高性能 C++ Web 框架,类似 Java 的 Spring MVC
    • Pistache:轻量级 HTTP 服务器框架
    • Crow:C++ 微型 Web 框架

    建议选择一个学习即可,重点是理解 HTTP 接口开发的流程。

    RPC 框架(远程调用服务,实现分布式、微服务):

    • ⭐ gRPC:Google 出品的高性能 RPC 框架,支持多语言。关于 RPC 的详细学习,可以查看 RPC 学习路线

    更多框架:

    • awesome-cpp:C++ 框架和库大全,按需学习

    包管理工具

    作用是帮你管理复杂的 C++ 项目依赖包(类似 Java 的 Maven)。

    • ⭐ Conan:C++ 包管理器,推荐学习
    • vcpkg:微软出品的 C++ 包管理器

    Redis

    关于 Redis 缓存的详细学习,可以查看 Redis 缓存学习路线

    消息队列

    关于消息队列的详细学习,可以查看 消息队列学习路线(通用)

    如果需要学习具体的消息队列技术,可以查看:

    • RabbitMQ 消息队列学习路线
    • Kafka 消息队列学习路线
    • RocketMQ 消息队列学习路线

    Nginx

    关于 Nginx 的详细学习,可以查看 Nginx 学习路线

    微服务

    关于微服务的详细学习,可以查看 Spring Cloud 微服务学习路线

    微服务是一种思想,可以使用上面提到的 gRPC 框架 实现微服务。

    容器

    关于容器技术的详细学习,可以查看 Docker 容器化学习路线

    如果需要深入学习容器编排技术,可以查看 Kubernetes 学习路线

    如果需要系统学习云原生开发,可以查看 云原生开发学习路线

    架构设计

    关于架构设计的详细学习,可以查看 后端系统设计学习路线

    阶段 6:C++ 项目实战

    这个阶段是最关键的,能不能找到工作,很大程度上取决于你的项目经历。

    学习建议

    1)C++ 项目的特点:由于 C++ 是个相对底层、注重基础的编程语言,很多 C++ 的练手项目都是"手写轮子"相关的,比如手写网络库、手写 Web 服务器、手写 RPC 框架等。C++ 项目对基础要求更高,但也更能锻炼你的编程能力。

    2)多看开源项目源码:C++ 的视频项目教程相对较少,更多的是通过阅读开源项目的源码来学习。建议先把项目 clone 下来跑起来,然后阅读源码、理解实现原理。

    3)结合求职方向选择项目:简历上的项目最好和你应聘的岗位相关。

    4)关于 AI 应用开发:虽然 C++ 主要用于底层和高性能开发,但在 AI 时代,C++ 开发者也可以尝试将 AI 能力集成到项目中。比如在服务器项目中接入大模型 API、开发 AI 推理引擎的 C++ 接口等。现在很多 AI 框架的底层都是用 C++ 实现的(如 TensorFlow、PyTorch 的核心部分),掌握 C++ 和 AI 应用开发的结合,会让你更有竞争力。如果想快速入门 AI 应用开发,可以先通过 Java 或 Python 学习 AI 开发框架,比如鱼皮的 AI 编程助手、AI 零代码应用生成平台 等项目,理解 AI 应用的开发模式后,再用 C++ 实现高性能版本。

    视频教程

    • 2025 年精选 15 个 C++ 实战项目合集:校招、社招进阶必备,项目附源码(看免费的就够了,谨慎对方的引流)
    • 2025 最新 15 个 C/C++ 实战项目:秋招、练手必备,可直接写进简历
    • C++ 后端开发实战项目合集:从底层原理到代码实现,30 个实战项目(看免费的就够了,谨慎对方的引流)
    • 分布式服务器项目:完整的分布式服务器开发教程

    项目推荐

    下面按照项目类型分类推荐一些优质的 C++ 练手项目。

    编程语言类:

    • 用 C 实现自己的编程语言:从零构建编程语言

    开发工具类:

    • 开发自己的文本编辑器:手写代码编辑器
    • 手写 Linux 调试器:深入理解调试原理

    工具库类:

    • ⭐ 手写简易 STL:理解 STL 实现原理
    • 简单 JSON 库:Dropbox 出品
    • 简单堆内存分配器:理解内存管理
    • XML 解析库 TinyXML2:轻量级 XML 解析
    • 手写 TCP/IP 协议栈:深入理解网络协议

    数据库类:

    • SQLite:学习轻量级数据库的实现
    • 手写数据库教程:从零构建数据库

    中间件类:

    • ⭐ KV 存储引擎 LevelDB:Google 出品,学习存储引擎原理

    服务器 / 网络框架类:

    • ⭐ 网络编程库 muduo:陈硕大神的作品,学习网络编程必看
    • 超轻量 Web 框架 oatpp:现代 C++ Web 框架
    • ⭐ 轻量级 Web 服务器 TinyWebServer:适合学习,代码量适中
    • 超轻量型 HTTP 服务器 Tinyhttpd:代码不到 500 行,适合学习
    • 高性能 Web 服务器:高性能服务器实现
    • 并发服务器教程:学习并发服务器设计
    • 代理服务器 tinyfecVPN:VPN 实现

    RPC 框架类:

    • 微信 RPC 框架 phxrpc:简化版的微信后台 RPC 框架,冲鹅厂的同学推荐看
    • 搜狗 RPC 框架 srpc:有使用教程,上手比较容易,先会用再仿写
    • 手写 RPC 框架教程:从零实现 RPC

    分布式系统类:

    • ⭐ MIT6.824 分布式系统课程:经典的分布式系统课程

    更多项目资源:

    • ⭐ C++ 相关类库:C++ 标准库和第三方库
    • ⭐ awesome-cpp:GitHub C++ 内容合集,按需选择感兴趣的项目学习

    阶段 7:C++ 求职备战

    找工作是一个系统工程,不是简单地投简历、面试就行了。

    学习建议

    1)提前做规划:尽早做规划,可以通过大厂招聘官网的岗位描述来了解岗位的要求,看看自己还欠缺哪些技能。建议至少提前 3 个月开始准备。推荐阅读鱼皮的 保姆级求职指南,从求职规划到拿 Offer 全流程讲解。

    2)打磨简历:简历是你的第一张名片,一份好的简历能让你获得更多面试机会。建议使用 老鱼简历 制作简历,有大量专业简历模板。关于如何写好简历,推荐学习鱼皮的 保姆级写简历指南。

    老鱼简历网站简历模板大全

    3)多刷面试题:建议使用 面试鸭 刷题,支持按公司、题型、难度筛选。C++ 的面试重点主要是语言特性、计算机基础、后端技能三个方向。同时坚持刷算法题(LeetCode),每天 1-2 道,保持手感。

    面试鸭刷题神器热门八股文

    4)多看真实面经:编程导航整理了大量真实面经,看看别人都被问了什么,做到心中有数。真实面经大全、几百场真实面试视频。

    5)可以使用 AI 模拟面试网站 提前练习面试,模拟真实面试场景,这样到真正面试的时候紧张感会小很多。

    6)看面试题讲解视频:关注 面试鸭 B 站账号,有大量面试题讲解视频。

    7)多参加面试:不要等准备得很充分了才去面试,可以先拿一些不太想去的公司练手,积累面试经验。每次面试后都要复盘总结,记录下被问到的问题和自己答得不好的地方,下次改进。

    更多求职干货:编程导航求职干货分享

    面试重点

    C++ 同学的面试重点主要分为 3 个大方向:

    1. C++ 语言本身:语言特性、语法细节、最佳实践
    2. 计算机基础:数据结构、算法、操作系统、计算机网络
    3. C++ 领域技能:后端开发、嵌入式、游戏开发、客户端开发等

    C++ 语言面试题

    经典面试题:

    1. 是否关注过 C++ 的版本更新?比如 C++ 11 新增了哪些新特性?
    2. 什么是 C++ 的虚函数和纯虚函数?它们分别有什么作用?
    3. 如果虚函数是有效的,那为什么不把所有函数设为虚函数?
    4. 什么是 C++ 的多态?它是怎么实现的?
    5. C++ 函数重载和覆盖有什么区别?
    6. 什么是 C++ 的智能指针?它有什么作用?有哪些种类?
    7. 什么是 C++ 的模板?你在开发中是怎么运用模板的?
    8. 什么是 C++ 的动态内存分配?用它有什么优缺点?
    9. 什么是 C++ 的友元函数?它有什么作用?
    10. 什么是 C++ 的 STL?你用过哪些 STL,是否有了解过 STL 的底层实现?
    11. 指针和引用有什么区别?各自的应用场景是什么?
    12. 如何计算一个类或结构体的大小?
    13. C++ 会出现内存泄漏么?有哪些避免内存泄漏的方法?
    14. new 和 malloc 有什么区别?
    15. C++ 中有几种类型转换的方法?

    更多 C++ 面试题:

    • ⭐ C++ 基础面试题 - 面试鸭
    • C++ 进阶面试题 - 面试鸭
    • C++ 新特性面试题 - 面试鸭
    • C++ 面向对象面试题 - 面试鸭
    • C++ STL 面试题 - 面试鸭
    • C++ 并发编程面试题 - 面试鸭
    • ⭐ C++ 面试题汇总 - 面试鸭

    计算机基础面试题

    数据结构和算法

    经典题单:

    • ⭐ LeetCode 精选 100 道
    • LeetCode 精选算法 200 题
    • LeetCode 算法高频面试题汇总

    面试鸭题库:

    • ⭐ 算法和数据结构面试题 - 面试鸭
    • 数据结构面试题 - 面试鸭
    • 大厂算法真题 - 面试鸭

    操作系统

    经典面试题:

    1. 什么是进程和线程?二者有什么区别?
    2. 操作系统是如何做到进程阻塞的?
    3. 有哪些常见的进程通信方式?
    4. 进程调度算法有哪些?
    5. 线程是如何实现的?
    6. 什么是 CPU 的缓存?
    7. 什么是内核态和用户态?二者有什么区别?
    8. 操作系统是怎么实现锁的?
    9. 什么是死锁,什么情况下会出现死锁(必要条件)?怎么预防和处理?
    10. 什么是系统调用?
    11. 操作系统如何进行内存管理?

    更多操作系统面试题:⭐ 操作系统面试题 - 面试鸭

    计算机网络

    经典面试题:

    1. 介绍下计算机网络分层结构,各层有哪些常用协议?
    2. TCP 和 UDP 协议有什么区别?分别适用于什么场景?
    3. TCP 为什么需要三次握手和四次挥手?为什么不是两次握手、四次握手?为什么不是三次挥手?
    4. TCP 滑动窗口和拥塞控制机制
    5. TCP 如何保证可靠性?
    6. HTTP 协议常用状态码和含义
    7. HTTP 和 HTTPS 协议的区别?
    8. HTTP/1.0、1.1、2.0 有哪些区别和改进?

    更多计算机网络面试题:

    • ⭐ 计算机网络面试题 - 面试鸭
    • 网络协议面试题 - 面试鸭
    • 网络配置面试题 - 面试鸭

    C++ 后端面试题

    经典面试题:

    1. 你用过哪些 C++ 网络编程库或 Web 开发框架?
    2. 你用过哪些 C++ 日志框架?
    3. 什么是 socket 编程?C++ 中怎么进行 socket 编程?
    4. C++ 有没有 ORM 框架?你用过哪些?
    5. 你是怎么在 C++ 中进行多线程编程的?
    6. 什么是 I/O 多路复用?如何使用 epoll 和 select 等 I/O 多路复用技术?
    7. 有哪些知名技术(或框架)是用 C++ 实现的?是否有了解过它们的实现原理?
    8. 是否了解过设计模式?请用 C++ 实现单例模式

    更多后端相关面试题:

    • 后端系统设计面试题 - 面试鸭
    • 后端场景面试题 - 面试鸭
    • 设计模式面试题 - 面试鸭

    大厂面经

    • ⭐ 腾讯 C++ 面经 - 面试鸭
    • 百度 C++ 面经 - 面试鸭

    岗位资源

    建议大家可以多主动看看各公司的招聘要求(尤其是大厂的要求),确认自己的学习重点。

    校招岗位

    列举一些大厂的岗位信息,帮大家了解岗位要求。

    • 阿里 C++ 岗位:
      • 客户端开发工程师:https://talent.alibaba.com/campus/position-detail?lang=zh&positionId=2014805
      • 游戏开发工程师:https://talent.alibaba.com/campus/position-detail?lang=zh&positionId=2014826
    • 腾讯 C++ 岗位:
      • 后台开发:https://join.qq.com/post_detail.html?pid=1&id=101&tid=2
      • PC 客户端开发:https://join.qq.com/post_detail.html?pid=2&id=102&tid=2
      • 游戏客户端开发:https://join.qq.com/post_detail.html?pid=1&id=107&tid=2
      • 游戏引擎开发:https://join.qq.com/post_detail.html?pid=1&id=221&tid=2
    • 美团 C++ 岗位:
      • 软件开发:https://zhaopin.meituan.com/web/position/detail?jobUnionId=1423888888&highlightType=campus
      • 后端开发:https://zhaopin.meituan.com/web/position/detail?jobUnionId=1422483100&highlightType=campus

    社招岗位

    • 阿里社招:https://job.alibaba.com/zhaopin/positionList.htm
    • 腾讯社招:https://careers.tencent.com/search.html

    实习

    • 实习僧:https://www.shixiseng.com/

    持续学习资源

    知识总结

    • ⭐ 编程导航:学习路线、项目教程、面试题、编程资源一站式平台
    • ⭐ C++ 参考手册:最新的语法特性都在这里,C++ 开发必备
    • 程序喵大人 C++ 知识仓库:系统的 C++ 学习资源整理
    • C++ 相关问答:C++ 常见问题解答

    自学 C++ 专题资源

    • ⭐ GitHub C++ 专区:最新的 C++ 开源项目
    • ⭐ awesome-cpp:GitHub C++ 内容合集,包含框架、库、工具等
    • ⭐ StackOverflow C++ 专区:解决问题必备
    • ISO C++ 官方博客:C++ 标准委员会博客
    • Google C++ Style Guide:谷歌 C++ 编程规范
    • MongoDB Engineering:MongoDB C++ 应用
    • C++ 编程技巧:Google 出品
    • C++ 之父的问答:C++ 之父 Bjarne Stroustrup 的一些问答

    最后

    C++ 的学习之路确实不容易,相比其他高级语言来说,C++ 的学习曲线更陡峭、需要掌握的底层知识更多。但正是因为难,所以才更有价值!

    掌握了 C++,你就掌握了追求极致性能的能力,就能在游戏开发、高性能服务器、音视频处理、嵌入式系统等高技术含量的领域大展拳脚。而且在 AI 时代,懂 C++ 的程序员会更有竞争力,因为很多 AI 框架的底层都是用 C++ 实现的。

    学习编程没有捷径,唯有坚持和实践。希望这份学习路线能够帮助大家少走弯路,更高效地掌握 C++。加油小伙伴们!💪

    程序员必备资源

    1)程序员学习交流圈:极客教程、实战项目、求职宝典

    2)程序员面试八股文:实习/校招/社招高频考点、企业真题解析

    3)程序员写简历神器:专业模板、丰富例句、直通面试

    4)AI 知识资源大全:前沿技术、最新 AI 资讯、提示词大全

    5)1 对 1 模拟面试:实习/校招/社招面试拿 Offer 必备