0%

谈起音乐软件,只钟情网易云音乐。奈何版权太少,歌单里好多音乐涉及到版权的问题无法听,即使开了黑胶VIP也不行。

但是我们可以通过一些“奇淫技巧”来实现解锁灰色无版权歌曲,效果比开了黑胶VIP 还要强大。

声明:本工具只提供大家免费测试学习使用,请勿用作任何商业用途。

阅读全文 »

0. 为什么内网穿透

从公网中访问自己的私有设备向来是一件难事儿。

自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P组网软件的帮助。

阅读全文 »

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 已经成为了主要的对称加密算法。+

  • 2000年代,DES逐渐被3DES替代。2010年代,3DES逐渐被更安全的高级加密标准(AES)替代。

阅读全文 »

在前后端数据传输的过程中, 如果没有对数据加密, 抓包软件直接能看到我请求发的是什么数据,服务端给我返回的数据是什么。

并且可以用抓包软件修改响应数据返回给客户端,这样一来,客户端实际上接收到的数据并不是服务端给我的源数据,而是被第三者修改过的数据,如此一来,数据传输的安全就很有必要了。

阅读全文 »

1. golang限流实现

1.1 实现方案

  1. uber 开源库中基于漏桶算法实现了一个限流器。https://github.com/uber-go/ratelimit

  2. 滴滴开源实现了一个对http请求的限流器中间件。可以基于以下模式限流。

    • 基于IP,路径,方法,header,授权用户等限流

    • 通过自定义方法限流

    • 还支持基于 http header 设置限流数据

    • 实现方式是基于 github/go/time 实现的,不同类别的数据都存储在一个带超时时间的数据池中。

    • 代码地址 https://github.com/didip/tollbooth

  3. golang 网络包中还有基于信号量实现的限流器。 https://github.com/golang/net/blob/master/netutil/listen.go 也值得我们去学习下。

阅读全文 »

限流就是通过对并发访问 / 请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。

例如秒杀网站,限制 22 点 5 分 – 22 点 10 分 秒杀 999 份产品, 限制放行 5w 个请求,若在该段时间内,请求在第 5w 以后的请求,直接拒之门外, 也就是我们在进入网站的时候显示,系统繁忙。

阅读全文 »

1. 时间序列数据库 Time Series Database (TSDB)

随着分布式系统监控、物联网的发展,TSDB开始受到更多的关注。

时间序列数据跟关系型数据库有太多不同,但是很多公司并不想放弃关系型数据库。 于是就产生了一些特殊的用法,比如用 MySQL 的 VividCortex, 用 Postgres 的 Timescale。 很多人觉得特殊的问题需要特殊的解决方法,于是很多时间序列数据库从头写起,不依赖任何现有的数据库, 比如 Graphite,InfluxDB。

阅读全文 »

公司团队是使用gitlab来管理源代码的,一直以来当提交了一个MR后,需要手动在内部IM群里贴出PR链接和摘要,然后@目标同事来帮忙review代码,其实大部分流程是可以自动化的。

阅读全文 »

1. 内存泄露

  1. 假设 a 是一个大slice,而 b 只引用了一小部分,这就造成了底层数组其他未被引用的部分内存泄漏。

    1
    2
    3
    4
    5
    func sliceLeak() {
    data := make([]byte, 1000000)
    slice := data[:10] // 这个切片依然引用整个数组
    _ = slice
    }
  2. 因为协程被永久阻塞而造成的永久性内存泄露。

  3. 未正确释放文件、数据库连接等资源,导致内存无法释放。

  4. 延迟调用函数导致的临时性内存泄露。

  5. 全局变量或长生命周期的对象持有大量数据,无法被垃圾回收。

  6. 在一些复杂的数据结构中,可能会出现循环引用,导致垃圾回收器无法回收。

  7. 使用time.Timer或time.Ticker时,未及时调用Stop方法。

阅读全文 »