剑指offer——(2)面试需要的基础知识
一起学习吧~ P37——P100
这章中主要带读者进入面试中会很注重的3个方面,编程语言,数据结构,算法和数据操作。通过例题讲到面试官会注重的方面以及面试者会遗漏的点。
2.1
大多面试官会对C++情有独钟,其中除了C++的面向对象的基础知识,还需要学习算法设计,内存管理,文件操作,多线程,程序安全,数据结构和算法,编程能力,算法和复杂度。另外进一步的学习还要对设计模式、UML图等的学习。
2.2
除了对C++的学习之外,最好对当代流行的语言有所了解,比如,Java,Python,C#。
例1: C++中的关键字会经常作为问题被提及,书中提到,关键词sizeof:
这段对话中包含的就是面试官与面试者之间关于该关键字各自将会提问和回答的方式,考查面试者对其了解的程度,面试官一问便知。我总结一下sizeof的知识点,定义一个空类型,求sizeof,答案是1,因为我们声明该类型的实例的时候,必须占一定内存空间,否则无法使用这些实例,占多少内存由编译器决定,Visual Studio占用1字节,添加构造函数和析构函数,也是1,构造和析构只需知道地址即可,地址与类型有关,类型与实例无关,所以还是1,如果把析构函数标记为虚函数,因为C++中会生成虚函数表,每个实例中会添加一个指向虚函数表的指针,所以32 位机器,指针占4个字节,64位机器,指针占8个字节。
例2:给简单代码,分析编译结果:
上图中复制构造函数传值时,会出现无限循环,需要改成:A(const A& other),也就是把传值参数改成常量引用。原因是,我们把形参复制到实参会调用复制构造函数,如果是值传递,就会在复制构造函数内调用复制构造函数,就会形成永无止境的递归,从而导致栈溢出。
例3:让面试者写代码定义一个类,实现类型中的成员变量。
推荐几本C++的书:【1】《Effective C++》面试前突击C++
【2】《C++ Primer》全面了解C++语法
【3】《Inside C++ Object model》深入了解C++内部适用
【4】《The C++ Programming Language》想全面深入掌握C++适用
接下来是面试题1:赋值运算符函数,请观看博客