从事c++一年的感悟

@TOC
坐标成都,2019/6/29

目的

写这片文章的目的是为了纪念一下这个我觉的有意义的时间点。开始也从一个只知道窃取网上免费知识成果的一颗小白菜,渐变成了学会了学习,总结技能的老白菜吧。 

为什么会从事c++开发

先讲讲在众多语言中,为什么我会选择了c++吧。各位观众,容我慢慢道来吧。
大学大专信息管理专业,计算机系,学习了一学期的c语言,成果就是打印了一个倒着的杨辉三角;大一大二学习了思科路由和交换,也算了解了网络世界通信的基石了,给后面的开发提供了帮助,大二又学习了java,css,xml,能做个简单的表格吧,插上两张图片,说实话:难看。
毕业后,想要从事开发的工作,面试几次后,饱受挫折,就想到了培训。当时考虑了c++,java。最后因为自己想要争强好胜的心,选了一门难度更强的语言。其实是自己做的界面太丑,不敢直视自己做出来的界面。
选择达内培训,学习c++,学费很贵,性价比偏低,个人的看法而已,也许别人觉得还可以。学习了三个月后,第一次面试就被招聘走了,依稀记得当时的心情,当时心中万马奔腾,欢呼雀跃,感觉自己能上天骑龙,下地抓鬼。希望能把这种心情传达给c++的后学者。

工作感悟

划重点了,高考必考。(高考刚结束,写到重要的地方就想起来了,致敬逝去的青春年华)
先说说我的工作吧,公司是做数据分析的。会经常接触通信,网络协议,数据转发。感兴趣的可以了解下IP业务。后面就谈谈纯技术方面的吧,公司的框架采用的多线程,异步处理的方式,涉及到业务的地方全部剥离出来,采用动态加载的方式。方便以后的业务升级和扩展。
主要的模块划分:数据输入输出模块,规则匹配模块,会话还原,协议解析模块,应用还原,外部通信模块,统计模块,日志模块,内存管理模块。大致如此,其中有许多设计,也还没有吃透,工作仍需努力啊。这其中设计到的难点有对内存的管理(性能和不定长内存块的分配),规则匹配的性能要求,线程间异步处理,应用协议的还原(很多加密的协议)……,感觉对我来说,想要做好,都是一个难题,感谢公司的同事,以及优秀代码贡献者。
日常是在centos环境下开发,属于redhat企业版的克隆吧。日常用到的开发库boost,一个很全很优秀的c++库,前辈们都叫做标准库。公司还有一个大神,不用这个,用自己10多年积累下来的库,基本包含了日常所需,而且性能还可以,也比较为稳定。有很多人说不要重复造轮子,这句话我是相信的,不过哪一位大牛又没有造过轮子楠。并且在某些特殊的情况下,使用系统api和标准库有些时候反而是性能的杀手。这个时候就需要自己造轮子了,毕竟大多数库都是为了使用日常使用,可以结合自己项目中的情况,进行改造。
举个例子吧,一个得到时间的函数,localtime(),在项目中需要频繁的调用这个函数获取时间,根据28原则,%80的性能消耗在了%20的代码,这话一点不错。localtime()转换utc秒数返回一个存储了年月日,时分秒的结构体。当时没有人去关注其中的内部实现,经过大神的提点,自己写了函数的实现,后面性能果然得到了提升,处理能力提升了几倍。具体的原因还没有研究过。大神提点说是其中涉及到时区转换。
还有很多的例子,比如intel开源的dpdk(数据平面化处理开发套件),将性能做到了极致,其中的技术让人大开眼界,比如dpdk的收发包,采用UIO(用户态IO)技术,就绕过了linux内核,原因是经过内核会多一次拷贝。
又比如malloc,free,系统提供的申请内存的api,不过有很多大牛为了自身项目的特性考虑,都对内存做了自己的分配和管理,例如大页内存。
见识了许许多多,真真切切认识到linux是一个自由度非常高的操作系统,已经有许多优秀的开发者提供了太多优秀的工具。你想要的,基本没有linux提供不了的。如果你有新的想法,通过修改源代码都可以实现。
c++是一门很复杂的语言,语法十分复杂,工作一年也有许多语法没有了解和接触过。其中的模板更是天书一样的代码(boost库中可以让你体验到),第二点就是c++的优势就是性能,所以c++永远不会淘汰,但是难点也在性能,这需要对c++本身的语言非常理解,结合操作系统,cpu,内存,各种优化性能的手段了解。我想这都不是几个月或一年的事情。所以继续努力吧。

结语

第一次的博客,晚上熬夜写的,还有许多的感悟,以后结合实际学习情况在说吧,不然难免空谈。如有笔误或认知不当,感谢各位斧正。联系方式1959099039@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值