C/C++工程师需要掌握哪些技能?他们的工资这么高,是有原因的!

C/C++要学什么东西?C/C++学完能干什么?学了又能当饭吃吗? 前言   普遍问题 学校的课程设计不完善,涉及面广,什么都不深入。 老师缺乏实际的工作经验,比如说我经常看到老师经常教学生做数学题之类的小程序,但是,实际工作中,我们并不玩这个。 在我看来,要学习某种编程语言,没必要去局限课堂,一方面是进度慢,另一方面,如果你要学习某种语言,关键在学而不在教,你的态度和决心是关键,只要你有决心,没人教也能学会,现在互联网这么发达,什么内容都可以找得到... 阅读详情

 

(一)C语言

作为一名C程序员,熟练掌握C语言是最基本的一项技能。关于如何学好C语言,以及C语言话题的讨论,网上有很多经典的文章。很多人工作一段时间以后都自认为自己的C语言水平已经很高了。可实际在工作中,接触的东西也多了,开源项目多了以后,才发现自己的C语言能力太一般了。宏函数千变万化的写法,指针百花缭乱的用法…等等。写代码时,应常常问自己:这个行为是C语言规范定义的吗?如果是,是C89还是C99?我现在用的编译器支持吗?如果不是C语言规范定义的,那么在程序运行的这个平台,行为是确定的吗?所以建议大家平时可以多想想这些问题,查查资料,相信一定会对C语言有更深的理解。

(二)UNIX/Linux系统编程

在UNIX/Linux系统上开发程序,掌握系统编程API是必不可少的技能。而这方面的经典书籍都是一些大部头的英文著作,让人望而生畏。首先可以先找一本口碑不错的中文书先看一下,了解一下都有哪些种类的API。这样以后用到时,再去精读经典英文著作里的相关章节,或是查man手册。此外,如果有时间,可以学习一下经典的开源项目,了解这些开源项目是如何使用这些API的。举个例子,Redis是很多人推荐的一个很不错的学习C语言的开源项目。在阅读代码时,会看到保存数据到文件时会用到fsync函数,再去深入地了解一下这个函数的作用。这样比单纯地去看那些著作效果要好很多。

                                     

(三)网络编程及相关知识

关于网络方面,以下三点是必会的技能:

a)网络协议。在日常的工作中,大家接触和使用最多的无疑是TCP/IP协议族。此外,由于工作领域不同,也可能用到其它的协议。比方说,做电信相关的程序开发,平时可能接触SCTP协议会更多一些。对于这些协议,掌握最基本的知识是必须的,其它的边边角角知识可以等到用时再查。举例来说,TCP协议的“三次握手”,“四次挥手”,“TIME-WAIT状态”这些基本的知识点要弄明白,其它的边角知识学完老不用忘得也快,还是用时google一下效率更高。

b)Socket编程。Socket编程的经典书籍一点不比讲系统编程的书薄,所以可以选一本相对薄点,口碑不错的精读一下,这样基本就掌握的百分之五、六十了。另外有时间还是看一下经典的开源代码。这里还拿Redis举例,Redis里关于处理网络连接和通信的代码量不大,而且基本涵盖了所有常见的UNIX平台,看完以后一定受益匪浅。

c)协议分析工具。TCPdump、snoop(Solaris平台工具)、wireshark等这些工具不仅能帮助我们抓取数据包,还能分析数据包,这对debug网络程序有非常大的帮助。所以,我们至少要掌握这些工具最常用的功能。此外,对于开放源代码的工具,我们更是可以从代码中学到很多知识。举例来说,做短信相关的项目,可以从wireshark的分析短信协议的代码里学到很多东西,这可以帮助开发者对短信协议有了更清晰的理解。

                                  

(四)脚本编程能力

