零基础C/C++开发到底要学什么?
作者:黑马程序员
链接:https://www.zhihu.com/question/597037176/answer/2999707086
先和我一起看看,C/C++学完了可以做什么:
- 软件工程师:负责设计、开发、测试和维护各类型的软件应用程序;
- 游戏开发:C++在游戏开发领域有广泛的应用,作为游戏开发工程师,可以参与游戏引擎、游戏逻辑和游戏性能优化等方面的开发工作。
- 嵌入式开发:C++在嵌入式系统领域也有很多应用,作为嵌入式系统工程师,可以负责开发运行在各种嵌入式设备商的软件和固件。
- 系统软件开发工程师:你可以在操作系统、数据库、网络协议等系统软件领域找到工作,负责开发、优化和维护底层系统软件。
- 计算机图形学工程师:C++在计算机图形学领域有广泛应用,作为计算机图形学工程师,我们可以参与开发和优化图形渲染,计算机视觉和虚拟现实等相关技术。
- 算法工程师:C++在算法实现方面有优势,作为算法工程师,我们可以负责研究和实现各种先进的算法,以解决实际问题。
- 机器学习工程:虽然Python是机器学习领域的主导语言,但C++在某些性能关键领域(比如深度学习框架底层)也有应用。作为机器学习工程师,可以分参与开发和优化机器学习框架和库。
这!只是C++相关工作的一部分,实际上C++在许多其他领域也有应用,而且从上往下再细分的话又有很多岗位,以后台(服务端)举例:
- 有做数据处理和分析的
- 有做基础协议和通信的
- 有做服务端底层应用优化的
- 甚至还有做后台系统驱动和内核的
- ……
所以,上面说C++学完了真的能当饭吃,而且基本上是越老越吃香!
一、要学什么东西?
— 语言本身的学习
C语言:
除了最基础的语法:变量、条件、循环、字符串、数组、函数、结构体等之外;
C语言最重要的就是:指针、内存管理,以后在企业吃饭就靠它们两个了!
C++:
C++是C语言的延伸,可以理解为在C语言里加入了面向对象的特性。因为只有面向对象特性的加持,代码才能更好地复用、扩展和工程化,这是大型项目的必备要素。
除了C语言所有的底子之外,还需要学习C++的面向对象(封装、继承与多态)特性、泛型、模板、STL等等。
— 编程基础「四大件」
基础四大件包括:数据结构和算法、计算机网络、操作系统、设计模式。
这跟学什么语言,后续从事什么编程方向无关,只要是做编程开发,这四个基础就无法避开。
- 数据结构和算法,几种基础数据结构要烂熟于心,比如:字符串、链表、二叉树、堆、栈、队列、哈希等;基本的几大算法也要了如指掌,比如查找、排序、动态规划、分治等等。
- 计算机网络,可以说是互联网通信的基石,无论如何一定要对TCP/IP的协议栈了如指掌,主要就是学习和掌握原理,包括:ARP协议、IP协议、ICMP协议、TCP和UDP协议、DNS协议、HTTP协议、HTTPS协议。
- 操作系统,该部分重点包括:进程和线程的相关原理(原子性、并发、锁)、内存相关原理(内存分布、内存调度)
- 设计模式,倒不需要23种设计模式全部记住,常见的几个如:单例模式、工厂模式、代理模式、策略模式、模板方法模式建议熟练于心。
— 应用实践编程
这一部分会设计到一些工具、编程环境和具体编程实践,这部分内容学完后可以自己做出来点东西。
- Linux操作系统的使用,很多人C/C++都是在Windows环境上进行的,但是实际企业开发基本都是在Linux,所以必须要学会,学习内容:常见的Linux操作命令,基本的shell编程。
- 编译工具:很多人学C语言、C++都在类似Visual Studio这种集成IDE里进行代码编译,这个其实也用了编译器,只不过是微软自家的MS编译器,而且所有操作均可视化。而企业里开发很少会基于Windows系统,所以Linux平台上的编译器更为重要,最典型的当属
GCC
,甚至有些公司有自己定制过的交叉编译工具,但没关系,只要GCC
熟悉,其他问题都不大。 - 其次,大家自学C语言、C++,都借助类似VS这种IDE,点按钮即可对源文件编译。而企业里实际项目的编译动作叫
make
,编译的实际动作和过程都是写在makefile
文件里,所以makefile的书写规则建议学习! - Linux系统编程,Windows系统编程里面有各种各样的Windows API,同理Linux系统API的使用就更加重要。
- 多线程编程,包括:线程、资源、信号、同步、互斥、锁等等一些具体的编程方法。
- 网络编程,此处的网络编程主要指的是具体Linux系统上的网络编程
API
和IO
函数的编程实践。
二、C/C++学习资源
2021年C++学习路线以及知识整理汇总
【课程分享】
- 最适合自学的C语言基础
- C语言数据结构 培养架构师思维
- C语言提高深入浅出
- 1小时透彻理解C语言指针
- 最适合自学的C++基础视频_深入浅出版全套资料
- 匠心之作 C++从0到1入门学编程
- 基于STL泛化编程的演讲比赛
- C++与分布式数据库开发
- C/C++与数据库开发
【标准库】
- C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。
- Standard Template Library:标准模板库
- C POSIX library : POSIX系统的C标准库规范
- ISO C++ Standards Committee :C++标准委员会
【框架和库】
- Apache C++ Standard Library:是一系列算法,容器,迭代器和其他基本组件的集合
- ASL :Adobe源代码库提供了同行的评审和可移植的C++源代码库。
- Boost :大量通用C++库的集合。
- BDE :来自于彭博资讯实验室的开发环境。
- Cinder:提供专业品质创造性编码的开源开发社区。
- Cxxomfort:轻量级的,只包含头文件的库,将C++ 11的一些新特性移植到C++03中。
- Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。
- EASTL :EA-STL公共部分
- ffead-cpp :企业应用程序开发框架
- Folly:由Facebook开发和使用的开源C++库
- JUCE :包罗万象的C++类库,用于开发跨平台软件
- libPhenom:用于构建高性能和高度可扩展性系统的事件框架。
- LibSourcey :用于实时的视频流和高性能网络应用程序的C++11 evented IO
- LibU : C语言写的多平台工具库
- Loki :C++库的设计,包括常见的设计模式和习语的实现。
- MiLi :只含头文件的小型C++库
- openFrameworks :开发C++工具包,用于创意性编码。
- Qt :跨平台的应用程序和用户界面框架
- Reason :跨平台的框架,使开发者能够更容易地使用Java,.Net和Python,同时也满足了他们对C++性能和优势的需求。
- ROOT :具备所有功能的一系列面向对象的框架,能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用。
- STLport:是STL具有代表性的版本
- STXXL:用于额外的大型数据集的标准模板库。
- Ultimate++ :C++跨平台快速应用程序开发框架
- Windows Template Library:用于开发Windows应用程序和UI组件的C++库
- Yomm11 :C++11的开放multi-methods.
【人工智能】
- btsk :游戏行为树启动器工具
- Evolving Objects:基于模板的,ANSI C++演化计算库,能够帮助你非常快速地编写出自己的随机优化算法。
- Neu:C++11框架,编程语言集,用于创建人工智能应用程序的多用途软件系统。
三、入门知识点
- Unix/Linux:熟悉基本的Unix/Linux命令,学会在Unix/Linux环境下编译和运行C程序。
- C语言概述:了解C语言的历史、特点以及在编程领域的应用。
- 编程基础:掌握C语言的基本语法、数据类型、变量、常量、运算符、表达式、控制语句(如if、while、for等)、函数、数组、字符串等基本知识。
- 指针:理解指针的概念,学会使用指针进行内存访问和操作。
- 结构体和联合体:了解结构体和联合体的定义和用法,学会使用它们来表示复杂的数据结构。
- 动态内存管理:学会使用malloc、calloc、realloc和free等函数进行动态内存分配和回收。
- 文件I/O:了解文件的概念,学会使用fopen、fclose、fread、fwrite等函数进行文件操作。
- 预处理指令:了解C语言的预处理指令,如#define、#include、#ifdef等,以及它们在编程中的应用。
- 模块化编程:学会将代码分割成多个模块,通过头文件和源文件进行组织,提高代码的可读性和可维护性。
对于C高级编程,你可以学习以下知识点:
- 高级数据结构:学习如何使用C语言实现链表、树、图等高级数据结构。
- 算法:了解常用的算法,如排序、查找、动态规划等,并学会使用C语言实现这些算法。
- 系统编程:学习如何使用C语言进行系统级编程,如进程管理、线程同步、信号处理等。
- 网络编程:了解网络编程的基本概念,学会使用C语言进行套接字编程,实现TCP/IP和UDP通信。
- 并发编程:学习使用C语言进行多线程编程,了解线程同步和互斥的概念,熟悉相关函数如pthread_create、pthread_join等。
- 库函数:了解C语言的标准库函数,如数学库、时间库等,并学会在编程中使用这些库函数。
- 优化与调试:学会使用调试工具,如gdb,进行程序调试。了解常用的代码优化技巧,提高程序的性能。
- 设计模式:了解常用的设计模式,如单例模式、工厂模式等,并学会在C语言中应用这些设计模式。
这里只是给大家提供C语言的学习思路,尽量给自己设定好详细的学习计划,按照计划进行学习。从实际问题出发,可以尝试用C语言解决一些实际生活中的问题,这样可以提升我们的兴趣和动力。
四、GitHub上C/C++的项目
Awesome C/C++ (https://github.com/fffaraz/awesome-cpp) 这是一个精选的 C++ 库、框架和资源列表,帮助您了解和学习各种 C++ 生态系统中的工具和技术。
C++ Primer (https://github.com/changkun/cppprimer-code) 这个仓库包含《C++ Primer》一书的示例代码,适合初学者学习 C++ 基本概念。
C Algorithms (https://github.com/fragglet/c-algorithms) 这个仓库包含了一系列常见的 C 语言算法和数据结构实现,对于学习和实现基本算法很有帮助。
cJSON (https://github.com/DaveGamble/cJSON) cJSON 是一个轻量级、易于使用的 C 语言 JSON 解析器。通过学习这个项目,您可以了解如何处理 JSON 数据并将其应用于实际项目中。
SQLite (https://github.com/sqlite/sqlite) SQLite 是一个使用 C 语言编写的小型、快速、自包含的高可靠性的 SQL 数据库引擎。通过学习 SQLite,您可以了解数据库系统的工作原理,并提高您的 C 编程技能。
Redis (https://github.com/redis/redis) Redis 是一个使用 C 语言编写的高性能键值存储数据库。通过学习 Redis 源码,您可以了解数据结构、网络编程和并发处理等高级概念。
FFmpeg (https://github.com/FFmpeg/FFmpeg) FFmpeg 是一个广泛使用的音视频处理库。通过学习这个项目,您可以了解多媒体处理、编解码器、过滤器等相关知识。
相关文章:

零基础C/C++开发到底要学什么?
作者:黑马程序员 链接:https://www.zhihu.com/question/597037176/answer/2999707086 先和我一起看看,C/C学完了可以做什么: 软件工程师:负责设计、开发、测试和维护各类型的软件应用程序;游戏开发&#x…...

OpenStack中的CPU与内存超分详解
目录 什么是超分 CPU超分 查看虚拟机虚拟CPU运行在哪些物理CPU上 内存超分 内存预留 内存共享 如何设置内存预留和内存共享 全局设置 临时设置 什么是超分 超分通常指的是CPU或者GPU的分区或者分割,以在一个物理CPU或GPU内模拟多个逻辑CPU或GPU的功能。这…...

main.m文件解析--@autoreleasepool和UIApplicationMain
iOS 程序入口UIApplicationMain详解,相信大家新建一个工程的时候都会看到一个main.m文件,只不过我们很少了解它,现在我们分析一下它的作用是什么? 一、main.m文件 int main(int argc, char * argv[]) {autoreleasepool {return …...

C语言复习之顺序表(十五)
📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c阶段>——目标C、Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享…...

学系统集成项目管理工程师(中项)系列10_立项管理
1. 系统集成项目管理至关重要的一个环节 2. 重点在于是否要启动一个项目,并为其提供相应的预算支持 3. 项目建议 3.1. Request for Proposal, RFP 3.2. 立项申请 3.3. 项目建设单位向上级主管部门提交的项目申请文件,是对拟建项目提出的总体设想 3…...

电视盒子哪个好?数码小编盘点2023电视盒子排行榜
随着网络剧的热播,电视机又再度受宠,电视盒子也成为不可缺少的小家电。但面对复杂的参数和品牌型号,挑选时不知道电视盒子哪款最好,小编根据销量和用户评价整理半个月后盘点了电视盒子排行榜前五,对电视盒子哪个好感兴…...

flink动态表的概念详解
目录 前言🚩 动态表和持续不断查询 stream转化成表 连续查询 查询限制 表转化为流 前言🚩 传统的数据库SQL和实时SQL处理的差别还是很大的,这里简单列出一些区别: 尽管存在这些差异,但使用关系查询和SQL处理流并…...

ArcGIS Pro用户界面
目录 1 功能区 1.1 快速访问工具栏 1.2 自定义快速访问工具栏 1.3 自定义功能区选项 1.3.1 添加组和命令 1.3.2 添加新选项卡 2 视图 3 用户界面排列 编辑 4 窗格 4.1 内容窗格 4.2 目录窗格 4.3 目录视图(类似ArcCatalog) 4.4 浏览对话框…...

HDCTF 2023 Pwn WriteUp
Index 前言Pwnner分析EXP: KEEP_ON分析EXP: Minions分析EXP: 后记: 前言 本人是菜狗,比赛的时候只做出来1题,2题有思路但是不会,还是太菜了。 栈迁移还是不会,但又都是栈迁移的题,真头大。得找时间好好学学…...

【 Spring 事务 】
文章目录 一、为什么需要事务(简单回顾)二、MySQL 中的事务使⽤三、Spring 中事务的实现3.1 Spring 编程式事务(手动事务)3.2 Spring 声明式事务(自动事务)3.2.1 Transactional 作⽤范围3.2.2 Transactional 参数说明3.2.3 Transactional 不进行事务回滚的情况3.2.4 Transactio…...

【刷题之路】LeetCode 203. 移除链表元素
【刷题之路】LeetCode 203. 移除链表元素 一、题目描述二、解题1、方法1——在原链表上动刀子1.1、思路分析1.2、代码实现 2、方法2——使用额外的链表2.1、思路分析2.2、代码实现 一、题目描述 原题连接: 203. 移除链表元素 题目描述: 给你一个链表的…...

关于Open Shift(OKD) 中 用户认证、权限管理、SCC 管理的一些笔记
写在前面 因为参加考试,会陆续分享一些 OpenShift 的笔记博文内容为 openshift 用户认证和权限管理以及 scc 管理相关笔记学习环境为 openshift v3 的版本,有些旧这里如果专门学习 openshift ,建议学习 v4 版本理解不足小伙伴帮忙指正 对每个…...

活动文章测试(勿删)
大家好! 我是CSDN官方博客! 恭喜你正式加入CSDN博客,迈上技术成神之路~~ 路漫漫其修远兮——身为技术人,求索之路道阻且艰,但一万次的翘首却比不过一次的前行。 现在,就来开启你的个人博客,发布…...

Windows下 批量重命名文件【bat实现】
目录 前言 一、Windows简单实现重命名 二、使用命令行和Excel实现重命名 前言 在实际应用中,我们经常会遇到将指定文件夹下的文件重命名,以便程序读写。 本文介绍了两种方式,都是在Windows系统中自带的重命名方式。 一、Windows简单实现…...

从 Milvus 2.2 到 2.2.6,我们是如何持续稳定升级的
最近,Milvus 发布了 2.2.6 版本,在修复了一些 bug 后,Milvus 变得越发稳定。 事实上,自 Milvus 升级至 2.X 版本以来,我们一直在努力改进及优化,推出了诸如从文件中批量导入数据、基于磁盘的近似最近邻&…...

自学python有推荐的么
大学生自学那必然是首推B站大学哇能称之为大学不是没有道理的,看看各个领域的学习分享都是非常多的,关键是看着弹幕就感觉像是在和一帮志同道合的小伙伴一起学习,自学的道路也不再孤单了,遇见不会的没准还能在弹幕和评论区找到答案…...

设计模式 --- 行为型模式
一、概述 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分…...

防御式编程
防御式编程是提高软件质量技术的有益辅助手段。就是一开始不要在代码里引入错误。使用迭代式设计、编码前写伪代码,写测试用例,助于防止引入错误。 断言 断言是用来检查永远不应该发生的非正常情况,处理这些错误的代码 错误处理技术ÿ…...

导出pdf Puppeteer 和 wkhtmltopdf区别
您可以使用第三方的 PDF 生成库来将动态页面导出为 PDF 文件。目前比较常见的是使用 Headless Chrome 或 Puppeteer 这类工具将页面转换为 PDF 文件,具体步骤如下: 安装 Headless Chrome 或 Puppeteer。 使用框架调用后端接口获取数据,渲染出…...

sequelize + Nodejs + MySQL 的简单用法
How to Use Sequelize ORM in NodeJS - Tutorial 1 Sequlize 简介 Sequelize 是最流行的可以与 Nodejs 一起使用的一种关系数据库 ORM (Object-relational mapping 对象关系映射),Mongoose 是 MongoDB 的 ORM. Sequelize 的作用,简单地说,就…...

Android Jetpack - Navigation 组件:进行应用程序导航
一. Navigation 组件的介绍 1.1 什么是 Navigation 组件 Navigation 组件是一种 Android Jetpack 库,它可以帮助开发者轻松地实现应用程序中的导航功能。导航组件包含多个类和组件,包括导航图、目的地、导航控制器等,可以帮助我们管理应用程…...

MySQL的binlog原理和它的几种使用方法
MySQL中的二进制日志(binlog)是一种用于记录数据库操作的日志文件,它可以记录MySQL服务器接收到的所有修改数据库的语句,例如INSERT、UPDATE和DELETE等语句。二进制日志对于备份和恢复数据库、复制数据库和进行数据分析等操作非常…...

40岁以上的程序员还容易找到工作吗?聊聊我自己的亲身经历
今天我们来讨论一个比较热门的话题,那就是程序员。如果到了40岁以上还容易找到工作吗?这个问题呢,其实是一个非常现实的问题,也是我们程序员非常关心的一个问题。因为我们每一个程序员,他都会有到40岁的那一天。 首先…...

Class类
package com.hspedu.reflection.class_;import com.hspedu.Cat;import java.util.ArrayList;/*** author 韩顺平* version 1.0* 对Class类特点的梳理*/ public class Class01 {public static void main(String[] args) throws ClassNotFoundException {//看看Class类图//1. Cla…...

Python小姿势 - 可选知识点:
可选知识点: 列表推导式 列表和字典推导式 字典推导式 生成器表达式 带条件的生成器表达式 解析XML 解析JSON 使用Requests和BeautifulSoup爬虫 Python并发编程 Python多线程编程 Python多进程编程 Python异步编程 Python装饰器 Python闭包 Python模块化 Python类和…...

Javaee Spring的AOP简介
一.Spring的AOP简介 1.1 什么是AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代 理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是…...

基于ansible初始化linux服务器基础环境。
大家好,今天我要和大家分享一个关于搭建centos环境的新方法。 以前我们经常会看到一些文章介绍如何搭建centos环境,但很多时候都会出现一些问题。不过现在有了一种新的方法,就是使用ansible脚本来实现。 虽然这种方法仅适用于centos7&#…...

leetcode-数据库题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 175. 组合两个表176. 第二高的薪水177. 第N高的薪水178. 分数排名181. 超过经理收入的员工182. 查找重复的电子邮箱183. 从不订购的客户 175. 组合两个表 select p…...

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令
声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…...

信息的相关性和冗余度:信息在整个文明中的作用
文章目录 I 古埃及的象形文字1.1 罗塞塔石碑1.2 古埃及文字音节和希腊字母的对应表1.3 破解古埃及文字 I 古埃及的象形文字 1.1 罗塞塔石碑 这个石碑是在公元前196年埃及国王托勒密五世加冕一周年的诏书。 在此前大约一百年,埃及已经被来自希腊北方城邦的亚历山大…...