【游戏客户端面试题干货】--2020年最新游戏客户端面试干货(lua篇)

  【游戏客户端面试题干货】--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,以上就是我呕心沥血总结出来的引擎常见的面试题

如果对大家有帮助记得点赞呀,谢谢大家 !

 

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值