1. 加号重载符的声明
解析:对于运算符的重载,可以使用成员函数的形式,也可以使用友元函数的形式。如果使用成员函数的形式,那么只需要一个一个类变量作为参数(另一个默认为this变量);如果使用友元函数的形式,那么需要两个类变量作为参数传进来。比如:
A operator+(const A &a)const;//成员函数的形式,括号后面的const保证this对象不会被修改
A operator+(const A &a1,const A &a2);//友元函数的形式
但是,无论如何,只能选择一种形式。否则会导致二义性,出现编译错误
2. vector的迭代器iter可以执行iter++吗?或者可以执行*iter+=10?
解析:可以执行++,也可以执行*iter+=10. 但是对于迭代器,可能存在失效的情况,就是执行erase的时候,返回值是删除该元素的下一个元素的指针。
http://m.oschina.net/blog/55053
3. 类中this的作用
解析:牵扯到类的对象数组。而要建立类的对象数组,就必须保证类有默认构造函数。(如果没有默认构造函数,比较麻烦了。而且这个默认构造函数一定要显式的声明。因为如果声明一个带参数的构造函数,系统就不会再提供一个默认无参的构造函数了)。
this指针用来表示调用该成员函数的类对象。提出该this的原因是由于成员函数的参数是一个类对象的引用,返回的也是一个类对象。如果如果没有this指针,那么返回该成员函数的对象时,无法表示。因此,this指针指向的是实例本身。
4. *++p的优先级问题
解析:递增递减运算符和解引用运算符的优先级问题分两种。前缀的递增递减和解引用的优先级相同,从右到左执行。后缀的递增递减优先级比前缀的高,从左到右执行。
5. 虚基类的作用
解析:虚基类是指class subClass:virtual public BaseClass中以virtual声明的baseclass。虚基类的出现是由于C++中支持类的多重继承(多重继承问题在Java和C#中被避免了)。有可能多个父类继承自同一个父类的父类,那么会在内存中出现多个同一个基类的多个内存区域。因此会产生二义性问题。即最终的继承类实例不知道该调用哪个基类的成员变量和成员函数。有一篇文章讲的不错,简短明晰
http://blog.csdn.net/assemble8086/article/details/6841546
补充(2013.11.11):
虚继承和普通继承差别还是很大。
普通继承的子类对父类是“is-a”的关系,即子类也是父类的一种(自行车也是车子的一种);
而虚继承的子类和父类之间更像是一种组合关系“has-a”,子类拥有父类的特点(风火轮拥有车子的特点,但风火轮不是车子)。
由此导致不能将基类通过static_cast转换为继承类。
同时,在普通继承中,如果父类中存在虚函数,父类和子类只需要维持一张虚函数表就可以了,因此只有一个指针。也因此,子类的大小为父类的大小加上子类的成员函数的大小。但是在虚继承中,由于不是“is-a”关系,需要各自维持自己的一个虚函数表,因此子类的大小为父类的大小加上子类的成员函数的大小以及子类的指向虚函数列表的指针。
这部分内容可参见一篇讲虚继承和普通继承区别的博文:
http://blog.csdn.net/dqjyong/article/details/8029527
6. 内存中空闲块的分配情况
解析:内存空闲块的分配有两种方式:最佳适应法和循环首次适应法。内存的分配主要有三种方式:静态存储区分配方式(全局变量,static等),栈,堆。操作系统维持着一个双联表用来记录内存中空闲块情况。最佳适应法从表头开始寻找,循环首次适应法从上次结束的指针处开始寻找。具体见 http://blog.csdn.net/Study_more/article/details/7829552。
而对于内存分配中堆和栈的比较,可以从管理方式,空间大小,分配方式,分配效率,生长方式,能否产生碎片(可以和分配方式结合)上来进行比较。具体见文章
http://www.cnblogs.com/daocaoren/archive/2011/06/29/2092957.html
7. DB中物理存储结构和物理存储方法的模式:内模式?外模式?还是其他?
8. DB中的触发器,事务,索引。名词解释
9. 将C++中的某一函数声明为库函数,需要怎么做?
解析:在C++中,讲某一函数声明为库函数,可以认为是将该函数声明为全局函数,即在其他模块中也可以调用该函数,使用extern关键字修饰。而extern的使用,在C和C++中还是存在一定的区别,该区别产生的原因是C中不支持函数重载,而在函数重载方面,C++和C对全局函数的处理方式略有不同。在C++中使用extern “C”来修饰以C的方式定义的函数或者变量。在C++中引用C方式定义的函数,使用extern “C”来修饰;在C中引用C++方式定义的函数,使用extern来修饰(C中并没有extern “C”标识符)。具体分析见
http://blog.csdn.net/wfwd/article/details/763734。另和extern对应的是static声明,只能在该模块中使用变量或者函数,不能在其他模块中使用。
10. 最坏情况下,冒泡排序的执行次数
解析:最坏情况下从正序排成倒序,需要执行n,n-1,n-2,...,1次,也就是n(n-1)/2次
11. 循环队列中有15个位置,front指向6,rear指向9,问此时队列中有多少个元素?
解析:循环队列是将队列首尾相连而形成的。循环队列元素个数:n=(rear-front+ MAXSIZE) mod MAXSIZE。其中rear表示队尾,front表示队首,MAXSIZE表示队列最大容量,mod 为取余数运算。
12. 引用和指针的区别
解析:虽然引用和指针都是指向相同的内存中的一块空间,但是还是存在不同。引用相当于变量的别名,因此引用在声明时就需要初始化;同时鉴于引用是别名,因此只能从一而终,可以修改变量的值,但是不能换成其他变量的引用;当然,引用就不能为空了;同时,引用的效率比指针高,因为不需要进行编译检测,设计时已经保证不能为空了,而指针可以为空。
13. winodows消息处理机制中SendMessage和PostMessage的区别
解析:SendMessage是讲消息发送给应用程序,应用程序处理完毕后才返回;而PostMessage将消息加入到消息队列中,不等其返回就结束。具体见:
http://blog.csdn.net/npjocj/article/details/6611029
14. DB中主键和唯一索引的区别
15. Socket编程中FD_READ,FD_ACCEPT,FD_CLOSE各表示什么意思
16. 多线程通信问题
17. TCP/IP的常规程序流程,以及其他