![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 87
类人_猿
游戏开发人员,时不时会分享游戏的一些知识,感谢大家支持!
展开
-
判定一个点是否在三角形内
最近在给我们足球项目加入足球减速区域,这里要求球场两侧是长方形但是球门两侧是需要使用三角形减速器(主要也是怕射门的时候球会进出减速),下面我会介绍几个检测的思想外加一个比较简单的检测方法。其实方法很多面积检测法,边界检测法、重心检测法、射线检测等以上三种方法是我总结GPT和一些常规的方法,这是只是针对一个x,y轴(z轴默认相同,如果需要其他轴向可以自行进行修改)原创 2024-01-22 14:13:03 · 983 阅读 · 0 评论 -
进程、线程与协程
一听到进程、线程与协程第一时间想起以前大学时候老师提到过的必考题,之前可能只是背过而已,没有真正理解,这里我用我参加工作的经验分享一下我对这块的理解,下面这个图只是对于进程、线程与协程的包含图,不涉及进程线程中包含的其他堆栈等。原创 2024-01-07 12:50:43 · 898 阅读 · 0 评论 -
时间复杂度与空间复杂度的log(n)底数应该是多少
今天看到一个关于时间复杂度log(n)的底数是多少的博客,他运用高中的数学知识论证了log(n)的底数是多少为N的无关变量其实这里的底数对于研究程序运行效率不重要,写代码时要考虑的是数据规模n对程序运行效率的影响,常数部分则忽略,同样的,如果不同时间复杂度的倍数关系为常数,那也可以近似认为两者为同一量级的时间复杂度。原创 2024-01-07 12:49:57 · 332 阅读 · 0 评论 -
ArrayList底层实现
之前在网上看到过一个面试题就是ArrayList和List< Int>的区别,正好借着这个的区别下面说一下ArrayList的底层是如何实现的。做程序时间长了越来越发现基础能决定自己的程序之路走多远,现在对这句话深信不疑,所有的底层实际上都是对我们代码基本工地的一种考察,包括算法也好,数据结构也好,在.net 程序集中的代码实际上就是用到了这些知识,只不过他们在一步一步优化最终封装成了程序集。原创 2024-01-07 12:48:02 · 812 阅读 · 0 评论 -
代理模式:中间者的故事
本文引用《大话设计模式》第七章节的内容进行学习分析,仅供学习使用需求:小明拜托自己好朋友小王给他朋友小美送礼物。个人认为代理模式还是在编程中比较常用的模式,希望本文章能够对读者有帮助。每天进步一点点。原创 2024-01-07 12:47:20 · 850 阅读 · 0 评论 -
装饰模式:换装系统设计
本文引用《大话设计模式》第六章节的内容进行学习分析,仅供学习使用需求:做一个人物换装,换装用字符串打印表示即可。Component是定义了一个对象接口,可以给这些对象动态的添加指责。ConcreteComponent是定义了一个具体对象。Decorator装饰抽象类,继承了Component,从外类来扩展Component的功能,对于Component来说,是无需知道Decorator的存在的。至于ConcreteDecorator就是具体的装饰对象,起到给Component添加指责的功能。原创 2024-01-07 12:46:23 · 803 阅读 · 0 评论 -
Xamarin开发:商场促销(策略设计模式)
本文引用《大话设计模式》第二章节的内容进行学习分析,仅供学习使用这里接着我上一篇Xamarin开发:基础继续编写。原创 2024-01-06 10:29:34 · 807 阅读 · 0 评论 -
Unity网格篇Mesh(二)
本文接上一遍Unity网格篇Mesh(二)原创 2024-01-05 10:06:40 · 962 阅读 · 0 评论 -
toluaframework中C#怎么调用Lua的方法以及无GC方法
lua无GC分析,无拆装箱操作原创 2024-01-04 14:35:03 · 716 阅读 · 0 评论 -
大端和小端传输字节序
在C中,除了8bit的char以外,还有16bit的short,32位的int,64位long,当然具体要由编译器决定,可以通过sizeof来获取不同类型在内存中占用的字节数。例如在C语言中,一个类型为int的变量n,如果其存储的首个字节的地址为0x1000,那么剩余3个字节地址将存储在0x1001~0x1003。文件的也会存储汉字,当然也要进行编码。如果在网络通讯中,涉及例如UTF16这样区分大小端的编码,除非按网络协议要求采用大端模式是,否则也要事先约定好,或者在数据包中标识好使用的字节序模式。原创 2024-01-03 10:17:34 · 834 阅读 · 0 评论 -
简单工厂设计模式(计算器实例优化)
本文内容引用自《大话这设计模式》这本书第一章节简单工厂设计模式,供自己提高代码水平使用。案例也同样采用计算器功能实现方式展开实现功能---->封装---->继承---->多态---->面向对象巧妙的使用面向对象的封装继承和多态会让我们后期的维护节约不少时间,提高了开发的效率,当我们将代码移植到别的平台的时候,我们只需要将业务层Operation 和 OperationFactory移植即可方便调用。原创 2023-12-28 20:49:16 · 1000 阅读 · 0 评论 -
UML类图学习
看懂了上述,UML类图基本是可以看明白,如果想深入研究双向关联可以研究一下。原创 2024-01-22 10:11:40 · 1005 阅读 · 0 评论 -
.Net FrameWork总结
针对大部分应用的开发人员来说,可能对.net framework都耳熟能详,对我来说可能一听就知道但是具体到底是个什么东西我确实不太明确,开发块两年了发现自己只是针对Unity的C#开发,实则对.Net FrameWork没有一个真正的了解,所以这里针对.Net Framework这个无数前辈的经验和基类开发出来的框架,做一个深度的学习和了解。原创 2023-12-28 20:37:13 · 1274 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第六节 理解垃圾回收GC,提搞程序性能
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这一节我们将介绍垃圾回收机制GC以及一些提搞程序性能的技巧。一些良好的操作可以提高程序的性能:1.清理。不要打开资源而不关闭它。关闭所有你打开的连接。尽可能快的清理所有非托管资源。一般规则:使用非托管对象,初始化越晚越好,清理越早越好。2.不要过度引用。合理使用引用对象。原创 2023-12-27 10:05:29 · 507 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这一节我们将介绍引用类型变量在堆中存储时会产生的问题,同时介绍怎么样使用克隆接口ICloneable去修复这种问题。在实际工作中,当我们需要复制引用类型变量时,我们最好让它实现ICloneable接口。这样可以让引用类型模仿值类型的使用,从而防止意外的错误产生。原创 2023-12-27 10:04:48 · 468 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 2
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。继续上篇未完成的“参数传递对堆栈的影响”。我们已经演示了参数传递是怎么在内在中处理的。在接下来的文章里,存储在栈中的引用变量会产生什么情况以及怎么解决对象复制带来的问题。原创 2023-12-27 10:04:15 · 417 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这篇文章我们将介绍一些方法参数传递行为在堆与栈中的影响。前几节我们介绍了堆与栈的基本工作原理,程序执行时值类型与引用类型在堆栈中的存储。另外,我们已经介绍了一些关于指针的基本知识。这一节中参数传递对堆栈的影响很重要,下面会慢慢道来。原创 2023-12-27 10:03:39 · 461 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第三节 栈与堆,值类型与引用类型
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。本文将介绍值类型与引用类型在堆栈里的基本存储原理。希望这篇文章能帮助你更好的理解值类型变量与引用类型变量的不同,同时理解什么是指针,什么时候用到指针。以后的文章里会更深入的介绍C#内存管理并详细阐述方法参数。原创 2023-12-27 10:02:54 · 592 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理
虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。这一节介绍栈的基本工作原理。栈可以想像成一个严格顺序执行的序列,不允许跳跃穿插访问。栈有自我清理功能。本文以执行一个简单C#方法为例阐述了栈的基本工作原理。下一节继续介绍堆栈工作原理以及一个更复杂一些的例子。原创 2023-12-27 10:02:20 · 434 阅读 · 0 评论 -
深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC)。另外,了解内存管理可以帮助我们理解在每一个程序中定义的每一个变量是怎样工作的。堆与栈,并且他们都会帮助我们更好的运行程序。堆与栈寄存在电脑的操作内存中,并包含我们需要的信息使整个程序运行正常。原创 2023-12-27 10:01:33 · 446 阅读 · 0 评论 -
字符串用法总结
在 C# 中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用 string 关键字来声明一个字符串变量。string 关键字是 System.String 类的别名。上面的方法列表并不详尽,请访问 MSDN 库,查看完整的方法列表和 String 类构造函数。String 类有许多方法用于 string 对象的操作。原创 2023-12-26 09:44:41 · 1000 阅读 · 0 评论 -
dynamic与反射补充
get;set;get;set;Age = age;} } [ InfoAttribute("英雄类名" , 255) , InfoAttribute("英雄装备" , 1024) ] public class HeroInfo {原创 2023-12-26 09:44:06 · 344 阅读 · 0 评论 -
C#索引器
就像属性(property),您可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。索引器声明的时候也可带有多个参数,且每个参数可以是不同的类型。C# 允许索引器可以是其他类型,例如,字符串类型。索引器定义的时候不带有名称,但带有 this 关键字,它指向对象实例。原创 2023-12-26 09:43:28 · 841 阅读 · 0 评论 -
C# 委托(Delegate)
一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。使用委托的这个有用的特点,您可以创建一个委托被调用时要调用的方法的调用列表。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。一个合并委托调用它所合并的两个委托。上面的委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。下面的实例演示了委托的声明、实例化和使用,该委托可用于引用带有一个整型参数的方法,并返回一个整型值。委托声明决定了可由该委托引用的方法。原创 2023-12-26 09:42:50 · 395 阅读 · 0 评论 -
C# 事件(Event)
事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。其他接受该事件的类被称为 订阅器(subscriber) 类。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。发布器(publisher)类的对象调用这个事件,并通知其他的对象。上面的代码定义了一个名为 BoilerLogHandler 的委托和一个名为 BoilerEventLog 的事件,该事件在生成的时候会调用委托。在类的内部声明事件,首先必须声明该事件的委托类型。原创 2023-12-26 09:42:08 · 376 阅读 · 0 评论 -
C# 不安全代码(指针)
当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。指针 是值为另一个变量的地址的变量,即,内存位置的直接地址。就像其他变量或常量,必须在使用指针存储其他变量地址之前声明指针。个人认为:在C#中当我们定义变量时,其内部构造函数已经将指针自动定义好,估计是为了防止开发人员定义出错或者分配问题。指针变量声明的一般形式为:下面是指针类型声明的实例:在同一个声明中声明多个指针时,星号 * 仅与基础类型一起写入;而不是用作每个指针名称的前原创 2023-12-26 09:40:45 · 1131 阅读 · 0 评论 -
C#多线程(补充)
但是通常来说,应当慎重使用Abort()方法,如果在当前线程中抛出该异常,其结果是可预测的,但是对于其他线程,它会中断任何正在执行的代码,有可能中断静态对象的生成,造成不可预测的结果。Task类可以获取线程的返回值,也可以定义连续的任务——在一个任务结束结束后开启下一个任务,还可以在层次结构中安排任务,在父任务中可以创建子任务,这样就创建了一种依赖关系,如果父任务被取消,子任务也随之取消。调用Task类的RunSynchronously()方法,可以实现同步调用,直接在当前线程上调用该任务。原创 2023-12-26 09:38:27 · 420 阅读 · 0 评论 -
c#多线程
总结一下同步方法和异步方法的区别:1、同步方法由于主线程忙于计算,所以会卡住界面。异步方法由于主线程执行完了,其他计算任务交给子线程去执行,所以不会卡住界面,用户体验性好。2、同步方法由于只有一个线程在计算,所以执行速度慢。异步方法由多个线程并发运算,所以执行速度快,但并不是线性增长的(资源可能不够)。多线程也不是越多越好,只有多个独立的任务同时运行,才能加快速度。3、同步方法是有序的。异步多线程是无序的:启动无序,执行时间不确定,所以结束也是无序的。原创 2023-12-26 09:36:49 · 970 阅读 · 0 评论 -
面向-对象的三大原则
最近看了一篇关于面向对-象的原则的文章,感觉有所收获,然后我把这几个原则总结一下,希望能提升自身的代码水平和设计代码的水平。这篇文章全是概念知识,对于开发小白来说可能不太好理解,不过希望还是可以认真看完总会有所收获。原创 2023-12-25 10:05:39 · 1061 阅读 · 0 评论 -
C# Lock 解读
一、Lock定义lock 关键字可以用来确保代码块完成运行,而不会被其他线程中断。它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。这是通过在代码块运行期间为给定对象获取互斥锁来实现的。在多线程中,每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数...转载 2019-10-15 16:36:40 · 5004 阅读 · 1 评论 -
哈希表查找详解
哈希表查找定义基本概念1、定义哈希表查找又称散列表查找,通过查找关键字不需要比较就可以获得需要记录的存储位置,它是通过在记录的存储位置和它的关键字之间建立的一个确定的关系f,使得每个关键字key对应一个存储位置f(key)。即:–存储位置=f(关键字),其中f为哈希函数。哈希表最适合的求解问题是查找与给定值相等的记录。哈希查找不适合同样的关键字对应多条记录的情况,如使用关键字"...转载 2019-10-12 10:57:53 · 5931 阅读 · 1 评论 -
算法时间空间复杂度计算—空间复杂度
一、空间复杂度定义空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括程序代码所占用的空间,输入数据所占用的空间和辅助变量所占用的空间这三个方面。二、影响空间复杂度的因素注意:一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变 量分配的存储空间和为在...原创 2019-09-11 16:23:17 · 10328 阅读 · 1 评论 -
关于时间与空间复杂度的学习
一、算法时间复杂度定义在进行算法分析时,语句总的执行次数 T(n) 是关于问题规模n的函数,进而分析T(n) 随n的变化情况并确定T(n) 的数量级。算法的时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。 它表示随问题n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中,f(n)是问题规模n的某个函数。二、标准算法度量单位渐...原创 2019-09-10 18:16:30 · 769 阅读 · 1 评论 -
字节Byte与位bit
介绍一提到位这个概念应该大家都很清楚,我的电脑属性可以看到计算机的一个参数64位操作系统1字节(Byte) = 8位(bit)也就是说该计算机一个周期内CPU最多可以处理的二进制比特数为64位。不同数据类型所占位数与字节数转换关系1字节(Byte) = 8位(bit)1KB = 1024Byte1MB = 1024KB1GB = 1024MB1TB = 1024GB...原创 2019-09-29 16:45:33 · 2815 阅读 · 0 评论 -
二进制、八进制、十六进制的转换
进制转换进制转换是人们利用符号来技术的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。在知乎有个问题下的解答很不错,可以参考:打开链接他们之间的关系如下:一:(二,八,十六进制)转十进制方法:假设我们要将n进制转换为十进制,首先我们从n进制的右边为...原创 2019-09-29 18:38:34 · 4284 阅读 · 3 评论 -
C# 运算符重载
运算符重载一提到+ - * / %这种类似的运算符都应该很清楚是什么,但是程序是怎么实现的呢?程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。运算符重载的实现重载运算符注意几点:1.类中重载的方法必须是public公有的2.类中定义的重载方法必须是静态的3...原创 2019-10-08 18:05:19 · 393 阅读 · 1 评论