
CVTE 面试题
面试者:徐欢
一面:
1. 指针和引用区别,new 和 delete 区别
2. 构造函数或析构函数能不能为虚函数?他们内部能不能调虚函数?
3. 虚函数表在什么时候生成,构造函数前,中还是后?
1.虚函数表是全局共享的元素,即全局仅有一个.
2.虚函数表类似一个数组,类对象中存储 vptr 指针,指向虚函数表.即虚函数表不是函数,不是
程序代码,不肯能存储在代码段.
3.虚函数表存储虚函数的地址,即虚函数表的元素是指向类成员函数的指针,而类中虚函数的
个数在编译时期可以确定,即虚函数表的大小可以确定,即大小是在编译时期确定的,不必动
态分配内存空间存储虚函数表,所以不再堆中.
根据以上特征,虚函数表类似于类中静态成员变量.静态成员变量也是全局共享,大小确定.
所以我推测虚函数表和静态成员变量一样,存放在全局数据区.
c/c++程序所占用的内存一共分为五种:
栈区,堆区,程序代码区,全局数据区(静态区),文字常量区.
显而易见,虚函数表存放在全局数据区.
在 gcc 编译器的实现中虚函数表 vtable 存放在可执行文件的只读数据段.rodata 中。
6. map 的第二个模版参数传一个类,这个类没有默认的构造函数会不会出错?如果出错,
是
什么错误?
答:编译错误。当调用 operator[ ]时,如果 map 中没有这个 key 时,他会它会自动构造一
个 pair 元素插进去,构造这个元素时就会调用 value 的默认构造函数,如果没有就会在编译
时报
构造函数找不到的错误。
7. 多线程怎么实现同步与互斥?
8. tcp 和 udp 区别
9. http 怎么防止粘包问题,如果发送的是比特流,你怎么设计防止粘包?
10. 仿函数和函数指针有什么区别?仿函数能做的事函数指针都能做吗?那反过来呢?
11. 有没有了解过什么 c++11 的新特性或 boost 库的新知识?
12. 有没有了解过开源项目?
13. 代码:合并两个有序链表
评论0