自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leveldict为什么用Skiplist作为索引?

综上所述,Redis 选择字典(哈希表)是为了最大化内存中数据操作的速度和效率,而 LevelDB 选择跳表是为了在磁盘上高效地处理有序数据和优化写操作。Redis 和 LevelDB 都是高效的键值存储系统,但它们的设计目标和适用场景有所不同,这导致了它们在内部数据结构的选择上也有所不同。简单性:对于内存数据库来说,简单的数据结构通常意味着更高的性能和更低的维护成本。并发和锁:虽然跳表在理论上的时间复杂度高于哈希表,但是它们的结构使得在并发环境下的锁竞争较小,因为更新操作可以局部化到跳表的不同部分。

2024-04-08 19:22:08 265

原创 leveldb学习:头文件函数添加inline关键字作用

允许在多个编译单元中定义相同的函数,而不违反 One Definition Rule(ODR)。ODR是C++中的一个规则,它要求一个程序中的非内联函数、变量和类的每个实体只能有一个定义。对于内联函数,这个规则有所放宽。建议编译器将函数体内联到每个函数调用点。这意味着函数调用会被替换为函数体本身的代码,从而可能减少函数调用的开销。然而,这只是一个建议,编译器可能会忽略此建议。在slice.h文件函数有inline关键字。

2024-04-08 16:59:23 170

原创 leveldb为什么open接口是使用 DB** dbptr而不是 DB* dbptr

