面试官问“设计一个敲击计数器”,90%的人写得出来,却想不明白它背后的系统设计哲学
面试官问“设计一个敲击计数器”,90%的人写得出来,却想不明白它背后的系统设计哲学
作者:Echo_Wish
前几天看到一个经典算法题:
Design Hit Counter(敲击计数器)
题目很简单:
设计一个系统。
支持两个操作:
hit(timestamp)表示当前时刻收到一次访问。
getHits(timestamp)返回最近5分钟内收到多少次访问。
很多人一看:
“这不就是计数器吗?”
结果真正开始写代码的时候发现:
事情远没有想象中简单。
因为这道题考察的从来不是计数。
而是:
如何在有限资源下维护一个不断流动的时间窗口。
如果你认真研究过日志系统、监控系统、Prometheus、Kafka Metrics、流计算窗口统计,你会发现:
Design Hit Counter本质上就是时间窗口统计的缩小版。
今天咱们就从算法、工程和架构三个角度聊聊这道经典题。
