面试官问“设计一个敲击计数器”,90%的人写得出来,却想不明白它背后的系统设计哲学

面试官问“设计一个敲击计数器”,90%的人写得出来,却想不明白它背后的系统设计哲学

面试官问“设计一个敲击计数器”,90%的人写得出来,却想不明白它背后的系统设计哲学

作者:Echo_Wish

前几天看到一个经典算法题:

Design Hit Counter(敲击计数器)

题目很简单:

设计一个系统。

支持两个操作:

hit(timestamp)

表示当前时刻收到一次访问。

getHits(timestamp)

返回最近5分钟内收到多少次访问。

很多人一看:

“这不就是计数器吗?”

结果真正开始写代码的时候发现:

事情远没有想象中简单。

因为这道题考察的从来不是计数。

而是:

如何在有限资源下维护一个不断流动的时间窗口。

如果你认真研究过日志系统、监控系统、Prometheus、Kafka Metrics、流计算窗口统计,你会发现:

Design Hit Counter本质上就是时间窗口统计的缩小版。

今天咱们就从算法、工程和架构三个角度聊聊这道经典题。


一个计数器为什么会成为经典面试题?