自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 游戏开发者笔记--对象池

在一个射击游戏中,假设有一把枪,他有30发子弹,每当击发一个弹匣,这时我们肯定会把子弹封装成一个类,但是我们击发30发子弹,势必要创建30个子弹对象,这30个子弹击中物体,势必要销毁这30个子弹对象,如果我们子弹的类比较复杂,势必会造成短时间大量对象创建和销毁,这时我们就会造成系统资源的浪费,而且频繁的创建和销毁对象,势必会出现内存泄漏的情况,而且如果我们子弹因为别的问题没有被成功的销毁。管理对象的数量:通过对象池,可以限制对象的数量,避免出现过多的对象导致内存消耗过大。然后,我们调用对象的。

2023-09-02 21:13:25 239

原创 游戏开发者笔记--帧同步和状态同步

状态同步是大型网游普遍会采用的一种同步技术,它特点是客户端会向服务器发送一些指令,比如在角色扮演类中从游戏的NPC那里买一些物品时,客户端会向服务器发送一个指令,指令中包括玩家ID、购买商品的ID号、商贩NPC的ID号,将这些信息传到服务器后,服务器会计算玩家的金钱是否足够,当前所处位置是否在NPC身边、NPC是否有这个物品等等。

2023-09-01 19:52:36 475 1

原创 TCP协议建立连接的流程----三次握手解析

我们知道TCP协议的可靠性其中之一就是通过建立连接保持可靠性,TCP协议在发送数据之前,双方需要建立一条连接,在发送完成后,通信双方需要断开连接,这也就是TCP连接的简历和终止。TCP的连接总共分为三个后阶段,建立连接->数据传输->以及断开连接这三个阶段。我们主要讨论的也就是建立连接阶段,接下来是一个非常典型的TCP连接的建立的过程。三次握手的意思其实就是服务器和客户端之间需要发送三个数据包,交换双方的初始序列号,以及确认双方的接受/发送能力正常,可以建立连接。

2023-07-26 20:13:20 1583 1

原创 C++11新特性-----右值引用

C++中的引用可以理解为给一个变量起一个别名,就像我们都有自己的名字,同样也有很多人有自己的小名,外号等,就像张三的小名--二狗就是张三的一个引用,遇到张三无论是说嘿!张三!还是嘿!二狗!张三都可以知道有人在叫他的名字,这就引用。

2023-07-23 19:39:34 259 1

原创 Unity-3d小游戏开发-----走迷宫

本人是在学习完c,c++,数据结构算法,操作系统网络这些基础的课程之后,打算学习自己喜欢的游戏开发方向的东西,然后在B站上自学了几天unity,用到unity的触发器,碰撞,刚体,以及一个简单的ui界面,但是本人目前没有c#的学习经验,但是拿c++的经验也能写出一些基础的游戏脚本,这里的参考书籍是《新印象--unity2020游戏开发基础与实战》,适合有一些编程基础的人来观看。我将从unity的新建项目开始来一步一步的完成这个小游戏环境为unity2021.3.16 编译器为VS2019。

2023-02-17 16:55:21 21720 10

原创 HTTP响应消息和HTTP优缺点

这些特点就突出了HTTP的简单的特点,即我们看到对应的响应消息,就可以分析出当前的请求或者相应消息的意思。既然服务器没有记忆能力,那么也就是说,我们每次进行一个步骤,如果需要用到上一个步骤的信息,就需要再次发送信息来使用,服务器没有存储信息的能力,这样很多的信息需要重复的发送,这样不仅麻烦,而且还增加了不必要的数据传输。接下来200 OK是HTTP的状态码,代表着HTTP请求时的状态,这个我们在文章的后面会有一些状态码的例子,在此我们只需要知道HTTP的状态码是回应HTTP请求时的请求状态。

2023-01-15 18:52:49 246

原创 HTTP请求报文详解

如果访问的该Web服务器使用HTTP协议的标准端口(HTTP为80,HTTPS为443)授予对其资源的访问权限,则通常省略此部分。接下来可能会有的是路径,/path/to/myfile.html是Web服务器上资源的路径。以端口后面第一个/开始,到?如果是GET请求,一般带有请求的URL参数,如果是POST请求,则一般不会出现参数,这些参数是以&进行分割的。接下来是主机(域名),也代表管理该域名的机构。Host:192.168.0.151:8000,就代表着对象所在的主机,其他键值对也都代表着对应的信息。

2022-12-01 01:14:17 2111

原创 HTTP的请求相应过程

在日常的生活中,我们每天都要用到浏览器,不知道你是否好奇,当我们输入一个网站的网址时,到底发生了什么事情?让我们通过一个例子来探讨一下,我们假设访问的URL地址为http://www.baiduu.com/s/1754896,当我们输入网址时浏览器内部会进行下面的操作。

2022-11-23 02:29:23 942

原创 TCP粘包和拆包发生原因和情况分析以及解决方案

就像河流一样,是练成一片的,数据与数据之间没有完整的界限,TCP底层并不了解上层业务数据的具体的含义,他会根据TCP缓冲区的实际情况进行包的划分,所以在业务认为,一个完整的包可能会被TCP拆成多个包进行发送,也有可能会把多个小的数据包封装成一个大的数据,这就是所谓的TCP粘包和拆包的发生原因。3.服务器分两次读取到了两个数据包,第一次读到了A1的部分数据包,第二次读取到了A1剩下的数据包和完整的A2完整数据包,被称之为TCP拆包,就是将A1这个完整的数据包拆成两个甚至是多个数据包进行发送。

