摘要: 一、缓存穿透 定义:查询一个一定不存在的数据,由于缓存是不命中时被动写,并且处于容错考虑,如果从 DB 查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到 DB 去查询,失去了缓存的意义。 解决方案: 缓存空对象:当从 DB 查询数据为空,仍然将这个空结果进行缓存,具体的值需要使用特殊的 阅读全文
posted @ 2026-03-26 15:00 cyusouyiku 阅读(12) 评论(0) 推荐(0)
摘要: 具有以下组件: 客户端:来自不同设备的不同用户发送请求 身份提供商:验证用户或者客户身份并颁发安全令牌 API网关:处理客户端请求 静态内容:容纳系统的所有内容 管理:在节点上平衡服务并识别故障 服务发现:查找微服务之间的通信路径的指南 网络:代理服务器及其数据中心的分布式网络 远程服务:启用驻留在 阅读全文
posted @ 2026-03-26 14:35 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: channel中使用了ring buffer(环形缓冲区)来缓存写入的数据,ring buffer有很多好处,而且非常适合FIFO 阅读全文
posted @ 2026-03-26 14:25 cyusouyiku 阅读(9) 评论(0) 推荐(0)
摘要: 不要通过共享内存来通信,而要通过通信来实现内存共享。Go的CSP并发模型,中文可以叫做通信顺序进程,是通过goroutine和channel实现的。 channel收发遵循先进先出FIFO原则,分成有缓冲区和无缓冲区,channel中包括 buffer、sendx 和 recvx 收发的位置(rin 阅读全文
posted @ 2026-03-26 14:24 cyusouyiku 阅读(9) 评论(0) 推荐(0)
摘要: 首先判断,如果新申请容量大于 2 倍的旧容量,最终容量就是新申请的容量 否则判断,如果旧切片的长度小于 1024,则最终容量就是旧容量的两倍 否则判断,如果旧切片长度大于等于 1024,则最终容量从旧容量开始循环增加原来的 1/4, 直到最终容量大于等于新申请的容量 如果最终容量计算值溢出,则最终容 阅读全文
posted @ 2026-03-26 14:18 cyusouyiku 阅读(13) 评论(0) 推荐(0)
摘要: 其实是基于数组,本身非常小,可以理解成对底层数组的抽象,因为基于数组实现,所以他的底层内存是连续分配的,效率很高,还可以通过索引获得数据。 他是一个只有三个:指向底层数组的指针,切片的长度,切片的容量。 阅读全文
posted @ 2026-03-26 14:16 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: ![image](https://img2024.cnblogs.com/blog/3681401/202603/3681401-20260326140144578-1290516169.png) 阅读全文
posted @ 2026-03-26 14:01 cyusouyiku 阅读(10) 评论(0) 推荐(0)
摘要: make的作用是为slice,map和chan的初始化,然后返回引用 阅读全文
posted @ 2026-03-26 14:01 cyusouyiku 阅读(7) 评论(0) 推荐(0)
摘要: go convey是一个支持Golang的单元测试框架 go convey能够自动监控文件修改并启动测试,并可以将测试结果实时输出到Web界面 go convey提供了丰富的断言简化测试用例的编写 需要导入包: import ( "testing" . "github.com/smartystree 阅读全文
posted @ 2026-03-26 13:58 cyusouyiku 阅读(12) 评论(0) 推荐(0)
摘要: cap函数就是给array,slice和channel来返回他们的容器的容量(最多存多少元素) 阅读全文
posted @ 2026-03-26 13:55 cyusouyiku 阅读(9) 评论(0) 推荐(0)
摘要: 无缓冲的channel是同步的,而有缓冲的channel是非同步的。 阅读全文
posted @ 2026-03-26 13:54 cyusouyiku 阅读(7) 评论(0) 推荐(0)
摘要: 如果给一个nil的channel发送数据会造成永久阻塞 如果从一个nil的channel中接收数据,也会造成永久阻塞 给一个已经关闭的channel发送数据会引起panic 从一个已经关闭的channel接收数据,如果缓冲区中为空,则返回一个零值 阅读全文
posted @ 2026-03-26 13:53 cyusouyiku 阅读(11) 评论(0) 推荐(0)
摘要: Go 支持显式类型转换,语言本身要求严格的类型匹配,不能隐式转换。 示例: i := 55 // int j := 67.8 // float64 sum := i + int(j) // 将 float64 显式转换为 int 类型转换规则: 基本数值类型(int、float、byte、rune 阅读全文
posted @ 2026-03-26 13:40 cyusouyiku 阅读(7) 评论(0) 推荐(0)