集训培训日记——第一天
    
     今天开始了第一天的培训,不是很期待,也不是很排斥,不过之后的了解到一点,如果我们将来进了HW公司的话,这个培训就是免费的;否则就需要交纳3千大洋的培训费。算了,先不管了。还是整理今天学的东西吧。
 
     整体的回忆一下,具体也是没有什么新的东西可以讲,因为我之前认真的阅读了《高质量C/C++编程指南》,而且研读了好几遍,而今天将的这些知识,都是在那本书中学习过的,而且自己整理了笔记,归类到C++复习中,主要是内存资源管理、指针的知识、运算符的优先级、字节对齐、参数传递、宏等等各种很杂很细的知识点,所以这样的集训时没有学到很多,反而像是在复习自己之前的笔记。
     所以有些想法想告诉读者(大三下准备找工作的小盆友们),其实C/C++的学习,我们要深入的学习,就要去阅读一些比较深的书籍,并且把这一本好的书认真的“研读"几遍,比看再多的书都管用。我之前的准备过程中,看的C/C++的书不是很多,但绝对是经典。第一本是《C/C++面试宝典》,即便这本书里面有很多的错误,但是还是很值得研读的;第二本就是关于数据结构的,我把所有的排序算法、树、图算法实现;第三本就是《高质量的C/C++编程指南》,真的是一本非常好的书,这一本真的尤为重要;之后看的好像是C++并发编程指南,主要是学习多线程编程和线程同步的知识。建议找工作的小盆友都可以去看一下这基本书,提高自己的C++专业技能。
     
     回到培训中,上午主要是热场,组队,还有就是讲了软件开发中的低级错误在不同时期维护的代价,越到后面维护的代价越大,所以对于一个”研发工程师“(我不习惯被称为程序员or 猿)养成的一个很好的习惯就是对自己的编写的代码负责,尽量避免低级错误,因为一个小小的错误,可能带来的后果是不可预计的,就不实际举例子了。
 
     软件系统性能的可靠性,主要体现在99.99%(程序的故障时间在0.01%)  & 99.999%(维护的时间非常少)。在这些低级错误中很多的都是人为的低级错误,为了这些低级错误,维护软件的可靠性代码找到了30%甚至更多。一个缺陷的发现的成本在1.18人,但是如已经交付之后,提供安全补丁的话,耗费非常的大,超过100人时。所以让自己的错误越早被发现,代价越小。
 
     讲了这些宏观的东西,其实我都会这样吹水了,不过毕竟是长辈,知道的东西肯定是比我要高出几个数量级来,所以无论什么时候,做人都还是要谦虚的。紧接着下午来了,主要探讨的几个问题几乎全都是在那本书上遇见过得,只是有一点想吐槽,代码的变量长度太长了,其实我是理解的,因为在搞一个大的项目开发的时候,一个变量的名字有20到30个字节是很常见的事情,这也是为了大型项目开发的需要。所以在真正的软件开发中,绝对是由很强的规范的,切不可随意的定义变量。这就需要我们养成一些比较好的习惯,在自己编程的时候,不要定义那些没有意义的变量,而是根据当时的具体环境,给变量起一个有意义的名字。
 
     
     涉及的知识点,基本都在之前的笔记中,这里还是把那些关键字整理一下:
     
     C/C++资源的泄露,主要是动态内存分配的空间没有被释放掉。比如句柄资源、定时器、信号量等等,这些资源的话在程序中是有限制的,所以在不使用资源的时候,尽量释放资源,否则就会造成资源的泄露。在一段代码中有两次申请内存空间的话,很大的可能就是没有释放之前的资源,同时又失去了只想这一片内存的指针,导致资源的无法释放。
 
     深复制和浅复制:主要是在结构体或者是类中存在指针的属性变量的时候,就会出现这个问题。内存的申请对应于释放,同时对于结构体的数据结构,如果内部属性有指针的类型,那么涉及深复制。读者就自己写代码测试一下了。
     指针的知识:C/C++很烦的就是指针,但是真正掌握之后,会发现其实没有那么的难。指针的释放之后,指针并不是NULL,所以一个很好的习惯就是在释放掉内存空间之后,将指针置为NULL。我们可以多次的释放NULL指针的空间,但是对于有意义的指针,在释放掉之后,一定注意把指针置为NuLL。 
     当申请一块内存之后记得要判断是否申请成功。释放的指针指向的内存空间必须是指向原来的位置,不能修改他的地址,之后再去释放,否则就会出现系统错误。
 
     For循环的使用,循环的终止条件需要注意相同的类型,否则就会无限制的运行下去。例子很好找了就不赘述了。
 
     运算符优先级:你以为你以为的就是对的吗?运算符的优先级问题,自己好好的复习了
     
     字符串操作:
char str[2][100] = {"asdfg","12345"};
char temp[100];
int len = strlen(str[1]);
memcpy(temp,str[0],len+1);这里为甚么要+1 ,自己好好想想
cout << temp << end;
之后就是关于编译器和系统架构对于结果的影响,其实C/C++有很多不同的编译器,而且程序执行的凭他不同结果也会存在差异,比如参数传递的时候,你传递的是两个函数的返回值,这种情况下就会因为系统架构的不同,把函数执行的返回值当参数的情况下,并且有多个参数,切参数之间有一定的关系的话,就会出现各种莫名其妙的错误,因为不同的架构,函数参数的执行顺序是不同的。
 
     其实也就记下这么一点的知识,另外说一下自己今天的心情吧,还是非常愉快的,每天都是阳光的心态,迎接崭新的一天,只是最近在帮公司做项目,因为时间的原因,我自己亲力亲为有点困难,所以希望可以找别人一起来完成,整体的需求和开发框架已经出具模型了。
 
 
追梦的飞飞
2014.03.18 深夜 
posted on 2014-03-19 00:06  追梦的飞飞  阅读(1177)  评论(0编辑  收藏  举报