【游戏客户端面试题干货】--2020年度最新游戏客户端面试干货( lua篇 )
大家好,我是Lampard~~
经过春招一番艰苦奋战之后,我终于是进入了心仪的公司。
今天给大家分享一下我在之前精心准备的一套面试知识。
今天和大家分享的是lua的面试题
本人亲测80%的引擎相关题目都是围绕着我总结出来的知识点提出的 。
配合我博客里面的lua系列一起食用会更有效果哟~~~
PS:本博客知识参考资料为:《Lua程序设计第四版》
该书由Lua的创始人2018年所编著,所以大家可以放心去吸收知识
一.Lua的8种数据类型
Nil,num,boolean,function,table,userdata,thread,string
二.Pairs和ipairs的区别
Pairs迭代映射+数组,能返回表中所有的键值对但是无序
Ipairs迭代的是数组,遇到空值会停止,但是输出的是有序的
三.如何实现继承关系
1.parent._index=parent
首先父类要把自己的index字段设置为本身,
2.setmetatable(son,parent)
然后把子类和父类通过原表连接起来,寻找数据时先在自身处寻找没有就判断自身有没有原表,有原表判断有无_index值,有则
在该表中(父亲)继续找
四.常见的元方法
_index:指向一个表
_tostring:修改表的输出行为
_newIndex:修改指向的表
五.什么是闭包
闭包就是一个含有内部函数,外部函数有局部变量函数的特殊函数。内部函数可以调用外部函数的局部变量
六.类使用:和.的区别
一个类调用方法时,可以使用类名A.方法名(A,参数)
也可以使用语法糖,类名 A:方法名(参数)
七.Lua的热更新原理
Lua想要调用其他文件中的函数时,需要使用require方法
A = require(“文件名”)
此时require会把函数及其内容缓存到packet.load【modelname】
所以我们如果要改变其数值的过程叫热更新
只需要把缓存区中的内容之为空再更改就可以实现了
八.Lua协同程序
Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,
同时又与其它协同程序共享全局变量和其它大部分东西。
协同是非常强大的功能,但是用起来也很复杂。
线程与协同程序的主要区别在于,一个具有多个线程的程序可以同时运行几个线程,而协同程序却需要彼此协作的运行。
九.字符串中的#和..
#用来求字符串的长度,..用来连接字符串
1、string.upper(argument):字符串全部转为大写字母。 2、string.lower(argument):字符串全部转为小写字母。 3、string.gsub(mainString,findString,replaceString,num):
在字符串中替换,mainString为要替换的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换) 4、string.find (str, substr, [init, [end]]):
在一个指定的目标字符串中搜索指定的内容(第三个参数为索引),返回其具体位置。不存在则返回 nil。 5、string.reverse(arg):字符串反转 6、string.format(...):返回一个类似printf的格式化字符串 7、string.char(arg) 和 string.byte(arg[,int]):
char 将整型数字转成字符并连接, byte 转换字符为整数值(可以指定某个字符,默认第一个字符)。 8、string.len(arg):计算字符串长度。 9、string.rep(string, n):返回字符串string的n个拷贝 10、..:链接两个字符串
十.字符串把“abc”,换成“bcd”
local str ="abcdefgh";
b = string.gsub(str, "%abc", "ddc");
str = b;
print(str);
十一.Require和dofile的区别
Require时会缓存,dofile不会所以多次调用的话都dofile会加载多次
十二.if的使用方法
If 条件 then
语句1
Else
语句2
end
十三.如何对表中元素排序后输出?
从小到大
Table.sort(表名)
For k,v inipairs(table)
Print(k,v)
End
从大到小
Table.Sort(a)
For i=1,#a,1 do
b[i] =a[#a-i+1]
end
十四.写一个返回多值的函数
function foo2 ()
return 'a','b'
end
返回的值之间用逗号隔开
十五.写一个可变参数得函数
Function foo(…)
Retrun #{…}
End
…是可变参数的意思,上述函数等价于select(#,…)
我们还可以通过select(n,。。。)找到第n个参数
OK,以上就是我呕心沥血总结出来的引擎常见的面试题
如果对大家有帮助记得点赞呀,谢谢大家 !
|
请发表评论