自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis-benchmark 基准测试

我们可以通过 redis 自带工具 redis-benchmark 来对 redis 服务器进行性能测试。

2024-06-10 13:06:29 376

原创 使用 ISIC 快速申请 JetBrain 学生免费产品

此篇文章适合急需通过学生优惠使用 JetBrain 产品并且愿意花费 50 (申请国际电子学生证 ISIC 需要 50)的学生。需要等待时间1-3天,主要是等待 ISIC 的时间,只要 ISIC 发放 ISIC name 和 ISIC ID,将其填写到 JetBrain 的申请中,按 JetBrain 指定步骤完成即可,不需要人工审核。

2024-06-07 22:28:10 613

原创 C++构造器设计模式

构造器模式可以简化复杂对象或一系列对象的构造过程,从而单独定义构成该复杂对象的各个组件的构建方法。这篇文章只讲解较为简单的构造器的创建。创建一个构造器我们得了解如何实现流式调用以及如何关闭外界的访问权对构造函数的访问权限。

2024-06-06 19:56:57 410

原创 C++AB类相互包含

本文讨论我们该如何实现如下结构,而不会报错:class A {B b;} class B{A a;}

2024-06-06 17:22:58 616

原创 详解 Muduo 网络服务和日志模块

这篇文章主要目的是介绍muduo 的网络服务模块和日志模块。

2024-06-03 14:13:14 1285

原创 详解 Protobuf 在 C++ 下 Message、enum、Service 的使用

这篇文章主要目的是介绍Protobuf的常用知识,包括前置声明,message,service,enum 等。

2024-06-03 14:10:33 939

原创 Zookeeper 最新稳定版本 3.8.4 服务安装与原生 C 静态库编译

注意: /path 代表 apache-zookeeper-3.8.4-bin.tar.gz 的所在的文件夹路径,请在进行以下步骤时替换为 apache-zookeeper-3.8.4-bin.tar.gz 在你系统中的目录(或者直接切换到该目录下,并省略前缀 /path/)。(*为占位符,可以是 so、so.2等)这将在 apache-zookeeper-3.8.4-bin/zookeeper-client/zookeeper-client-c 下创建一个名为 generated 的目录。

2024-06-02 23:44:24 769 1

原创 里氏替换原则经典反例:正方形不是长方形

很明显,在接口 process 中 Square 不能替换 Rectangle,因为当 Square 替换 Rectangle 作为参数时,程序发生了异常,出现了预期之外的结果。所以,为了确保里氏替换原则成立,我们应该取消 Square 对 Rectangle的继承,重新给 Square 和 Rectangle 设计一个更高层的抽象,如 Shape,Shape 中有一个 Square 和 Rectangle 共有的属性 area,然后让 Square 和 Rectangle 都继承 Shape。

2024-06-02 21:32:17 951

原创 从C++示例理解开闭原则

可以看出当我们有新的需求时,必须要对 ProductFilter 类进行修改,并没有遵循开闭原则,所以我们希望重新设计使这个程序满足开闭原则,重构主要用到 template 模版编程。这里的类型 T 可以由我们自由地指定,我们可以指定为类型 Product 也可以指定为其他类型,这就意味着,这个规范将不再局限于 Product,我们可以在任何其他类型中使用它。开闭原则要求我们在编写代码时,尽量不去修改原先的代码,当出现新的业务需求时,应该通过增加新代码的形式扩展业务而不是对原代码进行修改。

2024-06-01 19:54:07 655

原创 如何使用基类指针迭代派生类对象

如果我们想使用基类指针迭代指向的派生类对象,我们需要在基类中声明返回迭代器的虚函数begin和end,然后在派生类中实现begin和end,这样我们就可以使用基类指针指向派生类后使用其迭代器了。

2024-06-01 10:56:15 223

原创 尽量以const、inline替换 #define

中给出的遵循这个条款大概理由如下:#define的宏在预处理阶段就已经被替换掉,所以编译器可能看不到宏的存在,只看到被替换的内容,从而导致因这个宏的错误使用而导致的编译错误没有被正确得提示。1.653例如和上面这段宏有关的编译错误,可能会提及1.653而不是。但是随着编译器的发展,一个健壮的编译器已经能发现并定位到#define导致的错误。1.653这段代码存在试图给宏赋值,因为是一个左值自然会出现编译错误。这段error的含义是:赋值操作的左侧需要一个lvalue。

2024-05-17 00:41:20 348

原创 C++lambda表达式什么情况下能推断返回类型

综上,C++primer中的那段话并不完全正确。

2024-05-16 17:24:52 424

原创 C++如何实现不可被继承的类

因为在C++中,当创建派生类的对象时,会首先调用基类的构造函数,然后再调用派生类的构造函数。因此,构造一个派生类对象会调用两个构造函数:一个是基类的,一个是派生类的。那么基类的构造函数被私有化后,派生类将无法访问基类的构造函数,从而导致编译错误,也就意味着我们实现了一个不可被继承的类。但是这个设计方式限制了我们创建基类对象实例的途径,我们只能通过创建一个public静态成员的方式来创建类的实例。当然,我们也可以通过final关键字限制析构函数的覆盖,来间接限制继承,这里不做赘诉。

2024-05-15 23:36:31 266 1

原创 以对象管理资源:智能指针

