深入 Go 的 net/http
深入 Go 的 net/http

net/http 的 API 使用非常简单,但一次请求仍要经过连接获取、并发读写、Body 回收、超时与取消。沿着客户端和服务端的源码调用链读下去,才能准确解释连接为何没有复用、超时发生在哪一层,以及 Handler 返回后还有哪些工作没有结束。使用 Go 启动一个 HTTP 服务又或者作为客户端进行调用,都只需要几行代码:http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) { f

2021-04-06•约 16.8 千字
Go Slice 奇技淫巧
Go Slice 奇技淫巧

Go 的切片 (slice) 很容易学:len 是长度,cap 是容量,不够就 append。这三句话足够写完大多数业务代码,也足够埋下不少只有在线上才肯露头的问题。把一个切片赋值给另一个变量,改其中一个,另一个为什么也会变?同样是 append,为什么有时修改原数据,有时又像复制了一份?从大文件中只截取十几个字节,为什么几百 MB 内存还没有释放?两个看起来内容完全相同的空切片,为什么一个等于 nil,一个却不等于?[]byte(string) 是否一定分配?能不能把字符串

2021-03-19•约 11.3 千字
博弈论:死君子不死小人
博弈论:死君子不死小人

你准备把商品价格降到 99 元,竞争对手会不会降到 98 元?你想在会议上提出一个方案,同事会支持,还是等你先承担风险?两个国家都知道减排对人类有利,为什么仍然可能互相观望?平台要不要给商家更低抽成,银行要不要提高存款利率,员工要不要主动分享信息——这些问题有一个共同特点:你的结果不仅取决于你做什么,还取决于别人认为你会做什么。这就是博弈论(Game Theory)关心的世界。博弈论不是「教你如何算计别人」的厚黑学,也不是把人生所有选择都变成一张收益表。它是一套分析战略互动的

2021-01-03•约 18.9 千字
2020 年总结
2020 年总结

时间是让人猝不及防的东西晴时有风阴有时雨争不过朝夕又念着往昔偷走了青丝却留住一个你曾经以为很遥远的 2020只剩下最后的一个月了虽然大抵都是风雨多过阳光这一年我们经历了很多除了我们共同经历了疫情之后有人迎来了特别的毕业典礼也有人经历了艰难的失业时期有人结婚了有人离婚了……那么在这个特别的 2020你都经历了些什么在即将结束的这一个月你有什么想说的

2020-12-27•约 0.2 千字
QQ 安全中心动态密钥
QQ 安全中心动态密钥

不得不说,有现成的技术方案不用,非要跑去魔改一个,这真是国内众多大厂的特征之一,QQ 安全中心的动态密钥就是如此。现有的 One Time Password 方案大多分为 HOTP 和 TOTP,前者基于事件,后者基于时间。在两步验证的安全策略中,大多数都是采用基于时间的 TOTP 算法。TOTP 算法一般来说都是通用的,因为都是遵循 RFC 6238 来实现的。而 QQ 安全中心的算法是魔改 RFC 6238 实现的,导致除了它自己的客户端,其他的 TOTP 客户端都没办法

2020-08-30•约 2.0 千字
搜索引擎的使用
搜索引擎的使用

Baka 才会把机器当成人首先,我们得明白一个道理,搜索引擎是一个软件、工具、程序,它不是人,也不是人工智能。你以提问的形式问搜索引擎,你大概率是得不到你想要的内容的。当然,你可能被百度惯坏了:肚子疼怎么办?百度非常贴心的给出了结果,这个结果来源于百度知道。百度知道是人提问的,也是人回答的,不是搜索引擎知道肚子疼该怎么解决。搜索引擎没有肚子,就算有,它的答案可能是 换一个肚子就好了、重启啊。与或非、全匹配和通配一般人想找一个温泉,但是又希望附近有酒店,他在使用搜索引擎的时候,

2020-06-28•约 1.1 千字