leveldb为什么open接口是使用 DB** dbptr而不是 DB* dbptr。对象,并将这个新创建的对象的地址赋给调用者提供的指针。指针的拷贝,而非原始指针本身,因此任何对这个拷贝所做的修改都不会反映到原始指针上。)来访问和修改调用者传递的原始指针变量所指向的内存地址。对象的地址赋值给调用者提供的指针变量,从而实现了将创建好的。,主要是因为这个接口的设计目的是要在函数内部实例化一个。实例传递给调用者,同时保持接口的简洁性和易用性。实例的地址传递回给调用者。的修改(即指向新创建的。

2024-04-08 15:34:34 130

原创 go语言访问指针对应的成员数据:无->只有.

在Go语言中,你不需要使用类似C或C++中的“->”操作符来访问指针指向的数据成员。Go语言的设计使得当你通过指针访问结构体的成员时,你可以直接使用点(这展示了Go语言在处理结构体指针成员访问时的简洁性。)操作符,编译器会自动解引用指针。这使得代码更加简洁易读。go语言如何访问指针对应的成员数据,不使用“->”嘛?成员,而不需要显式解引用指针。下面是你的函数示例,展示了如何使用。都是通过点操作符直接访问的,尽管。例如,假设你有一个指向。

2024-04-08 15:22:03 179

原创 cacheline与数据同步

如果其他核心也缓存了a的值,那么这些值必须被标记为无效(在MESI协议中,这对应于将缓存行的状态从Shared状态改为Invalid状态),迫使其他核心在下次访问a时重新从主内存加载。这意味着,当一个核心修改了它的缓存中的a的值,这个修改必须被传播到其他核心的缓存以及最终同步回主内存。最终,两个线程都试图将它们的结果同步回主内存,但是由于缺乏同步机制,a的实际增加只发生了一次,导致a最终的值为1而不是正确的2。前缀确保了这个操作是原子的,即在这条指令执行的过程中,CPU不会执行该内存地址的其他操作。

2024-04-08 11:36:54 1610

原创 leveldb使用DBImpl,而不是DB有具体实现

通过将接口 (DB) 和实现 (DBImpl) 分离,Leveldb 的设计不仅提高了代码的可维护性和可扩展性,也使得代码更加清晰、易于理解和测试。这是一个典型的好的软件设计实践,被广泛应用在各种软件项目中。

2024-04-07 19:25:05 271

原创 为什么c++析构函数需要添加virtual

在C++中,当你使用继承时,通常会涉及到基类指针(或引用)指向派生类对象的情况。在这种情况下,如果通过基类指针(或引用)删除派生类对象,就需要确保调用正确的析构函数以避免资源泄露。这就是为什么在C++中,如果一个类可能会被继承,那么它的析构函数通常需要声明为虚函数(virtual)。

2024-04-07 19:08:09 202

原创 互联网大厂推荐算法实战 问答

为什么说,用物料的后验消费数据做召回存在“幸存者偏差”?能将这些消费数据用于排序吗?使用物料的后验消费数据做召回,会放大“马太效应”,对新物料不友好,如何缓解?解释什么是bias特征?你能举出哪些bias特征的例子?bias特征怎样接入模型?能否和其他正常特征一起喂入DNN底层?为什么?某男性新用户对“体育”这个分类的喜好程度未知,如何填充?某新物料的后验指标未知,如何填充?对观看次数、观看时长这样的特征,如何做标准化?某个物料曝光2次,被点击1次,如何计算它的CTR?

2024-01-18 15:36:25 1857 1

原创 protobuf格式理解

3.type=2时,可以是string, 也可以是embedded messages,所以如无需embedded messages,可以fake一个proto,用string替换embedded messages,节省解析成本。2.VARINT无法直接获取长度,需看每个字节第一个bit是否为1,如是后面还有字节直至第一个bit是0。1.protobuf整体格式就是tag+type+value。

2024-01-09 19:45:14 377

原创 自动识别机器指令集优化

【代码】自动识别机器指令集优化。

2023-12-01 16:09:22 33 1

原创 汇编学习记录

1.movq中q代表8个字节。

2023-11-17 11:25:29 21

原创 CACHE设计

待。

2023-11-17 11:22:47 21

原创 DoublyBufferedData源码分析

https://github.com/apache/brpc/blob/master/src/butil/containers/doubly_buffered_data.hhttps://github.com/apache/brpc-website/blob/c91a354a7b9116e3617e90f6d66c537d28db1080/content/en/docs/RPC%20in%20depth/Locality-aware/_index.md#doublybuffereddata

2023-11-16 14:57:49 71

原创 SparseMap最节省空间的哈希表

sparseMap使用bit存储,比如下图,二进制字符串变为0100|1001|0000|1011。无论插槽是空的还是满的,每个元素仅需要1位记录。传统大小为N的传统阵列的map需要N x len(obj)字节。在下图中,长度为16的阵列只存储6个元素,浪费了10个。popcount是统计数值中有多少个1.获取对应插槽实际存储数据位置。

2023-11-08 14:41:34 95 1

原创 shared_ptr 相关知识

1.为什用make_shared 单次分配内存,不用写两次类型名Tstd::make_shared, std::make_shared_for_overwrite - cppreference.com2.通过判断shared_ptr持有对象是否为unique,来决定如何修改当前数据.避免使用读写锁借shared_ptr实现copy-on-write_陈硕的博客-CSDN博客借shared_ptr实现copy-on-write场景:一个多线程的C++程序,24h x 5.5d运行。有几个工作线程T

2022-05-20 16:29:17 85

原创 -rpath -L区别

linker - What's the difference between `-rpath-link` and `-L`? - Stack Overflow你用库里的内容,-L。-rpath 你用的库依赖别的so,指定搜索路径

2021-11-04 20:16:23 105

原创 gdb 个人总结

1.打印好看 set print pretty on2.常用数据结构打印3. info locals4.如何强制转换类型,得加''错:p *(Test::A*)pObj2对:p *('Test::A'*)pObj25.打印所有堆栈thread apply all bt打印堆栈到文件setloggingfile/tmp/test.txtsetloggingonthreadapplyallbt6.指针强转.........

2021-11-04 20:05:56 515

原创 系统调用透析(以ls为例)

[zhazhiwei@yq01-feed-mlarch-index-builder04.yq01.baidu.com ~]$ strace lsexecve("/usr/bin/ls", ["ls"], [/* 38 vars */]) = 0brk(NULL) = 0x231f000mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f.

2021-04-19 17:19:03 116

原创 time-wait的作用

原因1:为了保证客户端发送的最后一个ack报文段能够到达服务器。原因2:在第四次挥手后,经过2msl的时间足以让本次连接产生的所有报文段都从网络中消失,这样下一次新的连接中就肯定不会出现旧连接的报文段了。...

2021-03-29 22:58:41 71

原创 为啥tcp连接需要三次握手

第三次握手时为了防止已失效的连接请求报文段有传送到B,因而产生错误。

2021-03-29 22:54:52 37

转载 LeetCode 报错解决 heap-buffer-overflow Heap-use-after-free Stack-buffer-overflow Global-buffer-overflow

https://blog.csdn.net/zhangpeterx/article/details/88775434gcc -O -g -fsanitize=address--std=c++11 test.c

2019-06-25 13:42:09 804

原创 LFU算法

#include <iostream>#include <list>#include <unordered_map>using namespace std;class LFUCache {public: LFUCache(int capacity) { _capacity = capacity; _min_frequ...

2019-06-25 13:36:40 411

原创 3-23

计划1.听课李永刚 ,下午碎觉,游泳、2.晚上看中美贸易,没弄懂。大部分时间荒废在不知道干啥(知乎)看了会刘未鹏书,居然是南大,思考我的大学五年。...

2018-03-22 23:51:16 108

原创 我的金钱观

马上参加工作,理清自己金钱观。对未来生活进行定调。1.钱和任何东西,都是为了让你生活得更好,而不是给你带来麻烦。比如买房,让我生活变得更好,还是更糟(被房贷压得透不过气)。2.不要为了攒钱而牺牲当下生活。毕业后,第一件事就是买车,可以每天早上9点到公司吃早餐,晚上9点下班比较方便回去。而且可以住得远一点,房租便宜些。周末出行方便许多。买车可以买贵车,只要每年贬值率不高就行。其实只支付了每年贬值的钱...

2018-03-22 22:19:00 178

原创 3月计划

linux操作系统学习,完成jyy任务,对linux源码进行学习。神经网络学习,ts学习。上课,有趣的课要花精力。每周锻炼4小时(每周提高一小时 封顶14小时 )读书:见识 理清自己金钱观。尝试新的东西:望远镜没事干的时候:生物化学 http://www.icourses.cn/sCourse/course_6275.html大明王朝,万历十五年自私的基因...

2018-03-22 21:59:23 107

空空如也

空空如也

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

TA关注的人

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