C/C++刁钻问题各个击破

是程序员都会写C/C++程序。这是不是就说明C/C++比较容易掌握呢?非也!相比其他编程语言来说C/C++要庞大得多、复杂得多,要想用好C/C++不是易事。我用C编程有5个年头了,用C++也有4个年头了,然而我时常犯错,很多错误甚至是屡次三番的犯。

在实践中,我发现导致编程出错都是那些平时很少使用的貌似“偏僻”的C/C++特性,这些特性我们曾经都在某本教科书上学习过,但是印象不深刻,原因是这些教科书大都注重基础知识的教学,并且认为花费过多篇幅去介绍这些貌似“偏僻”的弊大于利:这些特性容易导致混淆,掌握不好很容易让程序出现很难更正的错误,因此大多数教科书都把这些特性分散到各个角落,并且是一笔带过。是的,我觉得这些教科书并没有错,它们这样降低了学习C/C++的难度,使得我们很快就能入门,然而,入门就够了么?一名好的程序员是永远不会满足于现状的,因此我们渴求掌握更多、更高级的语言特性。因为这些特性对我们来说相当重要!

这些特性“貌似偏僻”实质非常重要。举例为证:我毕业时(也就是今年的事)参加了许多公司的笔试和面试,其中包含:百度,华为,阿里巴巴,趋势科技,联华科技,银联商务……,这里可以给大家分享一下笔试面试的重点:其中百度笔试题目通常全部是算法题目,这些题目对时空复杂度要求非常高,而面试开始时通常会有C/C++的问题,这些问题都比较难,然后又是算法问题;华为我没参加任何笔试面试就被录用了(至今仍怀疑华为的招聘机制),因此没有发言权;阿里巴巴我是进行的电话面试,问了1个小时的C++问题+十分钟设计模式问题,其中c++问题包含有不同变量(全局变量,static变量,局部变量等)的存储位置、虚函数机制、位域,成员对齐,const,static,数组与指针的关系,构造函数,析构函数,运算符重载,变量的生存期……趋势科技的笔试几乎全部考察C++特性,每一道题目都是那些“貌似偏僻”的特性,当然最后还有一个算法分析题目;其他几个企业也都差不多。根据我的经验,现在的IT企业在面试笔试时都注重考察那些貌似偏僻的特性,这或许是因为他们觉得这样能很好地考察一个人是否学的深入,是否知识面广泛。事实上,这些貌似偏僻的特性非常重要,因为我们不可避免的要使用这些东西,而这些东西是我们很容易出错的,并且错误还非常隐蔽,一旦出现很难排查,因此掌握这些特性是必须的!

小时候妈妈经常教育我:“头次上了当,二次照个亮”,因此我经常会把犯过的错误记录在案,偶尔翻来品读,以免再在同一条河里呛水(事实上我还是经常在同一条河里多次呛水过),即便这不能完全解决问题,至少也有相当大的作用的。为此,我把这些貌似偏僻,实际上非常重要的特性(这些特性曾经让我经常迷惑,也经常出错)按专题整理出来,其目的有三:(1)通过整理,让自己对这些知识点进行回顾,加深理解;(2)与各位读者分享,以对各位提高C/C++编程水平尽微薄之力;(3)把自己的理解摆出来,让大家帮忙审审,对那些错误的或者不恰当的理解,希望各位指正。

虽然程序的精髓在于“数据结构+算法”。即便如此,掌握一门语言特性仍然是程序员的最基本,也是最重要的要求。如果说将“数据结构和算法”比作内功的话,那么编程语言就是外功。外功是内功的外在表象形式,如果外功不佳,那么就会想段玉那样:虽然会了六脉神剑但是不知道如何发招!

在写本系列时,我尽量做到排版清晰,并将需要重点关注的话语用加粗的方式来起到醒目作用,以便阅读。本系列中没有任何创新的东西,这些知识点你可以在其他书籍中寻找到踪迹,但是它们往往隐藏得很深,这就导致我们往往对这些知识点印象不深刻。如果你是第一遍读,你可以较仔细的通读,以后你可以采取只看标题和加粗部分的方式来浏览本系列文章。

如果您觉得本系列写得不错,您可以转载,转载时请注明出处;您也可以复制下来作为平时的学习资料,或者作为参加求值面试之前的复习资料,或者拿去修改修改作为考察求职者水平的笔试面试资料,但是在未经本人书面允许的情况下,请不要用于其他商业目的。如果您觉得本系列质量太差,那么请提出您宝贵的意见,指出其中的错误之处,或者你可以一笑了之。

由于本系列包含的专题较多,而且目前只完成了一部分,我会及时的把完成的专题进行更新。因此不能提供一个完整的目录或者大纲。在本系列完成之后我会整理出大纲,方便阅读。

c++

相关推荐