govalidator 验证陷阱:字段名与规则名冲突 我有一个 User 结构体,我想验证里面的 email 字段存储的是不是邮箱,于是想用 govalidator 来实现这一功能,可是不管我输入什么,govalidator 都返回 true。
Redis zset 共享对象 本文介绍 Redis 中 skiplist 编码的 zset 对象是如何共享对象的。skiplist 编码的 zset 对象为了同时支持高效的点查询和范围查询,内部使用了跳表和哈希表。倘若将每个插入的元素都拷贝两份,分别插入跳表和哈希表,将浪费大量的内存,那 Redis 是怎么让二者共享对象的呢?
Go AfterFunc 不触发 Go 的 time.AfterFunc 的作用是等待指定的时间间隔,然后在它自己的 goroutine 中调用 f。现在有一个问题,我明明调用了 AfterFunc,但是它还没调用我指定的函数,程序就退出了。
Redis RDB 持久化问题 有 A、B 两台计算机,将 A 中 Redis 的 rdb 文件拷贝到 B,B 重启 Redis 并未加载拷贝来的 rdb 文件。经过重重排查,最终发现问题出在 Redis 关闭的时候。
shared_ptr 引用计数相关问题 智能指针是 C++11 增加的非常重要的特性,并且也是面试的高频考点,本文主要解释以下几个问题:- 引用计数是怎么共享的、怎么解决并发问题的- 资源释放时,控制块的内存释放吗- weak_ptr 怎么判断对象是否已经释放
W-TinyLFU 算法实现 主缓存(main cache)使用 SLRU 逐出策略和 TinyLFU 准入策略(TinyLFU 的准入和淘汰策略是:新增一个元素时,判断使用该元素替换一个旧元素,是否可以提升缓存命中率),而窗口缓存(window cache)采用 LRU 逐出策略而没有任何准入策略。
LRU Cache LRU(Least Recently Used,最进最少使用)页面置换算法的思想是:在缺页中断发生时,置换未使用时间最长的页面。该思想依赖局部性原理:在前面几条指令中频繁使用的页面很可能在后面的几条指令中被使用。
跳表的实现 跳表是一种有序数据结构,它通过在每个节点中维护多个指向其他节点的指针,从而达到快速访问节点的目的。跳表支持平均 O(logN)、最坏 O(N) 复杂度的节点查找,还可以通过顺序性操作来批量处理节点。
shared_ptr 模拟实现 shared_ptr 这种智能指针访问对象采用共享所有权来管理其生存期。没有哪个特定的 shared_ptr 拥有该对象。取而代之的是,所有指涉到它的 shared_ptr 共同协作,确保在不再需要该对象的时刻将其析构。
Open64 编译器安装 网络上关于 Open64 的资料很少,自己安装也花了很长时间,因此将安装过程整理出来。我使用的是 w2ll 分支,对应的 Tags 为「clang-prebuilt」,系统是 ubuntu 20.04,使用以下方法成功安装的时间是:2023 年 08 月 01 日。
静态链接库顺序问题 最近遇到了一个非常奇怪的问题,编译时竟因为链接库的顺序不同,就有完全不同的结果。这些东西都是在 muduo_base 中定义的,我明明链接的 muduo_base 库,为什么会有这些报错呢?当我改变链接库的顺序时,神奇的一幕出现了。编译成功了,运行程序也得到了我想要的结果。这究竟是为什么呢?下面就来为你解答这一迷题。
虚函数经典问题 由此得出了虚表指针的构造时机:在 base class constructors 调用操作之后,但是在程序员供应的代码或是 member initialization ilst 中所列的 members 初始化操作之前。