2022-11-22 00:18:01 768

原创 Linux下的io多路复用的三种实现之—select()

io 多路复用是一种同步io的模型,实现一个线程可以同时监听多个文件描述符;一旦有某个监听的文件句柄就绪,就能够通知应用程序进行相应的读写操作没有文件句柄就绪就会阻塞应用程序,交出cpu多路是指网络连接,复用指的是同一个线程为什么要有io多路复用机制?我们先来看一段代码{if(ret

2022-11-21 22:53:57 291

原创 c++智能指针shared_ptr的实现

这个功能,并且得分两个类进行实现,Ref主要负责存储引用计数和原始指针,而Shared_ptr部分,将存储Ref指针,这样我们让所有共用一块堆区内存的Shared_ptr对象公用一个Ref指针,我们每析构一次Shared_ptr,就让Ref指针里面的引用计数--,这样就可以实现shared_ptr。普通赋值我们需要将原来指针的引用计数减一,然后将原来成员的Ref指针传给新成员的Ref指针,并且再次让Ref对应的引用计数加一,为什么不直接让Ref不变呢?我们想将shared_ptr实现,一定会用到。

2022-11-20 01:59:23 1649

原创 c++智能指针会引起错误的两种情况

上面程序中,在对类 A 成员赋值时 ap->bptr = bp;在类 B 的实例对象被析构的时候,内部的 aptr 也被析构,其对 A 对象的管理解除,内存的引用计数减为 1,当共享智能指针 ap 离开作用域之后,对 A 对象的管理也解除了,内存的引用计数减为 0,类 A 的实例对象被析构。共享智能指针 ap、bp 对 A、B 实例对象的引用计数变为 2,在共享智能指针离开作用域之后引用计数只能减为1,这种情况下不会去删除智能指针管理的内存,导致类 A、B 的实例对象不能被析构,最终造成内存泄露。

2022-11-20 01:53:53 678

原创 C++智能指针详解

我们用new或者malloc申请一段空间之后,没有调用delete或者free,导致这部分申请的空间没有被释放,就像我们买了个房子,但是不记得房子的地址,我们也没办法入住使用这个空间,这个空间只能白白放着没法利用,这样就造成了资源浪费。如果使用移动构造的方式初始化智能指针对象,只是转让了内存的所有权,管理内存的对象不会增加,因此内存引用技术不会增加。std::unique_ptr是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针,

2022-11-19 22:04:14 547

原创 浅谈快速排序--从三色旗问题到

问如何采用最少的步骤来完成三色旗的排列呢?此时此次排序结束,我们发现当前数组最后排序的结果为24356,和最后结果23456,虽然整个数组的顺序没对,但是我们发现5的相对位置对了,接下来我们只要通过递归,将5的左右子数组进行排序,最后一定可以得到一个正确的顺序。对于这种问题我们就可以将0代表蓝色,1代表白色,2代表红色,放到数组里面进行排序,我们可以采用双指针,将蓝色全放到白色左面,红色全放到白色右面。可以看出三色旗的思想就是确定一个基准值,再将小于基准值的交换到基准值左面,将大于基准值交换到基准值右面。

2022-11-10 10:23:46 266

原创 力扣3.无重复的最长子串,c++无序集解法

本题我采用的方法是用无序集来存储当前的子串,每添加一个新的字符就利用无需集进行查找当前的元素,实时维护当前长度和最大长度。最开始我们的情况是这样的,然后right不断右移,将字符放到set中,知道遇到与set重复的字符。就像这样,然后right继续右移,遇到重复的就删除set中最左边元素,直到无重复的。解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。当我们遇到重复的字符时移动左指针,并且将最set中左边的元素删除。解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

2022-09-29 18:54:21 256

原创 力扣138.复制带随机指针的链表,清晰思路

构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。我们在原来的链表的基础上,在原来每个节点之后新建一个与当前节点val值相同的节点。返回复制链表的头节点。

2022-09-06 21:16:28 219

原创 力扣162.寻找峰值c++二分查找解法

本题要求时间复杂度为o(log n)的算法来解决这个问题。那我们不难想到二分查找法来解决这个问题,本题我们拿二分查找的中间值与中间值的右值进行比较,就像爬山一样,那边高爬向那边,然后再次取得中间值,以此循环.这样我们就一左一右逐渐靠近山顶。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。本题不难想出采用二分查找,但是更难的是对二分查找的灵活运用。...

2022-08-31 17:34:04 543

原创 力扣53.最大子数组和c++动规

本题我们采用动态规划来解决问题,我们创建一个_max来存储当前最大得子数组和,sum来存储当前得子树组和,当sum

2022-08-29 10:50:47 347

原创 leetcode169.多数元素

所以我们需要采用更好的办法来对本题进行求解。对于本题来说,暴力枚举的时间复杂度为o

2022-08-26 11:10:23 325

原创 力扣1.两数之和,c++哈希表解法时间复杂度o(n)

本题最容易想到的就是暴力遍历解法但是时间复杂为o(),所以本题可以采用哈希表进行秋姐,代码如下。这样我们就将时间复杂度降到了o(n)

2022-08-26 10:54:43 456

原创 力扣剑指offer40.最小k个数-----优先队列解法c++

力扣剑指offer40

2022-08-03 19:22:37 481 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除