- 博客(5)
- 资源 (6)
- 收藏
- 关注
原创 libevent源码剖析-最小堆实现定时器
Libevent 源码下载可以去官网 githubLibevent使用堆来管理Timer事件,其key值就是事件的超时时间,源代码位于文件minheap-internal.h中。所有的数据结构书中都有关于堆的详细介绍,向堆中插入、删除元素时间复杂度都是O(lgN),N为堆中元素的个数,而获取最小key值(小根堆)的复杂度为O(1)。堆是一个完全二叉树,基本存储方式是一个数组。看函数名都挺好懂的,只是下面这个结构体变量命名比较坑....typedef struct min_heap...
2020-05-17 10:50:04 531
原创 探索单例模式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构造函数是私有的。应用实例:一个班级只有一个班主任。Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同...
2020-05-04 09:43:04 248
原创 c++11新特性之右值引用
C++11 增加了一个新的类型,称为右值引用(R-value reference),标记为 T &&。在介绍右值引用类型之前先要了解什么是左值和右值。左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值 。所有的具名变量或对象都是左值,而右值不具名。...
2020-05-03 10:43:34 558
原创 布隆过滤器(Bloom Filter)- 避免缓存穿透和海量数据处理之利器
缓存处理流程这种模式处理缓存通常都是先从数据库缓存查询,如果缓存没有命中则从数据库中进行查找。这里面会发生的三种情况如下:①缓存命中:当查询的时候发现缓存存在,那么直接从缓存中提取。②缓存失效:当缓存没有数据的时候,则从database里面读取源数据,再加入到cache里面去。③缓存更新:当有新的写操作去修改database里面的数据时,需要在写操作完成之...
2020-05-02 11:54:50 964
原创 snprintf_s使用时注意问题
最近在项目中看到不知名的某位人士调用snprintf_s 这个函数,然后尝试调用这个接口时出现了崩溃,可能接口不常用,竟然没人发现,尝试找出其中原因。问题描述:这段代码运行到delete 时会导致崩溃。函数描述:int _snprintf_s( char *buffer, size_t sizeOfBuffer, // 打算用于存储的缓冲区的宽度...
2020-05-01 10:32:52 7527
C++实现一致性hash算法
2019-01-03
软考软件设计师复习资料
2017-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人