Unity游戏开发客户端C#基础

C#面试经历分享(好好看,好好学) 一、面试感悟: 理论问的我一愣一愣的,好多东西会用但是不会底层原理,很尴尬。。。还有的甚至没听过的东西,就哑巴吃黄连了,很绝望。 二、C#面试问题部分总结(我还记得的): 1、int类型占多少字节?(面试的时候没说出来) 4个字节。 2、ActionResult有哪些类型?(面试的时候能够说出7/8个) 总共有12种返回类型,ActionResult是基类,还有ViewResult,PartialViewResult,EmptyResult,JsonResult,FileContentResult,Cont 阅读详情

前言:记录了总6w字的知识点,文章中的知识点若想深入了解,可以点击链接学习。由于文本太多,按类型分开。这一篇是C# 常问问题总结,有帮助的可以收藏。


1.引用类型,值类型

       1.1 介绍

        值类型:int,bool,float,char,struct,enum。

        引用类型:string,object,delegate,interface,class,array。

     1.2 区别

  1. 值类型存储在栈中,引用类型存储在堆中。
  2. 值类型存储快,引用类型存储慢。
  3. 值类型表示实际数据,引用类型表示指向在内存堆中的指针和引用。
  4. 值类型在栈中可以自动释放,引用类型在堆中需要GC来释放
  5. 值类型继承与 System.ValueType,(System.ValueType继承于System.Object),引用类型继承于System.Object。
  6. 值类型在栈中存储的是直接的值,引用类型数据本身实在堆中,栈中存放的是一个引用的地址。

        1.3 底层  

        1.引用类型在实例化时,先在栈内开辟空间,用于存储堆中对象的地址,然后在堆内开辟空间,存储引用对象。

        2.而值类型直接在栈中开辟空间存储对象。值类型也有引用地址,但都在栈内的同一空间。

        3.在参数对象进入方法体内,实则是在栈中开辟了新的临时空间。(也就是参数对象的副本)栈内值类型的修改,由于栈中地址不同,所以值类型不会影响到主体。而引用类型的存储数据是一个堆内的地址,所以对于引用类型的修改是直接修改堆内的对象。

        4.值类型对象中的引用类型在堆中(struct中定义的string等)

        引用类型对象中的值类型也在堆中(class中的int等)

        详细请看:

C# “值类型“和“引用类型“在内存的分配_生产队的驴.的博客-CSDN博客_值类型和引用类型如何分配内存

2.String引用类型的特殊性

        2.1 介绍

        string的修改,实则是new 一个新的string,在堆内新开辟空间。而此时栈内的副本也会指向堆内新对象。因此string改变。

        是新建的对象,和本体没有联系。

        2.2 解决

        当频繁堆一个字符串进行修改时,利用StringBuilder代替String

        2.3 StringBuilder的底层实现?

        StringBuilder 是支持扩容的(char类型)数组,在每次空间不足时,会开辟原先数组大小的容量,类似于链表,新建的数组指向上一个已经用完的数组,本身不会产生gc。

具体可以查阅以下知识点:

