计算机时间捡拾

什么是时间

1
2
3
4
5
6
7
8
9
1. 中国古代最小的计时单位是什么
2. 你知道沙俄时的“十月革命”实际发生在11月么
3. 农历一年最多385天,但西方为什么曾出现过一年445天
4. 历史上为什么会出现2月30号?Gregorian calendar(格里历)、儒略历、公历,阳历、阴历、农历、佛历、伊斯兰历都分别是什么
5. GregorianCalendar的1582年10月15日(对应epoch为-12219292800000)和1582年10月4日真的相差11*86400秒么
6. UTC(协调世界时)、GMT(世界时/格林威治时)、Unix Epoch、TAI(国际原子时)区别是什么,原子时精度高,但为什么日常生活不直接用原子时?
7. 闰秒是怎么产生的,Unix Epoch转为日期时间格式(UTC时间)时需要考虑闰秒么
8. 上海一定比UTC+0或GMT或London早8小时么
9. 南北极时区应该是多少

当我们谈论时间时候我们实际在谈论什么呢?
时间是度量一切变化的尺子,但我们日常理解的时间并非真实的物理时间,而是客观时间的一种度量,也是宇宙时空的度量。
我们可以通过计时工具算出电影时长,可以通过帧数和帧率计算影片时长,这也是时间的度量。
人类珍惜时间是因为万事万物、生老病死都和时间正相关,并非是时间本身珍贵,时间对所有人平等的、均衡的流逝不复返, 这是时间的单向性,比如通过电影片头片尾或剧中人走路方式,我们可以判断是正着放还是倒着放;又比如看地球绕日运动的视频,我们可以通过向东或向西区分是否倒着放–热力学的Arrow of time,时间之矢的理论就关注这些,比如看杯子从地上碎片变为桌子上完整杯子视频,正常人很容易断言这是倒放的。
所以想象一下,如果没有对“时间”的测量,人类对生命及万物认知又是如何?“时间”和空间/物质一样是客观存在的,但哲学上认为“时间”这个概念是人类独有的,爱因斯坦认为时间的本质是空间中物质的运动变化,常规时空观不过是大脑里的幻像,所以跟老妇人和跟年轻女郎相处时间感受快慢不一致的例子不仅仅是幽默。

Read More

软件研发中的信任链问题

一篇不是技术的文章,记录下自己对软件研发中的信任链的思考。
也是最近看一篇监控哲学的文章和参加一场技术复盘讨论有感,这场复盘会笔者听下来觉得最大的问题就是软件研发中的信任链导致的。

Read More

正确理解一致性哈希

intro1:正确地理解一致性哈希
intro2: 介绍几种其他优质一致性哈希算法
intro3: Redis Sentinel和Cluster

之前写过几篇哈希函数的blog,本文继续对一致性哈希(Consistent Hashing,本文简称CoH)部分作进一步补充,讨论下CoH的作用,以及其他一致性哈希实现。
阅读本文前可先阅读下 Consistent Hashing: Algorithmic Tradeoffs,需FQ,原文概要介绍了Consistent Hashing、Jump Hash、Multi-Probe Consistent Hashing(MPCH)、Rendezvous Hashing、、Maglev Hashing等几种一致性哈希方式,本文主要从实用角度探讨下一致性哈希实现,同时讨论下不同于原文的几点思考。

Read More

开发常见的Hash函数(四)-图片哈希

intro1:JPG文件生成/压缩原理
intro2: 对离散余弦变换在图片压缩应用的思考
intro3: JPG文件存储格式
intro4: aHash/dHash/pHash原理及源码介绍
intro5: 对aHash/dHash/pHash准确度、局限、场景等思考

前一篇文章介绍Simhash/Minhash等,下面来看下之前留下的图片的相似性度量算法:ahash、dHash、pHash,在笔者经历的图片/PDf上传的经历中,上述方法效果不错。
本文主要以JPEG格式为例探索下图像几种哈希算法,不过图像的处理并非本文要介绍重点,只是为了方便下文理解,如果你只对怎么寻找近似图片感兴趣或看这里感到不适,可以跳过本节。

Read More

开发常见的Hash函数(三)-Minhash_Simhash

intro1:文本相似相关的hash方法
intro2: LSH、Minhash、Simhash
intro3: 基于代码理解minhash/simhash

记录笔者的一些思考,在理解minhash、python minhash源码过程中有不理解或有些搜索不到的,或许在这里得到更多的理解。
前面文章介绍了常规hash,谈到了抗碰撞/雪崩效应等特性,比如微小的改动能产生不同的hash结果。
不过有时候我们期望hash不那么敏感,可以忽略细微的不同,比如一段文字中忽略某些句子顺序,或者忽略几个词的不同,那么有哪些可用的hash方法呢?

Read More

开发常见的Hash函数(二)-Geohash

intro1:Geohash祛魅
intro2: Geohash原理及常见运算
intro3: Geohash与填充曲线/二进制小数/bitHacks
intro4: Geohash在Lucene/Elasticsearch/Redis等应用

前文介绍数据结构和密码学的哈希函数,本文介绍下带hash的Geohash,即如何把地理空间映射为字符编码。
写作本文的时候,笔者发现一篇比较清晰的Geohash/S2之类的介绍,可以移步高效的多维空间点索引算法 — Geohash 和 Google S2 ,本文会介绍一些前置知识,并结合示例以及其在Lucene/Elasticearch等的应用。

Read More

开发中常见的一些Hash函数(一)

intro1:常见hash函数及使用场景
intro2: Java hashCode实现相关/为何计算hash时选择31/33相乘
intro3: Redis哈希表装载因子为何大于1,而非Java的0.75
intro4: 新hashmap实现为何要8个冲突才升级红黑树
intro5: 一致性哈希是否真的有用

在写前一篇博文时,发现Redis上的一个hash函数相关的commit:Use SipHash,于是笔者想到总结下开发中经常遇到的哈希函数,本篇为第一部分,介绍常见hash算法、java 的hash应用,以及hash对应的数据结构在Java/Redis使用,后续介绍广义的hash,如GeoHash,LSH的Simhash/minHash,以及笔者曾在比较相近图片时用到的hash,同GeoHash还会介绍下Google S2/Uber H3编码。

Read More

对限频限流的思考

intro1:限流的常见实现方式及常见开源限流组件有注意点
intro2: 你真的理解了漏桶和令牌桶限流算法吗,划分/区分二者科学吗
intro2: 你知道限流保障服务可用时也可能导致其他服务不可用吗

早先看到朋友圈分享限频限流的文章,从中有些收获,不过笔者不打算赘述,想进一步探讨下限频限流,以及限频限流使用时可能遇到的问题,同时也是对前一篇博文的回应,或许看完本文你会对Guava令牌桶算法有不一样的理解。

Read More