golang 切片

切片结构

1
2
3
4
5
type slice struct {
array unsafe.Pointer
len int
cap int
}
1
2
a = make([]int, 0)
unsafe.Sizeof(a) // 24

切片组成元素:

  • 指针:指向底层数组
  • 长度:切片中元素的长度,不能大于容量
  • 容量:指针所指向的底层数组的总容量
阅读更多

内存对齐

CPU与内存的交互

CPU获取内存数据:CPU通过地址总线(Address Bus)发送地址信号到内存,并将控制总线(Control Bus)信号设置为Enable信号,之后内存会将数据通过数据总线(Data Bus)返回给CPU。
CPU写入内存数据:CPU通过地址总线(Address Bus)发送地址信号到内存,并将控制总线(Control Bus)信号设置为Set信号,最后将数据通过数据总线(data bus)发送到内存并进行写入。

内存

CPU要想从内存读取数据,需要通过地址总线,把地址传输给内存,内存准备好数据,输出到数据总线
若是32位地址总线,可以寻址[0,2的32次方-1],占用内存4g

阅读更多

深入理解go map

哈希函数

哈希查找表一般会存在“碰撞”的问题,就是说不同的 key 被哈希到了同一个 bucket。一般有两种应对方法:链表法开放地址法链表法将一个 bucket 实现成一个链表,落在同一个 bucket 中的 key 都会插入这个链表。开放地址法则是碰撞发生后,通过一定的规律,在数组的后面挑选“空位”,用来放置新的 key。

阅读更多

kafka 基本术语

Apache Kafka 是一款开源的消息引擎系统,也是分布式流处理平台,使用的是纯二进制的字节序列。

kafka术语


Topic: 发布订阅的对象是主题(Topic) 生产者程序通常持续不断地向一个或多个主题发送消息

Producer: 向主题发布消息的客户端应用程序称为生产者(Producer)

Consumer: 订阅这些主题消息的客户端应用程序就被称为消费者(Consumer)

阅读更多

给字符串加索引

MySQL是支持前缀索引的,前缀索引的优势就是占用的空间小,这同时带来的损失是,可能会增加额外的记录扫描次数。

阅读更多

2019年总结

今年的最后一段时间是在罗振宇的跨年演讲中度过的,当然不是在现场。

2019是一个有意思的一年,如在北京待的越久,似乎就越不愿意离开了。在这里认识了更多厉害的人,就会看到自己的渺小。

阅读更多

分析MySQL中隐式转换导致查询结果错误及索引不可用

以下是例子

1
SELECT * FROM TABLE WHERE xxx = 11 

如果列xxx确实只有11的,你是否就认为筛选出来的就一定只有xxx=11的呢?

在过滤字段为数值类型的时候,数值类型有一种隐式转换,如果是以数字开头的,包含有字符,后面的字符会被截断,只取前面的数字值。

阅读更多

记一次MySQL死锁排查过程

背景

大概说一下业务场景,需要定时计算一些数据,从其他系统、接口拉取达到的数据比较多,然后经计算后的值存储在本系统中。拉取的数据量可能有万左右,然后以主键存在的数据是需要更新的。不存在则插入。每次做全量更新/插入。

阅读更多

python钉钉机器人自定义回复

大概有这样的需求

  1. 达到xxx条件。比如是到了某个时刻。机器人自动在群里通知,并@相关的人
  2. 比如在群里回复一个关键词、然后期望得到想要的信息,以达到解放双手的目的。这一块儿就需要自己对接钉钉API来实现了。比如这种问答式的
阅读更多