String/StringBuilder/ToString()底层代码解析( JAVA / C# )_tostring()方法的实现?底层原理_元气小羊.的博客-CSDN博客本章笔记直接记录的string、StringBuilder内存存储原理,并没有大幅度、重点的去介绍堆、栈、常量池的相关底层实现原理。所以,为了帮助大家更好的去理解,可以在阅读本文章前去了解堆、栈、常量池之间的基础关系,对以下的阅读有很大的帮助。ToString底层代码解析(C#/JAVA)——分别浅谈 C# / JAVA 底层实现代码与区别...https://blog.csdn.net/weixin_46484674/article/details/124951029https://blog.csdn.net/weixin_46484674/article/details/124951029https://blog.csdn.net/weixin_46484674/article/details/124951029
浅谈C#字符串构建利器StringBuilder_溪源More的博客-CSDN博客前言在日常的开发中StringBuilder大家肯定都有用过,甚至用的很多。毕竟大家都知道一个不成文的规范,当需要高频的大量的构建字符串的时候StringBuilder的性能是要高...https://blog.csdn.net/farway000/article/details/123267500https://blog.csdn.net/farway000/article/details/123267500https://blog.csdn.net/farway000/article/details/123267500

        2.4 扩展:

        StringBuffer是线程安全,一般用于多线程(C#端不存在)

        StringBuilder是非线程安全,所以性能略好,一般用于单线程

        2.5 用StringBuilder拼接字符串就一定比string要好吗?

        答:极少拼接(或者短字符串)的情况下 String甚至优于StringBuilder,因为String是公用API,通用性好,用途广泛,读取性能高,占用内存较小,Stringbuilder初始化花费时间更大。

        2.6 字符串池

        字符串池有什么用,原理是什么?

        字符串池是CLR一种针对于反复修改字符串对象的优化措施,作用能够一定程度减少内存消耗。原理是内部开辟容器通过键值对的形式注册字符串对象,键是字符串对象的内容,值是字符串在托管堆上的引用。这样当新创建的时候,会去检查,如果不存在就在这个容器中开辟空间存放字符串。

3. GC

        3.1 概念

  1. unity内部有两个内存管理池:堆内存和栈内存。栈内存(stack)主要用来存储较小的和短暂的数据,堆内存(heap)主要用来存储较大的和存储时间较长的数据。unity中的变量只会在堆栈或者堆内存上进行内存分配,变量要么存储在栈内存上,要么处于堆内存上。
  2. 只要变量处于激活状态,则其占用的内存会被标记为使用状态,则该部分的内存处于被分配的状态。
  3. 一旦变量不再激活,则其所占用的内存不再需要,该部分内存可以被回收到内存池中被再次使用,这样的操作就是内存回收。处于栈上的内存回收及其快速,处于堆上的内存并不是及时回收的,此时其对应的内存依然会被标记为使用状态。不再使用的内存只会在GC的时候才会被回收。
  4. 垃圾回收主要是指堆上的内存分配和回收,unity中会定时对堆内存进行GC操作。

        3.2 GC算法介绍<

Unity基础学习之C#学习(一) C#基础部分1. 开发环境搭建1.1 Visual Studio1.2 Unity1.3 MSDN2. 进制2.1 进制概念2.2 进制转换3. 原码、反码、补码3.1 正负数三码的计算方式3.2 使用三码的原因4. C#开发语言介绍4.1 用VS创建一个项目4.2 第一个C#文件4.3 注释5. 数据类型5.1 C#支持的基础数据类型6. 常量和变量6.1 常量6.2 变量6.3 常量与变量之间的区别6.4 常量及变量命名规则和规范7. 运算符 1. 开发环境搭建 1.1 Visual Studio 下 阅读详情

相关推荐

Unity游戏开发客户端Unity基础

Unity游戏开发客户端面经 之 Unity 篇

Sea3752的博客 2万+

B站游戏开发笔试卷深度复盘:从C++到Unity的考点解析

游戏开发岗位的校招笔试,往往不只是考察算法和语言的掌握程度,更是在检验候选人是否具备构建实时交互系统的底层能力。从C++的内存管理到Unity的生命周期,再到寻路算法的实际应用,每一个考点都对应着游戏客户端日常开发中的真实挑战。数学与图形学基础决定了性能优化的上限,而帧同步与状态同步等网络概念则关系着多人体验的成败。对于准备进入游戏行业的开发者而言,理解这些知识点的原理与工程价值,远比死记硬背公式或API更有意义。本文以一份真实的B站游戏开发笔试卷为例,系统拆解其题型结构与考察逻辑,帮助读者建立从语言算法到

weixin_29007135的博客 215

Unity游戏开发客户端性能优化基础

Unity游戏开发客户端面经 之 性能优化 篇

Sea3752的博客 1万+

Unity游戏开发客户端Lua基础

Unity游戏开发客户端面经之 lua 篇

Sea3752的博客 1万+

Unity游戏开发客户端面经——热更新(初级)

Unity游戏开发客户端面经 之 热更新 篇

Sea3752的博客 1万+

Unity邮件发送功能实现与MailTool教程.zip

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于发送电子邮件的标准协议。它定义了邮件服务器之间以及邮件客户端和服务器之间的通信规则。SMTP是基于TCP/IP协议的应用层协议,运行在25号端口,负责将邮件从发件人地址传输到收件人地址。优化邮件发送性能和处理邮件发送中的异常是确保邮件系统稳定、高效运行的关键。开发者需要深入理解邮件发送流程,并利用现代编程语言和框架提供的工具来实现这一目标。

weixin_42527589的博客 1172

机器学习参数寻优:方法、实例与分析

机器学习模型的性能很大程度上依赖于其参数的选择。参数寻优(Hyperparameter Tuning)是提升模型表现的关键步骤之一。本文将详细介绍主流的参数寻优方法,包括网格搜索(Grid Search)、随机搜索(Random Search)、贝叶斯优化(Bayesian Optimization)、和超参数优化库(如Optuna和Hyperopt)等,并探讨它们的优缺点及适用场景。

甜盐的博客 2821

多台树莓派(主机)通信

在做无人机实验时,有个任务需要 两台无人机 或 无人机与小车 进行通信。 由于我们飞机上用了树莓派,相当于一台电脑,索性选用Socket网络编程。 条件:树莓派、局域网(手机热点或路由器)。需要通信的两台树莓派接入同一个局域网。 如若现场没有网络,可将树莓派配置为无线路由器,发射wifi。网上很多教程,注意一点是树莓派需要先用网线接入路由器再配置。 发送数据: # -*- coding...

LNL_LNL的博客 7683

Linux系统安全学习手册

Linux反弹shell Linux系统应急响应 Linux服务器安全加固 Linux下的用户、组和权限 Linux中的gcc Linux中su和sudo的用法和区别 Linux系统python2与python3共存 Linux中grep工具的使用 Linux中环境变量的设置 Linux中常见的150个命令(干货) Linux中编写Shell脚本 LNMP环境搭建Wordpress博客 LAMP环境搭建一个Discuz论坛 Linux运维比较常用的一些脚本 Linux系统中安装软

谢公子的博客 7524

【docker】第10篇 Failed with result ‘exit-code和Start request repeated too quickly和Failed to start Docker

【docker】解决 Failed with result 'exit-code'和Start request repeated too quickly和Failed to start Docker。

Fanjufei的博客 6810

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。

MHD0815的博客 132

一篇文章带你快速入门 MATLAB

文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一

南淮北安的博客 5120

微信支付接口「系统繁忙 SYSTEM_ERROR」/「文件不存在」报错分析与解决方案 接口开发实现SDK

微信支付的“平台证书模式”只有5年的有效期,过期后微信支付将不再签发新的平台证书,转而要求开发者使用“微信支付公钥”来处理敏感信息加密及回调签名验证。然而,由于以下几点原因,许多开发者在调用 获取平台证书。尽管微信支付在技术迭代上有其必要性,但报错设计过于不友好。诸如“系统繁忙”这样的提示很难直接关联到平台证书失效或公钥切换问题。这样的信息表达,开发者不仅看不懂,还需要花费大量时间分析排查,非常影响效率。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 767

大模型复杂问答能力评测框架:从原理到实践

在人工智能领域,大语言模型(LLM)的评估是衡量其实际应用价值的关键环节。其核心原理在于通过系统化的评测框架,对模型的理解、推理、整合与表达能力进行量化分析。传统的NLP基准测试往往侧重于事实性检索或简单推理,难以全面反映模型在应对多跳推理、隐含条件、长上下文整合等复杂现实任务时的真实性能。因此,专门针对复杂问答设计的评测技术应运而生,其价值在于为模型选型、效果优化和瓶颈诊断提供数据驱动的科学依据。该技术广泛应用于需要深度逻辑判断的业务场景,如智能投顾、法律咨询、医疗诊断等。本文聚焦的`tan92hl/Co

weixin_28679635的博客 358

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: C#中结构体与类之间的区别
下一篇: Unity游戏开发客户端面经——数据结构(初级)
Game_小志
博客等级 码龄6年 4565粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值