腾讯的外包c++面试经历总结
夜深矣
预约的是在5月27日(今早)在科兴的c2面试,拿到二维码过了匝道后来到7楼,讲句实在话,c2腾讯内的环境还挺温馨,给hr沟通了下微信,便在茶水间的沙发上等了一阵子,然后过来便直接开始面试。
一开始是2分钟的自我介绍。
这里整理了下面试官大致的问题。
1.谈谈你对虚函数的理解
2.你对c++多态的认识
3.析构函数可以写成虚函数,构造函数可以吗?
4.写一个单例模式
5.map和hashmap的区别
6.当map存在两个键值对,这时候你访问不存在的键值时得到什么值
7.讲一下你对lua中的table的理解
8.写一个lua的表的嵌套
9.看过热更新的源码,讲下流程
10.当玩家正处于游戏中,这个时候你更新了资源包,热更新流程会怎么走?
然后的话,面试便结束了。面试的话不太理想,热更新这块还是以前自己看了ToluaFrameWork的一个简历使用示例,问的细就不懂了,stl的map底层实现没说出来,尴尬的是例模式还写的不完美,哎。。。。
下面总结一下答案(基于自己的理解,有些答案会参考百度,有答错的还请评论告知,感谢ing):
1.谈谈你对虚函数的理解
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,它的目的在于实现多态性,通过指向派生类的基类指针或引用,访问派生类中同名覆盖的成员函数。
2.你对c++多态的认识
多态性是一个接口对应多种实现。分为静态多态和动态多态。
静态多态:
- 函数重载:根据函数名相同参数的不同
- 模板:类型参数化
动态多态(运行时多态):利用虚函数和类继承实现,通过指向派生类的基类指针或引用,访问派生类中同名覆盖的成员函数。
3.析构函数可以写成虚函数,构造函数可以吗?
当某个类中存在虚函数,则程序在编译时会生成一个虚函数表,存储每个虚函数的函数指针,虚函数的调用会被编译器转换为对虚函数表的访问,而派生类的虚函数表的构建是拷贝基类的虚函数表,然后替换已经重写的虚函数指针,最后再追加子类自己的虚函数指针。
因此,析构函数写成虚函数是为了避免没能释放派生类对象可能分配的动态内存。
但是构造函数不可以写成虚函数,因为,如果基类的构造函数是虚函数,则对象在调用基类构造函数时并未实例化,没有内存分配,不存在子类的虚函数表。
4.写一个单例模式
class Singleton{ private: Singleton(); Singleton(const Singleton& other); public: static Singleton* getInstance() { if(m_instance== nullptr) { m_instance=new Singleton(); } return m_instance; } static Singleton* m_instance; }; Singleton* Singleton::m_instance=nullptr;
5.map和hashmap的区别
6.当map存在两个键值对,这时候你访问不存在的键值时得到什么值
7.讲一下你对lua中的table的理解
8.写一个lua的表的嵌套
9.看过热更新的源码,讲下流程
10.当玩家正处于游戏中,这个时候你更新了资源包,热更新流程会怎么走?