我们利用对象生命周期结束自动析构这一点,将资源生命周期和对象生命周期进行绑定,从而确保资源正确释放。这类容器来取代动态分配的数组,而非使用智能指针来管理动态分配的数组。不允许复制,但是复制的需求确实存在,所以出现了引用计数智能指针。可以管理一个对象的资源,但是不允许对其进行复制。被销毁时(即计数降为0时),它才会释放所管理的资源。管理的对象,但不会增加其引用计数,当最后一个。等,并不会造成内存泄漏,因为对它们而言。是允许复制和赋值的,这类操作会使得。所指向的对象就会被销毁,即使。,就会出现内存泄漏的情况。

2024-05-14 21:59:53 1149 2

原创 C++中的extern关键字

关键字只是声明了一个已经存在的变量或者函数,而不会创建新的存储空间。实际的存储空间是在变量的定义处或者函数的定义处创建的。关键字用于声明一个变量或函数,这个变量或函数在其他文件中定义,这通常用于在多个源文件之间共享变量或函数。对于任何在其他源文件中定义非静态变量或非静态函数,只要使用。关键字对其进行声明,即可在当前源文件下进行使用。的变量,所以需要对两个源文件进行编译链接。修饰的变量和函数的。

2024-05-12 23:06:53 290 1

原创 ubuntu上如何安装Protobuf C++

Test pass.

2024-05-09 00:47:55 397

原创 在ubantu上下载安装Bazel

目录中,要全局使用Bazel命令需要将此目录添加到默认路径。下载Bazel二进制安装程序。命令可查看其他安装选项。

2024-05-09 00:11:38 221

原创 从源码理解Go语言切片扩容机制之容量大小

切片的扩容时,新分配的切片容量由定义在Go源码./src/runtime/slice.go文件中的nextslicecap函数的newcap计算策略和growslice函数中的内存对齐策略共同决定。

2024-05-05 19:58:57 215 2

原创 Go语言中的单元测试和基准测试

Go语言内建`testing`包,我们可以简单地通过`导入测试包`、`约定命名`和`ge test`快速完成单元测试和基准测试的编写和执行。

2024-05-02 11:11:46 746 2

原创 Go语言中的模块

在Go语言中,我们可以通过模块(module)来聚合多个包,将一些零散的功能合并为一个完整的模块。在模块中,我们可以指定运行这部分代码所需要的依赖,包括Go语言的版本和它依赖的其他模块的集合,这个指定的内容通常存储在模块的go.mod文件中。

2024-05-02 00:44:08 8 1

翻译 Json And Go

https://go.dev/blog/json

2024-05-01 23:56:03 6

翻译 闭包作为协程运行会发生什么

翻译what happen with closures running as goroutine

2024-04-30 22:03:39 5 1

原创 Go语言中如何实现协程同步

如果只有一个工作协程,需要主协程等待工作协程完成任务,可以使用通道来实现同步。如果需要等待有多个协程,一般有两种方式:使用缓冲通道、1.使用缓冲通道阻塞等待所有协程的完成信息。

2024-04-29 22:11:04 571 1

原创 给Vscode穿上华丽的外衣

闲来无事,捣鼓了一下 Vscode 的外观,主要是修改 Color Theme 和文件图标。倒腾来倒腾去,尝试过。会根据你的命名不同的文件和文件夹分配不同的图标,具体图标可以查看官网。的配色迷得不行,就直接锁死了,然后下了个。各式各样、五花八门的颜色主题。敲代码真的赏心悦目,强烈推荐。,搭配在一起简直完美。

2024-04-28 18:24:20 250

原创 Go语言的缓冲通道和非缓冲通道

Go语言中通道存在两种:非缓冲通道和缓冲通道。可以分别用于通道同步和事心啊生产者消费者模型。

2024-04-28 01:02:00 277

原创 Go语言的匿名函数与闭包

在Go语言中,我们可以把闭包理解为由函数和其相关的引用环境组合而成的实体。上面的示例其实也可以直接用普通函数实现,那么闭包有什么特殊用途呢?函数返回了一个匿名函数。这个匿名函数保持并访问外部函数的。1.创建一个可以维护自己状态的函数或方法。Go 支持匿名函数,并能用其构造。变量,这就是一个闭包。函数时,它都会添加传入的值到。变量,并返回当前的总和。变量的状态仍然被保留。

2024-04-26 23:28:26 139 1

翻译 Go语言的分配原语:new和make

GO语言有两种分配原语,内置函数new和make。它们的用途不同并且应用于不同的类型,这导致它们很容易让人感到困惑,但其实它们的规则很简单。我们先来谈谈new。它是一个内置函数,用于分配内存,但与其他一些语言中的同名函数不同,它不初始化内存,只将其归零。也就是说,new(T)为新的T类型项分配零存储,并放回其地址,一个*T类型的值。在Go语言术语中,它返回一个指向新分配的T类型零值的指针。由于new。

2024-04-25 23:39:41 16 1

原创 C++中如何使用JSON

在C++中使用JSON

2024-04-24 23:57:58 378

原创 C++命令行参数传递

在C++中,可以通过main函数的参数来接收命令行参数。

2024-04-23 22:42:41 128

原创 Go语言如何处理含中文的字符串

Go语言如何求中文字符串的长度或提取字符。

2024-04-22 17:21:18 1038

原创 Go的格式化输出

Go的格式化输出

2024-04-22 14:11:38 161 1

空空如也

空空如也

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

TA关注的人

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