首页 > 其他分享 >2023-12月面经

2023-12月面经

时间:2023-12-05 23:57:21浏览次数:39  
标签:12 C# 面经 lua 对象 遍历 GC 内存 2023

Funplus-宝可梦大世界项目

项目经历

有点硬核,对着简历一条条问的,每条都要问个细节。

状态机与行为树的对比,优缺点之类的

check

lua与C#的交互(tolua怎么调用C#,以及C#怎么调用lua函数)

核心就是lua和C#之间有个虚拟栈,lua调用C#就把参数压入栈,然后C#从栈里取值,运行完函数逻辑后,如果有返回值就把返回值压入栈供lua取用;C#调用lua也是同理。

lua的GC流程

Mark and Sweep算法。

  • mark阶段,从根集遍历可达性,对于可达的对象标记为灰色;将灰色集合对象遍历一遍,把有引用的且未被标记的对象加入灰色集合里,已经遍历过的灰色对象标记为黑色(表示本次gc不回收)。
  • sweep阶段,从对象全集里(一个链表),遍历未标记颜色(白色)的对象并释放。特别注意的是,在gc阶段刚创建的对象会被标记为另一个白色,避免这个对象刚创建就被销毁。

追问:有啥针对lua GC的优化吗?

lua GC有个问题就是内存碎片,解决方案是用对象池,提前申请连续的内存,避免频繁GC带来的碎片化空间。

lua的元表是什么?有什么好处吗?或者说有什么应用?

元表定义了元方法,当lua table触发特殊机制的时候会访问元表的元方法。

常见元方法:__index,__newindex

利用元表机制,可以实现面向对象的继承、只读table之类的。

网易互娱-燕云十六声-使用Messiah引擎(C++ & Python)

一面

感觉一面的面试官都比较新手,不是很会面试,而且还是两个人上的。。。面试体验挺差的,大部分都在问八股文,而且由于双方技术栈没对上,所以没啥可问的空间。

哦对了,还有一点让我觉得体验很差的地方是,人家面试我的时候问啥我就答啥,连我薪资都问去了,结果到我反问环节的时候我问啥人家都不说。。。我就问了项目的进度,大概还要开发多久,战斗组人力配比啥的,都不回答。。让我问后头的面试官。。。这感觉太敷衍了。

lua的GC

老生常谈了,过

C#的Dictionary结构是啥?

没了解过。。不过倒是知道c++的unordered_map

想问多线程的问题

没做过,不了解,别问了

互斥锁、资源锁的差异

不会。。

做过内存池吧?一个多对象的内存池,如果很大,该怎么办?

人家好像是想问这个内存池的释放策略,不过我一开始答了利用操作系统的虚拟内存管理手段,让操作系统帮助我们载入使用中的内存指针。后面被拨回正规后,答了利用LRU算法来管理,将最不常使用的池子释放掉。

追问:LRU的实现机制用的是什么数据结构?

一个哈希表+一个链表

C++相关,比如智能指针

不会,虽然曾经准备校招的时候确实背过,不过怕被人家把底裤问穿,还是说了不会,hahaha

Navmesh的烘焙流程?

 

常见的寻路算法

floyd、Dijkstra、A*

A*的结果是不是最优解(最短路)?

其实只要启发函数的评估够精确,那A*的结果确实是最优解。

Dijstra和A*的区别?

额,面试的时候没答好,后续问了大佬,需要重新去思考一下这部分内容了。主要来说,有关算法的区别的问题,一律先从时间复杂度和空间复杂度上作比较。

有用过啥设计模式吗?

  • 单例模式
  • 工厂模式

算法题:反转链表

LeetCode 206

二面

相较一面来说,二面的面试官更专业,感觉很锐利,一下就能看透本质。

项目经历

项目里对lua底层做过啥优化?

额。。我一个大头兵,我哪知道,这种事轮不到我来做吧。。

后续问了一下,我们的lua直读方案就是一种优化。待补充。

Lua的闭包与其他语言的闭包有啥不同吗?

Lua的坑点?

说了说for循环这个东西,在lua里是一开始就确认好遍历次数的,不像别的语言,每次执行的时候计算一次

还有and or代替三元运算符也是有问题的,常见的认知是:a and b or c,当a为true,返回b;反之返回c。

local openFunc = true
local temp = 0
local other = 10
local state = openFunc and (temp and temp == 1) or other
print("state:",state)

不过上述的返回值却是other,本质上因为 b == false,所以返回了other。

算法题:最长公共子串

LeetCode 1143 最长公共子序列、718. 最长重复子数组。

标签:12,C#,面经,lua,对象,遍历,GC,内存,2023
From: https://www.cnblogs.com/aisingioro/p/17878631.html

相关文章

  • 12.5每日总结9
    查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。importjava.io.IOException;importjava.io.InputStream;importjava.net.URL;importorg.apache.hadoop.fs.*;importorg.apach......
  • 12.5每日总结8
    编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。importjava.io.BufferedReader;importjava.io.IOException;importjav......
  • FX2023全新版-Go开发工程师-从基础到项目实战再到重构zxit666+尾缀
    FX2023全新版-Go开发工程师-从基础到项目实战再到重构zxit666+尾缀Go是一种高效、牢靠和简约的编程言语,它是由Google开发的。下面是运用Go言语编写的示例代码,用于完成一个简单的Web效劳器:这段代码创立了一个简单的Web效劳器,它将返回"Hello,World!"到一切恳求的客户端。首先,我们导......
  • 12.5每日总结
    文件创建以及覆盖importjava.io.FileInputStream;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclassCopyFr......
  • 12.5每日总结3
    将HDFS中指定文件的内容输出到终端中;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;importorg.apache.hadoop.fs.FileSystem;importjava.io.*;publicclassCat{/***读取文件内容*/publicstaticvoidcat(Configuration......
  • 12.5每日总结2
    从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;importorg.apache.hadoop.fs.FileSystem;importjava.io.*;publicclassCopyToLocal{/***下载文件......
  • 12.5每日总结5
     给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;importorg.apache.hadoop.fs.FileSystem;importjava.......
  • 12.5每日总结4
     显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;importorg.apache.hadoop.fs.FileSystem;importjava.io.*;importjava.text.SimpleDateFormat;publicclassList{/***......
  • 12.5每日总结6
    提供一个HDFS内的文件的路径,对该文件进行创建和删除操作。如果文件所在目录不存在,则自动创建目录;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;importjava.io.*;publicclassRemoveOrMake{/***判断路径是否存在*/publics......
  • 12.5每日总结7
    向HDFS中指定的文件追加内容,由用户指定内容追加到原有文件的开头或结尾;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.*;importorg.apache.hadoop.fs.FileSystem;importjava.io.*;publicclassAppendToFile{/***判断路径是否存在......