u****p 发帖数: 526 | 1 面经看到的,问已经有个sharing service 可以share 任何link。 怎么设计另一个
service 用来统计每五分钟 一小时 和一天的 每个不同的link share的次数 不用特别
精确。
这种要怎么考虑?谁给说说 | d*******n 发帖数: 43 | | u****p 发帖数: 526 | | s*****l 发帖数: 7106 | | H**********5 发帖数: 2012 | | p*********g 发帖数: 2998 | 6 step 1: fixed time period or dynamic time period,
比如5分钟的,fixed
0:05, 0:10, 0:15.
那么你需要一个map<0:05: times> 每次进来, 拿到系统时间, 找到对应的map,然后放
入对应的map.entry
同理可以找到一小时的,一天的,比如一天的,那么一个月的log是30条数据,
如果是dynamic,就不是这样了,因为每个时间要找这个时间的前5分钟出现的次数,那
你要准备一个queue, 如果时间进来,比较queue.peek(),如果 (新进来的时间-queue
.peek())>5, 就pop出去。 然后queue.size(), 就是当前5分钟的次数,如果你需要全
部的, 你要用map<每次进来的时间,times> 来记录, log大小取决于,新访问的次数。 | y*y 发帖数: 57 | 7 解法面筋是什么
【在 H**********5 的大作中提到】 : 这不就是top k 异常么?解法面筋里都有
| H**********5 发帖数: 2012 | 8 地里搜索 system design 高频题
: 解法面筋是什么
【在 y*y 的大作中提到】 : 解法面筋是什么
| u****p 发帖数: 526 | 9 没搜到答案啊,能不能给具体说说?谢谢啊
【在 H**********5 的大作中提到】 : 地里搜索 system design 高频题 : : : 解法面筋是什么 :
| u****p 发帖数: 526 | 10 多谢啊!对了这个是不是和 lc 里的Logger Rate Limiter 原理是一样的?
另外这是个global map吗? 如果这个share server有很多replica,这种情况怎么处理
比较好?
queue
数。
【在 p*********g 的大作中提到】 : step 1: fixed time period or dynamic time period, : 比如5分钟的,fixed : 0:05, 0:10, 0:15. : 那么你需要一个map<0:05: times> 每次进来, 拿到系统时间, 找到对应的map,然后放 : 入对应的map.entry : 同理可以找到一小时的,一天的,比如一天的,那么一个月的log是30条数据, : 如果是dynamic,就不是这样了,因为每个时间要找这个时间的前5分钟出现的次数,那 : 你要准备一个queue, 如果时间进来,比较queue.peek(),如果 (新进来的时间-queue : .peek())>5, 就pop出去。 然后queue.size(), 就是当前5分钟的次数,如果你需要全 : 部的, 你要用map<每次进来的时间,times> 来记录, log大小取决于,新访问的次数。
| | | r*****s 发帖数: 1815 | 11 单机还给搞什么map queue heap的一律0分,而且面试官会觉得很尴尬
: step 1: fixed time period or dynamic time period,
: 比如5分钟的,fixed
: 0:05, 0:10, 0:15.
: 那么你需要一个map 每次进来, 拿到系统时间, 找到对应的map,然后放
: 入对应的map.entry
: 同理可以找到一小时的,一天的,比如一天的,那么一个月的log是30条数据,
: 如果是dynamic,就不是这样了,因为每个时间要找这个时间的前5分钟出现的次
数,那
: 你要准备一个queue, 如果时间进来,比较queue.peek(),如果 (新进来的时间
-queue
: .peek())
【在 p*********g 的大作中提到】 : step 1: fixed time period or dynamic time period, : 比如5分钟的,fixed : 0:05, 0:10, 0:15. : 那么你需要一个map<0:05: times> 每次进来, 拿到系统时间, 找到对应的map,然后放 : 入对应的map.entry : 同理可以找到一小时的,一天的,比如一天的,那么一个月的log是30条数据, : 如果是dynamic,就不是这样了,因为每个时间要找这个时间的前5分钟出现的次数,那 : 你要准备一个queue, 如果时间进来,比较queue.peek(),如果 (新进来的时间-queue : .peek())>5, 就pop出去。 然后queue.size(), 就是当前5分钟的次数,如果你需要全 : 部的, 你要用map<每次进来的时间,times> 来记录, log大小取决于,新访问的次数。
| z*******0 发帖数: 6 | 12 参考leetcode design hit counter 或者搜系统设计 hit counter | u****p 发帖数: 526 | 13 能请问下应该是什么思路吗?多谢啊
【在 r*****s 的大作中提到】 : 单机还给搞什么map queue heap的一律0分,而且面试官会觉得很尴尬 : : : step 1: fixed time period or dynamic time period, : : 比如5分钟的,fixed : : 0:05, 0:10, 0:15. : : 那么你需要一个map 每次进来, 拿到系统时间, 找到对应的map,然后放 : : 入对应的map.entry : : 同理可以找到一小时的,一天的,比如一天的,那么一个月的log是30条数据, : : 如果是dynamic,就不是这样了,因为每个时间要找这个时间的前5分钟出现的次 : 数,那
| u****p 发帖数: 526 | 14 我去看看,多谢啊
【在 z*******0 的大作中提到】 : 参考leetcode design hit counter 或者搜系统设计 hit counter
| p*********g 发帖数: 2998 | 15 我这是自己的思路, 我的列子是单台server, 如果有很多台server, 你要用hash(
sharelinks), 这样就行了, 每台server只处理固定的link. 然后每台server后可以建
立aggregator server, 在这种server上,你可以计算各种分析, 比如统计亚太区的link
的5分钟, 此时,你可以用map reducer.
【在 u****p 的大作中提到】 : 多谢啊!对了这个是不是和 lc 里的Logger Rate Limiter 原理是一样的? : 另外这是个global map吗? 如果这个share server有很多replica,这种情况怎么处理 : 比较好? : : queue : 数。
| r*****s 发帖数: 1815 | 16 Basically you should use a distributed sorted set to store the hits. Redis
is much more powerful than most people think (I know a lot of people just
consider it as a giant hashmap)
Either solution 1 or 2 in the following SO answer would work:
https://stackoverflow.com/questions/25706925/how-do-i-implement-temporal-
leaderbords-with-redis
However as a design question, you should also consider persisting the
original
hit data in blob storage so if Redis crashes, you can revive it by replay
the data.
If you need a top-K hit counter for over 1 day period, I would suggest you
to add some offline processing, and aggregate the realtime part on the
flight. Which makes the whole system a Lambda Architecture:
https://en.wikipedia.org/wiki/Lambda_architecture
: 能请问下应该是什么思路吗?多谢啊
【在 u****p 的大作中提到】 : 我去看看,多谢啊
| r*****s 发帖数: 1815 | 17 如果面试官期待这样的答案而不是一个单机的计数器的话
那heaps讲出来就很尴尬了。
当然也怕面试官自己半吊子,就知道个单机计数器,就拿来面试别人。
我觉得可以策略性地先试探一下(也是展示你想要搞定ambiguity的能力),问一下我
们对这个service有多严肃呀,我们是要做一个单机的试验还是要做一个完整的上线方
案啊?
: Basically you should use a distributed sorted set to store the
hits.
Redis
: is much more powerful than most people think (I know a lot of
people
just
: consider it as a giant hashmap)
: Either solution 1 or 2 in the following SO answer would work:
: https://stackoverflow.com/questions/25706925/how-do-i-implement-
temporal-
: leaderbords-with-redis
: However as a design question, you should also consider
persisting the
: original
: hit data in blob storage so if Redis crashes, you can revive it
by
replay
: the data.
【在 r*****s 的大作中提到】 : Basically you should use a distributed sorted set to store the hits. Redis : is much more powerful than most people think (I know a lot of people just : consider it as a giant hashmap) : Either solution 1 or 2 in the following SO answer would work: : https://stackoverflow.com/questions/25706925/how-do-i-implement-temporal- : leaderbords-with-redis : However as a design question, you should also consider persisting the : original : hit data in blob storage so if Redis crashes, you can revive it by replay : the data.
|
|