笔试:
1.有这么一个宏定义:
define MINUS(x,y) x-y//get x-y value
问MINUS(5,5)*5的结果是多少?
以为宏展开后会变成这种情况:
x-y//get x-y value*5
这样*5实际上是被注释掉了,结果应该为0.
后来实际编程测试发现结果是-20,即宏定义中的注释语句并不属于宏,原式=5-5*5
2.定义一个宏,完成对两个int型变量的交换
#define SWAP(a,b) { (a)=(a)^(b); (b)=(a)^(b); (a)=(a)^(b); }
int a=1 , b=2;
SWAP(a,b);
在宏内最后一个语句(a)=(a)^(b)后面犹豫要不要加分号';',因为宏调用时是SWAP(a,b);的形式,后面会附带一个分号。实际测试后发现必须要加分号,两个分号连在一起不会影响编译和运行结果,形如;};结尾的语句也不会有问题
面试:
1.什么是多态?自己对多态的理解?多态的好处?C++如何实现多态?
一个接口,多种实现,通过一个接口能完成不同的任务,代码复用,代码可扩展,用父类管理子类,静态绑定,动态绑定。
2.const关键字有几种用法?
常量,返回常量的函数,常量参数,常量指针,指针常量,成员常量,成员常函数
3.static关键字有几种用法?
文件内变量,文件内函数,函数内变量,类内变量,类内成员函数
4.TCP三次握手、四次断开示意图。
略
5.socket编程中有没有用过select()和epoll()这两种函数?各有什么作用?
见http://blog.csdn.net/this_capslock/article/details/39649001
6.编写一个函数,对两个已经排序好的单链表进行合并。
找到头结点,每次将较小的结点插入,最后将剩下的结点插入
7.编写一个函数,判断一棵树是不是平衡二叉树。
递归思想,后序遍历