Browsed by
Category: 十年之路

virtual deconstructor

virtual deconstructor

看看下面这个程序,如果我不在Base的析构函数加virual,那么vector析构时就不会调用D的析构了。这么简单多问题居然忘记了。 using namespace std; class Base { public: Base(){}; virtual ~Base() { cout

c语言中函数参数的修改

c语言中函数参数的修改

惯性思维要不得。 void pointTest(Node* node){ Node* tmp = node; tmp = tmp->next; printf(“value is %d\n”, tmp->value); } 通常写代码是,我会在函数体加一个临时变量指向传递过来的参数,例如上面这个例子。 今天面试别人时,看到了这样的用法: void pointTest(Node* node){ node = node->next; printf(“value is %d\n”, node->value); } 这位兄弟显然直接就操作参数了,看到这种用法,感觉非常别扭。当时没有经过思索,就问了句你觉得你这样用能编译通过吗? 答案是显然的,是可以这么用的。 反编译后,输出如下内容 pointTest: .LFB2: pushq %rbp .LCFI0: movq %rsp, %rbp .LCFI1: subq $16, %rsp .LCFI2: movq %rdi, -8(%rbp) movq -8(%rbp), %rax movq 8(%rax), %rax movq %rax, -8(%rbp) movq -8(%rbp), %rax movl (%rax), %esi movl $.LC0, %edi movl $0, %eax call printf leave ret 可以看到,修改参数,就是修改栈上的内容,因此是没有问题的。下次要注意先思考再提问。

阅读与思考

阅读与思考

阅读与思考是相符相承的行为,阅读的时候,感觉像是有一个人在跟你说话,最好的情况是他说的话是你感兴趣的话题,你会用心去体会他说的内容。 思考呢,则是自发的行为,不再是去接受别人的思想,而是自己去创造。我这里说的创造并非一定就是自己是第一个发现者,而是仅仅描述“产生”的过程。 常常会出现这样的状况,就是阅读的时候感觉很轻松,我试过读很多计算类的著作时,没有思考过程,仅仅是读,感觉很轻松,偶尔做做笔记,最终一本书看下来,真正能记住的东西并不多,这就是为什么以前上学的时候,要做练习题,其实考试反而倒是其次的,那些练习题,会强迫你进行思考,真正思考过的内容,而不是停留在阅读层面的,才更能深刻的理解。 然而,又有一个问题,就是现在社会,不是信息贫乏的社会,这个社会的问题是太多的信息,这个时候,你又需要用浅层次的阅读,去剔除一些著作,留下真正有用的、值得理解的著作。一个人一生的经历是有限的,有的人说,不要浮躁,要认真学习,我认同这句话,可是,如果你学习的速度太慢了,赶不上整个节奏了,那么无疑也是没有用的,因此,真正要做到阅读与思考的合理搭配,才能够做到不浪费精力。

做一个合格的软件开发工程师

做一个合格的软件开发工程师

这是十年之路的第一篇文章,其实叫十年之路是因为在某个行业中发展,至少要经过10年时间才能有所建树,我这个博客不是风花雪夜的文学博客,所以十年之路也就是关于一些在软件开发中的心得体会。 一个合格的软件工程师,应该做到热爱写代码。 一个合格的软件工程师,应该是掌握现有基础数据结构、基础算法、算法分析方法、算法设计方法,并且能够灵活应用。当遇到新的算法时,能够快速理解并运用。 一个合格的软件工程师,应该掌握调试工具,具有除虫的sense,能够快速的排查问题。 (2011年1月9日更新 未完,持续补充中)