初级游戏客户端社招面试问题总结

目录

c++

c#

lua

Unity

NGUI

AssetBundles资源管理

Unity性能优化

图形学

网络

场景题

计组&操作系统

其他知识

算法题


c++

虚函数的原理

智能指针的原理

如何解决循环引用

智能指针的源码

c++,使用char实现自定义的一个string

可以通过new去申请一块10KB的内存空间吗

static意味着这些变量和函数只在本文件可见,其他文件是看不到也无法使用的,但是如果我想在其他文件也用这个static变量该怎么办?extern关键字呢

static函数的原理

哪些函数可以通过::去调用

C++几个STL容器的底层原理

为什么map和set的底层是红黑树不是平衡二叉树?

二叉搜索树(Binary Search Tree)是一种特殊的二叉树,其中每个节点的左子树都小于该节点的值,右子树都大于该节点的值。

这种特殊的组织方式使得二叉搜索树可以快速地进行查找、插入、删除等操作,时间复杂度为 O(log n),其中 n 为节点数。但是,如果二叉搜索树的节点顺序不平衡,就会导致树的高度增加,从而影响其性能。

为了解决这个问题,平衡二叉树(Balanced Binary Tree)被引入。

平衡二叉树的左右子树的高度差不会超过1,但是为了保持这种平衡,在进行插入或删除的时候就会有比较多的操作需要处理。(虽然平衡二叉树查找的效率会略高一点,但是插入和删除的时间复杂度就不如红黑树了)

LRU算法实现,用C++,大致讲下实现的思路

模版和重载实现多态的原理是什么?

有这么一个场景,使用C++,拿到一个第三方的库,然后遇到一个bug,需要去查这个bug找线索,在分析线索的时候发现,通过库生成的某个对象,大概是比较简单的对象,有一个私有的成员变量,如果说知道这个私有成员变量的值的话,就对查bug有很大的帮助,要怎么找到这个私有变量的值,能不能通过加一条日志

C++的cpp文件,一直到可运行文件,从源代码写完到可执行的文件,会经历什么阶段

生成了可执行文件,到运行这个文件,然后在界面弹出一个比如helloworld的输出,还会经历什么阶段

可执行文件是怎么被执行的

对于一个红黑树来说,它需要满足以下 5 条性质:

  1. 每个节点要么是红色,要么是黑色;
  2. 根节点是黑色的;
  3. 每个叶子节点(即 NULL 节点)是黑色的;
  4. 如果一个节点是红色的,则它的两个子节点都是黑色的;
  5. 对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。

通过这些性质的限制,红黑树可以保证从根节点到任意节点的最长简单路径不超过最短简单路径的两倍,从而保证了树的平衡性。

与 AVL 树相比,红黑树更加适用于插入和删除操作频繁的场景,因为红黑树的旋转操作更少,不需要像 AVL 树那样频繁地进行旋转操作和更新节点的平衡因子。但是,红黑树的查找操作相对 AVL 树来说略慢一些。

总之,红黑树和平衡二叉树都是基于二叉搜索树实现的数据结构,但是红黑树通过满足 5 条特定的节点颜色规则来保持平衡性,比其他平衡二叉树更加灵活,而且适用于插入和删除操作比较频繁的场景。

c#

c#里面的list是链表还是数组,如果满了的话怎么进行扩容

c#垃圾回收的机制

c# 值类型和引用类型的区别

值类型都是存储在栈上的吗

c#的装箱拆箱

把结构体对象转成接口对象会装箱吗

c#中,

100个字符串拼接然后可能会产生GC问题,要怎么解决这个问题(使用stringBuilder)

lua

pairs和ipairs的区别

有看过lua的源码吗

unity中为什么使用lua去进行开发

lua语言的特点是什么

lua语言怎么实现继承的,具体游戏源码底层是怎么实现的?

lua的基层是怎么实现的,怎么实现继承的,

如何实现lua的深拷贝

lua常用的元表元方法

lua的弱表

lua的pairs和ipairs

lua怎么进行内存管理

lua的table保存数据 保存成文本,里面有很多字段,把这些数据序列化成文本,要怎么做,上面这个序列化的方式有什么隐患吗,(可能会出现循环引用)

那这种循环引用怎么解决(使用递归?)

递归过程中,某个key已经标记过了,那这个key后面要存什么呢,就是你存储数据的时候,是按照一个key一个value去存储的,这个时候怎么办   (回答跳过key) 然后追问(那你跳过了这个key,在还原数据的时候怎么办呢)

lua 字符串和数字拼接怎么操作(只知道个..运算符)

string.format函数有用过吗

