前面说了B-Tree数据结构等定义,并基于google的一个内存golang btree包源码分析,实现了B-Tree的初始化和插入,最后再来说说元素删除部分代码的理解吧。要看示例代码请点这里
由一个golang的B-Tree包展开-2(插入)
在上一篇中,说了B-Tree的定义以及Google 一个btree包的一些信息, 这里根据阅读其源代码的理解,实现一个简化版的B-Tree插入操作。
Google的那个golang版本的btree包在应对gc和并发读写(copy on write)操作方面做了很多优化,这里我在实现的时候,先忽略这些,只是先实现核心的数据操作部分,不过对于一个生产包来说,gc和并发操作却是是要不得不考虑的事情
由一个golang的B-Tree包展开-1(属性介绍)
偶然看到一个google的一个golang实现的内存中b-tree包(传送门),就细看了其实现. 对其他平衡树感谢趣的可以看这里:Left-Leaning Red-Black Tree, B+tree
reddit上有个github.com/google/btree和 github.com/cznic/b比较的讨论,可以看到这个包的作者与用户的一些讨论。
golang官方blog摘要-slice
golang切片的使用和内部细节 – By Andrew Gerrand
网上可以看到的golang slice博文很多,因为刚开始使用golang的时候, 偶尔需要确定一下slice容量扩展的细节,就会去Google一下,其实最生动,图文并茂的还是官网的这篇,这里记录一下, 以防哪天自己脑子秀逗了,又要回来确认什么的东西的时候从网上Google半天。
先来看两个例子:
golang官方blog摘要-reflect
Rob对golang reflect对一篇讲解贴:
The Laws of Reflection– By Rob Pike
golang作为一个静态语言,reflect给其提供了更灵活的runtime操作方式(元编程), 虽然在golang中,这也会带来性能问题,比如官方json包在序列化/反序列化的性能,让很多人改用了其他避开reflect的方式去处理问题,但是,也还是要承认,reflect给程序带来的极大灵活性无法让人割舍。
《自私的基因》读书笔记
坦白地讲,是断断续续用半年的时间,才囫囵吞枣地看了一遍这本书,暂且记录一下自己的理解吧。
在看这本书之前,已经看过了尤瓦尔的《人类简史》(Sapiens:A Brief History of Mankind),其中就有大段提到道金斯的基因观点,比如从农作物基因扩张这个角度来审视农业革命,把人类反过来看成是农作物扩张的工具,觉得这是农作物基因的胜利,书中,类似的文字,无不隐隐透露出道金斯对尤瓦尔的影响。
golang中http server处理请求的过程梳理
golang中http server设置的几种方式记录
1.1 最简单的方式
通过查看http.ListenAndServe的源码可以知道,其第一个参数是监听地址,第二个参数是一个Handler接口类型, 只要是实现了这个接口的ServeHTTP函数即可。这里的http.ListenAndServe函数会创建一个server结构体实例, 并将server的Handler属性赋值为我们手动实现的Handler接口。
js中获取数组的全部子集数组和特定长度子集数组
小伙伴最近在做一个数据处理分析的东东,中间有一个需要获取数组全部子集数组列表的需求,虽然ES6中增加了一种新的数据类型语法糖Set,不过还是没有提供获取集合子集的方法,所以,就自己写了一个,这里特别做一次记录,以方便下次自己使用。
如给定数组arr = [1,2,3],返回全部子集数组为[[1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]],如果返回长度为2的子集数组则返回值[[1,2], [1,3], [2,3]].
整体思路上,可以先获取特定长度子集的数组,然后对个长度子集列表做一个归并即可,示例代码如下。
mongodb command tutorial
mongodb术语概念:
database,collection(对应table), document(对应记录行),field(对应数据字段)