- 博客(180)
- 收藏
- 关注
原创 【C++语言】初识模版
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)
2025-02-11 10:27:02
407
原创 【C++语言】C++入门
定义命名空间,需要使用到 namespace 关键字,后面跟着命名空间的名字,然后接一对 { } 即可,{ } 中即为命名空间的成员。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个。
2025-02-10 14:22:01
1048
原创 【go语言】protobuf 和 grpc
这对 Go 开发者来说是非常重要的,因为它确保了生成的 Go 代码能够正确地与其他 Go 代码进行集成。在进行编写 proto 文件的时候,我们需要将编号和变量一一对应,不能出现在不同目录下的同一个proto 文件出现不对等的情况,否则会出现一些错误。生成 go 代码时,protoc 会根据 go_package 选项来决定生成的 go 文件的路径。:Go 代码会根据这个选项来决定生成的 Go 文件放置的路径和包名,确保代码结构符合 Go 项目的标准结构。文件中指定生成的 Go 代码的包路径。
2025-02-03 10:25:21
901
1
原创 【go语言】grpc 快速入门
gRPC 是由 Google 开发的一个高效、开源的远程过程调用(RPC)框架,用于在分布式系统中进行通信。它是基于 HTTP/2 协议,支持多种语言,能够让不同的系统或应用程序(即使使用不同的编程语言)进行高效的通信。
2025-02-02 11:52:17
1138
1
原创 【go语言】接口
在Go语言中,接口(interface)是一个非常重要的概念,它定义了一组方法的集合。实现一个接口的类型,只需要提供该接口中所有方法的实现,无需显式声明“实现了某接口”,Go会自动推断。Method1() // 方法1的签名Method2() // 方法2的签名// 可以有多个方法type关键字用于定义类型;是接口的名称;interface是Go的关键字,用于定义接口;接口中的方法签名不包含实现,只有方法的名称和参数/返回值列表。
2025-01-30 13:45:20
1300
原创 【go语言】gorm 快速入门
ORM(,Object-Relational Mapping)是一种程序设计技术,用于在关系型数据库和面向对象编程语言之间进行转换和映射。ORM 允许开发者通过面向对象的方式与数据库交互,而无需直接编写复杂的 SQL 查询语句。
2025-01-30 10:36:18
718
原创 【go语言】指针
在 Go 中,指针通过来声明,它指向某种类型的变量。用于声明指针类型。用于取变量的地址(即获取指针)。var ptr *int = &a // ptr 是指向 a 的指针fmt.Println("a 的值:", a)fmt.Println("ptr 指向的地址:", ptr) // 输出 a 的地址fmt.Println("ptr 指向的值:", *ptr) // 输出 a 的值:声明一个ptr变量,类型为指向int的指针。&a:取a的地址,并将其赋值给指针ptr。*ptr:解引用,获取。
2025-01-29 21:40:50
1370
1
原创 【go语言】结构体
type也可以用来定义结构体类型,这种类型用于存储多个字段(数据)。// 定义一个结构体类型Age int// 创建一个 Person 类型的实例fmt.Println(p) // 输出 {Alice 30}type还可以用来定义函数类型,特别是在回调函数或接口方法中非常有用。// 定义一个函数类型// 使用函数类型fmt.Println(add(3, 5)) // 输出 8在这个例子中,AddFunc是一个函数类型,它定义了一个接收两个int参数并返回一个int类型结果的函数。type。
2025-01-29 21:19:55
996
原创 【go语言】函数
在 go 语言中,函数是代码块的集合,用于执行特定任务或者计算。函数接受输入(成为参数),执行操作并返回输出(称为返回值)。go 语言中的函数定义非常简单且灵活。在 go 语言中,函数通过 func 关键字定义。func:用于声明函数。:函数的名字,通常首字母大写表示公开(exported)函数,首字母小写表示私有(unexported)函数。:参数列表(可选),参数使用name type的格式。多个参数之间用逗号分隔。returnType:返回值类型(可选)。如果函数没有返回值,则省略。
2025-01-29 10:55:36
1323
原创 【go语言】并发编程
是一个用于描述程序中操作之间因果顺序的规则。在并发编程中,happen-before 机制定义了如何确保一个操作在另一个操作之前发生,并且保证一个操作的结果能够对其他操作可见。具体而言,程序顺序规则(Program Order Rule):在同一个 goroutine 内,代码的执行顺序是保证的,即一个操作发生在前一个操作之后。同步规则(Synchronization Rule):一个 goroutine 对 channel 的发送操作(ch <- x。
2025-01-27 18:52:03
1318
原创 【go语言】map 和 list
/ map 集合,保存数据的一种结构// 创建一个map,也是一个变量,数据类型是 mapvar map1 map[int]string // 只是声明了但是没有初始化,不能使用 nil// 更多的时候使用的是make方法创建var map2 = make(map[string]string) // 创建了map// 在创建的时候,添加一些基础数据// 关于map的类型,就如定义的一般 map[string]int// 类型主要是传参要确定Slice(切片)slice。
2025-01-25 21:12:34
1404
1
原创 【go语言】数组和切片
在 go 语言中,数值是值类型。这意味着,当你将一个数组赋值给另一个数组时,go 会创建一个副本,而不是引用同一块内存。这是与引用类型(比如切片、slice、映射 map、通道 channel)的区别之一。arr1 := [3]int{1, 2, 3} // 创建一个数组arr2 := arr1 // 将 arr1 赋值给 arr2arr2[0] = 100 // 修改 arr2 的第一个元素fmt.Println("arr1:", arr1) // 输出 arr1: [1 2 3]
2025-01-25 19:42:44
1119
原创 【go语言】变量和常量
iota是Go语言中的一个非常有用的工具,简化了常量的定义,特别是在需要递增或生成一组值时。在IOTA的Go语言实现中,iota通常不会直接用于IOTA协议本身,但可以在一些常量的定义中使用,比如网络协议类型、交易状态标识等。
2025-01-22 23:57:33
1168
原创 【C++语言】多线程相关
并发强调的是系统可以在同一时间段内处理多个任务,但并不一定要求同时执行;而并行则是要求在同一时刻执行多个任务。并发可以在单核 CPU 上实现,而并行通常需要多核 CPU 或分布式系统支持。
2025-01-10 16:19:35
958
原创 【C++语言】C++的 IO 流
在C语言中,如果想要将一个整形变量的数据转换为字符串格式,如何去做?使用 itoa() 函数使用 sprintf() 函数但是这两个函数在转化时,都需要先给出保存结果的空间,那空间要给多大呢?就不太好界定,而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。itoa()函数介绍itoa()函数用于将整数转换为字符串。不过需要注意的是,itoa()不是 C++ 标准库的一部分,它是一些 C 编译器(如 Turbo C)的非标准函数。
2025-01-10 13:58:58
644
原创 【C++语言】智能指针
什么是内存泄露:内存泄露指的是因为疏忽或者错误造成程序未能释放已经不再使用的内存的情况。内存泄露并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏(Memory Leak)是指程序在运行过程中,动态分配的内存(通常是通过malloc或new等函数分配的内存)没有及时释放,导致这些内存区域无法被回收,从而占用了系统资源,可能会导致系统性能下降,甚至崩溃。2.1.1 内存泄漏的原理:动态内存分配:当程序通过某种方式(如malloc()
2025-01-09 11:23:47
653
原创 【C++语言】异常
这一部分就是对异常抛出和规范的第五条补充,实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理,因为一个项目中如果大家随意抛出异常,那么外城的调用者基本就没有办法玩了,所以实际中都会定义一套继承的规范体系。这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了。// 服务器开发中通常使用的异常继承体系public:, _id(id){}protected:int _id;
2025-01-05 10:50:09
927
原创 【C++语言】AVL树
在 AVL 树节点的定义中也需要使用三叉链结构,因为我们在进行旋转的时候需要使用其父亲节点。这 AVL 树中也需要使用平衡因子,平衡因子的作用是防止每一个子树中左右子树的高度之差小于等于1。// 三插链// 平衡因子int m_bf;// 构造函数, m_bf(0), m_kv(kv){}
2024-12-29 16:57:21
834
原创 【C++语言】map 和 set
set 是按照一定次序存储元素的容器。在 set 中,元素的 value 也标识它(value 就是 key,类型为T),并且每一个 value 必须是唯一的。set 中的元素不能在容器中修改(元素总是 const),但是可以从容器中插入或者删除他们。在内部,std::set 中的元素总是按照其内部比较对象(类型比较)所指示的特定严格强弱标准进行排序。set 容器通过 key 访问单个元素的速度通常比 unordered_set 容器慢,但是他们允许根据顺序对子集进行直接迭代。
2024-12-26 01:29:44
800
原创 【C++】C++11 STL容器emplace方法原理剖析
push是将已经构造好的元素添加到容器中。emplace是直接在容器中构造元素,避免了多余的复制或移动,通常能带来更好的性能。在需要频繁插入复杂对象时,emplace通常是更优选择。
2024-12-23 01:42:30
337
原创 【数据结构】哈希表
使关键字和其存储位置满足关系:存储位置 = f(关键字),这就是一种新的存储技术——散列技术。散列技术是在记录的存储位置和他的关键字之间建立一个确定的对应关系f,使得每一个关键字key对应一个存储位置f(key),在查找时,根据这个确定的对应关系找到给定的key的映射f(key),如果待查找集合中存在这个记录,则必定在f(key)的位置上。我们把这种对应关系f称为散列函数,又称为哈希函数。,这块连续的存储空间称为散列表或者哈希表(Hash Table)。优势:适用于快速的查找,时间复杂度为O(1)。
2024-12-23 01:16:58
612
原创 【前端 HTML】前端的前端知识
计算机是由硬件和软件组成的,硬件有五大基本部件:中央处理器(运算器和控制器)、存储器(内存和硬盘)、输入设备(键盘,鼠标)、输出设备(音箱,显示器)。 软件就分为系统软件和应用软件,系统软件分为: Windows,Linux,Mac,Harmony等,应用软件就很多了。
2024-11-28 01:43:10
311
原创 【操作系统】输入/输出(I/O)管理
I/O”就是“输入/输出”(Input/Output)I/O设备机会可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。下图就是将一些常见的输入输出设备进行举例:在UNIX系统中将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。I/O设备的机械部件主要用来执行具体I/O操作,比如我们看得见的鼠标、键盘的按钮,显示器的LED屏,移动硬盘的磁臂,磁盘盘面。电子部件通常是一块插入主板扩充槽的印刷电路板,作为实现CPU对设备控制的“中介”
2024-11-13 22:50:34
1074
原创 【Go语言】elasticsearch的学习
主要是查 text,但是也可以查 keyword,模糊匹配 keyword 字段,是需要查完整的,匹配 text 字段则不用,搜完整的也会搜出很多。因为 title 是 text 类型,只能模糊匹配,但是需要精确匹配的时候,也能通过 title.keyword 的形式来进行精确匹配。我们在添加文档中,如果是 mapping 里面没有的字段,那么 es 会自动创建这个字段对应的 mapping。如果我们需要删除的文档不存在,不会有错误,res.Succeeded() 为空。
2024-11-11 00:09:55
498
原创 【Gorm】多表关系
ID int64ID int64// 自定义的第三张表重点是many2many 生成的表的名字要和第三张表的名字要对上。然后joinForeignKey 对应的是本表的ID,例如用户表的joinForeignKey 就是 UserIDJoinReference 对应就是对方表的ID,用户表的 JoinReference 就是 ArticleID然后就是要添加 SetupJoinTable ,不然是不会走第三张表的创建钩子的。// 必须要加上这个才会走第三张表的创建钩子。
2024-11-03 01:40:30
1102
原创 【Gorm】自定义数据类型
JSON数据用的比较多,我们在迁移数据库之前,我们需要先对自定义数据类型进行接口函数的重新定义,只需要定义 Scanner 和 Valuer 函数即可,否则会迁移数据库失败。下面,我们来看一看代码是什么??// Scan 实现 sql.Scanner 接口, Scan 将 value 扫描到 Jsonbif!ok {return err// value 实现 driver.Valuer 接口, Value 返回 json value。
2024-10-30 17:34:11
708
原创 【Gorm】传统sql的增删查改,通过go去操作sql
MySQL中的建库,建表,删库,删表,添加记录,查询,删除记录,更新记录这些命令是一定要回的,就算我们脱离 orm 这些,也能直接连接上数据库进行操作。
2024-10-30 08:58:33
586
原创 【Qt】常用控件:按钮类控件
我们可以使用 QPushButton 表示一个按钮,这也是当前我们最熟悉的一个控件。QPushButton继承于QAbstractButton。这个类是一个抽象类,是按钮的父类。
2024-10-27 13:53:20
1037
原创 【go语言】从0开始理解rpc和grpc
下面,我们可以使用 go 语言来进行实现这个问题,因为在 go 语言中提供的包还是很全的。import ("fmt""net/http""strconv"// http// 返回的格式化为:json{ "data"=3 }// 1. callID 的问题 r.URL.Path 2. 数据的传输协议 url 的参数传递协议 3. 网络传输协议 http_ = r.ParseForm() // 解析参数})})import ("fmt"// 传输协议。
2024-10-26 22:03:21
1472
原创 【Go语言】
别名实际上是为了更好地理解代码///////////////////// 这里要分点进行记录 使用传值的例子,当两个类型不一样需要进行类型转换上面两种方式定义的int是不同的,因为使用等于号是类型别名,不使用等于号的是重新定义了一个类型。如果我们即想使用int类型,又想让这种类型的变量有自己的方法,我们可以使用type自定义一种类型,这其实也算是一种结构体,我们可以为这个结构体创建一个方法,我们就可以进行调用这个方法。这个语句就是单独地给int变量起一个别名,其他用法和int一模一样。
2024-10-25 00:53:26
889
原创 【go语言】Gin框架的简单基本文档
我们要定义一个检验器:如果传入的IP字段中有值,一定是正确的;如果不传,就不传。// 创建翻译器// 注册翻译器if ok {})// 可以允许开发者将用于自定义的验证函数注册到验证器中// 可以自定义和使用自己的验证逻辑,从而扩展男默认的验证功能v.RegisterValidation("fip", func(fl validator.FieldLevel) bool { // 这种类型是检验上下文信息// 下面将每一个字段打印出来= "" {// 传了值就去校验是不是IP地址。
2024-10-23 13:24:07
1359
原创 【C++语言】深入学习C++要修炼的内功
函数栈帧是在内存中的栈区为被调函数开辟的一块空间,里面存放的是该函数中定义的变量等东西,当函数运行完毕栈帧将会被销毁。Push:入栈,为栈增加一个元素Pop:出栈,从栈中取出栈顶。
2024-10-22 00:39:12
1135
1
原创 【C++语言】STL —— 六大组件
STL允许用户通过自定义空间配置器来实现特定的内存管理策略,例如使用特定的内存池或者在内存分配时考虑线程安全等。
2024-10-20 11:04:43
690
原创 【go语言】Gin框架介绍和使用
Gin中的中间件必须是一个 gin.HandlerFunc 类型的。// StatCost 是一个统计耗时请求耗时的中间件c.Set("name", "小王子") // 可以通过c.Set在请求上下文中设置值,后续的处理函数能够取到该值// 调用该请求的剩余处理程序c.Next()// 不调用该请求的剩余处理程序// 计算耗时。
2024-10-16 00:48:40
3277
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人