- 博客(33)
- 收藏
- 关注
原创 docker 的使用
轻量级的虚拟机 ------------> docker 事实上的容器标准(go开发)天生提供隔离性(sandbox 沙盒)把运行应用所需要的 代码、库、依赖、配置文件、运行时环境打包在一起,成为一个 标准的单元(镜像)以前我们的做法是首先下载所有的依赖,搭配好环境,再运行应用程序,现在我们就直接拥有了镜像提高了移植程序的效率例如:我们开发了一款app,它依赖Appv运维现在要将它部署到业务服务器上 但是环境是第三方库版本不对容器是轻量级的虚拟化(共享一个内核)层次结构大部分的产品都在。
2025-02-14 11:41:49
536
原创 [Vulkan入门] RenderPass
将多个通道渲染的规则汇总到一个Object中 ---- Graphics Pipelines,这也是为什么在创建Graphics piepline object的时候需要传入renderpass对象的原因之一。在多个subpass运行的时候,他们之间可以产生依赖关系,实现控制多个subpass的执行先后顺序,因为有可能会出现subpassA去使用subpassB渲染结果的情况。,有必要将一些特定的场景按照不同的着色器算法进行着色渲染,把不同的渲染过程放在同一个draw的不同pass中,最终汇入到。
2025-01-15 19:49:40
842
原创 [Vulkan入门] 渲染管线
1.顶点输入从CPU-->GPU,顶点数据用来为后面的顶点着色器等阶段提供处理的数据。是渲染管线的数据主要来源。送入到渲染管线的数据包括顶点坐标、纹理坐标、顶点法线和顶点颜色等顶点属性。2.为了让Vulkan明白顶点数据构成的是什么图元,我们需要在绘制指令中传递相对应的图元信息。常见的图元包括:点(GL_POINTS)、线(GL_LINES)、线条(GL_LINE_STRIP)、三角面(GL_TRIANGLES)。3.顶点着色器主要功能是进行坐标变换。将输入的局部坐标变换到世界坐标、观察坐标和裁剪坐标。
2025-01-15 17:41:02
647
原创 [Vulkan入门]交换链和图像视图
5.需要graphicsQueue(用于图像绘制),还需要PresentQueue(专门用于显示的队列)图像视图描述了访问图像的方式,以及图像的哪一部分可以被访问,比如,可以描述为一个没有。4.通过Instance的扩展 SwapchainKHR 即交换链,将绘制的图像显示在屏幕上。在vulkan的底层,所有的Image都是以数组的形式存放的(即使只有一张)3.比如在GPU上绘制了多张图像,但是GPU不知道如何将它们显示在屏幕上。对象(包括交换链中的图像),都必须创建一个绑定到图像的。
2025-01-13 11:50:54
433
原创 [Vulkan入门] 初入vulkan程序
OpenGL已经发展了25年以上,并不断满足行业需求,但是现在已经逐渐满足不了行业的需要。GPU的可编程性越来越强,越来越多的平台开始支持加速图形,计算,视觉和深度学习。打交道,通常的步骤是创建一个intance去初始化Vulkan library。这个instance是您的应用程序与Vulkan库之间的连接桥梁,通常创建过程中,需要向驱动程序提供一些应用层的信息。开始vulkan程序 必须要创建instance(相当于是管理vulkan程序的根节点),与。可以在应用层将拓展传递进去。
2025-01-10 10:31:00
617
原创 Redis-哨兵模式_常见问题
Redis主从复制的作用有数据热备、负载均衡、故障恢复等:但主从复制存在的一个问题是故障恢复无法自动化。接下来要介绍的哨兵模式,它基于Redis主从复制,主要作用便是解决主节点故障恢复的自动化问题,进一步提高系统的高可用性。Redis的Sentinel系统用于管理多个Redis服务器(instance),该系统执行以下三个任务。
2024-07-31 10:03:09
1406
2
原创 Redis的事务_乐观锁与悲观锁
Redis事务可以一次执行多个命令,本质是一组命令的集合,一个事务中的所有命令都会序列化,按顺序的串行化执行,而不会被其他命令插入,不许加塞。1.批量操作在发送EXEC命令前被放入队列缓存2.收到EXEC命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行3.在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中,一个事务从开始到执行会经理以下三个阶段:开始事务命令入队执行事务。
2024-07-29 10:48:13
1092
原创 Redis持久化
1.两种持久化的方式一般都是同时开启的,既能保证数据的完整性和一致性,也能保证大量数据恢复的时候时间比较快。2.如果只开启AOF持久化的方式,并且被损坏了,此时不能启动成功的。3.如果aof文件损坏了,是可以进行手动修复的。4.如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化方式(只做缓存。
2024-07-26 10:33:35
1172
原创 Redis的五种数据类型与命令
Redis 是一个开源的(BSD许可)的,C语言编写的,高性能的数据结构存储系统,它可以用作数据库,缓存和消息中间件。Redis有序集合和集合一样也是string类型元素的集合,且不允许重复的成员,不同的是每个元素都会关联一个double类型的分数。2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。最后要给大家介绍的是Redis的配置文件,里面有许多对Redis的配置进行了描述,有兴趣的可以自行阅读一下!
2024-07-25 11:18:20
1110
原创 go语言入门教程
在 Go 语言中,无论是变量、函数还是类属性和成员方法,它们的可见性都是以包为维度的,而不是类似传统面向编程那样,类属性和成员方法的可见性封装在所属的类中,然后通过。Go 语言没有提供这些关键字,不管是变量、函数,还是自定义类的属性和成员方法,它们的可见性都是根据其首字母的大小写来决定的,如果变量名、属性名、函数名或方法名。,就可以在包外直接访问这些变量、属性、函数和方法,否则只能在包内访问,因此 Go 语言类属性和成员方法的可见性都是包一级的,而不是类一级的。,且需要注意的是,与大多数强类型语言不同,
2024-06-29 11:53:46
1298
原创 [C++11/14新特性] tuple元组介绍
C++11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用 tuple;当函数需要返回多个数据时,可以将这些数据存储在 tuple 中,函数只需返回一个 tuple 对象即可。1.声明并初始化一个tuple对象 std::tuple<int, float, std::string> t1(41, 6.3, "nico"
2024-05-29 10:25:30
457
原创 [C++11/14新特性] 介绍右值引用、移动构造函数、move函数
在 C++98/03 标准的基础上,C++11 标准对 C++ 语言增添了约 140 个新特性。本节要讲的右值引用就是众多新特性中的一个,同时也是最重要的特性之一。reversible67/Cpp11or14: 本仓库旨在让大家快速了解C++11/14新特性 (github.com)
2024-05-20 11:42:43
1115
原创 [C++11/14新特性] lambda匿名函数用法详解
继 Python、Java、C#、PHP 等众多高级编程语言都支持 lambda 匿名函数后,C++11 标准终于引入了 lambda,本节将带领大家系统地学习 lambda 表达式的具体用法。所谓匿名函数,简单地理解就是没有名称的函数,又常被称为 lambda 函数或者 lambda 表达式。7.[]中可以填 = 或 &, = 表示传值的方式 &表示传地址符号的方式 相当于取别名。2.(...)表示参数 因为lambda的行为像函数一样 当然就可以有参数了。1.[id]表示 取外部的变量id。
2024-05-04 18:19:42
1756
1
原创 [C++11/14新特性] noexcept、override、final关键字
如果在运行时,noexecpt函数向外抛出了异常(如果函数内部捕捉了异常并完成处理,这种情况不算抛出异常),程序会直接终止,调用std::terminate()函数,该函数内部会调用std::abort()终止程序。作为说明符,它的作用是指定函数是否抛出异常;作为运算符,它的作用是编译时检查,如果表达式不会抛出任何异常则返回 true,否则返回false。允许将类标记为final 在类后面使用关键字final。如果派生类在虚函数声明时使用了override描述符,
2024-04-30 14:46:21
1713
原创 [C++11/14 新特性] Range、default、delete和using关键字
默认构造函数:如果对构造函数进行了重载,则编译器不会隐式的生成一个默认的构造函数,此时如果调用了默认构造函数会在编译时报错,为了避免这种情况,一般会选择重写默认构造函数,且函数体为空。拷贝构造函数 和 拷贝赋值函数:不论有没有对它们进行重载,编译器始终会隐式生成默认版本,但有的时候不希望类实例进行拷贝构造或拷贝赋值,此时可以重写它们并将权限设置为private,但这样只是利用语法特性来碰巧实现效果,且对友元会带来困惑。3.拷贝赋值函数(operator=);
2024-04-28 15:36:21
536
原创 [C++11/14新特性] initializer_list和explicit关键字
1.initializer_list是C++11中的一个特性 它允许你使用{}中的值来初始化容器或数组,通常用于初始化标准库容器,比如std::vector、std::set、std::map以及数组。2.关键字explicit 翻译为:明白的 明确的,在构造函数前面加上explicit 就是在告诉编译器我要明确的调用 ,不需要你给我做隐式的转换。
2024-04-25 16:39:37
927
1
原创 [C++11/14新特性] nullptr空指针和auto关键字
但是在一些比较灵活的语言中,比如 C#、JavaScript、PHP、Python 等,程序员在定义变量时可以不指明具体的类型,而是让编译器(或者解释器)自己去推导,这就让代码的编写更加方便。而对于 isnull(NULL),我们期望它实际调用的是参数为 void*c 的 isnull() 函数,但观察程序的执行结果不难看出,并不符合我们的预期。auto 表示变量是自动存储的,这也是编译器的默认规则,所以写不写都一样,一般我们也不写,这使得 auto 关键字的存在变得非常鸡肋。
2024-04-24 16:19:19
930
原创 [C++11/14新特性] 数量不定的模板参数
..就是一个所谓的pack(包)用于template parameters,就是template parameters pack(模板参数包)用于function parameter types,就是function parameter types pack(函数参数类型包)用于function parameter,就是function parameters pack(函数参数包)
2024-04-23 12:22:03
633
2
原创 [自研引擎]GAMES104 反射系统
掌握Piccolo中反射宏和反射标签的用法,选择自己感兴趣的系统,给它管理的Component结构增加或修改一个属性,检查它及ComPonent结构的反射宏和反射标签,确保它能够被正确的反射。
2024-04-01 19:33:35
1428
2
原创 [自研引擎]GAMES104 物理系统
物理系统的作用是模拟和处理物体之间的物理行为和交互,物理系统在引擎中扮演着模拟和处理物体之间物理行为的角色,使游戏或应用程序更加真实、逼真和互动。它可以为物体提供真实的运动、碰撞和力学效果,增强用户体验并丰富游戏世界的交互性。
2024-03-28 14:35:16
643
1
原创 [自研引擎]GAMES104 动画系统
状态机最开始的时候指向_idle,接下来有两个数字1和2表示动作的优先级,当is_jumping为真时,会进入jump_start_from_idle状态,当is_moving为真时,会进入到walk_start状态,剩余状态同理,根据当前状态以及bool变量的值来决定!所以还需要补全blend函数,在Piccolo小引擎中找到Piccolo/engine/source/runtime/function/animation/pose.cpp,对走跑跳进行一个过渡,代码都有详细的注释。
2024-03-26 20:23:24
708
1
原创 [自研引擎]GAMES104 实现一个渲染功能
1.在Piccolo小引擎代码中找到Piccolo/engine/shader/glsl/color_grading.frag,补充此shader代码中的main函数,以实现ColorGrading功能。若代码编译成功且实现方法正确,则可以看到进行ColorGrading渲染之后的结果2.使用自定义的LUT图,并修改相应代码,实现具有个性的ColorGrading的效果。
2024-03-24 19:13:18
705
5
原创 [自研引擎]GAMES104 Piccolo引擎源码解析 一
1.第一类为所有·开头的文件或文件夹 ,这些文件其实是各个平台或者各个工具的一些配置文件(这些文件或文件夹在某些操作系统中会是默认隐藏的,所以如果下载下来发现没有这些文件,也不需要担心)2.第二类是cmake和CmakeList的一些脚本,Piccolo是通过cmake进行构建的3.第三类是系统的一些批处理文件,这些文件是为了方面构建Piccolo而编写的一些小脚本4.第四类是LICENSE、README和ReleaseNotes,这几个文件可以在阅读代码之前,简单的看一下。
2024-03-23 11:38:41
2256
原创 Linux下C++轻量级WebServer服务器 框架梳理
WebServer是一个很好的入门级C++项目,因为它涉及到了方方面面,不仅可以提高编程能力,还包括了操作系统、计算机网络、数据库等方面的知识,所以我很推荐大家去入手这个项目。说细一点这个项目包含锁机制、日志系统、线程池、http处理、并发模型等实现,但是很多人一开始做这个项目的时候,会觉得逻辑很混乱从而无从下手,所以我写下这篇文章目的就是帮助大家起到一个梳理逻辑的作用,好了废话不多说,咱们往下看!
2024-03-02 17:28:46
6821
4
原创 (Linux)TCP实现服务器和客户端通信+详细注释
2.connect函数表示连接到服务器,这个函数将套接字连接到 sockaddr_in 结构体中描述的IP地址和端口号,如果连接失败,将返回一个负数值。该程序实现了一个简单的TCP服务器的功能,可以接收客户端的连接,并且循环接收客户端发送的消息,将接收到的消息输出到终端。这是一个TCP客户端代码,它的主要功能是连接到指定的服务器,并且有发送消息接收消息的功能。5.在一个while循环中循环接收客户端发送的消息,然后将接收到的消息输出到终端。1.使用socket函数创建一个IPv4的TCP套接字。
2024-02-24 22:53:44
1031
1
原创 从github上下载的C++项目要如何运行?
最近一直在纠结,从github上面拉取的C++项目要如何在本地运行呢?通过反复在网上搜资料,才稍微明白了一些。所以写下这篇文章,做一个总结的同时,也可以为其他小伙伴作参考!
2024-02-21 13:11:16
5595
1
原创 Linux利用锁机制实现火车票售卖功能
当票数容量较小的时候,会出现一边倒的情况(即全部由一个窗口售卖),这是不符合现实情况的,有人就会有疑问,这个锁不公平吧?其实不是的,当我们把车票容量调大一些,会得到如下的情况。
2023-10-25 15:05:54
193
4
原创 CentOS ping不通百度的解决方案以及如何换源
前几天在学Linux的时候,遇到了这样一个问题。在ping www.baidu.com的时候。,看了很多文章,解决了这个问题。
2023-09-20 15:02:00
4720
1
原创 Linux网络设置、Xshell远程连接Linux、用户+文件子系统
普通用户(又可分为sudoers:可以临时拥有一些特权用户的权限 以及其他用户)如果出现下面的情况,代表你已经成功连接了,可以远程操控Linux服务器了。特权用户(超级用户、根用户) root 拥有至高无上的权限。看和百度的服务器是否连接 如果第一步没问题 就不用做后面。p (previous)-> 向上移动一整页。f(forw) -> 向下移动一整页。d(down)-> 向下移动半页。u(up) -> 向上移动半页。cd ~ 切换到该用户根目录。Ctrl + C 终止。cd / 切换到根目录。
2023-09-17 18:09:55
273
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