今日面试题

Lua原表:对普通表进行索引的时候,如果普通表存在我们需要索引的这个键,则返回这个键所指向的值
,如果普通表不存在我们需要索引的这个键,就会到原表中进行查找,如果元表不存在,直接返回nil。
如果原表存在,则继续对元方法所指向的表中进行索引,如果键存在,则返回键对应的数据,不存在就返回nil

当对普通表进行索引时,如果普通表不存在这个键,如果元表上的元方法指向的是一个(function)方法就
会去执行这个方法,索引得到的值是这个方法的返回值。 

_index类似于get接口,_newindex类似于set接口

Lua面向对象:通过元表的__index元方法,将一个table的__index元方法设置为另一个table,
那么后者的方法就被前者继承


图片优化:尽量使用合图,不要使用单图。因为合图节省内存,减少draw call的次数
加载图片时先加载大图再加载小图,不要在同一帧加载所有的图片(有肯导致内存占用过多,
超过内存峰值),
对图片进行分类,如果不需要动态加载的图片资源不要放在resources目录下,
使用TinyPng工具,可以减小包体大小。可以使用九宫格图片来代替一张整图(降低图片的分辨率,节省资源)
音频:尽量使用单声道,适当降低采样率和比特率
代码层面:如果有需要多次重复创建和删除的对象,尽量使用对象池,new 和 delete对性能有损耗。
字体;尽量使用系统字体,一个字一次draw call    尽量不用物理引擎
优化包体:去掉引擎不必要的模块,如果做的是2D游戏可以把3D的模块去掉,
不需要动态加载的资源不要放在resources目录下。


红黑树
特征:
根节点是黑色
每个节点必须是红色或者黑色
如果节点是红色,它的子节点必须是黑色。
每个叶子节点必须是黑色
一个节点到该节点的子孙节点的所有路径上包含相同数目的黑色节点

vector容器 是一个动态数组,里面有一个指针指向一块连续的空间,当空间不足的时候,会申请一块
更大的内存空间,会把原来的数据拷贝到新的内存空间中,然后释放旧的内存空间。 
动态增加空间的时候不是在原有的空间后面申请内存空间,因为无法保证原有空间后面还有可用空间

map和set 
主要是通过红黑树来实现,红黑树是一种特殊的二叉查找树,特点是每个节点必须是红色或者黑色
根节点必须是黑色  如果一个节点是红色的那它的子节点必须是黑色   所有的叶子节点必须是黑色
一个节点到该节点的子孙节点的所有路径上包含相同数目的黑色节点   o(log N)
4 .5保证了没有一条路径是其他路径的两倍

智能指针 ;智能指针是一个类,这个类的构造函数中传入一个指针,在析构函数中释放这个指针
指针的类都是栈上的对象,当指针超出类的作用域是
常用的智能指针 shared_ptr基于引用计数的智能指针,引用计数为0时会被释放

vector容器的优缺点  
顺序存储 存储空间是连续的静态分配的,空间利用率高
删除或插入的效率不高 因为存储空间是连续的,插入或删除元素时需要移动现有的元素,当插入元素时
如果内存空间不足需要重新申请一块内存,还要对数据进行拷贝

list容器的优缺点 
链式存储 双链表 存储空间不连续是动态分配的 
插入删除很方便   因为存储空间不是连续的,
空间利用率低
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值