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

目录

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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/578652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何实现准时的setTimeout

背景 setTimeout 是不准的。因为 setTimeout 是一个宏任务,它的指定时间指的是:进入主线程的时间。 setTimeout(callback, 进入主线程的时间)所以什么时候可以执行 callback,需要看 主线程前面还有多少任务待执行。 由此,才有了…

MySQL8安装教程

MySQL安装教程 安装环境 Windows 10 软件下载 1、官网下载 官网可以下载最新版本的MySQL 8.0 下载地址: https://dev.mysql.com/downloads/windows/installer/8.0.html 开始安装 1、下载完成后,我们就开始安装,双击安装包&#xff0c…

李宏毅机器学习2023|图像生成模型

文章目录 图像生成Autoregressive(各个击破)Non-Autoregressive(一次到位)一次到位法额外的输入——从一个高维的Normal Distribution作simple得到一个向量常用的图片生成模型VAEFlow-based Generative ModelDiffusion ModelGAN D…

计量校准方案分享No.11——定碳定硫分析仪校准方案

[测量单元:红外碳硫分析仪,是否使用220V交流电源:是,碳测量范围:0.005%-4.3%,硫测量范 围:0.0005%-0.33%] 一 依据文件 CNAS CL01-G002-2021 《测量结果的计量溯源性要求》现行有效 RB/T 034-2020 《测量设备校准周期的确定和调整方法指南》现行有效 CNAS TRL-004-2017 《 …

跨境电商独立站的6大模式,任你选择!

在几年前搭建跨境电商独立站和第三方平台基本上是同步发展起来的,但在后期的发展过程中,独立站经过不同时期的革新,形成了自己的模式。 当你准备好创建独立站的时候,首先你需要了解的就是独立站运营的模式类型,并找到最…

【Qt-Edit】

Qt编程指南 ■ QTextEdit■ QLineEdit■ QLineEdit 设置正则表达式 ■ QPlainTextEdit■ QKeySequenceEdit■ QList<QLineEdit *> edits■■ ■ QTextEdit /* 实例和对象&#xff0c;设置位置和显示大小 */ textEdit new QTextEdit(this); textEdit->setGeometry(0…

每日一题(LeetCode)----栈和队列-- 简化路径

每日一题(LeetCode)----栈和队列-- 简化路径 1.题目&#xff08;71. 简化路径&#xff09; 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 / 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的…

ISO27001认证主要的审核方向

ISO27001审核主要针对组织的信息安全管理体系&#xff08;ISMS&#xff09;进行全面的审查&#xff0c;以确保其符合ISO/IEC 27001标准的要求。审核过程通常包括以下几个方面&#xff1a; 1. 组织环境&#xff1a;审核组织的信息安全管理体系是否能够在组织内部环境以及与外部供…

熟悉DHCP面临的安全威胁与防护机制

一个网络如果要正常地运行&#xff0c;则网络中的主机&#xff08;Host&#xff09;必需要知道某些重要的网络参数&#xff0c;如IP地址、网络掩码、网关地址、DNS服务器地址、网络打印机地址等等。显然&#xff0c;在每台主机上都采用手工方式来配置这些参数是非常困难的、或是…

Springboot学习

Springboot扩展点之InitializingBean-CSDN博客

C/S医院检验LIS系统源码

一、检验科LIS系统概述&#xff1a; LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化&#xff0c;检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后&#xff0c;自动生成打印报告&#xff0c;通过网络存储在数据库中&#xff…

《微信小程序开发从入门到实战》学习六十三

6.4 交互API 使用交互API可以在小程序中显示各种弹窗或动画&#xff0c;达到交互反馈的目的。 6.4.1 提示框API 使用wx.showToast接口可显示消息提示框。接口接受Object参。属性如下&#xff1a; title&#xff08;必填&#xff09; 提示的内容 icon …

postgres数据库安装

选择所需数据库版本进行下载 下载地址&#xff1a;PostgreSQL: File Browser 我是以/data当作主目录&#xff0c;所以在/data下创建俩文件夹&#xff0c;默认目录应该是usr mkdir software mkdir module 进入目录&#xff0c;上传下载的gz安装包 cd software rz 解压缩,版本…

6-2 递归求阶乘和

本题要求实现一个计算非负整数阶乘的简单函数&#xff0c;并利用该函数求 1!2!3!...n! 的值。 函数接口定义&#xff1a; double fact( int n ); double factsum( int n ); 函数fact应返回n的阶乘&#xff0c;建议用递归实现。函数factsum应返回 1!2!...n! 的值。题目保证输…

什么是数据资产化?数据怎样成为资产?怎样进入资产负债表?

财政部发布的《企业数据资源相关会计处理暂行规定》将从2024年1月1日起开始实施&#xff0c;为企业数据资源入表提供了基本指引&#xff0c;数据资产化有望迎来爆发期。什么是数据资产化&#xff0c;怎样让数据成为资产&#xff0c;成为了众多国有企业、上市公司关心的问题。 —…

JavaScript 中的双等号(==)和三等号(===)有何不同?何时使用它们?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;JavaScript篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:JavaScript-等号区别 目录 和 区别&#xff0c;分别在什么情况使用 一、等于操作符…

交换机端口镜像技术原理与配置

在网络维护的过程中会遇到需要对报文进行获取和分析的情况&#xff0c;比如怀疑有攻击报文&#xff0c;此时需要在不影响报文转发的情况下&#xff0c;对报文进行获取和分析。镜像技术可以在不影响报文正常处理流程的情况下&#xff0c;将镜像端口的报文复制一份到观察端口&…

掌握ElasticSearch(一):Elasticsearch安装与配置、Kibana安装

文章目录 〇、简介1.Elasticsearch简介2.典型业务场景3.数据采集工具4.名词解释 一、安装1.使用docker(1)创建虚拟网络(2)Elasticsearch安装步骤 2.使用压缩包 二、配置1.目录介绍2.配置文件介绍3.elasticsearch.yml节点配置4.jvm.options堆配置 二、可视化工具Kibana1.介绍2.安…