# C++ 学习路线 by 程序员鱼皮
站长:明凡
# C++ 介绍
# 语言特性
比较官方,仅供参考
C++ 是一种面向对象的、通用的、静态类型的编程语言,它是 C 语言的一种扩展。
C++ 语言支持多种编程范式,包括面向对象编程、泛型编程和过程式编程等,因此具有很高的灵活性和可扩展性。
C++ 相对于其他高级语言(比如 Java)来说,更加底层,因此具有高性能、可移植、可重用等优点,被广泛应用于系统开发、嵌入式系统、服务端开发、游戏开发、图形学、音视频处理、金融分析等领域。
C++ 标准语法的发展也是非常快的,目前最新的标准都到 C++ 20 了!而且随着它的发展,它具有了丰富的语法和库支持,大学计算机专业的同学一般也会从 C++(C 语言)开始学起。
# 就业方向
C++ 的就业方向还是非常多的,鱼皮建议大家 首先根据自己的兴趣爱好 来做选择。
# 服务端开发
一般就是我们常说的后端开发了。C++ 语言在高性能服务器开发、大数据处理、金融领域等都有广泛应用。对于用户 / 并发量非常高的系统(比如微信),通常会选择更高性能的 C++ 框架来开发。服务端开发工程师除了要学习后端都要学习的通用知识(比如数据库、缓存),还需要更熟悉网络编程、并发编程、内存管理等技术。
# 系统开发
高性能的 C++ 无疑是系统开发的王牌语言!系统开发工程师负责设计和实现操作系统、驱动程序、嵌入式系统、网络协议栈等 系统级 软件,从事这个岗位必须熟练掌握 C++ 的语法、各种数据结构、算法、多线程编程、Linux 操作系统等技术。
# 客户端开发
一般是指开发用户看的到的界面。C++ 语言在桌面应用程序、移动应用程序和游戏开发中有着广泛应用。C++ 客户端开发工程师和前端开发有着相似的学习要求,都需要掌握 GUI 编程、布局知识、跨平台开发技术。现在主流的开发软件是 Qt(鱼皮的毕设就是用它做的)。
# 嵌入式开发
也是考虑到 C++ 的高性能,它被广泛应用于开发网络设备、汽车电子、智能家居、医疗设备等产品。嵌入式开发工程师和系统开发工程师的学习路径有相似之处,都需要学好 C++ 系统级编程以及操作系统知识。此外,嵌入式开发还需要了解硬件、嵌入式开发平台和相关工具。
# 游戏开发
C++ 语言是游戏开发的主语言之一(另一个是 C#),比如当下很火的虚幻引擎的主语言就是 C++!对于游戏开发工程师,最重要的是热爱游戏!然后游戏开发也分界面和后台开发,前者需要熟悉游戏引擎、图形学、物理引擎等技术,后者和服务端开发的要求差不多,都要学好网络编程、并发编程。
# 音视频处理
还是考虑到 C++ 的高性能,它在音视频编解码、视频渲染等领域有着非常广泛的应用!音视频处理工程师除了 C++ 基础知识外,还需要熟悉音视频格式、编解码技术、图形学等相关技术。
# 图像处理
和音视频处理类似,都属于 C++ 计算类工作。图像处理工程师需要熟悉图像处理算法、计算机视觉等,掌握各种 C++ 的图像处理库和相关算法。图像处理和音视频处理这方面的工作细分内容可能比较多,而且这类工作对数学会有一定要求,有些公司可能把它们定义为 “算法工程师”。
# SDK 开发
C++ 也适用于开发各种 SDK(软件开发工具包)。SDK 开发工程师需要熟悉 C++ 的语言特性、SDK / API 的设计和接口开发、掌握软件开发原则和设计模式,要能够设计出易用、高性能、可靠的 SDK 接口,提供给其他开发者使用。国内这方面的岗位没那么多,很多时候合并到后端(服务端)开发了。
从上面这些岗位,我们会发现,虽然都是学 C++,但不同方向的工程师需要侧重掌握的技能和专业知识也是有区别的。但是如果你还没确定选什么具体的方向,不妨先掌握它们都要求的通用技能,即能够熟练使用 C++ 语法来编程。
# 选 C++ 还是 Java?
首先,明确一点,C++ 和 Java 都是非常优秀的主流编程语言,编程语言和技术没有绝对的优劣之分,只不过在不同的场景下,有更优的选择。而且,像很多大神说的一样,语言只是工具,编程思想才是核心。不过,选择好的工具也是至关重要的,“好的抓手才能带来更大的赋能”。
如果你对操作系统底层、嵌入式、图像处理、音视频处理、游戏开发等方向感兴趣,建议选择 C++;而如果你更喜欢开发应用系统、思考和实现业务逻辑,就选择 Java。
不过对于身在校园、且时间充裕的同学来说,我更建议 “我全都要”。可以先学 C 语言或 C++ 打基础(这也是大部分计算机专业学生在高校内学到的第一门编程语言),因为它相对底层,能帮助你接触到更多计算机的概念,比如操作系统资源管理、网络通讯等,从而为学习其他的编程语言做铺垫。然后再学习 Java 来做项目、找工作。
此外,因为 Java 和 C++ 都可以作为后端开发语言,所以无论把哪门语言作为主语言,都要重点学好后台开发通用知识,比如数据库、缓存、消息队列、Socket 通讯、Linux、Git、计算机基础知识等。但选择 C++ 的同学要对操作系统、网络和 Linux 更熟悉一些 。
鱼皮专门针对这个问题写了一篇文章,欢迎阅读:https://www.code-nav.cn/post/1640611259688742914 (opens new window)
# 学习建议
- 基础一定要打牢!这是 C++ 相对于 Java 这种上层语言来说最重要的一个建议,因为 C++ 可以更灵活地操作系统(比如自主分配内存),所以如果基础不牢固,你不仅不能发挥出 C++ 的高性能等特性,反而还可能写出更辣鸡的程序。像 C++ 基础特性(指针、引用等)、操作系统、计算机网络、算法数据结构等计算机基础都要认真去学。
- 其他的建议就不是 C++ 的专属了,学任何编程语言都一样,要多练习语法、多学习类库框架、多实践做项目、多读别人的项目和开源代码、多积累总结等等。
# 学习大纲
不同的 C++ 就业方向,要学的知识也是不同的,但是会有很多交集。
只要你学习 C++,C++ 的语法、Linux 服务器、操作系统、计算机网络等知识几乎都是必学的!(纯客户端界面开发除外,但最好也学习下)
本学习路线以 C++ 的主流岗位 —— 服务端开发为例,大致分为以下几个阶段:
- C++ 语法基础
- C++ 进阶
- 计算机基础
- 软件开发通用
- 后端开发通用
- C++ 项目实战
- C++ 求职备战
# 一、C++ 语法基础
# 学习建议
对于完全 0 编程基础的同学来说,不建议上来就去看《C Primer Plus》(或者《C++ Primer Plus》)这种很厚的书籍,可能会被劝退。
对于大多数入门的同学,快速上手语法、能写出代码是最重要的。所以建议这里还是看培训机构在 B 站的免费视频教程:https://www.bilibili.com/video/BV1et411b73Z/,它们做入门课真的是有一手。
如果你们学校是从 C 语言开始学起,可以看浙大翁恺老师的 C 语言入门课:https://www.bilibili.com/video/BV1dr4y1n7vA,好评很多。
除了视频教程外,建议大家搭配一个文档教程(https://www.runoob.com/cplusplus/cpp-tutorial.html)一起学习,起到查漏补缺的作用。
初学 C++,除了学习基本的概念(比如变量、指针、引用)之外,一定要多上手敲代码练习、熟能生巧,还要能熟练地 debug 自己的程序,为以后开发更复杂的项目打好基础。
开发工具可以使用 Visual Studio(功能最强大)、Dev Cpp(最简单易用)、Code::Blocks(中规中矩)等。除了必须会用一款本地开发工具外,还可以搭配在线编程工具学习:https://www.runoob.com/try/runcode.php?filename=helloworld&type=cpp (opens new window) ,效率更高。
此外,建议把自己写过的每个代码文件都分类保存好、整理自己的笔记,忘了就查,而不要死记硬背。
学完本阶段后,可以试着用 C++ 去做一个简单的 XX 管理系统(控制台里运行即可),或者做一些 LeetCode 上入门级别的算法题目、学校里的 OJ 等等。
# 知识点
- 基础概念
- 变量
- 常量
- 关键字
- 数据类型
- 运算符
- 表达式
- 控制结构
- 条件分支
- 循环
- 开发工具
- 函数
- 函数重载
- 默认参数
- 基本数据结构
- 数组
- 字符串
- 内存管理
- 内存模型
- 动态内存分配
- 动态内存释放
- 指针
- 空指针
- 野指针
- 引用
- 函数参数引用
- 返回值引用
- 结构体
- 定义
- 访问
- 命名空间
- 面向对象编程
- 类
- 对象
- 封装
- 成员变量
- 成员函数
- this 指针
- 构造函数
- 析构函数
- 拷贝构造函数
- 静态成员
- 友元
- 友元函数
- 友元类
- 运算符重载
- 继承
- 对象初始化顺序
- 同名成员问题
- 多继承
- 虚继承
- 菱形继承
- 多态
- 虚函数
- 纯虚函数
- 抽象类
- 虚析构函数
- 纯虚析构函数
- 异常处理
- 抛出
- 捕获
- 异常类型
- 标准异常
- STL
- 容器
- vector
- string
- list
- pair
- set
- map
- deque
- stack
- 迭代器
- 函数对象
- 谓词
- 一元谓词
- 二元谓词
- 内置函数对象
- 算法
- 排序
- 查找
- 容器
- 类型转换
- 模板
- 函数模板
- 类模板
- 泛型
- I / O 操作
- 文件操作
by 程序员鱼皮 知识星球 (opens new window)
# 二、C++ 进阶
上个阶段我们主要通过看视频来快速入门 C++ 基础编程语法;而这个阶段要做的是巩固基础、学习更多 C++ 的特性、甚至是底层原理,建议大家通过阅读经典书籍的方式来学习。
先系统学习 C++ 基础及进阶语法,可以读下面 2 本书籍:
- 《C++ Primer Plus》:https://book.douban.com/subject/10789789/ (opens new window)
- 《Effective C++》:https://book.douban.com/subject/5387403/ (opens new window)
学到这里,建议先去学习本路线第三阶段的计算机基础,否则下面的书啃起来会很累。
当你学完一遍算法、数据结构、操作系统、计算机网络后,再开始学习下面的内容。
学习 STL 源码,阅读《STL 源码剖析》:https://book.douban.com/subject/1110934/ (opens new window)
然后学习 Linux 服务端编程,可以阅读:
- 《Linux高性能服务器编程》:https://book.douban.com/subject/24722611/ (opens new window)
- 《Linux多线程服务端编程》:https://book.douban.com/subject/20471211/ (opens new window)
网上有很多博主还推荐下面 2 本书,但是难度比较大,请大家根据学习进度和自身能力选择性阅读:
- 《UNIX网络编程》:https://book.douban.com/subject/26434583/、https://book.douban.com/subject/26434599/ (opens new window)
- 《UNIX环境高级编程》:https://book.douban.com/subject/1788421/ (opens new window)
# 知识点
- 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
# 三、计算机基础
# 学习建议
由于 C++ 语言本身相对更底层,常用于系统开发、嵌入式、高性能计算等领域。因此 C++ 开发者相对于学 Java 或其他方向的同学来说,需要具备更扎实、更深入的计算机基础能力。
基础不是短短几天就能掌握的,需要持续学习、持续巩固。因此建议想快速就业的同学,可以先跳过这部分内容,把更多的精力放在后面开发框架的学习上,争取快速用 C++ 做出项目,等到面试前再去突击补习基础。而对于绝大多数计算机相关专业、或者学习时间比较富裕的同学,建议每天花 1 - 2 小时左右持续学习并巩固计算机基础,比如每天刷 2 - 3 道算法题,坚持半年那就是 500 多道,面试的算法关就基本没什么问题了。
# 知识点
点击可跳转到该知识点的详细学习路线
- 计算机导论(计算机基本概念) (opens new window)
- 数据结构和算法 (opens new window)
- 操作系统 (opens new window)
- 计算机网络 (opens new window)
# 四、软件开发通用
# 学习建议
只要你想从事软件开发方面的工作,以下这些知识点,最好都按照顺序学习一遍!
对 C++ 开发来说,Linux 系统是重中之重。掌握 Linux 可以帮你更好地理解系统底层的运行机制,比如进程管理、内存管理、文件系统、网络传输等。
除了 Linux 之外,软件开发的其他通用技能都可以融入到日常学习中,而不是花一大段连续时间去专攻。比如企业项目研发流程,读一遍有个印象就好;Git & GitHub 需要在平时做项目、用开源项目时多多使用;23 种主流的设计模式可以每天学 2 - 3 个;软件工程的专业知识大学科班一般都会教,学校不教的话作为一个课外知识去补充即可。
# 知识点
点击可跳转到该知识点的详细学习路线
- 企业项目研发流程 (opens new window)
- Git & GitHub (opens new window)
- Linux 系统 (opens new window)
- 设计模式 (opens new window)
- 软件工程 (opens new window)
by 程序员鱼皮 知识星球 (opens new window)
# 五、后端开发通用
# 学习建议
以下这部分知识点几乎适用于所有后端方向的同学(比如 Java、Go、Python 等),比如数据库、Redis、Nginx、消息队列都是通用的。只不过不同编程语言的后端开发用到的具体的开发框架、编程语法会有差别,比如 Java 的主流开发框架有 Spring Boot、Netty 等,而 C++ 主流开发框架有 Boost、gRPC、crow 等。
如果你还在纠结学 C++ 还是 Java,或者别的语言,不妨在能够独立做出项目的前提下,把最大的精力投入在数据库、Redis、Nginx、消息队列、架构设计等通用后端开发技能。
# 知识点
- 数据库
- 开发框架
- 包管理工具
- Redis
- 消息队列
- Nginx
- 微服务
- 容器
- 架构设计
由于这部分内容的大多数知识点都和 鱼皮的 Java 学习路线 (opens new window) 一致,此处不再赘述,下面只列举 C++ 学习和 Java 学习中有差异的地方。
# 数据库
数据库就是存放数据的库,负责存储、管理和检索数据。
我们平时看到的网站上的数据,基本都是存放到数据库中的,在用户需要的时候,再通过后端程序从数据库中取出来。
数据库又分为关系型数据库和非关系型数据库。关系型数据库适用于存储相互之间有关联的数据,比如做一个学生管理系统,要存储学生、班级,一个班级有多个学生,这就是一种关联关系,关系型数据库典型的技术是 MySQL;而非关系型数据库主要用于存储零散的、相互独立的数据,典型的技术是 Redis。
此处我们主要学习的是关系型数据库,并且以最主流、学习成本相对更低的关系型数据库 MySQL 为主。
对 C++ 同学来说,对数据库的学习包括以下 4 个方面:
- 学习关系型数据库理论:包括关系模型、关系代数、数据库范式、事务理论等,能够帮助你更好地理解数据库的结构和设计。
- SQL 语言:作为关系型数据库的标准查询语言,掌握 SQL 是非常重要的!学习过程以实践为主,要能够熟练使用 SQL 来操作数据库(增删改查)
- 数据库设计和编程:学习如何根据实际业务场景来设计数据库表、并且学习如何使用 C++ 来操作数据库,这是企业开发中最重要的能力。
- 数据库高级:初学数据库时这部分可以跳过。主要是学习数据库的高级特性、底层原理、数据库的分析、运维、性能优化等,可以帮助你更好地运用数据库来解决问题。
详细学习路线请参考:https://www.code-nav.cn/post/1641797333479903234 (opens new window)
# 开发框架
ORM 框架,作用是操作数据库。比如 ODB(https://www.codesynthesis.com/products/odb/)、QxOrm 等,学习一个即可。
Web 开发框架:作用是编写 HTTP 接口,可用于应用的后端(类似 Java 的 Spring MVC)。比如 Drogon(https://github.com/drogonframework/drogon)、Pistache(https://github.com/pistacheio/pistache)等,学习一个即可。
RPC 框架,作用是远程调用其他的服务,可用于实现分布式、微服务架构。推荐学习 Google 的 gRPC(https://github.com/grpc/grpc)。
其他框架可以从这个库中按需学习:https://github.com/fffaraz/awesome-cpp (opens new window)
# 包管理工具
作用是帮你管理复杂的 C++ 项目依赖包。建议学习 conan:https://github.com/conan-io/conan (opens new window)
# Redis
详细学习路线请参考:https://www.code-nav.cn/post/1640589994284695553 (opens new window)
# 消息队列
参考:https://www.code-nav.cn/post/1640584449888772098#heading-93 (opens new window)
# Nginx
参考:https://www.code-nav.cn/post/1640584449888772098#heading-98 (opens new window)
# 微服务
微服务是一种思想,可以使用上面提到的 gRPC 框架(https://github.com/grpc/grpc)实现微服务。
# 容器
参考:https://www.code-nav.cn/post/1640584449888772098#heading-116 (opens new window)
# 架构设计
参考:https://www.code-nav.cn/post/1640584449888772098#heading-169 (opens new window)
# 六、C++ 项目实战
初学 C++ 语法时,最好的项目就是刷算法题目,因为每道题目本质上就是在解决一个小问题。参考鱼皮的 数据结构和算法学习路线 (opens new window) 。
由于 C++ 是个相对底层、注重基础的编程语言,很多 C++ 的练手项目都是 “手写轮子” 相关的,比如下面这些:
- 编程语言
- 用 C 语言实现自己的编程语言:https://buildyourownlisp.com/ (opens new window)
- 开发工具
- 工具库
- 手写简易 STL:https://github.com/Alinshans/MyTinySTL (opens new window)
- 简单 JSON 库:https://github.com/dropbox/json11 (opens new window)
- 简单堆内存分配器:https://github.com/CCareaga/heap_allocator (opens new window)
- XML 解析库:https://github.com/leethomason/tinyxml2 (opens new window)
- 国外手写 TCP / IP 协议栈教程:https://www.saminiir.com/lets-code-tcp-ip-stack-1-ethernet-arp/ (opens new window)
- 数据库
- 中间件
- KV 存储引擎 LevelDB:https://github.com/google/leveldb (opens new window)
- 开发框架
- 网络编程库 muduo:https://github.com/chenshuo/muduo (opens new window)
- 超轻量 web 框架 oatpp:https://github.com/oatpp/oatpp (opens new window)
- 微信 RPC 框架 phxrpc:https://github.com/Tencent/phxrpc(简化版的微信后台 RPC 框架,冲鹅厂的同学推荐看)
- 搜狗 RPC 框架 srpc:https://github.com/sogou/srpc(有使用教程,上手还是比较容易的,先会用再仿写)
- 国外手写 RPC 框架教程:https://users.cs.cf.ac.uk/Dave.Marshall/C/node33.html (opens new window)
- 服务器
- 轻量级 Web 服务器学习:https://github.com/qinguoyi/TinyWebServer (opens new window)
- 超轻量型 Http Server - Tinyhttpd:https://github.com/EZLippi/Tinyhttpd(代码不到 500行,适合学习,详细注释版:https://github.com/cbsheng/tinyhttpd)
- 分布式服务器视频教程:https://www.bilibili.com/video/BV1YG41137Vk(评论区有资料)
- 高性能 web 服务器项目:https://github.com/linyacool/WebServer (opens new window)
- 国外并发服务器教程:https://eli.thegreenplace.net/2017/concurrent-servers-part-1-introduction/ (opens new window)
- 代理服务器 tinyfecVPN:https://github.com/wangyu-/tinyfecVPN (opens new window)
- 分布式系统
C++ 的项目视频比较少,建议大家在学做 C++ 项目的过程中多在网上搜索相关的文章和教程。
大家也可以从以下网站中挑选自己感兴趣的项目去学习:
- C++ 相关类库:https://en.cppreference.com/w/cpp/links/libs (opens new window)
- GitHub C++ 内容合集:https://github.com/fffaraz/awesome-cpp (opens new window)
# 七、C++ 求职备战
C++ 同学的面试重点主要分为 3 个大方向:
- C++ 语言本身
- 计算机基础
- C++ 领域技能(比如后端、嵌入式、游戏开发、客户端开发等)
鱼皮分别从这 3 个方面给大家找了一些经典面试题,其中领域技能以后端为主,大家可以试着回答下。
# C++ 面试题
- 是否关注过 C++ 的版本更新?比如 C++ 11 新增了哪些新特性?
- 什么是 C++ 的虚函数和纯虚函数?它们分别有什么作用?
- 如果虚函数是有效的,那为什么不把所有函数设为虚函数?
- 什么是 C++ 的多态?它是怎么实现的?
- C++ 函数重载和覆盖有什么区别?
- 什么是 C++ 的智能指针?它有什么作用?有哪些种类?
- 什么是 C++ 的模板?你在开发中是怎么运用模板的?
- 什么是 C++ 的动态内存分配?用它有什么优缺点?
- 什么是 C++ 的友元函数?它有什么作用?
- 什么是 C++ 的 STL?你用过哪些 STL,是否有了解过 STL 的底层实现?
- 指针和引用有什么区别?各自的应用场景是什么?
- 如何计算一个类或结构体的大小?
- C++ 会出现内存泄漏么?有哪些避免内存泄漏的方法?
- new 和 malloc 有什么区别?
- C++ 中有几种类型转换的方法?
# 计算机基础面试题
# 数据结构和算法
- LeetCode 精选 100 道:https://leetcode-cn.com/problem-list/2cktkvj/ (opens new window)
- LeetCode 精选算法 200 题:https://leetcode-cn.com/problem-list/qg88wci/ (opens new window)
- LeetCode 算法高频面试题汇总:https://leetcode-cn.com/leetbook/detail/top-interview-questions/ (opens new window)
# 操作系统
- 什么是进程和线程?二者有什么区别?
- 操作系统是如何做到进程阻塞的?
- 有哪些常见的进程通信方式?
- 进程调度算法有哪些?
- 线程是如何实现的?
- 什么是 CPU 的缓存?
- 什么是内核态和用户态?二者有什么区别?
- 操作系统是怎么实现锁的?
- 什么是死锁,什么情况下会出现死锁(必要条件)?怎么预防和处理?
- 什么是系统调用?
- 操作系统如何进行内存管理?
# 计算机网络
- 介绍下计算机网络分层结构,各层有哪些常用协议?
- TCP 和 UDP 协议有什么区别?分别适用于什么场景?
- TCP 为什么需要三次握手和四次挥手?为什么不是两次握手、四次握手?为什么不是三次挥手?
- TCP 滑动窗口和拥塞控制机制
- TCP 如何保证可靠性?
- HTTP 协议常用状态码和含义
- HTTP 和 HTTPS 协议的区别?
- HTTP/1.0、1.1、2.0 有哪些区别和改进?
# C++ 后端面试题
- 你用过哪些 C++ 网络编程库或 web 开发框架?
- 你用过哪些 C++ 日志框架?
- 什么是 socket 编程?C++ 中怎么进行 socket 编程?
- C++ 有没有 ORM 框架?你用过哪些?
- 你是怎么在 C++ 中进行多线程编程的?
- 什么是 I/O 多路复用?如何使用 epoll 和 select 等 I/O 多路复用技术?
- 有哪些知名技术(或框架)是用 C++ 实现的?是否有了解过它们的实现原理?
- 是否了解过设计模式?请用 C++ 实现单例模式
# 资源
建议大家可以多主动看看各公司的招聘要求(尤其是大厂的要求),确认自己的学习重点。
# 校招岗位
- 阿里 C++ 岗位:
- 研发工程师:https://talent.alibaba.com/campus/position-detail?lang=zh&positionId=2014816 (opens new window)
- 客户端开发工程师:https://talent.alibaba.com/campus/position-detail?lang=zh&positionId=2014805 (opens new window)
- 游戏开发工程师:https://talent.alibaba.com/campus/position-detail?lang=zh&positionId=2014826 (opens new window)
- 腾讯 C++ 岗位:
- 后台开发:https://join.qq.com/post_detail.html?pid=1&id=101&tid=2 (opens new window)
- PC 客户端开发:https://join.qq.com/post_detail.html?pid=2&id=102&tid=2 (opens new window)
- 游戏客户端开发:https://join.qq.com/post_detail.html?pid=1&id=107&tid=2 (opens new window)
- 游戏引擎开发:https://join.qq.com/post_detail.html?pid=1&id=221&tid=2 (opens new window)
- 美团 C++ 岗位:
- 华为软件开发:https://career.huawei.com/reccampportal/portal5/campus-recruitment-detail.html?jobId=235686 (opens new window)
# 社招岗位
- 阿里社招:https://job.alibaba.com/zhaopin/positionList.htm (opens new window)
- 腾讯社招:https://careers.tencent.com/search.html (opens new window)
# 实习
# 学习资源
# 知识总结
- C++ 参考手册:https://en.cppreference.com/w/ (opens new window)(最新的语法特性都在这里)
- 程序喵大人 C++ 知识仓库:https://github.com/chengxumiaodaren/cpp-learning (opens new window)
- 计算机基础知识总结 CS-Notes:http://www.cyc2018.xyz/ (opens new window)
- C++ 相关问答:http://www.sunistudio.com/cppfaq/ (opens new window)
# 自学 C++ 专题资源
- ⭐ GitHub C++ 专区:https://github.com/topics/cpp (opens new window)
- ⭐ GitHub C++ 内容合集:https://github.com/fffaraz/awesome-cpp (opens new window)
- StackOverflow:https://stackoverflow.com/questions/tagged/c%2B%2B (opens new window) (解决问题必备)
- 掘金 C++ 专区:https://juejin.cn/tag/C++(阅读技术文章)
- 大厂技术博客
- 知名 C++ 大佬陈硕的博客(muduo 网络库的作者):https://blog.csdn.net/solstice/ (opens new window)
- C++ 编程技巧:https://abseil.io/tips/ (opens new window)
- C++ 之父的一些问答:https://www.stroustrup.com/bsfaqcn.html (opens new window)
小伙伴们加油!