自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Unity ScriptableObject 学习笔记

在使用预制件时可能会不小心犯错误,例如意外地实例化(Instantiate)一个预制件。在Unity中,如果你不小心多次实例化了预制件,可能会导致场景中出现许多不必要的副本,这可能会导致性能问题或场景管理上的混乱。预制件可能包含一些不必要的额外组件。例如,如果你只是想使用预制件中的一部分数据或资源,但预制件本身包含了许多其他组件(如碰撞体、渲染器等),这可能会使得使用变得复杂,并增加资源的负担。预制件可能在概念上并不完全适合。预制件在Unity中通常用于创建和配置可以在场景中复用的游戏对象模板。但是,如果你

2023-12-24 19:54:45 1125

原创 Unity Input System 官方案例学习笔记

Unity新的InputSystem案例学习笔记

2023-12-11 11:36:18 1514

原创 Unity中事件与委托的使用

事件 (event)在C#中, 关键字用于声明一个事件,它是一种特殊类型的多播委托,用于实现事件驱动编程模型。事件是一种允许类或对象通知其他类或对象当某些特定事情发生时的机制。在之前的代码中,将委托 更改为 会使该委托成为一个事件。虽然委托和事件在使用上非常相似,但它们在访问控制和使用意图上有重要的区别:作为普通委托无限制的访问:作为普通委托,任何有访问权限的代码都可以不仅订阅和取消订阅委托,还可以调用、重新赋值或清除委托列表。风险:这种无限制的访问可能会导致不安全的操作,如意外地覆盖当

2023-12-05 16:55:38 898

原创 动态规划——最长回文子序列

【代码】动态规划——最长回文子序列。

2023-10-05 20:00:04 207

原创 C++并发编程实战——第五章 基于锁的并发数据结构

【代码】C++并发编程实战——第五章 基于锁的并发数据结构。

2023-10-03 17:20:28 104

原创 C++并发编程实战——第四章 同步操作

基本类型间的简单运算,例如:3+3,6*9,或1.3/4.7。时间点就是时间戳,而时间戳是时钟的基本属性,不可以直接查询,其在C++标准中已经指定。是 C++ 标准库提供的一个用于将函数包装成可异步执行的任务的工具。来获取时间戳,该成员函数会返回一个数值,这个数值是指定时间点与UNIX时间戳的时间间隔。会阻塞至所有线程完成任务(因此称为屏障),当最后一个线程完成任务时,所有线程被释放,结合使用,以便在一个线程中执行任务,并在另一个线程中获取任务的结果。,它用一个值作为要等待的线程的数量来构造,调用。

2023-10-02 14:43:07 85

原创 “声名狼藉”的双重检查锁定

在学习《C++并发编程实战》的时候,作者提到了“声名狼藉”的双重检查锁定,但是对于其中潜在的条件竞争,有点模糊,这里稍微做点笔记。

2023-09-27 12:07:06 117

原创 动态规划——恰好移动K步到达某一位置的方法数目

暴力递归少数据证明正确,但是超时,考虑优化,即看看是否有重复计算的过程。在一步移动中,你可以向左或者向右移动一个位置。数组推导动态规划的状态转移方程。先思考暴力搜索是否可以。

2023-09-26 22:16:02 202

原创 动态规划——最长公共子序列

是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。暴力递归,以两个字符串的最后一个位置作为观察对象。是这两个字符串所共同拥有的子序列。,返回这两个字符串的最长。仅由小写英文字符组成。

2023-09-26 22:15:27 37

原创 动态规划——解码方法

已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。暴力递归,当前保留一个,和保留两个。的消息通过以下映射进行了。题目数据保证答案肯定是一个。注意,消息不能分组为。

2023-09-26 22:14:31 33

原创 动态规划——分割等和子集

暴力递归,每一个数拿或者不拿两种情况,求出对应的和,如果最后和为数组的和的一半则。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

2023-09-26 22:13:37 109

原创 动态规划——01背包

先尝试暴力搜索递归,对于每一个物品拿或不拿,两种情况,如果不拿则,考虑剩下的物品中最大价值为多少,如果拿则最大价值为当前物品的价值 + 剩余容量对剩余物品的最大价值。有一系列物品,物品重量为数组。,现在有一个最大能装。

2023-09-26 22:12:39 34

原创 动态规划——纸牌游戏

给定一个整型数组arr,代表数值不同的纸牌排成一条线玩家A和玩家B依次拿走每张纸牌。

2023-09-26 22:11:28 106

原创 动态规划——整数拆分

,并使这些整数的乘积最大化。你可以获得的最大乘积。

2023-09-26 22:10:09 176

原创 动态规划——不同路径

网格的左上角 (起始点在下图中标记为 “Start” )。

2023-09-26 22:09:08 36

原创 动态规划——斐波那契数、爬楼梯

【代码】动态规划——斐波那契数、爬楼梯。

2023-09-26 22:08:14 37

原创 C++并发编程实战——第三章 共享数据