table里的元素通过什么查找

lua里table的底层原理相关,(lua的表在c语言中的定义 原理)

lua里的table由什么构成

table如果在存储新的数据,冲突是怎么解决的

table的定义中有哪些字段

获取table的长度要怎么获取  #运算符的原理是什么

使用#有什么注意的地方,如果出现nill运算符,长度会怎么计算

__tostring的元方法是干嘛的

lua通过修改__newIndex实现只读

-- 定义深拷贝函数
function deepCopy(original)
    -- 使用一个字典来跟踪已经复制的对象,以处理循环引用
    local copyCache = {}

    -- 内部递归函数,用于处理深拷贝的逻辑
    local function recursiveCopy(orig)
        if type(orig) ~= 'table' then
            -- 如果不是表,就返回原始值(基本类型可以直接复制)
            return orig
        elseif copyCache[orig] then
            -- 如果这个表已经被复制过了,返回它的复制版本,防止循环引用
            return copyCache[orig]
        else
            -- 如果是一个表,并且没有复制过,创建一个新表作为副本
            local newTable = {}
            -- 在缓存中存储这个副本,关联原表与副本表
            copyCache[orig] = newTable
            -- 递归复制原表中的所有键值对
            for key, value in pairs(orig) do
                -- 复制键和值,并在新表中设置
                newTable[recursiveCopy(key)] = recursiveCopy(value)
            end
            -- 复制原表的元表到新表(如果有的话)
            return setmetatable(newTable, recursiveCopy(getmetatable(orig)))
        end
    end

    -- 开始递归复制过程
    return recursiveCopy(original)
end

-- 使用示例
local original = {a = 1, b = {c = 2}}
local copy = deepCopy(original)
print(original.b.c) -- 输出 2
print(copy.b.c)    -- 输出 2,但是 copy.b 不是 original.b

lua里的userdata是什么

lua的底层是怎么实现的

lua和c#互相调用的底层原理是什么

Unity

Unity是如何加载资源的

使用unity,目标平台是微信小游戏,这样的打包的过程具体是怎么实现的?

有限状态机有哪些优缺点,如何优化那些缺点

Unity的垃圾回收

Unity协程的底层原理

协程和线程的区别

unity3d里  让玩家从一个点移动到另外一个点  具体要怎么实现

unity中fixupdated为什么可以执行固定次数

游戏里卡了一秒那update会执行多少次,fixupdate呢

unity中fixupdated为什么可以执行固定次数

屏幕空间有scrollview,有一个很长的文本,视图没办法显示全,怎么处理(使用遮罩)

你是如何进行碰撞检测的?

商业游戏中的碰撞检测是怎么做的?(事实上使用碰撞检测会消耗比较多的性能,事实上都是用位置去进行计算)

有没有做过地图/技能编辑器的开发

除了A*算法还了解过其他哪些寻路算法吗

