- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这更像是一个设计问题,但我只是想知道是否有人对这个问题有任何想法。
在一次面试中,我被要求设计 2 个方法。
hit();
getNumHits();
hit()
每次用户向服务器发出请求时调用,getNumHits()
返回最后一分钟的点击次数。
有什么想法吗?
更新:
我知道这是一个副本
Implementation of a "hits in last [second/minute/hour]" data structure
但我在理解 C++ 代码时遇到了一些困难,想知道我们是否可以获得 Java 版本的答案!
最佳答案
您要寻找的核心是保留最后一分钟内所有匹配项的列表。使用 LinkedList
可以实现快速的 removeFirst()
。
class HitCounter {
// My most recent list - only the last minute is retained.
LinkedList<Long> hitList = new LinkedList<>();
private static final long OneMinute = 1000L * 60L;
public void hit() {
// Track the hit.
hitList.add(System.currentTimeMillis());
// Always clean up.
cleanup();
}
public int hitCount() {
// Make sure we are clean.
cleanup();
return hitList.size();
}
private void cleanup() {
// Eat all stale hits.
while (hitList.getFirst() < System.currentTimeMillis() - OneMinute) {
hitList.removeFirst();
}
}
}
但是,如果您的命中非常快,并且您怀疑保留所有命中的所有时间是否有效,您可以使用桶系统进行量化。在这里,我每一秒都在计数。很明显,你可能会在一秒钟内被击中多少次。
class HitCounter {
// One bucket - keeps track of how many hits since the start time.
private class Bucket {
// Probably should use an atomic.
int count;
// The time this bucket was started.
long started = System.currentTimeMillis();
}
// My most recent list - only the last minute is retained.
LinkedList<Bucket> hitList = new LinkedList<>();
private static final long OneSecond = 1000L;
private static final long OneMinute = OneSecond * 60L;
public void hit() {
// Grab the hit time.
long now = System.currentTimeMillis();
// Normally goes in the last bucket.
Bucket bucket = hitList.size() > 0 ? hitList.getLast() : null;
// Time for new bucket?
if (bucket == null || now > bucket.started + OneSecond) {
// Yup!
hitList.add(bucket = new Bucket());
}
// Track the hit.
bucket.count++;
// Always clean up.
cleanup();
}
public int hitCount() {
// Make sure we are clean.
cleanup();
// Add up all the bucket counts.
int total = 0;
for (Bucket bucket : hitList) {
total += bucket.count;
}
return total;
}
private void cleanup() {
// Eat all stale hits.
while (hitList.size() > 0 && hitList.getFirst().started < System.currentTimeMillis() - OneMinute - OneSecond) {
hitList.removeFirst();
}
}
}
public void test() throws InterruptedException {
HitCounter hitList = new HitCounter();
for (int i = 0; i < 90; i++) {
hitList.hit();
System.out.println(i + " - " + hitList.hitCount());
Thread.sleep(1000);
}
}
关于Java:在最后一分钟实现 Hit() 和 getNumHits(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35319150/
是否有令人信服的理由在 mturk 上为 HIT 建立外部网站?也就是说,如果任务是通过页面上的 javascript 运行的,为什么不简单地将其粘贴到 mturk 上的源代码中并在那里运行,通过其
在 Amazon Mechanical Turk 上,我在 HIT 中添加了一个指向外部网页的链接,工作人员将在其中执行实际的 HIT。但是,我想对工作人员隐藏该链接,直到他们接受 HIT。 可以通过
我面临的问题是 SCNView.hitTest 不检测对我在 cpu 上动态修改的几何体的命中。 这是概述:我有一个使用 SCNGeometry 的节点从 MTLBuffer 创建顶点数: func
我有一个观察者配置如下: { "trigger": { "schedule": { "interval": "5s" } }, "input" : {
我又遇到了一个正则表达式问题 - 我需要测试一个字符串是否出现模式 - 它可以隐藏在字符串中的某个位置 - 就在前面,前面但前面有一个空格,中间的某个地方或在结束,也许在末尾后面跟着一个空格。 我认为
我又遇到了一个正则表达式问题 - 我需要测试一个字符串是否出现模式 - 它可以隐藏在字符串中的某个位置 - 就在前面,前面但前面有一个空格,中间的某个地方或在结束,也许在末尾后面跟着一个空格。 我认为
我们正在开发我们网站的全新移动版本,它是一个使用 Sencha Touch 2(Ext JS、JavaScript)编写的 HTML5 网站。 我们在主网站上使用 Google Analytics,我
我想写一个这样的sql: "Update tablename SET hits = hits + 1 WHERE id = $id" 在zf2中,我们使用了TableGateway,我写的代码: $t
我使用 golang elastic 5 API 在 ElasticSearch 中运行查询。我使用 searchResult.TotalHits() 检查命中数,它给了我一个很大的数字(超过 100
我正在 Amazon Mturk 开展一个项目。我使用 Python Boto API。 boto.connection.create_HIT() 方法返回一个 ResultSet 对象,我试图从中获
最近我在使用 rails 项目,并使用 simplecov 生成了代码覆盖率报告。 ,我在下面得到了一份不错的报告。我知道这是一个简单的问题(我搜索了很多次但没有得到任何正确的解释) can anyo
相当复杂...我有两个表,t1 包含有关特定对象的描述信息,第二个表 t2 包含用于解码 t1 中对象的信息。 我将尝试提供一个简单的示例: ---- t1 (Name, Type, Size, Co
我们通过 Amazon Mechanical Turk 提供供两名玩家使用的基于网络的游戏。对于每场比赛,我们需要两名玩家同时进入,或最多相隔 1 分钟。我们注意到,在我们发布 HIT 后的前几分
我对 Elasticsearch 相当陌生,我一直在尝试对我的数据进行搜索,并且总是让点击部分为空。即使在数据上传和索引之后也会发生这种情况。我的映射如下: { "mappings":{
我目前正在关注 David Roonqvist 的 3D Graphics with SceneKit 一书。 第 5 章涉及 HitTest ,实现它没有问题,但只涉及他对鼠标事件的测试。 现在,我
对于外部问题,当工作人员在预览模式下查看 HIT 时,发送的 URL 类似于: /mturk?assignmentId=ASSIGNMENT_ID_NOT_AVAILABLE&hitId=3FSEU3
我正在 Agda 中试验同伦类型理论。我使用 HIT 来定义整数: {-# OPTIONS --cubical --safe #-} open import Cubical.Foundations.P
我正在实现一个网站,招募的 MTurk worker 将在该网站上执行任务。我计划使用 MTurk 任务招聘 worker ,我会将他们重定向到外部网站以进行实际工作。我有以下与此计划有关的问题。 这
当我使用以下搜索(/posts/_search)时,我的hits.total为1400: {"query": {"query_string": {"query": "Bitcoin"}}} 当我使用以
我有这样的有效负载,所有文档中都会出现相同的有效负载,但每个文档中每个标签的权重都不同。 { "tags": [ { "tag": "tag1", "weight"
我是一名优秀的程序员,十分优秀!