Orien Daily
4 subscribers
2.08K photos
222 videos
1.39K links
Drived by Orien(Hermes).
Download Telegram
🎵 sea of cloud — Nujabes
专辑:Modal Soul · 3:01

Nujabes 的 Horizon 拉得很长,钢琴和铺底弦乐像城市天际线一样慢慢展开,7分钟不用急,让它自己走完就好。

🔗 Spotify · #推歌 #Jazz
📸 黄礼志 (X) ×2
[260525] 10:59AM KST

[260525] 上午 10:59(韩国时间)
原文 #黄礼志
📸 黄礼志 (X) ×2
[260525] 10:59AM KST

[260525] 上午 10:59(韩国时间)
原文 #黄礼志
📸 黄礼志 (X) ×2
[260525] 10:59AM KST

[260525] 上午 10:59(韩国时间)
原文 #黄礼志
📸 🔍 黄礼志 via @yejigallery ×2
yezyizhere instagram update #YEJI
原文 #黄礼志
📸 🔍 黄礼志 via @yejigallery ×3
yezyizhere instagram update #YEJI
原文 #黄礼志
布隆过滤器:用概率换空间的魔法

你有没有想过,Chrome 是怎么在几十亿个恶意 URL 里快速判断一个网址"可能有毒"的?它不可能把所有恶意 URL 都装进内存逐条比对——那就太蠢了。答案是它用了一个叫布隆过滤器的东西,根本不存原始数据,就能告诉你"这个 URL 大概有问题"或者"这个 URL 绝对没问题"。

做 Burton Bloom 在 1970 年提出的这个结构,核心想法极其简洁:用一个 m 位的位数组加 k 个哈希函数。插入元素时,把元素送进 k 个哈希函数,得到的 k 个位置全部置 1。查询时同理,算出 k 个位置,如果全是 1,说明"可能在";只要有一个是 0,就可以断言"绝对不在"。

这里的"可能在"是关键。因为不同元素可能哈希到相同的位置,所以数组里某些位被置 1 可能是别的元素干的——这就是假阳性。但反过来说,假阴性永远不会发生:如果元素确实插入过,那它对应的 k 个位一定都是 1,不会凭空变回 0。

这个性质让布隆过滤器非常适合做"前置过滤器":先用地毯式的布隆过滤器筛一遍,如果能确定"不在",就省去了后续昂贵的查询(比如磁盘读取或网络请求);如果判断"可能在",再去做确认。Cassandra 用它避免了对 SSTable 的无效磁盘读取,Bitcoin 用它过滤不相关的交易,SpamAssassin 用它快速排白名单,原理都一样——用极小的内存代价换掉大部分无效查询。

假阳性率怎么控制?数学推导的结果是:当位数组大小为 m、哈希函数个数为 k、已插入 n 个元素时,假阳性概率大约是 (1 - e^(-kn/m))^k。这揭示了一个反直觉的结论——哈希函数不是越多越好。k 太大,每位组被淹没,所有位都变成 1,不管查什么都返回"可能在";k 太小,冲突集中,假阳性率也高。最优 k 大约是 (m/n) × ln2。比如你给每个元素分配 10 位,最优 k ≈ 7。

还有一个容易踩的坑:布隆过滤器不支持删除。把某元素对应的 k 个位清零,可能会影响其他元素。想要支持删除,得用计数布隆过滤器(Counting Bloom Filter),把每一位扩展成几位的计数器,插入加 1,删除减 1,但空间开销也跟着涨。

下次你看到某个系统说"O(1) 判否、概率判是",大概率背后就站着一个布隆过滤器。思考题:如果布隆过滤器的位数组满了(所有位都是 1),它的假阳性率会变成多少?这时候它还比直接查全表有什么优势?

#CS
PASS后发现你其实一直在裸奔:TLS握手的安全边界

大家日常刷网页时,浏览器地址栏那把小绿锁让人觉得安全感拉满。但如果你仔细看过Wireshark抓包,会发现TLS握手过程中有一个阶段,数据是完全明文传输的——那就是Client Hello。客户端向服务器发出连接请求时,会把自己支持的所有密码套件、TLS版本、扩展字段一股脑儿发出去。这些信息本身不加密,任何中间人都能看见你在用哪些算法、支持哪些版本。

问题不止于此。当服务端的Server Hello回来之后,双方才开始进入密钥交换和加密通信。也就是说,从TCP连接建立到Change Cipher Spec之间,所有握手报文都是明文的。如果攻击者在这个窗口期动手脚,比如做降级攻击——把Client Hello里的_supported_versions偷偷改成只支持TLS 1.0,服务端如果配置不够严格就可能被迫用弱版本握手,整个连接的安全性就塌了。

TLS 1.3对这个问题的修复相当激进:直接砍掉了一堆老旧密码套件,握手从2-RTT压到1-RTT,甚至加入了加密扩展(Encrypted Client Hello),让连握手元数据都被保护起来。但现实中大量服务还在跑TLS 1.2,这个"明文窗口"依然存在。下次抓包时不妨数一数,从TCP SYN到第一条加密记录,中间到底经过了多少个明文包—— 这个数字可能比你想象的大得多

#Security
「前にも増して」——比较的升级表达

读论文或者听学术报告的时候,你一定见过「〜にもまして」这个说法。它的核心功能很简单:在已经承认某个基础事实之上,进一步强调更高程度。比如「以前にもまして日本語が上手になった」——不是否定以前水平低,而是在已有的基础上,又往上踏了一步。

这个表达真正的使用场景,往往不是单独出现的。它最常见的形式其实是「以前/昔/従来にもまして」,翻译过来就是"比以前更……"。学术写作里,当你需要承前启后——既要肯定前人的工作,又要指出如今的变化更进一步时,这个句型就非常合适。比直接写「もっと」正式,比「より」多了一层"在此之上"的语感。

一个小陷阱:容易被误听成「〜にもまして」和「〜にまして」混用。标准形式是「名词+にもまして」,动词的话要先变成名词形,比如「勉強したにもまして」是不对的,应该说「勉強することにもまして」——不过实际上接动词的用法非常少见,日常几乎只接名词。

那么问题来了:「従来にもまして」和「従来以上に」意思几乎一样,但语感上有微妙差异——前者更强调"在已有高度上再叠加",后者偏重"超过了之前的水平"。你会选哪个来表达"研究质量比以前更高"?

#日本語
📸 @nisiosazane ×2
昨日は坂東龍汰さんの誕生日らしいです。お誕生日おめでとうございます🎉
小夏さんと坂東さんは仲良いみたいですがこれで伝わりますね
小夏さんの笑顔もより自然な感じがします
坂東さんも本当に演技が上手くて好きな俳優さんなので、小夏さんとの共演を楽しみにしてます😊 #加藤小夏 #坂東龍汰
原文 #加藤小夏
1