这个错误,即使使用了互斥量,对栈内部数据进行保护也无法阻止条件竞争的发生,原因在于接口设计的问题,接口过多,在一个线程调用接口之间,可能有其他线程也进行了操作。,虽然不会产生未定义行为,但这种对同一值处理了两次的行为更为严重,因为看起来没有任何错误,很难定位 bug。访问共享数据前,将数据上锁,访问结束后,在解锁。其他线程必须等待数据解锁之后,才能访问。原因在于构造返回值的时候可能抛出异常,使元素弹出了,但是未返回造成数据丢失。,在单线程中是安全的,但在多线程中,检查非空之后,创建互斥量实例,成员函数。

2023-09-26 20:57:33 155

原创 C++并发编程实战——第二章 线程管理

除了用函数进行构造,还可以用函数对象,也就是仿函数进行构造。函数的线程,其他线程与主线程同时运行。会退出一样,其他线程执行完也会退出。简单的启动线程,就是构造。每个程序至少有一个执行。

2023-09-26 20:46:08 36

原创 C++并发编程实战——第一章 你好,并发世界

【代码】C++并发编程实战——第一章 你好,并发世界。

2023-09-26 20:45:17 69

原创 vector的扩容机制

这篇文章将会解答一下三个问题:- 它怎么实现动态扩容的?- 它扩容时候调用的是拷贝构造还是移动构造函数?- 怎么让它调用我们的移动构造函数?

2023-09-25 18:27:15 334

原创 计算机网络——TCP与UDP的特点与区别

只有一次握手,则完全没办法知道连接是否建立完成。只有两次握手,客户端知道服务器能接受到消息,但是服务端不知道客户端能不能收到。三次握手之后,客户端和服务端都知道对方可以接受到消息,连接建立完成。假设只有二次握手还有一种情况就是,客户端发送第一次请求连接报文,超时了,于是发送第二次请求,这次连接结束之后,双方都进入了close状态。

2023-09-17 14:37:02 440

原创 C++新特新——Lambda表达式