(问了下前辈,Unity有哪些复杂系统的开发:看上去简单但实际有各种问题的新手引导(?

(横板图鉴切换时图片变大变小,涉及一些缩放效果,公会系统,好友系统,(这些其实就是逻辑复杂 或者 数据交互多 比较复杂)

红点管理    UI管理 (点击返回界面会触发的一些UI管理) 

导航寻路算法)

unity中的影响UI元素显示的层级有哪些因素
unity的script object是怎么序列化的

存档功能中,为什么存档要把scriptObject转成json 不能直接用scriptObject

协程是同步还是异步

一般写异步程序的时候需要做一个数据同步,比如加锁,在多线程里会这样,为什么协程不需要呢

UI中,返回按钮的相关逻辑如何进行开发

知道行为树的实现原理吗

ScriptObject转成json文件进行存储,假如对存档需要进行一个加密,这个过程中进行加密的操作要怎么做,

读取存档的时候 有没有一些处理异常的方法

有哪些加密算法

使用AES加密,那密钥放在哪里(放在本地不还是可能会被破解)

unity有哪些资源的路径

streamingAsset是做什么的

streamingAsset 在打包的时候会不会压缩

unity渲染物体的顺序

相机的深度

camera Depth

摄像机只想看某些层次的gameobject 怎么做

render queue

render queue里面的参数2500是什么?

unity里粒子层级怎么调整

如果粒子系统想跟随父物体做旋转怎么设置

行为树有没有自己去做一些自定义的节点

UI框架的要实现一个高效的开发   要保证不同人之间的UI不互相影响  UI框架的一个高效性 
如果渲染两个图片 分两次渲染  和分一次渲染 的具体过程 顶点变换 改变他们的UV坐标 通过具体的过程去思考  合批的额外的性能是如何节省的   还有比如UI为什么要进行动静分离 

不要只看到表象 还要看到一些底层的原理  这样才能更加自然的理解

UI里 打包图集的规范,哪些图放在哪个图集里,怎么规划

一个聊天内容,abcde和abcdefg在对话框的UI组件的宽度要怎么去计算

UI管理中,使用深度层级管理,或者使用栈去管理UI,里面具体的一些细节,以及这些UI管理方案有什么好和不好的地方

事件系统是怎么实现的

延迟渲染和前向渲染的区别和应用场景,现在的手游用哪个比较合适

延迟渲染怎么处理后处理的效果,比如bloom和抗锯齿

unity里内置的渲染管线有了解吗

unity里面想渲染一个透明物体和不透明物体,渲染顺序是怎么样的

在UI里 mask和mask 2d的区别是什么

在UI上面 mask和mask2d都可以用吗

纹理压缩为什么可以减少内存占用

NGUI

有没有看过NGUI的源码

unity的NGUI是怎么进行draw call的

NGUI的合批,怎么进行draw call,

AssetBundles资源管理

AssetBundles

Unity AssetBundles按需加载和格式有关系,具体有哪些格式

贴图压缩格式

ASTC的压缩是怎么做的,

为什么是可扩展的

AssetBundles当资源不用的时候需要对资源进行卸载,用unload这个接口,Unload(true)和false代表什么

一个图集在assetBundles,然后某个东西在使用这个图集,这时候使用Unload(True)会怎么样

怎么确定AB包的资源不用了,什么时候进行卸载,使用什么算法

UI方面的资源应该怎么打包成AB包,打包完后应该怎么加载

加载AB包,有时候会有一个依赖关系,如何处理这种复杂的依赖关系,采取什么样的策略,防止死循环

Unity性能优化

使用对象池时,如果初始确定池子需要多少数量?

使用虚拟滚动实现列表性能优化时,有没有有实际的工具去进行性能测试,对比性能优化了多少?

h5游戏的会存在一个性能问题,如何进行一个性能优化

有没有用过哪些性能优化的工具

为什么打包成一个图集就能进行合批处理

合批要注意哪些情况,哪些情况下是不能合批的?

合批,一个批次指的是什么

垃圾回收中,标记清除和引用计数这两种垃圾回收各有什么优缺点

为什么减少draw call就能优化性能呢

图形学

顶点着色器写光照的话可以吗?

什么情况需要在顶点着色器上书写光照?

顶点着色器和片元着色器的工作是什么?

深度缓存有什么作用

多级渐进纹理mipmap是什么?有什么优缺点?

几何中,两个向量相减是什么意思,(可以用这个计算两个点之间的方向)

单位向量点乘的结果

向量叉乘的意义

AABB包围盒

光栅化的算法是怎么实现的

一个丰富的的游戏场景下,使用OpenGl进行渲染,有没有什么性能优化的,比如mipmap,还有什么

某些物体离我们特别远的情况下,只剩下像素点,这时候怎么渲染

如何判断两个矩形是否发生碰撞检测

图形学矩阵变换的时候为什么用4x4的矩阵而不是3x3

三维空间中怎么定义一条直线

判断一个点是否在多边形内部

shadowmap可能会产生一些锯齿效果,怎么处理

位置信息在进入完顶点着色器,进入片元着色器之前,在什么空间

NDC

对象池 用于一些逻辑或者怪物 特效的管理上什么的?

图形学,顶点和纹理的叠加?透明通道的渲染 ?

网络

帧同步和状态同步

比如点击一个邮箱系统,然后出现了卡顿,服务器回包比较慢,这个时候应该怎么处理?要屏蔽其他模块的点击吗?如果要屏蔽的话要怎么处理?

客户端服务器的连接的心跳计时器

socket

protobuffer(还有json和xml  用protobuffer是因为效率高)

客户端和服务器的发的包是什么样的数据格式(?

协议头是什么样的

怪物最后一刀是谁砍的,这种联机要怎么做

领奖的时候网络断开了,会怎么处理

proto buff的协议头

(有没有看过源码里的协议的数据头)

长连接和短连接 

回合制战斗的手游,应该用短连接还是长连接

帧同步的计算是在客户端,怎么保证在各个客户端,计算出来的结果都是一致的


 

场景题

你做过哪些功能?说几个比较大的功能,做这些花了多久,现在让你做需要多久

自己做过的功能中,有哪些比较困难的模块,自己是怎么克服的

有没有抽象过一些功能和组件

如果让你开发一个具体的系统,如背包/邮箱系统,你会如何规划,开发?

unity3d里  人物的一些流畅的动画,骨骼动画,比如说拔剑,挥剑,收剑,这些是怎么实现的,怎么样实现其流畅的效果,假如玩家的属性改变,比如速度变快了,那这些动画要做怎么样的处理?

现在贪吃蛇的游戏里有个地图,有个宝箱,这条蛇围住宝箱后可以打开宝箱,这个算法应该怎么实现

如果说宝箱被围住了,要怎么判定是哪条蛇围住了它呢?假如有很多条蛇的情况

假如现在地图很大,格子很多,dfs遍历的次数会很大,那刚才的那个问题“现在贪吃蛇的游戏里有个地图,有个宝箱,这条蛇围住宝箱后可以打开宝箱,这个算法应该怎么实现”,这种情况下有什么优化的办法吗

A界面可以跳转到B界面,B界面可以跳转到C界面,然后C界面又可以跳转回A界面,那这个过程要怎么处理,使用什么样的数据结构(压栈? 压界面还是压参数  

你现在平常是怎么自学的?

到第二天0点的时候,签到界面应该怎么刷新

开发月签到领奖的客户端功能,客户端和服务器会有哪些请求交互

假设要开发一款贪吃蛇的游戏,像素组成的屏幕,蛇吃到食物增长,撞到边缘就死亡,在没有额外输入的情况下就会沿着当前方向前进,从程序上要怎么实现,实现什么类,实现什么样的功能

蛇的移动函数应该要如何实现

如何判断蛇是否吃到食物

假如食物的数量特别多,那这种方式好嘛,还是碰撞检测的方式好呢

如果食物数量比较多,如何判断是否吃到了食物

策划提出了一个需求,希望蛇能把一个圆内所有的食物全部吃掉,然后地图用二维的网格去存储,食物的面积很小,  如何实现把圆内的食物取出来,从代码角度上,这个算法的时间复杂度是多少,有没有什么办法可以优化这个时间复杂度

假如现在不是要求一个圆,而是多边形的形状,是凸多边形,在这个情况下,如何确定这个凸多边形覆盖了哪些区域(面试官给出的解决方案是类光栅化的方法)

出现全覆盖类型的UI时,你说代码里会有将其他UI移动到屏幕外或者设置为不可见,这样做的目的是什么

渲染阴影是开销很大的过程,怎么优化

比如说开发活动界面,它有明显的时效性,只在某些节假日开启,对于这种情况,活动界面的底层是怎么设置的,怎么处理具有时效性的界面,底层的热更是怎么处理的

版本更新的时候会带来一个问题,如果我们希望做不停机更新,那版本更新后新的活动,我们怎么让已经上线的玩家去看到这些活动,或者说这种情况怎么处理

背包里面的数据可能非常多,一次加载的时候可能比较卡,怎么处理

现在有一个这样的场景,有个ARPG的游戏,场景中有很多的敌人,使用对象池,让你去规划资源管理,资源该怎么拆,分别什么缓存什么东西

计组&操作系统

线程同步的几种方式

线程和进程的区别

线程和进程间的通信

其他知识

有了解哪些先进的AI技术吗

GPT的原理有了解过吗

MVVM设计模式
MVC模式,及其优缺点

如果一个字典里面需要存储三个数字(100以内的3个数字)这三个数字是作为key存储,哈希函数要怎么设计

平衡二叉树和二叉搜索有什么区别

哈希函数的设计原则

如果发生了冲突,放在桶里,桶里面要怎么处理

数据量很大的情况下,怎么尽量避免冲突的情况

扩展哈希表要怎么扩展呢

你自己csdn上的文章是你拷贝的吗还是怎么样的(自己搜集网上资料,以自己的思路归纳总结的,网上有些文章写的)

算法题

给定一个可能包含重复元素的整数数组vector nums,这回该数所有可能的子集vector subSet (用递归,语言使用C++) 实例: 输入: [1,2,2]输出: [ [2], [1], [1,2,2], [2,2] [1,2], ],请写出完整的包含main函数举实例的代码

给定一个链表,删除链表的倒数第 n 个节点(其中N是安全的),并且返回链表的头结点 示例:给定一个链表: 1->2->3->4->5,和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5 (请只使用一次遍历) struct ListNode{//链表节点定义 int val; struct ListNode next;}; //函数定义 struct ListNode removeNthFromEnd(struct ListNode* head, int n);

有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。比如f(13)=6,现在f(1)=1,问有哪些n能满足f(n)=n?
例如:f(13)=6, 因为1,2,3,4,5,6,7,8,9,10,11,12,13.数数1的个数,正好是6.

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值