美丽邂逅抢票系统的背后

今天抢了个极路由,用了一个小时才抢到,之前一直都在“人山人海”地排队。不禁想起去年给美丽邂逅做的抢票系统,有人问,我写了个脚本怎么抢不到票呢?谜底将在本文中揭开。

抢票系统要满足的条件是:

  1. 一人一票,一个人不能拿到两张票;
  2. 每天欲发行的票必须一张不多一张不少(假定来抢票的人足够多)地发出去;
  3. 用程序抢票成功的概率不能明显高于人工抢票成功的概率。

继续阅读“美丽邂逅抢票系统的背后”

一个抗污染 DNS 的搭建

DNS 服务是互联网的重要基础服务,不过它的重要性往往被低估。例如,2013年8月,.cn 根域名服务器遭到 DDoS 攻击,导致 .cn 域名无法访问;2014年1月21日,根域名服务器遭到某著名防火墙污染,导致所有国际域名无法访问。很多国际知名网站在中国大陆无法访问,部分原因就是遭受了 DNS 污染,也就是对域名返回了错误的 IP 地址。

要搭建一个抗污染的 DNS,并不是使用 VPN 解析所有域名这么简单。主要有两个问题:

  1. 国内很多大型网站会被解析到其他运营商的 IP 甚至国外 IP,访问很慢。
  2. VPN 容易遭到间歇丢包等干扰,不稳定。

继续阅读“一个抗污染 DNS 的搭建”

编写高性能软件的几个技巧

随着计算机处理能力的提高和软件复杂程度的上升,性能往往并不是衡量软件的最重要标准。但有时我们确实需要把计算机的性能榨干。尤其是做研究的时候,为了让性能指标超过对手,不仅要优化算法(渐进复杂度),还要优化实现(复杂度中的常数)。本文试图总结一些规律,望与大家讨论:

不要使用开源软件

开源软件往往考虑的是一个通用问题,因此有很多几乎永远也用不到的配置参数和条件判断;开源软件对代码可读性、可维护性的要求往往高于对性能的要求,因此一般不使用所谓的“奇技淫巧”。

继续阅读“编写高性能软件的几个技巧”

How Bitcoin Works

比特币经历了去年4月和11月的两次暴涨暴跌,已经不仅仅是 IT 男的玩物,而成为社会各界争论的焦点。不过关于比特币技术原理的文章大多是蜻蜓点水。过年与好基友们聊天时,大家提出了这些问题,希望读完这篇文章后能弄明白:

  1. 如何证实一次比特币交易,使其不可抵赖?
  2. 如何避免一个比特币花两次?
  3. 如果我一个人拥有全网的 10% 算力,是否有可能改写历史?
  4. 比特币交易为什么要等几十分钟?
  5. 比特币是如何保证数量有限(2100 万个)的?
  6. 如何保证每 10 分钟恰好挖出一个比特币?
  7. 一次挖出 0.1 个比特币是怎么回事?
  8. 一次交易 10000 个比特币,需要生成 10000 条交易信息吗?
  9. 比特币这么大的交易量,交易记录如何传输、保存?

继续阅读“How Bitcoin Works”

差分磁盘:从“恢复出厂设置”说起

智能手机、路由器等很多嵌入式设备都有“恢复出厂设置”的功能。按照PC机上大家习惯的“备份”做法,似乎需要把出厂时的整个系统备份在只读的 ROM 里。如果是这样,每次恢复出厂设置,ROM 里的内容都要拷贝到 Flash 存储里,浪费大量存储空间,而且恢复出厂设置需要比较长的时间。但事实上,恢复出厂设置只是重启一下就完成了,而且刚恢复的系统里 Flash 存储基本是空的。

(感谢 BW 的评论,Android 系统的恢复出厂设置不是使用差分技术,而是简单清空数据分区,对 /system 分区的修改没有被还原,我弄错了)

Capture
继续阅读“差分磁盘:从“恢复出厂设置”说起”