C++开发工程师--实现心得

实习公司

从找到实习工作开始,一直呆在这家公司实习(今年6月份)。

地点:成都

名称:XXXXXXX

实习时间

从去年10月8号入职到现在

实习工作

1.刚开始来的时候,我们主管给了我一个任务,说白了就是给了一套接口(更具体的说没有给接口,要求自己封装)。说下这项接口的主要作用就是要实现多进程间的通信(无锁、共享内存),说实话这个任务很难。关键是要求无锁还要多个进程之间(是的不是多线)之所以要无锁主要是为了快。最开始我用信号量+队列做了一套接口,测试大概一秒钟90万的传输量,这样的速度显然太慢了,后来把PV操作的范围变小(也就是常说的将锁变小),性能也只能达到100万左右。无奈之下只好去研究了CAS无锁机制,经过反复折腾,用了各种方法测试,性能能达到4百万(甚至更高)。说实在话这个想法有点浪费空间,因为初始化就间队列的每一块的大小固定了,即使这样本质上有是可以变长的。然后就开了技术交流,写文档让说下这套接口,讨论的最后时发现在极端条件下会存在隐患(追击问题),后来我去查了怎么解决这个问题,反正最后是没有解决。-- 这个功能跟现在的项目没有关系,最后也不了了之了。

2.之后就开始跟着他们一起做项目了,XXXXXX。在这个项目中的第一个任务就是分析打印机协议(IPP),然后通过代码把数据包中的文件名字、文件大小、文件内容...提取出来。可以理解为做一个动态库(他们称之为插件)。因为随数据包的分析完全不懂,虽然公司有人专门做数据包分析,毕竟第一次接触,还是有掉伤脑子。先花了2-3看他们的项目框架,然后就开始对XXX协议进行分析,最后开始写代码。从开始这个任务到代码写完结束大概花了1个星期,然后就开始着手写XXX2协议的插件。后面就是漫长的修改代码的过程,因为带我的是个女生(在这个部门呆了差不多十年吧),可能是女性,所以对细节把控比较重视,她是一行一行的看我写的代码,然后把逻辑不合理、一些细节的错误给标出来,打回来让我改。来来回回大概改了3次,最后是差不多了。

3.对,想起来。在正是加入做项目之前,还做了一件事情。就是对他们现在存在的正则匹配引擎做了优化,顺便改了不少BUG。之前写这个正则模块的人跑路了,然后这个模块在测试中出现了内存错误。是的,段错误很难解决,花了我2个星期才解决的。然后又花了2天调了代码,在这个过程中陆陆续续出现了很多BUG,索性都不是太大的问题,很快就解决了。

吐槽:这份正则引擎的代码,没有注释、没有注释。而且是前后两个人写的,后来又有人做过空间优化。反正代码写的乱糟糟的,看着....后来在技术交流的时候,他们让我讲正则匹配的,然后我把这块算法讲了一遍(其实就是编译原理里的有限状态机)。最后花了不少时间最后成功优化,效率提高了30%。这个30%不是针对所有的情况,做优化尽量根据业务场景就性,我的方法结合了AC字节树,虽然没有用到AC字典树的失配指针,不过确实是从这个里面得到的启发(具体就不展开说了)。-- 这个任务完成的还可以,毕竟是他们都不想碰的烂摊子,为什么这么说呢?因为在技术交流的时候,我多次提出来,要不要看下这个逻辑里的代码。他们都表示不太愿意,我猜想他们之前应该接触过这份代码。确实写得....乱七八糟。我都不知道自己怎么理顺的。现在想起来,是场噩梦。

4.接下来还是做优化,对之前他们写的插件做优化,因为他们之前有些插件性能或者功能没有达到要求。我通过位操作(位数组)的对其中一个插件进行了优化,还有一个是减少没有必要的逻辑然后再根据业务需求的特点(对TCP,有很多的数据包),其实对于这个功能只需要处理第一个包就能完成,没有必要处理整个TCP链路的。最近在这个项目在客户现场测试,所以比较忙,我负责的插件又存在一些问题,不停的改、改。好在我跟的插件不多,所以很多时候都摸鱼,嘻嘻。

5.手头还要一个任务是要提取视频文件中的音频、从音频文件中提取文字、从视频文件中提取截图。第1和第3个任务相对比较简单,可以直接用ffmpeg完成(我给自己增加了工作难道,我的最终想法是封装一套接口出来,方便其他人之后能使用)。第2个任务还没找到能直接处理的第三方库,目前我打算对音频文件的格式进行分析,直接从文件中拿出信息(感觉可能性还是有40%能成功的)。-- 嘻嘻

目前因为项目要交付,公司内部测试部没有测,所以现场出了很多问题。这几天有点烧脑子..

实习心得

1.自己的变化,之前其实我挺闷的。工作之后反而交流的多了,有问题就是得问呀。我感觉我把我们部门的人问了个遍再乘2,问得最多的就是带我的师傅。没法子,他们好多现存的接口不是很熟悉,框架还没有玩得特别6。

2.至于会不会在公司转正,这个问题待定。

可能向钱途看齐。还有一点就是成都离家太远了,有点...

之后更偏向于杭州.....前不久我还投简历,没想到反响还挺好,总归是给自己吃了安心丸,大家都说找工作很难。

3.至于之后的计划,我记得自己的写的代码还是太少了。所以开始造轮子计划。

至于为什么叫造轮子。可能跟工作有关系,我们公司很少用STL,当时我就很好奇,然后问了他们,他们说内存吃的很大、有时候效率也不行。回头想想其实存在这样的问题,这个可以私下里一起交流。所以打算自己写一些好用的轮子。今天花了一天的时间写了日志系统V1.0和红黑树(上周写的,当时还没有打算做这个项目所以代码每传,之后应该会传,需要完善下)已上传gitee。(欢迎加入)

链接地址: 轮子: 项目用于开发C++方便使用的小模块,个人开发者使用

4.还要一件事情,还有一个项目专门放了之前学习和开发的所有工具和资料。对于90%的C++程序员我想这些工具应该够用了。学习资料包含了很多很多:Linux系统编程、Linux网络编程、算法模板(之前在学习打比赛的时候没事写的,挺好用的)、QT、C进阶(指针)、C++相关....反正很多吧(后续我会陆续推送上去)

链接地址:C++学习资料和开发工具: C/C++开发工具大全/学习资料

5.最后有没有朋友想搞个云服务器,奈何对我来说太贵。有的话可以加微信(Errrr113)一起搞个。

6.感觉现在的工作跟我想做的还是有些差距

=====================================================================

其他好像也没啥说的,喜欢干饭的干饭小白

有什么可以加微信或者私信一起交流学习

猜你喜欢

转载自blog.csdn.net/weixin_46120107/article/details/128988929
今日推荐