C++开发需要掌握哪些技能?

2023-05-16

一、语言基础
无论C++开发还是Java开发,对于码农来说,最重要的是熟悉编程语言。同理,无论从事何种工作,首当其冲的就是要掌握好语言基础。

C++是一种博大精深的编程语言,它既有继承于C语言的过程化程序设计思想,又包含了面向对象(OOP)的设计思想。有力且复杂。学习C++的费用相对较高,语言内部的漏洞也比较多。基本语文学习路线如下:

1、语法基础。

要点:(必须熟悉基本的机制原理)

使用指针和引用的概念指针与内存关系程序编译过程static、const、#define以及C和C++区别内存模型中的栈和堆分配。

2、面向对象基础。

(一定要熟悉基础机制原理)

OOD理解析构函数构造函数复制构造多态纯虚函数和虚函数虚函数实现机制虚函数表访问限定符public、private、protected继承原则、虚继承原则、菱形继承静态绑定和动态绑定重载、重写和隐藏new/delete和malloc/free。

3、语法进阶

(一定要熟悉基础机制原理)

在用智能指针的左值、右值引用和move语义类型转换方式时,通常采用设计模式线程安全的单例模式内存溢出和C++11的静态链接库和动态链接库。

4、STL标准模版资料库。

(必须能够进行源代码剖析)

迭代程序,空间配置程序了解常见的容器特性,使用方法和基础实现vector,list,deque,set,map,unorderedmap。

5、建议阅读书籍。

作为一本关于C++源码解析的工具书,阅读《EffectiveC++》对C++程序设计规范的深入研究,STL源码解析,极具学习价值。阅读《深入探究C++对象模型》,阅读《moreEffecticeC++》

二、算法和数据集的结构。
对一般人来说,学习算法最重要的就是能形成基本的算法思维,懂得从程序设计的角度对高重复的操作进行优化。掌握这些基本算法思想,了解常用的数据结构是非常重要的。在这方面的学习更倾向于看多想多练。

1、普通算法类型

(一定要能够手撕代码)

分类算法(冒泡、插入、选择、快排、希尔、堆排、归并、桶排、基数、计数)、串运算、数组运算、递归、追溯、分治、动态规划等。

2、常见资料结构。

(一定要熟悉基础原理和实现)

链式表格,栈,队列,树(二叉树,平衡二叉树,红黑树,B树,B+树,哈夫曼树,字典树),跳表,图表。

