Boltdb使用(一)基本用法

介绍 boltdb 是一个使用 Go 编写的键值对数据库,它的目标是 简单、快速和稳定的轻型数据库,适用于那些不需要使用像 MySQL 一样的完整的数据库系统的项目。 使用 1. 安装 go get github.com/boltdb/bolt/... 2. 打开(Open)一个数据库文件连接 func main() { dbPath := "./data.db" // 指定你的数据库文件要存储的地方 db, err := bolt.Open(dbPath, os.ModePerm, nil) if err != nil { panic(err) } ... } bolt 打开一个文件之后,会一直获得此文件的锁,在这期间,其他的进程无法再次打开此文件,直到最开始的进程释放锁。打开一个已经打开的 bolt文件 会导致当前进程无限制地等待下去,直到另一个已经打开的进程结束这个文件的使> 用。为了避免这种无限制的等待,可以给 Open 操作添加超时: ...

January 5, 2021 · JemmyHu(hujm20151021@gmail.com)

虚拟网络设备tuntap

实验机器:MacBook Pro (Retina, 15-inch, Mid 2015) Golang 版本:go version go1.14.6 darwin/amd64 一、前言 网卡 也称 网络适配器,是电脑与局域网进行相互连接的设备,在 OSI 七层模型中,工作在 物理层 和 数据链路层,其作用可以简单描述为: ...

November 16, 2020 · JemmyHu(hujm20151021@gmail.com)

使用ghz压测GRPC接口

一、前言 公司后端服务已经全部微服务化,想要调试某个服务可以使用 grpcui,但要对某个接口进行压测,grpcui 还做不到。诸多努力之后找到本次主角:https://github.com/bojand/ghz,官网:ghz.sh。 推荐理由:简洁!可以一次性解决掉 proto 文件相互之间引用的烦心事! ...

November 9, 2020 · JemmyHu(hujm20151021@gmail.com)

优秀数据结构--默克尔树

一、简介 默克尔树是一种典型的二叉树结构,由一个根节点、一组中间节点 和 一组叶节点 组成。默克尔树最早由 Merkle Ralf 在 1980 年提出,曾广泛用于 文件系统 和 P2P 系统中,比如 Git、区块链、IPFS 等大名鼎鼎的项目或技术。 他又被称为 哈希树,即存储哈希值的树。树的叶子结点是 数据块(文件或者对象)的哈希值,而非叶子结点保存的是其子节点连接起来后的哈希值。简单来说,它有以下特点: ...

October 22, 2020 · JemmyHu(hujm20151021@gmail.com)

优秀组件-布隆过滤器

一、前言 前段时间辞职骑完川藏线后回来找工作,面试 贝尔科教后端开发工程师 岗位时,遇到这样一个面试题: 有一个几十亿的白名单,每天白天需要高并发查询,晚上需要更新一次,如何设计这个功能。 ...

October 7, 2020 · JemmyHu(hujm20151021@gmail.com)

跳表原理以及Golang实现

一、前言 大家应该对 二分查找算法 不陌生,二分查找之所以能达到 O(logN) 的时间复杂度,一个重要原因在于它所依赖的数据结构是数组,数组支持随机访问,可通过下标很容易地定位到中间的某个元素。但是链表就没有 随机访问数据 这个特性,要判断是否包含某个元素,只能从头开始遍历对比。但是数组有数组的局限性,比如需要连续的内存空间,插入删除操作会引起数组的扩容和元素移动;链表有链表的优势,链表不需要先申请连续的空间,插入删除操作的效率非常高。 ...

October 5, 2020 · JemmyHu(hujm20151021@gmail.com)

Redis源码阅读--1.基础数据结构与对象

首先明确,Redis 是一个使用 C 语言编写的键值对存储系统。Redis 是众所周知的 “快”,一方面,它是一个内存数据库,所有的操作都是在内存中完成的,内存的访问速度本身就很快;另一方面,得益于它底层的数据结构。Redis 的常见类型可在这个网页找到:Redis 命令参考简体中文版,其使用到的底层数据结构有如下六种:简单动态字符串、双向链表、压缩列表、哈希表、跳表和 整数数组。本篇文章,将具体了解这些底层数据结构的实现。 ...

October 2, 2020 · JemmyHu(hujm20151021@gmail.com)

MySQL关于索引

一、常见的索引类型 1. 哈希索引 哈希索引(Hash Index) 基于哈希表实现,只适合精确匹配,不适合范围查找。对于每一行数据,存储引擎都会使用一个哈希函数,对改行的对应索引列计算哈希code,通过 K-V 的形式保存起来,其中“K”为哈希 code,“V”是指向改行记录的指针。 ...

September 29, 2020 · JemmyHu(hujm20151021@gmail.com)

排序算法

1. 堆排序 堆 是一种数据结构,它具有如下特征: 是一棵完全二叉树 父节点的值 > 子节点的值 1.1 完全二叉树 若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是 完全二叉树。 ...

September 24, 2020 · JemmyHu(hujm20151021@gmail.com)

LeetCode-位运算

位运算 位运算讲究技巧,需要多积累经验。 一、背景知识 Go 语言支持的 位运算符 如下: 运算符 描述 规则 & 按位 与 二者同为 1 时结果才为 1,否则为 0 | 按位 或 二者同为 0 时结果才为 0,否则是 1 ^ 按位 异或 相同为 0,相异为 1 « 左移 n 位,相当于乘以 2 的 n 次方 后面补 0 » 右移一位,相当于除以 2 的 n 次方 截掉最后一位 1. 与 将参与运算的两个数 各对应的二进制位 相与。只有当二者参与运算的对应位同为 1 时,该位才为 1,否则为 0。 ...

September 22, 2020 · JemmyHu(hujm20151021@gmail.com)