一提到脚本编程,大家首先想到的可能就是Bash shell脚本编程了。不错,在Unix/Linux上,Bash shell也许就是用的最广泛的脚本编程语言。应用开发工程师主要用Bash shell做两个方面的工作:a)用于编写监控服务脚本;b)写一些简单的单元测试脚本,比如循环发一些命令,等等。但是Bash shell的功能远远要比这些强大。一些高手用Bash shell编程语言写出了很好玩的游戏,也有人做出了很cool的网络应用。所以建议大家有兴趣可以多了解一下Unix/Linux的这层“壳”。当然,你也可以选择学习Python、Perl、Ruby等。不过相比这些语言,Bash shell至少你不用自己去安装,而且它能做的事同样很强大。

(五)操作系统及CPU体系结构

也许有一天,你会碰到这样的情景:你的程序在Solaris上会发生core dump,在Linux上却运行的好好的。经过一番艰苦的debug,最后得到的原因是两种操作系统对线程的调度策略不一样,这会使一个对全局变量没有加锁就访问的bug在Linux上很难出现。所以你需要尽可能地去了解你使用的操作系统,这样无论对写程序还是debug都会有很大的帮助。比如,你需要了解进程的内存布局,这样你就知道栈和堆到底在内存的哪段空间,为什么内存写越界有时会core dump,有时没事。

除了操作系统,了解CPU的体系结构也是一门必修课。比方说,SPARC CPU要求字节对齐,而X86 CPU则没有这个要求。又比如SPARC CPU是大端模式,而X86 CPU是小端模式,这就要求你对像位域这样的定义要格外小心。你还要了解你使用的CPU的汇编语言,至少能大概看懂。因为有些时候,当你从C代码中找不出bug的原因时,就需要你“透过现象看本质”,从汇编代码层面看看到底发生了什么。

(六)编译器和调试器

“工欲善其事,必先利其器”。编译器负责把源代码生成可执行文件,而调试器则是在程序出现bug时,用来“降妖除魔”的不二神器。以大家最熟悉的gcc和gdb为例子。

gcc有很多编译选项,除了要熟悉像-O,-g这些最基本的选项,建议大家可以多了解一些其它不常见的选项。因为这些选项很可能帮助我们找到程序的一些bug。举个例子,在比较新的gcc版本里,增加了-fstack-protector这个选项,而它可以帮助我们检查到缓冲区溢出这种bug。此外,你还可能碰到这种情况,一个bug总是发生在程序优化后的版本,而不会出现在没经过优化的版本。所以,多了解你的编译器,你就可以更好地了解你的程序是如何生成的。

                  

一个程序员不可能不碰到bug,而这个时候,调试器就是最好的工具。可以说,在遇到bug时调试技巧和手段是否丰富是衡量一个程序员的能力和水平的重要参考。除此以外,gdb另一个重要用途就是分析程序的core dump文件。程序的core dump文件好比一桩刑事案件的“犯罪现场”,而gdb则是刑侦官员用来在现场提取线索的工具。对gdb越熟悉,就越能从core dump文件提取有价值的信息,也就越有助于我们定位到程序bug的“root cause”。

(七)DTrace/SystemTap

DTrace是由Sun的几位才华横溢的工程师开发的,最开始只支持Solaris操作系统,现在FreeBSD和Mac OS X也都支持了。Linux上类似的工具有SystemTap,也有人把DTrace移植到Linux上,不过效果似乎并不好。简单地说,DTrace可以几乎不会在对整个系统有任何性能影响下,让你了解你的程序所发生的一切。这对分析程序的热点(“Hot spot”),了解程序的执行流程,定位程序bug都有很大的帮助。有些时候,DTrace可能是你唯一的工具。举例来说,有个程序只发生在生产环境,而在实验室环境无法复现(当然,理论上任何bug都可以复现,只是我们没有找到复现条件。)。你不可能在你怀疑的代码打上断点,然后用gdb去调试。这时你只能借助于DTrace,通过它去了解程序到底是如何运行的,当时的变量值是什么。此外,DTrace还可以帮你了解操作系统的kernel,这会满足很多geek的好奇心。

希望你有一天也能成为优秀的C/C++工程师,共勉!

学习C/C++编程知识,成为一个优秀的程序员关注博主。

