零基础C/C++开发到底要学什么?

news2024/11/25 1:08:21

作者:黑马程序员
链接: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框架,编程语言集,用于创建人工智能应用程序的多用途软件系统。

三、入门知识点

  1. Unix/Linux:熟悉基本的Unix/Linux命令,学会在Unix/Linux环境下编译和运行C程序。
  2. C语言概述:了解C语言的历史、特点以及在编程领域的应用。
  3. 编程基础:掌握C语言的基本语法、数据类型、变量、常量、运算符、表达式、控制语句(如if、while、for等)、函数、数组、字符串等基本知识。
  4. 指针:理解指针的概念,学会使用指针进行内存访问和操作。
  5. 结构体和联合体:了解结构体和联合体的定义和用法,学会使用它们来表示复杂的数据结构。
  6. 动态内存管理:学会使用malloc、calloc、realloc和free等函数进行动态内存分配和回收。
  7. 文件I/O:了解文件的概念,学会使用fopen、fclose、fread、fwrite等函数进行文件操作。
  8. 预处理指令:了解C语言的预处理指令,如#define、#include、#ifdef等,以及它们在编程中的应用。
  9. 模块化编程:学会将代码分割成多个模块,通过头文件和源文件进行组织,提高代码的可读性和可维护性。

对于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 是一个广泛使用的音视频处理库。通过学习这个项目,您可以了解多媒体处理、编解码器、过滤器等相关知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/460217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机智云物联网低功耗转接板】+模拟MCU快速上手

GE211是机智云自研的定制化转接板,使用 ESP32-C3-WROOM-02 通讯模块,适用于白色智能家电等设备应用。 转接板已经烧录了机智云连云的最新GAgent固件,所以不需要烧写任何软件就可以快速上手使用。 GE211板卡带有一个串口,一般是把这…

YOLOv1代码复现2:数据加载器构建

YOLOv1代码复现2:数据加载器构建 前言 ​ 在经历了Faster-RCNN代码解读的摧残后,下决心要搞点简单的,于是便有了本系列的博客。如果你苦于没有博客详细告诉你如何自己去实现YOLOv1,那么可以看看本系列的博客,也许可以帮…

同步辐射X射线断层扫描成像在各行业的应用

同步辐射X射线断层扫描成像在各行业的应用 同步辐射X射线断层扫描成像(synchrotron radiation X-ray computed tomography,SRCT)是一种非侵入式、高分辨率的成像技术,利用同步辐射光束产生的高强度、高亮度、单色性和相干性的X射线…

【C#】DockContent的使用

下载主题包和控件包 nuget Install-Package DockPanelSuite -Version 3.0.6 Install-Package DockPanelSuite.ThemeVS2015 -Version 3.0.6 在要靠的子界面继承DockContent 子界面上添加DockPanel控件,并将dock设置为fill。 主界面创建一个dockPanel1&#xff1b…

LDR6020全球第一颗PD MCU 无敌 Type-C手机背夹散热器方案

最近发现了个新玩意儿,因为经常玩游戏,手机发热的厉害,都可以煎鸡蛋了,心想着要买个东西给手机散散热,没想到还真的有手机散热器。 不知道手机散热器的也正常,毕竟一般人正常玩玩手机,发热就发…

局域网 - 高速以太网(百兆、千兆、万兆)

文章目录 1 概述1.1 802.3 物理层规范1.2 以太网标准中后缀 -T、-F、-X 含义 2 分类2.1 快速以太网(802.3μ、百兆)2.2 千兆以太网(802.3z、802.3ab)2.3 万兆以太网(802.3ae) 3 扩展3.1 网工软考真题 1 概述…

English Learning - L2-15 英音地道语音语调 语音语调四步法 2023.04.17 周一

English Learning - L2-15 英音地道语音语调 语音语调 2023.04.17 周一 语调概念和汉语拼音对比 语音语调四步法语调练习意群划分重音重中之重语调的选择 语调的含义 语调概念 广义:语音技巧,连读,失去爆破,音同化,还…

【Unity3D插件】Embedded Browser嵌入式浏览器插件使用教程

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 好久没有介绍插件了,今天分享一款比较好用的嵌入式…

【MySQL】GROUP BY分组子句与联合查询基本操作

