工作相关总结一


1、之前做客户端程序时使用过正则表达式库boost,当时是第一次使用这个库,当时感觉真的很方便,让程序处理方便了很多。后来当由客户端变为服务端时,我们想照用原来的boost来完成解析操作。谁知,当做并发测试时,系统直接崩溃,甚至出现莫名其妙的异常。后来,研究了半天,才发现罪魁祸首竟然是我们当初很喜欢的boost造成的。没办法,又急急忙忙地找替代产品,后来使用了Pcre,还好,替换起来不算太麻烦,也轻易地解决了我们的问题。但是,原因是什么一直不清楚。有次,在CSDN上,看到有人大夸boost的好,后来我提到这个问题,也没有有回应。就一直悬着。
今天,由于原来的客户端的需求变更,有些更改需要我帮忙,正好和一个资深的前辈一起。就随便说起之前遇到的问题。他听完就哈哈笑。“当然了,你们没考虑清楚,boost的应用场合,出问题当然是不可避免的。”“哎,当时我就晕了?”“boost本身是不支持多线程并发的。这样对同一对象,当有多线程进行抢占时,就可能会出问题。”
“哦,原来是这样啊。那如果我们在对这样的对象,进行加锁操作就可以了,对吧?”“恩,当然了。”他笑了笑。
哎,又学了一招。看来我知道的太少了。

2、今天看同事之前写的程序,当有关键字的存储时,频繁使用vector,而通过vector与数组的对应,来依次组成key与value的对应关系。我当时就想,哎,好奇怪哎。为什么不使用map呢。这样在后续通过key来指定某一具体值时,就不需要循环遍历了呀。是完全可以直接定位查找的。后来,看到他在后续操作时,不仅仅使用了id,type,value,即利用自构造链表的方式来实现。当然了,功能实现的确实没有问题。其实,真的不需要这样实现。map是支持对象的,所以完全可以按如下方式定义实现:map<key, <id, value>>,只要将值定义成一个结构体对象,或是一个类对象,它本身有自己的属性就可以了呀。这样不仅因为直接利用底层实现,效率提高,而且实现起来也特别方便。
关于vector,map,使用时真的应该好好考虑一下,如果存在key,value,且程序的自动排序对你的业务没有影响,且需要根据key去查询value时,完全可以使用map嘛。如果只是单纯地存储某一对象,且使用时,按线性去存取,vector就可以满足需求了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章