前天去参加了cocos2d开发工程师的笔试和面试,发现自己的基础还是很薄弱的,下面是自己回忆的笔试和面试问的问题
1.c++的三个基本特性
封装、多态、继承
2.构造函数可不可以是虚函数
构造函数不能是虚函数,虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数
3.c++中容器的使用场景,可以快速存储数据的容器有哪些,可以快速删除数据的容器有哪些?
容器分为顺序容器和关联容器两大类
顺序容器提供快速顺序访问元素的能力
vector 在尾部之外的位置插入或删除元素可能很慢,支持快速随机访问
deque 在头尾部插入和删除元素速度很快,支持快速随机访问
list 在任何位置插入和删除速度很快,只支持双向顺序访问
4.关于c和c++的区别
c面向过程,c++面向对象。C是一个结构化语言,它的重点在于算法和数据结构;对于C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制
5.什么是内存泄露以及处理的经验
用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。
内存泄漏和对象的引用计数有很大的关系,再加上c/c++都没有自动的垃圾回收机制,如果没有手动释放内存,问题就会出现。如果要避免这个问题,还是要从代码上入手,良好的编码习惯和规范,是避免错误的不二法门。
一般我们常说的内存泄漏是指堆内存的泄漏。
堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。
应用程序一般使用malloc,realloc,new等函数从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。
6.是否了解过vector内部的函数实现
vector动态增加大小时,并不是在原空间之后持续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大的空间,然后将原内容拷贝过来,然后才开始在原内容之后构造新元素,并释放原空间。因此, 对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了 。这是程序员易犯的一个错误,务需小心。
7.什么时候使用多线程
(1)耗时或大量占用处理器的任务阻塞用户界面操作;
(2)各个任务必须等待外部资源 (如远程文件或 Internet连接)。