深入了解C++linux工程师的技术需求,为你以后的职业发展定方向 一、C++服务器程序员(流媒体后台,游戏后台,高性能服务器后台) 1. 精通C++,STL,Linux等,熟悉设计模式; 2. 熟练掌握一门脚本语言(Lua, Python, Perl等); 3. 对多线程环境编程有一定的理解,能独立完成服务器端模块的开发、维护和优化; 4. 熟练掌握MySQL数据库的开发维护、性能优化; 1.精通C++编程,3年以上服务器开发经验; 2.有手机游戏或者PC网游开发经验,有过完整手游开发经验者优先; 3.精通Socket协议,了解分布式负载和集群类型的服... 阅读详情

相关推荐

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

一、语言基础 无论C++开发还是Java开发,对于码农来说,最重要的是熟悉编程语言。同理,无论从事何种工作,首当其冲的就是要掌握好语言基础。 C++是一种博大精深的编程语言,它既有继承于C语言的过程化程序设计思想,又包含了面向对象(OOP)的设计思想。有力且复杂。学习C++的费用相对较高,语言内部的漏洞也比较多。基本语文学习路线如下: 1、语法基础。 要点:(必须熟悉基本的机制原理) 使用指针和引用的概念指针与内存关系程序编译过程static、const、#define以及C和C++区别内存模型中的栈

kaikeba的博客 6914

C++工程师学习内容

C++是最贴近底层编程语言。在性能方面上,有着无可替代的优势特别是对于很多游戏开发公司来说,C++尤其适合作为后端服务的开发语言。在一些对于并发性能要求较高的业务上,C++也有绝对的优势。因此大部分公司的核心业务都是用C++进行开发,C++工程师掌握着公司最核心最重要的业务体系,有着十分重要的地位。二、我想成为一名C/C++工程师,该学习哪些内容呢?1、学会C语言 数据类型、流程控制、函数、指针 内存布局、结构体、共用体、文件操作 小项目:可以自己设计一个通讯录 主要是二级指针,结构体,文件的操作

zjhqlmzldx的博客 3287

第一次写博客-C/C++软件开发工程师需要学习哪些东西?

学习路线概述概述数据结构和算法操作系统计算机网络数据库设计模式 概述 作为一名本科机械电子,研究生研究计算机视觉方向的211应届毕业生,如何才能从事C/C++软件开发类的工程师呢?如果能有机会进入大厂呢?跟大家一样,非科班出生的我一开始也很迷茫,经过大量查找资料,终于有了一条明确的方向,这里记录下来。 软件基础模块主要可以分成六个大的方向:C++基础、数据结构与算法、操作系统、计算机网络、数据库、设计模式等。跟大家一样,刚开始看到这些概念的时候,我也是懵比的,本科学的C语言,也顺利通过了江苏省计算机二级,

weixin_43487442的博客 5491

了解c语言程序员(工程师)岗位需要掌握哪些能力?_C/C++工程师需要掌握哪些技能?他们的工资这么高,是有原因的...

(一)C语言作为一名C程序员,熟练掌握C语言是最基本的一项技能。关于如何学好C语言,以及C语言话题的讨论,网上有很多经典的文章。很多人工作一段时间以后都自认为自己的C语言水平已经很高了。可实际在工作中,接触的东西也多了,开源项目多了以后,才发现自己的C语言能力太一般了。宏函数千变万化的写法,指针百花缭乱的用法…等等。写代码时,应常常问自己:这个行为是C语言规范定义的吗?如果是,是C89还是C99?...

weixin_39859715的博客 502

找工作时PLC工程师会哪些技能工资更高呢?

PLC编程是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或生产过程。...

SANRENYIXING的博客 1051

国内、外的C++,Python软件工程师工资,简直是天壤之别

国内、外的C ++,Python软件工程师工资,简直是天壤之别,国内此类工程师的工资顶多也就2万左右,国外这家的是国内两倍了。下面看看人家的招聘要求和职责看看值不值这个身价。 薪酬基准* 对专家成员可见巴黎,法兰西岛-法国高级专员/项目经理操作系统(台式机) 软件工程师C ++,Python,Linux 喜欢在法国工作和生活吗?我们正在寻找具有在Linux环境中使用C ++和Python经验的软件工程师,以加入一支动态的,位于巴黎的Fintech团队。 您将开发用于实时金融市场数据的软件。该角色要求您

