C++最佳实践-命名相关
通用命名规则
首选将缩写当做为单个单词,例如 StartRpc() 而不是 StartRPC() 。
参考: https://www.educative.io/collection/page/10370001/5111386763952128/6533026123087872
repo 风格保证相对统一
文件命名
全部小写,单词间用”_” 链接,例如file_name.h
定义FooBar 类型的文件: foo_bar.h 和 foo_bar.cc
类型命名
单词首字母大写,如 MyClass
class MyClass {}; // class|
struct MyStruct {}; // struct
typedef int64_t Time...
Protobuf性能优化原理解析:二进制编码与序列化效率
优化方式
二进制编码:protobuf 使用紧凑的二进制格式进行数据编码,相比于文本格式(如 JSON、XML),二进制格式在存储和传输上更加高效。二进制编码不仅减少了数据的体积,还降低了序列化和反序列化的时间开销。
压缩算法:protobuf 提供了多种压缩算法,如 Varint 编码、ZigZag 编码等,用于对整数和布尔类型数据进行压缩。这些算法可以减小整数类型数据的存储空间,从而减少序列化和反序列化的时间和网络传输的带宽消耗。
字段标签和有限字段集:protobuf 使用字段标签来标识消息中的字段,而不是使用字段名称。通过使用数字标签,可以减小数据的体积,并且在序列化和反序列化时可以更快地定位和访问字段。此外,protobuf 还支持有限字段集,即只序列化消息中定义的字段,...
使用SMHasher框架对mumurhash、siphash、cityhas 进行哈希性能对比
hash
murmurhash1,murmurhash2,murmurhash3,siphash(redis6.0当中使⽤,rust等大多数语言选用的hash算法来实现hashmap),cityhash 都具备强随机分布性;测试地址如下:
https://github.com/aappleby/smhasher
编译执行
测试项目
Sanity 是不是可以使用的
Performance 完成一个散列需要多长时间
Differentials 产生相同哈希的概率,可能导致相同的的最小差异
Keysets 分布均匀程度
一系列的测试方式具体可参考:https://github.com/aappleby/smhasher/wiki/SMHasher
测试报告
...
7022. 限制条件下元素之间的最小绝对差问题
题目
https://leetcode.cn/problems/minimum-absolute-difference-between-elements-with-constraint/description/
给你一个下标从 0 开始的整数数组 nums 和一个整数 x 。
请你找到数组中下标距离至少为 x 的两个元素的 差值绝对值 的 最小值 。
换言之,请你找到两个下标 i 和 j ,满足 abs(i - j) >= x 且 abs(nums[i] - nums[j]) 的值最小。
请你返回一个整数,表示下标距离至少为 x 的两个元素之间的差值绝对值的 最小值 。
题解
class Solution {
public:
int minAbsoluteD...
C++ weak_ptr指针内部实现原理与控制块机制详解
std::weak_ptr通过内部使用一个指向控制块(control block)的指针来实现。控制块是一个包含引用计数和其他相关信息的结构体,用于跟踪std::shared_ptr共享的对象。控制块通常由一个引用计数和一个指向堆上分配的对象的指针组成。
当你创建一个std::shared_ptr时,它会分配一个新的控制块,并将对象的指针存储在其中。然后,如果你使用std::weak_ptr创建一个弱引用,它会共享相同的控制块,但不会增加引用计数。控制块中的引用计数仅由std::shared_ptr维护。
当你需要访问通过std::weak_ptr观测的对象时,你可以使用std::weak_ptr的lock()函数。lock()函数会返回一个std::shared_ptr,它指向与...
cpp 变成./a.out执行文件的编译的过程, 系统是如何启动
编译阶段:使用 C++ 编译器(如 g++)将源代码(.cpp 文件)编译成目标文件(.o 文件)。编译器会将源代码翻译成机器可执行的指令,并生成与平台相关的目标文件。
链接阶段:使用链接器(如 ld)将目标文件和所需的库文件链接成可执行文件。链接器会解析目标文件中的符号(如函数和变量),并将它们与库文件中的定义进行关联,生成最终的可执行文件。
可执行文件的启动:当执行 ./a.out 命令时,操作系统会进行以下处理:
a. 操作系统加载可执行文件到内存中,并为其分配执行所需的资源。
b. 操作系统在加载可执行文件后,会定位可执行文件中的入口点(entry point)。入口点通常是一个特定的函数,如 main 函数。
c. 操作系...
C++编程最佳实践:语法规范与代码优化指南
所有权与指针相关
动态分配出的对象最好有单一且固定的所有主,并且通过智能指针传递所有权,优先考虑 unique_ptr
// perfer owning pointer over raw in virtual c'tor function
class Investment {
// ...
};
class Stock : public Investment {
// ...
};
class Bond : public Investment {
// ...
};
class RealEstate : public Investment {
// ...
};
template <typename... Ts>
std::unique_ptr<...
共计 188 篇文章,24 页。