加载中
使用SQL 数据库建模树形结构

一般建模树形结构,比较直观的方式是在表中引入一个单独的字段,track 本记录的父记录id,比如典型的帖子回复: create database if not exists tree_test default charset 'utf8' collate '...

2020/12/20 21:53
34
基于游标的分页方法

目前比较常见的分页方法就是基于sql数据库的offset 子句或者类似mongodb 的skip() 方法来实现,基于偏移的方法好处是实现简单,可以在页面之间做随机跳转,缺点就是数据量稍大,排在后面的页...

benchmark golang 并发原语 (lock, rwlock, atomic value, blue green)

Arthur O'Dwyer 在CPPCON 2020 介绍了一种blue/green 的并发模式, 说是模仿devops 领域的blue/green 应用部署模式, 这里blue 代表老版本的全局易变状态 , green 代表新版本,虽然这个模式...

2020/11/16 00:18
86
ieee 浮点表示

上图是ieee 单精度浮点表示,s 是符号位,蓝色的8bit 表示指数,f 表示小数部分。 单精度bit pattern 组成模式 = 1 (s) + 8 (e) + 23 (f) 双精度bit pattern 组成模式 = 1 (s) + 11 (e) + 5...

2019/06/11 19:36
121
c++ 中常见的缩写短语

1.小字符串对象空间优化,SSO(Small String Optimization): 对于短小字符串,c++ 标准库一般采用栈上分配,加快处理速度。可以使用heaptrack 测试程序的heap使用情况。 sso.cc: #include <st...

2019/04/04 12:35
127
使用Skip list 实现有序的map

skip list 属于概率数据结构,基本上是一个有序的链表,加上很多随机数目的链接作为快速导航使用,至于每个节点被拔高多少,由一个模拟投硬币的过程决定,连续地抛一定数目的硬币,直到遇到反...

2019/03/14 12:45
25
Rabin-Karp, Boyer-Moore, Knuth-Morris-Pratt 字符串匹配

Rabin-Karp 使用计算滚动hash 的方式来搜索文本中的模式, 计算每一次模式串位移一个位置后相应的文本块对应的hash值, hash值匹配后,有很高的概率是匹配的, 可以不去挨个字符的在检查一遍...

2019/03/06 12:37
166
基数排序

radix sort,是基于值本身的信息来排序, 而不是值之间的比较来排序,如insert sort, merge sort,heap sort, quick sort 等。维基百科上面有很好的描述,msd 是从左往右(从高位到低位), ls...

quicksort 演化改进过程

最简单容易理解的版本,我觉的是Nico Lomuto 的单向划分, c++ stl 的std::partition 就是用这个来实现的, 就是根据谓词函数的返回值,把返回true的全都调到数组的开头位置,返回false的放在尾...

2019/01/20 11:22
94
从递归到非递归

递归确实是一种优雅强大的技术, 但是好多代码库都偏爱使用迭代,即使使用递归, 也都往往对递归调用的最大栈深度提前做预估或限制等。可能考虑递归性能一般低于迭代。有些问题,我们可能先是...

rust 的traits, generic, unsafe 练习

最近发现实现泛型的代码有些难度,虽然rust的基于trait 约束的泛型比起c++ 的模板已经优雅很多了,不会出现打印几页纸的模板实例化错误,但是当泛型参数和生命周期参数纠缠一块时,马上就进入...

2018/12/11 19:20
99
bitcoin 中的 limitedmap

bitcoin 里面的limitedmap 基本上是在std::map 上实现了优先队列的功能, 主要用在记录向对等节点索取inv 对应的时间记录。 以前不了解, stl 容器可以如此灵活使用, 把多个容器组合一起,完成...

2018/11/07 12:08
195
Bitcoin序列化库使用

Bitcoin序列化功能主要实现在serialize.h文件,整个代码主要是围绕stream和参与序列化反序列化的类型T展开。 stream这个模板形参表达具有read(char**, size_t) 和write(char**, size_t)方法的...

2018/11/07 10:25
42
bitcoin task scheduler 使用

bitcoin 进程启动后,有一个专门的线程做任务调度, 这些任务根据指定的时刻,执行对应的函数: bool AppInitMain() { ....... // Start the lightweight task scheduler thread CScheduler:...

2018/11/01 20:40
60
bitcoin boost signal 的使用

bitcoin 代码中大量使用boost::signal, boost::signal 实现了信号与槽的事件通知机制,或者说是一种消息的发布与订阅机制, signal 类型是一个可调用类型,slot 就是callback 对象,或者说事...

2018/11/01 20:29
26
模块化与微服务

应用模块化系统设计原则同时避免微服务的运维复杂度

2017/07/19 19:51
327
golang compiler autogenerated method

直接调用 package main type user struct { age int } func (u user) say() { println("hello") } func main() { u := user{13} u.say() } 在上面的代码...

两个高性能golang日志库比较

nanolog vs zerolog 后端开发过程中,经常需要对一些重要的事件做日志,方便观察程序的控制流,建立对程序的理解和自信,对于缺少好用debugger (也许是delve) 的golang 来说, 日志更是重要的...

2017/07/03 15:15
1.6W
golang 实现斐波那契堆

二叉堆提供了o(lgn) 时间的插入, 删除最小,降级等操作,o(n) 时间的合并操作; 斐波那契堆提供了更优操作时间界限:o(1) 插入, o(lgn) 删除最小, o(lgn) 删除, o(1)合并。 根据算法导论上...

2015/03/18 16:59
394
golang 标准库 container/ring 及 container/heap

由于目前golang 没有提供泛型机制,所以通用容器实现基本和 c 类似,golang 用 interface{} 做转接, c 用 void * 转接。 ring 包实现循环双向链表: type Ring struct   {       ...

2015/03/18 13:57
1.1K

没有更多内容

加载失败,请刷新页面

返回顶部
顶部