面试题2
2016-07-08 15:26
330 查看
1、如何避免内存泄漏,如何查找内存泄漏。
-1.减少不必要的全局变量,或者生命周期较长的对象,即使对无用的数据进行垃圾回收,避免创建过多的对象。
-2.使用一些检查内存的工具,例如instrument等。
2、列举cocos2dx内常用设计模式,并举例说明。
-1:单例模式:Director,FileUtils,UserDefaults等等
-2:观察者模式:
-3:工厂模式
-4:二段式模式
3、简述Action的父类及子类继承结构和用途。
-Action的三个子类,FinateAction,Follow,Speed
4、减少内存开销的方法有哪些?图片压缩的方法有哪些?
(1)减少绘制调用。使用CCSpriteBatchNode
(2)按照最大到最小的顺序的加载纹理
(3)避开内存使用高峰、
(4)当不需要的时候释放无用的资源
(5)当有内存警告的时候释放缓存的资源
(6)使用texturePacker来优化纹理尺寸,格式,色彩深度。
(7)小心使用JPG文件
(8)使用16位RBGA4444色彩深度的纹理
(9)避开加载大尺寸图片
(10)使用pvr.ccz纹理图集而不是原生图片
5、cache机制原理是什么?
-将纹理加载到内存,并且有对应的文件名称key,再次使用的时候,首先去查找对应的key,找到直接使用,找不到再去文件加载。
6:cocos2d-x的图形渲染机制是什么?
-从Cocos2d-x3.0开始,Cocos2d-x引入了新的渲染流程,它不像2.x版本直接在每一个node中的draw函数中直接调用OpenGL代码进行图形渲染,而是通过各种RenderCommand封装起来,然后添加到一个CommandQueue队列里面去,而现在draw函数的作用就是在此函数中设置好相对应的RenderCommand参数,然后把此RenderCommand添加到CommandQueue中。最后在每一帧结束时调用renderer函数进行渲染,在renderer函数中会根据ID对RenderCommand进行排序,然后才进行渲染。
7:autorelease和release的区别?
答:在cocos2dx中,内存管理采用的技术机制,并不是new完之后下一步就delete,它的管理方式是在new了之后,我们需要对它进行计数加1直至这个计数为0的时候,我们才delete掉它。
release是在retain后,调用release即刻将计数减1,直至为0的时候, 我们才delete掉它。
autorelease却不是这样的,在调用了autorelease之后,它将该对象添加到AutoReleasePool,当下一针的时候,进行对应的释放。
-1.减少不必要的全局变量,或者生命周期较长的对象,即使对无用的数据进行垃圾回收,避免创建过多的对象。
-2.使用一些检查内存的工具,例如instrument等。
2、列举cocos2dx内常用设计模式,并举例说明。
-1:单例模式:Director,FileUtils,UserDefaults等等
-2:观察者模式:
-3:工厂模式
-4:二段式模式
3、简述Action的父类及子类继承结构和用途。
-Action的三个子类,FinateAction,Follow,Speed
4、减少内存开销的方法有哪些?图片压缩的方法有哪些?
(1)减少绘制调用。使用CCSpriteBatchNode
(2)按照最大到最小的顺序的加载纹理
(3)避开内存使用高峰、
(4)当不需要的时候释放无用的资源
(5)当有内存警告的时候释放缓存的资源
(6)使用texturePacker来优化纹理尺寸,格式,色彩深度。
(7)小心使用JPG文件
(8)使用16位RBGA4444色彩深度的纹理
(9)避开加载大尺寸图片
(10)使用pvr.ccz纹理图集而不是原生图片
5、cache机制原理是什么?
-将纹理加载到内存,并且有对应的文件名称key,再次使用的时候,首先去查找对应的key,找到直接使用,找不到再去文件加载。
6:cocos2d-x的图形渲染机制是什么?
-从Cocos2d-x3.0开始,Cocos2d-x引入了新的渲染流程,它不像2.x版本直接在每一个node中的draw函数中直接调用OpenGL代码进行图形渲染,而是通过各种RenderCommand封装起来,然后添加到一个CommandQueue队列里面去,而现在draw函数的作用就是在此函数中设置好相对应的RenderCommand参数,然后把此RenderCommand添加到CommandQueue中。最后在每一帧结束时调用renderer函数进行渲染,在renderer函数中会根据ID对RenderCommand进行排序,然后才进行渲染。
7:autorelease和release的区别?
答:在cocos2dx中,内存管理采用的技术机制,并不是new完之后下一步就delete,它的管理方式是在new了之后,我们需要对它进行计数加1直至这个计数为0的时候,我们才delete掉它。
release是在retain后,调用release即刻将计数减1,直至为0的时候, 我们才delete掉它。
autorelease却不是这样的,在调用了autorelease之后,它将该对象添加到AutoReleasePool,当下一针的时候,进行对应的释放。
相关文章推荐
- 面试题
- 面试题
- 59条令人捧腹但真实的程序员编程语录
- 剑指offer面试题4:替换空格
- 剑指offer之面试题14:调整数组顺序使得奇数位于偶数前面
- 黑马程序员----面试题之银行调度系统
- 黑马程序员----面试题之交通管理系统
- 李洪强经典面试题28
- 黑马程序员_Java基础_我的Day10学习笔记
- 博客转移
- 为什么不好聚好散
- 面试题27:二叉搜索树与双向链表
- 剑指offer-4-面试23:从上往下打印二叉树
- 剑指offer——面试题3:二维数组中的查找
- 死锁:系统中有资源n个,现有k个进程互斥使用,每个进程最多使用m个资源
- 送给新入IT运维的职场搬砖人(学习篇之系统运维)
- 初学者对于I/O流的小节-上
- IT自由职业者的赚钱利器
- 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)
- 安卓手册 第零章(面试)