目录 前篇都在这里喔~ MySQL的增删改查 MySQL数据库约束和聚合函数的使用 1.GROUP BY子句 练习表如下: 1.查询不包含董事长的平均工资 2.按照角色分组计算平均工资 3.过滤掉平均工资大于一万的角色 4.♥过滤数据♥ 2.联合查询 以下列表作为依据 1.内连接 …

Netty核心源码分析(五)核心组件EventLoop源码分析

文章目录 系列文章目录一、EventLoop源码分析1、NioEventLoop源码2、EventLoop的父接口SingleThreadEventExecutor(1)addTask方法(2)startThread方法 3、NioEventLoop的run方法(核心!)&#xff…

网口通讯与串口通讯

目录 一、简介以及数据格式: 二、网口通讯与串口通讯主要区别: 三、工具小助手: 一、简介以及数据格式: 网口通讯(Ethernet)和串口通讯(Serial)都是用于数据传输的通信协议。 1、…

Netty简介

1.Netty是什么? 1>.Netty是由JBOSS提供的一个Java开源框架,现在为Github上的独立项目; 2>.Netty是一个异步的,基于事件驱动的网络应用框架,用于快速开发高性能的,高可靠的网络IO程序; 如图:异步与同步 说明: 同步: 在传统的BS开发模式中(左图),浏览器端发送一个请求…

接口策略PBR

实验原理 接口策略路由只对转发的报文起作用,对本地下发的报文(比如本地的Ping报文)不起作用,接口策略路由通过在流行为中配置重定向实现,只对接口入方向的报文生效。缺省情况下,设备按照路由表的下一跳进行报文转发,如果配置了接口策略路由,则设备按照接口策略路由指…

Flowable 流程定义(流程模板)的部署及设计的数据库表

一.简介 我们使用了 Spring Boot 之后,默认情况下流程是会自动部署的,基本上不需要我们额外做什么事情,我们称之为默认部署。 有的时候,我们的流程可能并不是提前设计好的,而是项目启动之后,动态部署的&am…

Verilog阻塞与非阻塞赋值详解

基本概念 关于阻塞赋值&#xff08;&#xff09;和非阻塞赋值&#xff08;<&#xff09;&#xff0c; 阻塞赋值&#xff08;&#xff09;是顺序敏感的&#xff0c;非阻塞赋值&#xff08;<&#xff09;是顺序独立的。阻塞赋值按它们在程序块中列出的顺序顺序执行。当它们…

分库分表,shardingJdbc和Mycat区别

shardingJdbc和Mycat都可以用来分库分表 MyCatshardingJdbc本质第三方应用,中间件代理层jar包是否需要修改代码否是可跨数据库否是是否跨语言是否性能下架&#xff0c;因为多了一层好 sharding-jdbc后续发展为Sharding-Sphere&#xff0c;包含sharding-jdbc、Sharding-Proxy、…

C. Painting the Fence(思维 + 前缀和)

Problem - C - Codeforces You需要油漆一个由n个部分组成的长围栏。不幸的是&#xff0c;它没有被涂漆&#xff0c;所以你决定雇用q名画家来完成这项工作。第i名画家将会油漆所有满足lisxsri的部分x. 不幸的是&#xff0c;你的预算很紧&#xff0c;所以你只能雇用q-2名画家。显…

Java线程池详解,内含实战演练~

本文是向大家介绍线程池的使用和一些注意事项&#xff0c;它能够实现高并发下快速处理业务&#xff0c;能够帮助开发人员深入理解线程池的价值。 1. 简介 线程池是使用池化技术管理和使用线程的一种机制。池化技术&#xff1a;提前准备一些资源&#xff0c;在需要时可以重复使…

200颗卫星!武大“东方慧眼”星座项目发布

本文转自武汉大学官微 4月24日&#xff0c;是“中国航天日”&#xff0c;“东方慧眼”智能遥感星座项目在武汉大学宣布正式启动。 针对当前我国卫星遥感存在“成本高、效率低、不稳定、应用少”等诸多问题&#xff0c;“东方慧眼”智能遥感卫星星座计划通过卫星星座组网观测、…

【环境配置】Window上Git clone 如何提高速度

步骤一&#xff1a;得到ip 在下列网站上 https://www.ipaddress.com/ 分别搜索&#xff1a; github.global.ssl.fastly.netgithub.com然后记录得到的IP地址 步骤二&#xff1a; 修改host 在Windows中&#xff0c;先进入&#xff1a;C:\Windows\System32\drivers\etc 目录 …