集训培训日记——第二天

昨天不知道怎么了,太累了,所以没有将自己的笔记整理,早早的躺在床上,就睡觉了。第三天老师给我们讲什么敏捷开发的理论知识,甚是无聊,于是决定开小差,整理一下自己昨天的笔记,估计今天上午是不会有任何新的有价值的笔记了。
 
1.性能优化的策略:
     获得基线版本性能数据(这里的基线版本就是当前版本的效率,我们优化代码的性能,不能低于当前这个基线版本的值,否则就不是优化了)
     分析影响性能的关键点(也就是重点的代码优化)
     优化关键部分的性能(优化重点部分的代码,需要测试优化的性能)
     测试验证
     然后继续获得新的数据进行分析,再进一步分析优化(迭代整个过程,不断的优化)
 
2.性能优化的原则
     2.1首先需要保证软件系统的正确性、可维护性、可靠性以及可测性。不能盲目的追求效率,忽略之前的重要特性。
     y = x * 5;
     修改为 y = x<<2 + x;  可维护性、可阅读性太差了,最好是增加注释
 
     2.2不是所有的代码都需要优化,根据二八原则,20%的程序运行80%的时间。找出程序的重点部分进行优化。可以从流程级优化(从最耗时的部分进行优化);代码级别优化:优化频繁执行的函数
 
     2.3代码减少不必要的操作,对于必须的操作采用尽可能高效的方法。比如小功能的函数,修改成为内联函数。比如以空间换时间将计算好的数据放在内存中保存,后续如果需要就直接的获取即可。
 
3.方法
     减少不必要的操作
     循环体内的操作尽量最小化;避免重复的运算;使用模板赋值;避免不必要的内存拷贝;使用指针传递函数入口的函数;
     
     高效实现
     把最可能的判断放在前面;在需要的时候才申请于释放资源;改进遍历查表;文件操作使用缓冲;字节对齐;多重for循环将较小的循环放在外面。
     typedef std::map<int,int> InnerMap;
     typedef std::map<int,InnerMap> OuterMap;
     OuterMap instance;
     for(;;){
          for(;;){
               instance[i][j];
          }
     }
     for (;;){
     InnerMap & ref = instance[i];
     for(;;){
          ref[j];
     }
     }
这两个的效率相差很大。

使用提供模板赋值
pstCB = malloc(sizeof(CB));
pstCB->A = 0;
pstCB->B = 1;

修改为:模板赋值
g_CB.A = 0;
g_CB.B = 1;
pstCB = malloc (sizeof(CB));
*pstCB = g_CB;
 
4.高质量的代码(代码的可维护性)
 
     高质量的代码,编写简洁、可维护性、可靠、可测试、高效和可移植的代码。
 
重复代码,大函数,过多的函数参数,数据泥团,长SWitch,过度耦合,复杂的表达式,过多的函数调用
 
推荐书籍:CleanCode,重构——改善既有代码的设计,设计模式 Design Pattern,程序员修炼之道,敏捷软件开发:原则、模式与实践。
 
 以上就是我笔记的整理了,感觉昨天上午就是在做题,没有什么新的东西,对于我价值真实不大,但是那些东西对于小朋友面试笔试还是很有帮助的,有需要的可以找我要啊(不能公开,因为据说是公司机密)。下午的话甚至包括今天感觉就是在上软件工程理论课程,是在是听不下去了,于是开始看动漫,虽然还是不理解。
 
 
追梦的飞飞
2014.03.20  广州
原文地址:https://www.cnblogs.com/hbhzsysutengfei/p/3613089.html