梦子微信 628

为什么招聘单片机工程师的时候要求精通C C++ _单片机 为什么 c++

把****过一遍,后面标注提到的重点细节详细掌握下,笔试基本都是C基础语法(关键字,宏,结构体, 枚举,指针和引用,数组,强制转换,位移,大小端,存储区,函数的健壮性),在结合数据结构(排序,查找,二叉树),在涉及一些硬件知识类的如(中断,AD的精度,RTC时钟转换)这一类,这里面考察的C语言知识在我看来也远远没有到达精通的地步。这些虽然复杂,但至少是有一套标准规则,只要去看书实践就可以了解掌握,但当你用C语言完成复杂稳定的项目代码,解决各种异常bug时,就会知晓C语言的精通不只上面这些固定的语法知识。

2401_87555613的博客 1037

为什么我认识的机械工程师都抱怨工资低?

为什么我认识的机械工程师都抱怨工资低?5千字长文干货!本硕7年机械,毕业自学C++转型工业方面软件,机械目前的待遇与所学的知识面宽度和难度是完全不匹配的,主干课程主要是以传统机械为主,材料力学、理论力学、流体力学和机械原理等等课程难度远远大于C语言,即便是有C语言、单片机和自动控制等课程也不会重视,这就导致机械专业的小伙伴儿毕业只能找结构工程师和工艺工程师,还有很多转型销售的。机械当年也是学校分数线数一数二的高,毕业被计算机碾压不悲催吗?智能工厂1、机械行业的现状和未来,作为机械专业的小伙伴儿要学什么现在的

专注单片机实战教学,分享单片机学习资料 1396

C语言工程师在各地的薪资,看了你会对C语言刮目相看!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。 C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们...

IT_yx888的博客 2502

【C/C++】C++实验

C++实验1.简单C++程序开发1.1 使用Visual C+ +建立一个标准C+ +控制台程序,并编译、运行。1.2 分别编写函数swap( ) 对二个整数进行交换,其参数分别为指针和引用类型,并在主函数中进行测试1.3 设计一个C++控制台程序,从键盘输入一个圆的半径,输出其周长和面积。2.类与对象2.1 声明一个树Tree类,有数据成员ages(树龄),构造函数Tree(int n=0)进行...

xyz_ 3055

C/C++工程师的技能要求及高薪原因

复杂性和技术挑战:C/C++开发涉及到底层的编程和系统级的操作,对工程师的技术能力和解决问题的能力提出了较高的要求。相对于其他编程语言,C/C++编程语言更加底层和灵活,需要处理内存管理、指针操作等复杂的概念,因此能够熟练掌握C/C++的工程师往往具备较高的技术水平,这也是他们获得高薪的原因之一。C/C++语言:C/C++是一种基础而强大的编程语言,对于C/C++工程师来说,熟练掌握语言的语法、特性和编程范式是至关重要的。此外,他们还需要关注代码的性能,并进行必要的优化,以提高系统的效率和响应能力。

DevEnigma的博客 577

数字IC验证工程师加班吗?工资高吗?一天是怎么样的呢?

现阶段的IC行业,数字IC验证工程师非常紧缺,尤其是在这个行业中干了很多年的工程师那更是奇货可居。但是最近和一些在校学生和刚入行的朋友们交流的时候,发现大多数人对数字IC验证工程师的具体工作不了解,甚至还停留在写verilog验证的阶段。 下面看看我做数字验证工程师的那段日子,希望能让更多的人了解这个职位,进入这个职位,并喜欢上这个职位。 当然每家IC设计公司会有不同,我只能尽量的列出比较通用的工作内容了,就算是抛砖引玉吧。 首先,IC设计公司一般都会把验证分成几个层次: · IP level verifi

weixin_52955333的博客 1万+

