Go 1.22版本前for循环问题

笔记  Go 

Go 1.22版本前for循环问题在 Go 1.22 版本之前,for 循环声明的变量只创建一次,并在每次迭代中更新。在 Go 1.22中,循环的每次迭代都会创建新变量,这将会避免意外的共享错误发生。解决办法

MYSQL数据排序


MYSQL数据排序https://www.mianshiya.com/question/1780933295526146049排序过程中,如果排序字段命中索引,就采用索引排序,反之采用文件排序。文件排序中,如果数据量少就在内存中排序,数据量大就利用磁盘文件进行外部排序。filesort当使用expl

布隆过滤器

笔记  Go 

布隆过滤器参考: https://dbwu.tech/posts/bloom_filter/基本概念布隆过滤器是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。实现原理布隆过滤器使用一个位数组合多个哈希函数来实现。位数组: 一个包含m位的数组,初始

Golang channel 底层

笔记  Go 

Channel1. 简介Channel 是 Go 语言中一种特殊的类型,它是一个并发安全的队列,用于在 goroutine 之间传递数据。2. 数据结构Channel 的数据结构如下:2.1 hchantype hchan struct { // 循环队列 qcount uint

Golang slice切片

笔记  Go 

扩容原理切片的扩容流程源码位于 runtime/slice.go 文件的 growslice 方法当中,其中核心步骤如下:• 倘若扩容后预期的新容量小于原切片的容量,则 panic• 倘若切片元素大小为 0(元素类型为 struct{}),则直接复用一个全局的 zerobase 实例,直接返回• 倘

Golang map底层结构

笔记  Go 

Golang map底层数据结构https://golang.design/go-questions/map/principal/Golang map 实现原理概述map是一种常用的数据结构,核心特征包括下面三点:存储基于key-value对映射的模式基于key维度实现存储数据的去重读,写,删操作控

缓存淘汰策略

笔记 

FIFOFIRST IN FIRST OUT 先进先出每次淘汰最早添加的记录,但是很多记录添加的早,还访问很频繁,这样的话命中率就不高。LFU淘汰缓存中使用频率最低的。LFU 认为如果数据过去被访问多次,那么将来被访问的频率也会很高。LFU 的实现需要维护一个按照次数排序的队列,每次访问后元素的访问

go并发-采用最快回应

笔记  Go 

package mainimport ("fmt""math/rand""time")func fetchData(server string, ch chan<- string) {time.Sleep(time.Duration(

基于worker pool实现计算num的平方

笔记  Go 

package mainimport ("fmt""sync")func worker(ch <-chan int, result chan<- int) {defer wg.Done()for v := range ch {result <

基于worker pool实现并发下载图片

笔记  Go 

package mainimport ("fmt""io""log""net/http""os""path/filepath""strings""sy