梦加网络
简单描述C#中的闭包?以及写一段闭包代码Unity中几种常用的资源加载的方式以及应用场景
必凡娱乐面试
一面1.7层网络模型从上到下分层依此为:应用层,会话层,表示层,传输层,网络层,数据链路层,物理层。 TCP/IP四层协议:应用层,传输层,数据链路层,物理层 常见教学的五层模型:应用层,传输层,网络层,数据链路层,物理层 2.每层的常见协议应用层:HTTP、HTTPS、SMTP、FTP 传输层:TCP、UDP 网络层:IP、ICMP 数据链路层:以太网协议(Ethernet) 3.TCP协议的建立连接和断开连接三次握手 客户端发送 SYN(请求建立连接) 服务端回复 SYN + ACK(同意连接) 客户端发送 ACK(确认) 四次挥手: 客户端发送 FIN(我要断开) 服务端回复 ACK 服务端发送 FIN 客户端回复 ACK 👉 连接彻底关闭 4.TCP和UDP的主要区别有那些TCP 面向连接,UDP 无连接 TCP 可靠,UDP 不保证可靠 TCP 有序,UDP 无序 TCP 速度慢但稳定,UDP 快但可能丢包 5.TCP里面有哪些机制来保证他的连接是可靠的TCP 通过以下机制保证可靠性: 校验和:检测数据是否损坏 序列号 + ACK:保证数据有序且不...
微派冬令营笔试题
算法题如下: 最小覆盖子串 我认为难以理解的部分为 12345678910111213//这个部分是在s中找到了包含所有t字符的一个子串,这个子串可能不是最小的,后续操作就是把这个变为最小//检测当前窗口是否已经包含了t中的所有字符(包括数量) while(Right < s.Length){ char c = s[Right]; Right++; if(need.ContainsKey(c)){ windows[c] = windows.ContainsKey(c):windows[c] + 1 : 1;//记录s中字符串的出现次数 if(windows[c] == need[c]) Vaild++; } } 假设: s = "ADOBECODE"(源字符串) t = "ABC"(需要包含的字符)...
多乐游戏
多乐游戏一面(技术面)1.自我介绍2.Lua热更新Lua热更新一般是结合AssetBundle来实现资源和代码的热更新。 首先是代码层面,会把需要热更的逻辑用Lua编写,再把lua脚本打包成AB包,游戏启动时先加载基础的C#核心框架,然后通过Lua虚拟机加载Lua代码;如果后续有代码更新,就从服务器拉取新的LuaAB包,替换本地的旧包,重启游戏或者重载Lua虚拟机就能生效,不用重新安装整个游戏。 资源热更新也就是类似的,把UI贴图,场景资源这些打成AB包,标记好版本号,客户端对比服务器版本,下载更新后的AB包替换本地资源,就能实现资源的热替换。 3.AB包和Lua脚本一般放在那里1.在本地测试的阶段一般放在Unity项目的StreamingAssets目录下,这个目录的内容会被打进安装包,游戏刚启动就可以从这里读取初始的Lua代码和AB包。 2.正式上线后更新的LuaAB包会下载到PersistentDataPath目录,这个是游戏在设备上的可读写目录,重启游戏会优先加载这个目录的新包,会覆盖旧逻辑 4.如何比较两个包的差异,来从资源服务器下载呢?通过比较资源包的版本号也就是MD...
哈乐沃德面试
在你的类银河恶魔城中是如何控制人物状态的切换的?在我的这个项目中,我使用的是有限状态机来实现人物状态的切换的,使用PlayerStateMachine类作为中间类,在该类初始化人物的初始状态,同时提供了一个ChangeState类作为状态切换的方法。同时使用PlayerState作为人物状态的基类,当检测到人物状态需要改变时,调用相应的ChangeState方法来修改状态 在你的项目中,你的人物的速度是线性增加的还是直接为设置的速度?如果实现人物速度的逐渐增加?物速度是直接使用设置的固定值(如moveSpeed、dashSpeed等)。例如PlayerMoveState中通过player.SetVelocity(xInput * player.moveSpeed, rb.velocity.y)直接应用设定的速度。我们可以使用自带的函数方法 1234567891011121314// 在Player类中添加加速相关变量public float acceleration = 2f; // 加速度private float currentSpeed;// 在移动状态的Update中使用...
冰川网络客户端笔试
1.2.3.4.
冰川网络客户端实习笔试
冰川网络ref,out的区别以及各自的应用场景?ref 关键字 传递前必须初始化:调用方法前,实参必须被赋值(初始化),否则编译报错。 作用:既可以将外部变量的值传入方法,也允许方法修改该变量的值并反馈给调用者。 本质:”双向传递”—— 输入 + 输出。 out 关键字 传递前可以不初始化:调用方法前,实参可以未赋值,方法内部必须为其赋值(否则编译报错)。 作用:主要用于让方法返回多个值(除了方法的返回值外,通过 out 参数输出额外结果)。 本质:”单向输出”—— 仅输出(方法必须给 out 参数赋值)。 一款游戏再游玩的过程中内存消耗大,帧率低,定位原因以及怎么解决(C#,xlua的游戏)?问题定位方法 内存消耗大: 用 Unity Profiler 区分托管内存(C# 对象)和非托管内存(资源),关注 GC 分配和内存泄漏(如场景切换后内存未下降)。 xLua 侧检查闭包、全局变量泄漏,用 xLua Profiler 分析 table 创建释放情况。 帧率低: 用 Unity Profiler 定位 CPU/GPU 瓶颈(如 Main Thread 耗时、...
八股文
C#相关1.值类型和引用类型值类型:bool,float,int,double,struct,enum 引用类型:string ,class,object,delegate,array,interface 区别: 值类型存储再栈上,引用类型存储在堆上。相应的栈上的值类型存储快,堆上的引用类型存储满 值类型存储的为真实的值也就是实际数据,引用类型指向的是内存堆中的指针和引用 值类型在使用后自动释放,引用类型使用GC来释放 值类型的继承是System.ValueType ,System.ValueType继承于System.Object,引用类型继承System.Object 值类型在栈中存储的是直接的值,引用类型数据本身实在堆中,栈中存放的是一个引用的地址 底层: 引用类型在实例化时,先在栈内开辟空间,用于存储堆中对象的地址,然后在堆内开辟空间,存储引用对象。 而值类型直接在栈中开辟空间存储对象。值类型也有引用地址,但都在栈内的同一空间。 在参数对象进入方法体内,实则是在栈中开辟了新的临时空间。(也就是参数对象的副本)栈内值类型的修改,由于栈中地址不同,所以值类型不...