npu-smi info 华为昇腾NPU 状态监控工具解读

用于查询所有设备的基本信息。

Lixora's DB Home 2485

2021年程序员 3 月薪资统计:这么高的工资,也太令人羡慕了吧!

2021年3月采集数据124176条。2021年3月全国程序员平均工资15189元,工资中位数12500元,其中95%的人的工资介于5250元到37500元。 作者:佚名来源:QIKU 2021年3月采集数据124176条。2021年3月全国程序员平均工资15189元,工资中位数12500元,其中95%的人的工资介于5250元到37500元。 工资K线图: 3月关键词:涨!涨幅还是超过了大盘的。从图中可以看出,程序员整体薪资状况还是呈现上涨趋势,而且涨幅还不小,不过这是整体行业情况,大...

致力于C语言C++知识分享! 746

基于labview实现MYSQL数据库查询功能

基于labview实现MYSQL数据库查询功能 前言: labview是一款功能强大的图形化编程软件,也就是俗称的G语言。 本篇将介绍如何利用labview对MYSQL进行列表分页,范围查询及模糊查询等几个可广泛应用的简易功能,但事实上labview并不擅长处理数据库,下面详细代码可体现。 数据库的环境配置方面的问题这里就不赘述了。 我们直接进入主题。 1.以下为查询界面 2.分页实现细节: ...

qq470783138的博客 7556

OCS2 移动机械臂深度解析:ocs2_mobile_manipulator 与 ocs2_mobile_manipulator_ros 源码全拆解

摘要:本文深入解析OCS2移动机械臂MPC控制框架的两个核心工具包。ocs2_mobile_manipulator负责算法建模,通过MobileManipulatorInterface统一构建最优控制问题,支持4种机械臂模型并实现自动维度推导;ocs2_mobile_manipulator_ros负责ROS集成,包含MPC求解、虚拟跟踪等4个核心节点。文章详细剖析了工具包分工、最优控制建模架构(含动力学、代价约束设计)、ROS运行管线、参数配置映射,并提供了高效的源码阅读顺序建议,帮助开发者快速掌握移动机械

m0_73309445的博客 654

为什么招聘单片机工程师的时候要求精通C/C++?

大家好,给大家分享知乎上一个热议的话题:为什么招聘单片机工程师的时候要求精通C/C++?在这里分享几个回答,有一定的参考价值,欢迎留言讨论!01回答1作者:Qi K链接:https://...

249

全国各省份影像下载地址(11级别)

cesium中使用urltemplate加载,leaflet中使用tile加载,具体加载有问题可以给我留言。

资深三维GIS开发 5142

2019年学C++前景怎么样?2019年C++程序员工资多少?

2019年C++前景怎么样?好不好?对于互联网热门专业,C++在2019年会是怎么样的情况呢?一些大学生在报专业也是非常犹豫,毕业近年来出现了一些新的语言,2019年C++程序员毕业后工资多少呢? 2019年C++发展前景怎么样?   1、从C++目前的活跃程度,以及应用现状来说是完全能够肯定C++仍然是软件工业的基础,不会退出历史舞台的。   2、另外从Boost,Loki这些库...

HUYA69的博客 1392

深入SVT SPI VIP配置:如何灵活控制CS间隔、数据帧大小与时钟频率(含代码片段)

本文深入探讨了SVT SPI VIP的高级配置技巧,包括精确控制CS信号间隔、突破数据帧大小限制以及动态时钟频率切换。通过实战代码片段和详细配置步骤,帮助验证工程师灵活应对复杂SPI协议验证场景,提升验证效率和覆盖率。特别适合需要处理非标准SPI时序和特殊数据帧的芯片验证项目。

weixin_27014595的博客 280

C/C++小宇宙代码(完整代码)

C语言实现小宇宙的完整代码。

AIGC 2523
上一篇: C/C++编程笔记:浅析 C 语言中宏定义的使用,知识点全解
下一篇: 电脑广告弹窗多?安利一下:程序员常用 7 款Chrome去广告插件
CodingPs
博客等级 码龄7年 182粉丝 253原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值