golang和javascript的实现des加解密的cbc模式
1. 介绍
1.1 对称加密算法
DES:DES 全称 Data Encryption Standard,是一种使用密钥加密的块算法。现在认为是一种不安全的加密算法,因为现在已经有用穷举法攻破 DES 密码的报道了。
3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。由于计算机运算能力的增强,原版 DES 密码的密钥长度变得容易被暴力破解;3DES 即是设计用来提供一种相对简单的方法,即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。
AES 全称是 Advanced Encryption Standard,翻译过来是高级加密标准,它是用来替代之前的 DES 加密算法的。AES 加密算法的安全性要高于 DES 和 3DES,所以 AES 已经成为了主要的对称加密算法。+
golang数据传输加密解密
在前后端数据传输的过程中, 如果没有对数据加密, 抓包软件直接能看到我请求发的是什么数据,服务端给我返回的数据是什么。
并且可以用抓包软件修改响应数据返回给客户端,这样一来,客户端实际上接收到的数据并不是服务端给我的源数据,而是被第三者修改过的数据,如此一来,数据传输的安全就很有必要了。
golang的http限流实战
1. golang限流实现
1.1 实现方案
uber 开源库中基于漏桶算法实现了一个限流器。
https://github.com/uber-go/ratelimit
滴滴开源实现了一个对http请求的限流器中间件。可以基于以下模式限流。
基于IP,路径,方法,header,授权用户等限流
通过自定义方法限流
还支持基于 http header 设置限流数据
实现方式是基于
github/go/time
实现的,不同类别的数据都存储在一个带超时时间的数据池中。代码地址
https://github.com/didip/tollbooth
golang 网络包中还有基于信号量实现的限流器。
https://github.com/golang/net/blob/master/netutil/listen.go
也值得我们去学习下。
常见限流算法和golang的令牌桶算法
限流就是通过对并发访问 / 请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。
例如秒杀网站,限制 22 点 5 分 – 22 点 10 分 秒杀 999 份产品, 限制放行 5w 个请求,若在该段时间内,请求在第 5w 以后的请求,直接拒之门外, 也就是我们在进入网站的时候显示,系统繁忙。
时序数据库简介
gitlab提交MR通知飞书的golang代码实现
公司团队是使用gitlab
来管理源代码的,一直以来当提交了一个MR
后,需要手动在内部IM
群里贴出PR
链接和摘要,然后@
目标同事来帮忙review代码,其实大部分流程是可以自动化的。
golang内存和goroutine泄露的场景
1. 内存泄露
假设
a
是一个大slice,而b
只引用了一小部分,这就造成了底层数组其他未被引用的部分内存泄漏。1
2
3
4
5func sliceLeak() {
data := make([]byte, 1000000)
slice := data[:10] // 这个切片依然引用整个数组
_ = slice
}因为协程被永久阻塞而造成的永久性内存泄露。
未正确释放文件、数据库连接等资源,导致内存无法释放。
延迟调用函数导致的临时性内存泄露。
全局变量或长生命周期的对象持有大量数据,无法被垃圾回收。
在一些复杂的数据结构中,可能会出现循环引用,导致垃圾回收器无法回收。
使用time.Timer或time.Ticker时,未及时调用Stop方法。