这是我最近收到的一个面试问题。它可能与一些前端Web开发有关,我没有多少经验。
问题是 “您如何计算网站在过去5分钟内的访问次数”?
/ * 好吧,根据评论和downvotes,我决定写更多我/我朋友的想法。我目前的解决方案是构建一个存储访问时间戳的队列。鉴于新访问,我会在5分钟前删除所有访问,然后添加此新访问。但这似乎效率不高1)删除队列前面的元素效率不高,2)队列长度与访问次数一样长。 * /
面试官要求代码,我不知道。
感谢任何建议/意见!
答案 0 :(得分:1)
免责声明:由于您有兴趣了解问题和可能的解决方案,因此我不会添加任何代码,只是一些想法,您可以(并且应该)考虑它并在之后执行您自己的代码。
一个细节可能会对您存储数据的方式产生影响:“分钟”的粒度是多少?它只是一分钟,是60秒还是60,000毫秒?例如,假设您当前的时间戳是03:44:30,820。 03:39:31,820收到的请求是否发生在“最后5分钟”内?如果您的“分钟”粒度是一分钟,它不会(仅在03:44,03:43,03:42,03:41和03:40请求)。如果您的“分钟”粒度为60秒,则会在最后5分钟内发生。
因此,假设您的“分钟”粒度为1分钟(为简单起见)。这样,你的“队列”只有5个位置。每个职位可以包含该分钟内发生的请求数。你的问题#2结束了。此外,如果您有链接列表而不是队列,则可以保留head
和tail
指针,同时解决问题#1。
可能的优化(如果某些分钟没有任何请求,可能会使代码复杂化,但无论如何值得探索)是:由于您的列表具有固定大小(在本例中为5),您还可以使用循环缓冲区,摆脱你的指针,只保留一个last
指针。
这些只是一些想法,但面试官的意图可能是让你思考问题,提出一些问题,提出一些想法,然后才从中得出一些代码。