捕获列表](参数列表) mutable(可选) ->返回类型 {函数体捕获列表。捕获列表总是出现在Lambda表达式的开始,实际上编译器也是根据此符号判断是否是一个Lambda表达式。捕获列表可以捕捉上下文的变量也就是父作用域中的变量,供函数使用。参数列表。与正常函数一致。mutable。默认对捕获列表中的变量前会加const,加上mutable后可以修改变量。返回类型。可省略由编译器推导。

2023-09-17 10:22:20 39

原创 C++实现LRU页面置换算法(最近最久未使用)

【代码】C++实现LRU页面置换算法(最近最久未使用)

2023-09-16 19:46:27 418

原创 操作系统——内存管理、分页、分段、段页式存储管理

内存是用于存放数据的硬件。程序执行前需要先放到内存中才能被cPU处理。内存地址从0开始,每个地址对应一个存储单元如果计算机**“按字节编址”则每个存储单元大小为1字节,即1B**,即8个二进制位如果字长为16位的计算机**“按字编址”,则每个存储单元大小为1个字;每个字的大小为16个二进制位**相对地址又称逻辑地址,绝对地址又称物理地址。1.操作系统负责内存空间的分配与回收2.操作系统需要提供某种技术从逻辑上对内存空间进行扩充。

2023-09-16 17:51:53 1835 1

原创 操作系统——死锁的概念及解决办法

每个人都占有一个资源,同时又在等待另一个人手里的资源。发生“死锁”在并发环境下,各进程因竞争资源而造成的一种**互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,**就是“死锁”。发生死锁后若无外力干涉,这些进程都将无法向前推进。互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。比如: SPOOLing技术。操作系统可以采用SPOOLing技术把独占设备在逻辑上改造成共享设备。

2023-09-16 15:28:19 485

原创 操作系统——进程同步与互斥、信号量机制

利用**“开/关中断指令”**实现(与原语的实现思想相同,即在某进程开始访问临界区到结束访问为止都不允许被中断,也就不能发生进程切换,因此也不可能发生两个同时访问临界区的情况)简单、高效缺点:不适用于多处理机;只适用于操作系统内核进程,不适用于用户进程(因为开/关中断指令只能运行在内核态,这组指令如果能让用户随意使用会很危险)用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。信号量。

2023-09-16 15:00:47 350

原创 操作系统——进程调度及调度算法

需要进行进程调度与切换的情况当前运行的进程主动放弃处理机进程正常终止运行过程中发生异常而终止进程主动请求阻塞(如等待I/O)当前运行的进程被动放弃处理机分给进程的时间片用完有更紧急的事需要处理(如I/O中断)有更高优先级的进程进入就绪队列不能进行进程调度与切换的情况在处理中断的过程中。中断处理过程发杂,与硬件密切相关,很难做到在中断处理中进行进程切换。进程在操作系统内核程序临界区中。在原子操作过程中(原语)。

2023-09-16 14:47:48 256

原创 操作系统——进程定义、进程状态、进程通信

程序:一个指令序列,分为程序段、数据段系统为每个运行的程序配置了一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般情况 下,我们把进程实体就简称为进程,例如,所谓创建进程,实质上就是创建进程实体中的PCB;而撤销进程,实质上就是撤销进程实体中的PCB。PCB是进程的唯一标志。定义:进程是程序的一次执行过程。进程是一个程序及其数据在处理及上顺序执行时所发生的活动。

2023-09-16 14:33:34 140

原创 设计模式——单例模式解析及示例

保证一个类仅有一个实例,并提供一个该实例的全局访问点。饿汉模式->在定义类的时候就创建单例对象 没有线程安全问题private: //将构造函数和拷贝构造函数设置为私有//设置一个静态的自己对象public://设置一个静态初始化函数std::cout << "静态实例对象" << std::endl;//定义时 就创建了单例对象//外部通过调用getInstance()获得该单例模式懒汉模式->什么时候使用这个单例对象,什么时候创建 存在线程安全问题。

2023-09-15 18:07:21 48

原创 设计模式——工厂模式解析及示例

定义一个用于创建对象的接口,让子类决定实例化哪个类。Factory Method使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。假设一个客户需要使用一个产品里的接口,也就是客户需要一个产品的对象的时候,若是正常new的话,就需要依赖一个具体类了(编译时依赖),所以此时我们设计一个工厂,客户使用工厂产生的产品的接口,而不需要当场写出使用哪种具体的产品(动态多态),工厂根据运行时传入的参数来提供产品。

2023-09-15 17:46:05 38

原创 设计模式——观察模式解析及示例

定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。观察者自己决定是否需要订阅通知,目标对象对此一无所知。Observer模式是基于事件的UI框架中非常常用的设计模式,也是MVC模式的一个重要组成部分。

2023-09-15 16:45:14 120

原创 设计模式概述及八大设计原则

面向对象三大机制封装,隐藏内部实现继承,复用现有代码多态,改写对象行为如何解决复杂性分解抽象软件设计的目标 :复用。

2023-09-15 15:39:02 40

原创 C++中的STL与各种容器的底层实现

STL具体分为哪几个部分?首先我是基于GNUC2.9的STL源码学习的,他和4.9还是有挺多不同的,不过对于帮助我理解标准模板库还是2.9更好。STL标准模板库主要分为六个部分:最重要的三个是容器、算法、迭代器。另外三个是分配器、仿函数和适配器。2.9的STL主要运用的是泛型编程的思想,它和我们的面向对象还是有些许不同的,面向对象最重要的思想是运行时多态,而泛型编程时编译时多态,另外面向对象通常会把数据和算法放在一个对象中,而在STL中将数据和算法分开,各自实现自己,通过迭代器链接。容器:就是

2023-09-15 13:52:38 172

原创 C++中的内联函数与宏

内联函数与宏内联函数有什么作用?存不存在什么缺点?首先在程序运行过程中调用一个函数时,需要先将当前状态保存,将参数入栈,函数结束后出栈,恢复状态等等开销,而内联函数的作用就是节省这些开销。内联函数就是让编译器在函数调用的地方,直接将函数的代码展开,就地计算,而不是开辟栈空间调用函数,这样就可以避免函数调用的开销,但是内联函数会在每一个函数调用的地方都展开,这样也就会有很多的代码冗余,也就是会造成代码膨胀,尤其是递归的函数,会有大量内存的开销,本质上就是一个用空间换时间的手段。但是实际上我们在函数

2023-09-14 18:21:07 43 1

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

在C++11以前是没有右值引用这个概念的,以前的引用就是左值引用,也就是引用只能引用一个左值,当你想给一个常量取别名的时候会报错,要想引用右值只能使用常量引用。而在C++11引入了右值引用,专门引用右值,用法是用两个取地址符号来获得右值的引用,右值引用是为了支持移动操作而引出的一个概念,移动操作主要的目的是避免了不必要的拷贝,提高性能。

2023-09-14 18:20:16 54 1

原创 C++中的各种关键字——const、static、extern、explicit、constexpr、volatile、mutable、auto、deltype

C++中的各种关键字const的作用const作用,总结起来就是我希望被const修饰的东西不允许更改,也就是是只读const修饰变量const修饰变量的意思就是不允许修改这个变量,也就是定义一个常量,这个常量在程序运行中不允许修改,所以const修饰变量时,必须进行初始化。const修饰变量也分为const修饰成员变量和const修饰全局变量,虽然他们在程序中都作为常量使用,但是就像刚刚所说的,本质上他们其实都是变量,所以const修饰的成员变量内存仍然是放在栈上的,而const全局变量则

2023-09-14 18:18:11 635 1

原创 智能指针——weak_ptr的原理及仿写

【代码】智能指针——weak_ptr的原理及仿写。

2023-09-14 18:13:31 348 1

原创 智能指针——shared_ptr的原理及仿写

【代码】智能指针——shared_ptr的原理及仿写。

2023-09-14 18:12:29 87 1

原创 智能指针——unique_ptr的原理及仿写

【代码】智能指针——unique_ptr的原理及仿写。

2023-09-14 18:10:35 126 1

原创 智能指针——auto_ptr原理及仿写

【代码】智能指针——auto_ptr原理及仿写。

2023-09-14 18:09:21 48 1

空空如也

空空如也

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

TA关注的人

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