[外链图片转存失败,可能存在源站的防盗链机制,建议直接将图片上载(img-hxJLkMWK-1604040668260)(/img/bVcIdoh)

3、推荐书。

适合入门学习的《剑指offer》必刷66题《算法入门》尽量看一看,能啃完的都是大神。

三、计算机网络
而网络相关的东西并不多,关键在于对公共网络协议簇的认识和理解,以及对一些常规操作底层设计实现的剖析。例如:

|输入百度网址将会怎样?

编辑|扫描登录将发生什么。

1、要掌握知识点。

OSI7层模型TCP/IP5层模型TCP/IP协议总结TCP、UDP区别TCP3握手、4挥手TCP状态转换TCP状态下TIME_WAITTCP连接的建立需要为什么不是两个握手TCP第三次握手失败将发生什么TCP长连接和短链路,以及哪些TCP长连接和短链路的优缺点,TCP的拥塞控制-慢启动,拥塞避免,快重传,快速启动,如何保证TCP的可靠传输,TCP为什么可靠地进行TCP的第三次握手,TCP为什么可靠地进行TCP的TCP传输IP地址和子网掩码的ARP传输,HTTP的状态码HTTP1.0,HTTP的2.0,HTTP的2.0,HTTPS的不同之处在于,TCP如何保证TCP的可靠传输IP地址和子网掩码的可靠传输,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于,HTTP的不同处在于。

2、介绍书籍。

在《计算机网络自上而下的方法》一书中,可以放手查阅《TCP/IP详解》,重点了解TCP、IP、UDP协议的实现。

四、数据库。
一般使用数据库其实并不难,但对于不同数据库在功能、实现机制、应用场景以及性能优化等方面都会有困难。类似地,数据库本身也是很好的项目实例,并且经常能从它中学习很多程序设计思想和模式。所以,对于数据库,应该了解如何使用、为什么使用、如何使用好这几个方面的问题。

1、重点掌握

关系型数据库与非关系型数据库的分类不同。

MySQL:

SQL常用语句MySQL内链接,外链接(左右链接,全链接)MySQL索引类型和原理MySQL事务处理实现原理ACIDMySQL数据存储引擎MySQL主从式复制原理,作用,MySQL日志系统redolog,binlog,undologMVCC实现原理Sql优化思想理论数据库高并发解决方案。

Redis:

Redis支持数据类型Redis持久Redis模式主从复制一致性散列算法。

2、介绍书籍。

High-Mysql能加深对Mysql的理解,并且能使用Redis设计和实现,这是一本比较全面的书,可以看看。

五、操作系统。
作业系统的问题主要集中在进程和线程上,但这种类型的问题常常作为开放题出现。重点研究对操作系统组件和运行流程的理解。例如:

|系统的开机登录有何影响?

|如何进行复制粘贴操作?

1、关键把握好。

实体及虚拟存储器缓存IO和直接IO作业调度算法线程以及进程进程和线程的调度线程的创建和结束线程间通信与线程同步机制互斥和信号量线程池使用者和生产者死锁并发和并行。

2、介绍书籍。

“计算机系统的深度理解”这本非常全面的书,这一本足够了。

六、Linux系统。
熟练使用Linux系统是进行后台开发/服务器开发必须具备的技能之一。在这一年里,不会有几条Linux指令羞愧地说它是敲代码的。不管是客户端还是前端的同学表示不服还是对Linux系统的掌握不管是哪一个方向,都有用武之地。

1、linux系统操作和命令。

top命令psnetstat命令awk命令find命令grep命令wc命令sed命令head和tail命令正则表达式如何查找100个IP地址最频繁出现的linux如何统计某个字符串在linux启动的第一个进程linux查看端口占用了linux查看CPU和内存使用Linux查看系统负载命令Linux调试程序Linux查看硬链接和软连接coredumpcmake和makefileShell脚本基本语法和使用。

七、Linux下的网络编程。
背景开发离不开网络编程,甚至简单地说,背景开发就是使用强大的计算机来处理大量的网络请求。因此,对于一个合格的后端开发人员来说,熟悉Linux网络编程非常重要。

1、重点掌握

欲了解更多信息,获取更多信息,请加入我的企鹅圈O!!!

   孤儿进程、僵尸进程和守护进程进程间通信方式signal、file、pipe、shm、sem、msg、socket线程同步机制线程:互斥体、锁机制、条件变量、信号灯、读写锁返回值五大IO模型:阻塞I/O、非阻塞I/O、I/O复用、信号驱动I/O、异步I/OIO复用机制和select/pollLT水平和ET边缘触发Reactor和Proactor模式反向代理,负载均衡。

2、介绍书籍。

APUE《UNIX环境高级编程》更难啃,可以选择看《UnixNetworks》UNP同样更难啃,可以选择看《Linux多线程服务器端编程》Muduo网络库,建议看源码实现《深入理解Nginx》,深入了解基于C的web服务器实现。

八、项目准备
若您已准备好以上所有内容,则相信您已具备C++后台开发能力。但请记住,一个大型在线项目的开发,绝不仅仅是单一语言的设计和实现。

所以,使用C++、Java、Golang或Python可能并不太好区分,它们都有各自的长处,毕竟存在即真理。因此,如果你真的有能量的话,不妨也了解一下更深层的技巧:

Dubbo,SpringCloud,Zookeeper,Kfaka流媒体分发技术CDN,海量日志处理和并行计算开发分布式技术框架,中间件等。

这些当然都是不必要的,但绝对是亮点!另外,您可以准备一些基本方向的相关内容:

NetworkLibrary,可以参考Muduo或Nginx实现web服务器/http服务器,可以实现基本的http响应请求和处理简单版STL库,展示C++的综合代码能力局域网聊天室开发,涉及到网络编程实现,线群聊分布式日志系统数据库设计,可以参考一些C++的常用库,做一些有趣的小工具。

免费领取C++学习资料包

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++开发需要掌握哪些技能? 的相关文章

  • linux中crond服务与crontab用法详解

    crond服务 crond服务是一种守护进程 xff0c 用来定期执行程序 xff0c 安装完成系统之后 xff0c 默认便会启动此任务调度命令 crond命令每分钟会定期检查是否有要执行的工作 xff0c 如果有要执行的工作便会自动执行该
  • shell字符串截取方法

    运算符截取 1 和 截取字符串 xff08 删左边留右边 xff09 下面我们先看代码和运行结果 解释 xff1a span class hljs keyword var span span class hljs keyword strin
  • 面试题:判断一个节点是否在一棵二叉树中

    题目 xff1a 判断一个节点是否在一棵二叉树中 结点定义如下 span class hljs keyword struct span BinaryTree BinaryTree span class hljs keyword char s
  • shell脚本实现希尔(shell)排序

    题目 xff1a 采用shell脚本实现希尔排序 最近刚刚学习啦shell脚本编程 xff0c 因此写了一个简单的希尔排序 span class hljs shebang bin bash span arr 61 span class hl
  • Linux小项目-群聊系统

    项目名称 xff1a chat room群聊系统背景知识与主要技术 xff1a 熟悉Linux基本指令的使用 xff08 ls cd make mkdir top basename pwd cp mv rm touch xff09 熟悉li
  • 求先递增在递减数组中的最大值

    题目 xff1a 一个数组先从小到大递增在从大到小递减 xff0c 找出数组的最大值 思路 xff1a 可以依次遍历整个数组如果array i 满足array i gt array i 1 amp amp array i gt array
  • 哈希(HASH)冲突的处理方法

    通过构造良好的哈希函数可以减少冲突 xff0c 但一般不能完全避免冲突 因此解决冲突是哈希法的另一个关键问题 常用的解决冲突方法有以下四种 开放地址法 这种方法也称再散列法 xff0c 基本思想是当关键字key的哈希地址p 61 H key
  • 消息队列实现从一个进程向另一个进程发送一个数据块的方法

    首先是Comm h的代码 include lt stdio h gt include lt string h gt include lt sys types h gt include lt sys ipc h gt include lt s
  • 打开PADS出现“PADS已停止工作”提示的解决办法

    一 场景 前一天还可以正常使用 xff0c 今天处理完一些事务后点击PADS打算画一些PCB xff0c 结果弹窗出现 PADS已停止工作 xff0c 无论是打开PADS的Logic还是Layout文件都提示这个 xff0c 打开其他之前正
  • cmake解决动态库soname,rpath以及符号冲突解决方案备忘

    set target properties TGT PROPERTIES NO SONAME TRUE SKIP BUILD RPATH TRUE LINK OPTIONS 34 Wl version script 61 CMAKE CUR
  • KiCAD绘制原理图---------创建一个新的原理图符号

    1 创建一个新的原理图库文件 第1步 xff0c 打开原理图器件编辑界面 如图1 1 1所示 xff0c 点击 Smbol Editor 图标进入器件编辑界面 第2步 xff0c 进入文件管理菜单 如图1 2 1所示 xff0c 点击 Fi
  • ubuntu 查看内存命令

    Linux中使用free 可以查看系统内存使用状态 默认单位为KB 为单位 xff0c 在此我以MB为单位说明 lostman 64 lostman MS 6702E 桌面 free m total used free shared buf
  • Nvidia Xavier Nx平台SD卡热插拔检测失效问题调试记录

    1 前言 Xaiver NX上 使用sdmmc3为sd卡 正常工作 但是 当热插拔时会检测不到 使用GPIO12 GPIO3 PCC 04 作为cd gpio cd gpios lt amp tegra aon gpio TEGRA194
  • MobaXterm连接虚拟机超时:Connection timed out

    折腾了几个小时 来两句废话 1 首先我确认了虚拟机防火墙已关 2 ip配置无问题 3 重置VMware网络设置啥的 然而并没有卵用 4 虚拟机ping百度正常 主机ping虚拟机正常 以上4条依然无效 解决方案 原理不清楚 但是解决了 通过
  • Windows下python激活虚拟环境后仍然使用全局python和pip

    这么过分一定要发CSDN jpg 在windows下 xff0c 激活python虚拟环境后 xff0c 使用的python和pip仍然是全局的python和pip 如图 使用pip list 可以看到这个包这么多 xff0c 显然不是我刚
  • openmv 自学笔记(APRILTAG标记追踪)

    由图可知 id 为5 旋转角度 为11 0 左边旋转 角度增加 正式时候调度接近0 右边旋转 角度减少 由360度 向右减少 Tx 在左边的时候 为负数 右边为正值 Ty 在上边的时候为正数 左边为负值 Tz 从远处 到近处 由负数到向正数
  • 学习STM32(3)-电源、时钟、复位电路

    Stm32 时钟分析 该分析材料大部分来自opendev 论坛 xff0c 我所做的只不过是加上一些自己的分析和整理 xff0c 由于个人能力有限 xff0c 纰漏之处在所难免 xff0c 欢迎指正 一 硬件上的连接问题 如果使用内部RC振
  • 只是运行roslauch来发布一次TF

    如果只是希望运行roslaunch来发布一次TF xff0c 可以使用launch文件中的node标签来实现 下面是一个发布一次TF的launch文件例子 xff1a lt launch gt lt node pkg 61 34 tf2 r
  • 2019年年终总结(流水账)

    2019年年终总结 流水账 前言 马上就要是2020年了 xff0c 我此时敲下我的第一篇年终总结 马上就要过去的2019年对于我来说是平凡但却不平淡的一年 xff0c 这一年里我经历了很多 xff0c 虽然这些在别人眼中可能是微不足道的
  • 融资租赁与经营租赁的区别

    我现在手上项目的客户是一家销售公司 xff0c 他们有把自己的商品租赁给别的公司经营的业务 于是就有了上面的融资租赁与经营租赁 xff0c 这两种方式在财务上对资产的处理是不一样的 下面我们来看看这个场景 xff1a A公司把资产租给B公司

随机推荐

  • 【Linux网络编程(五)】TCP编程流程

    文章目录 TCP编程1 TCP介绍 编程流程2 TCP C S架构3 TCP客户端编程流程1 创建TCP套接字2 connect连接服务器3 send发送请求4 recv接收应答 xff08 默认带阻塞 xff09 5 close6 客户端
  • ESP32-Drone四旋翼无人机代码编译发现的二个问题及解决方法

    摘要 ESP32 Drone四旋翼无人机是乐鑫的一个开源项目 xff0c 我根据官方的硬件参考设计 xff0c 重新使用KiCAD绘制了原理图和PCB板 xff0c 并制作了控制板样板 xff0c 在配置了ESP idf 4 4编程环境编译
  • 小觅相机运行vins-mono

    小觅相机运行vins mono span class token function mkdir span p mynt eye vins catkin ws src span class token function cd span myn
  • 程序员改变世界,从未如此直观

    万万没想到 xff0c 包博士的代码让一个六岁的小学生哇哇大哭 这个让小学生流眼泪的 科学家代表 有非常漂亮的履历 xff1a 清华大学毕业 博士曾在斯坦福就读 xff0c 他现在是VIPKID的首席AI科学家 xff0c 带领四十多人的产
  • 【Linux系统编程(十五)】信号量

    文章目录 信号量1 信号量1 1 信号量的概述1 2 信号量的API1 2 1 初始化信号量1 2 2 信号量减一 xff08 P操作 xff09 1 2 3 尝试对信号量减一1 2 4 信号量加一 xff08 V操作 xff09 1 2
  • 【ESP32_FreeRTOS篇】

    FreeRTOS 是一款 开源免费 的实时操作系统 xff0c 遵循的是 GPLv2 43 的许可协议 这里说 到的开源 xff0c 指的是你可以免费得获取到 FreeRTOS 的源代码 xff0c 且当你的产品使用了 FreeRTOS 且
  • 【FreeRTOS(十四)】StreamBuffer

    文章目录 数据流创建 xStreamBufferCreate发送 xStreamBufferSend接受 xStreamBufferReceive查询流缓冲区 xStreamBufferSpacesAvailable代码示例 数据流 创建
  • 【FreeRTOS(十五)】MessageBuffer

    文章目录 MessageBuffer创建 xMessageBufferCreate发送 xMessageBufferSend接收 xMessageBufferReceive代码示例 MessageBuffer 创建 xMessageBuff
  • 【Git】Git修改 commit 的信息

    Git 修改 commit 的信息 xff1a git log 查看提交日志 xff0c 找到要修改的commit xff1a git rebase i HEAD n 1 切换到需要修改的 commit 中 xff0c n为commit的序
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • 记录docker+github的学习历程

    最早从github上拉代码 xff0c 拉一些纯python的代码 xff0c 然后第二天就发现如果只是为了学习代码 xff0c 直接下载压缩包完事 为什么需要docker 43 github呢 xff1f github上的代码是不同的运行
  • 为什么同样的方法,你做的品牌火不起来?别人却能脱颖而出?

    要想让品牌快速走红 xff0c 必须做好品牌运营 同样进入红海市场 xff0c 江小白 喜茶 丧茶靠品牌运营 xff0c 快速占据一席之地 同样是知名品牌 xff0c 杜蕾斯靠品牌运营 xff0c 牢牢占据用户心智第一位 xff0c 同类目
  • 开发自己的DJI四旋翼无人机(A3飞控Onboard SDK和Mobile SDK介绍)

    大疆作为无人机行业的佼佼者 xff0c 其应用范围从户外旅行 拍照到影视拍摄 xff0c 以及工业运用都有着极高的地位 那么 xff0c 我们如何仅仅使用大疆的飞控来开发出我们自己的无人机呢 xff1f 首先 xff0c 你需要如下的东西
  • PID的曲线

  • ESP-Drone四旋翼无人机控制板上的MPU6050陀螺仪芯片I2C总线测试

    1 摘要 一款新的控制板卡在第一次使用时 xff0c 都需要进行硬件功能的测试 xff0c 以确保所有的硬件都能够正常工作后 xff0c 才可以进入后续的软件编程阶段 xff0c ESP Drone四旋翼无人机的控制板使用了mpu6050陀
  • PHP 设计模式之最全面,最简单的讲解

    1 单例模式 单例模式是指只创建一个资源 对象 数据库链接等 xff0c 防止外部实例 43 判断是否有返回或创建后返回对象 三个要点 xff1a 1 需要一个保存类的唯一实例的静态成员变量 2 构造函数和克隆函数必须声明为私有的 xff0
  • 快速看懂(找到)VUE框架的管理系统代码

    前言 刚入职的且没有啥基础的小白一枚 xff0c 培训期间要求一周时间内在现有demo系统上新增一个模块 xff0c 实现简单的增删改查 so xff0c 这是一个速成的帖子 xff0c 提供一个大致思路 xff08 看代码 xff0b 修
  • 解决k8s.gcr.io问题

    kubeadm安装新版本的Kubernetes过程中 xff0c 需要从k8s grc io仓库中拉取所需镜像文件 xff0c 但由于G F W导致无法正常拉取 xff0c 本文将介绍如何绕过此问题 xff0c 来完成业务的部署 ERROR
  • C++很难吗?到底有多难?

    C 43 43 他爹Bjarne Stroustrup都曾开玩笑说自己已经搞不懂C 43 43 了 xff0c 他也曾多次表达过C 43 43 似乎已经有点太庞大了 其实也不是说C 43 43 语法多么复杂 xff0c 而是C 43 43
  • C++开发需要掌握哪些技能?

    一 语言基础 无论C 43 43 开发还是Java开发 xff0c 对于码农来说 xff0c 最重要的是熟悉编程语言 同理 xff0c 无论从事何种工作 xff0c 首当其冲的就是要掌握好语言基础 C 43 43 是一种博大精深的编程语言