摘要:
Golang Sync.WaitGroup 使用及原理 使用 func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() fmt.Println("Hello 阅读全文
摘要:
在做 API 接口开发时, 一般会统一 API 返回格式, 例如 { "code": 200, "data": { //xxxxx //xxxxx }, "message": "OK" } 在后端代码定义中, 也会定义一个结构体来对应这种结构, 并且, 由于 data 字段里的数据是未知的(与具体业 阅读全文
摘要:
数据分区(数据密集型应用系统设计第六章) 我们必须摆脱串行的限制. 明确状态定义, 提供优先级与属性描述, 我们必须首先定义清楚关系, 然后才是执行步骤 Grace Murray Hopper, 管理方法以及未来的计算机 面对海量数据或非常高的压力查询, 复制技术还不够, 我们还需要将数据拆分成 阅读全文
摘要:
数据复制(数据密集型应用系统设计第五章) 一个可能出错的事物与一个不可能出错的事物之间的主要区别是, 当一个不可能出错的事物出错了, 通常也就意味着不可修复. Douglas Adams, <<基本无害>> (1992) 为什么需要复制: 使数据在地理位置上更接近用户, 从而降低访问延迟 当部分 阅读全文
摘要:
数据存储与检索(数据密集型应用系统设计) 如果你把东西整理得井井有条, 下次就不用查找了 德国谚语 从最基本的层面看, 数据库只需要做两件事情 向它插入数据时, 它就保存数据 查询数据时, 它应该返回需要的数据 数据库核心: 数据结构 世界上最简单的数据库 #!/bin/bash db_set( 阅读全文
摘要:
为什么 MySQL 偶尔会选错索引?建表没有创建主键会发生什么?二阶段提交时发生异常数据会一致吗? 阅读全文
摘要:
数据库的作用一般是存放应用程序不可丢失的数据, 由于内存的价格和易失性, 所以不能存放长久的数据, 所以需要持久化到硬盘, 但是硬盘的读取速度相较于内存来说相差一个数量级, 所以为了加快硬盘的读写速度, 索引就出现了, 它就像书本的目录一样, 能够快速定位到你想看的地方. 阅读全文
摘要:
逃逸分析是 Go 编译器的一部分。它分析源代码并确定哪些变量应该分配到栈上、哪些逃逸到堆上。 阅读全文
摘要:
平常开发调试接口请求遇到 https 流量或者 gprc 无法查看网络层, 记录一下防止遗忘 阅读全文
摘要:
哈希表的意义不言而喻,它能提供 O(1) 复杂度的读写性能,所以主流编程语言中都内置有哈希表。
哈希表的关键在于哈希函数, 好的哈希函数能减少哈希碰撞,提供最优秀的读写性能。 阅读全文