由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一道g的题
相关主题
g电面新鲜Amazon面经(附参考答案) 顺便求各种大公司refer
问个Google的面试题这题咋做?
问一个system design的题,看看大家怎么想的。求教一个题目,sudoku 下面代码哪里错了。。。
C++ Q35: sizeof() (B20_20)Leetcode Timeout
这题到底什么意思?Interleave Strings那个题目有O(n)时间 O(1)空间算法么?
刚刚结束的linkedIn电面interleave string 的题目
请教 Iterator 一题写了一下leetcode上Valid Number,用boolean表示一些状态是不是比较简单
求教一个, Leetcode 题.问一个leetcode上Validate Binary Search Tree的问题
相关话题的讨论汇总
话题: qps话题: previous话题: request话题: time
进入JobHunting版参与讨论
1 (共1页)
a**d
发帖数: 85
1
之前面的一个题,现在又重新看了一下。之前有大神说用network的leaky bucket.试着
写了一个简单的,这样合理吗?
interface RateLimit {
/** Sets the rate, from 1 to 1000000 queries per second */
void setQPS(int qps);
/** accept or reject a request, called when request is received */
boolean allowThisRequest();
}
brief example:
server instantiates your object, calls setQPS(1)
at at time t, user1 makes a request, allowThisRequest() returns true
at time t+0.01 sec, user2 makes a request, allowThisRequest() returns false
at at time t+1, user4 makes a request, allowThisRequest() returns true
at time t+5 sec, user3 makes a request, allowThisRequest() returns true
For 1. This is my solution:
class R implements RateLimit {
long previous_time;
int previous_count;
int qps;

void setQPS(int qps) {
this.qps = qps;
}

boolean allowThisRequest() {
if (qps <= 0) return false;
long now = System.currentTimeMillis();
if (now - previous_time < 1000) {
if (previous_count == qps)
return false;
else {
previous_time = now;
previous_count += 1;
return true;
}
}
else {
previous_time = now;
previous_count = 1;
return true;
}
}
}
Is this reasonable? Also, if for supporting multi-thread request, is it ok
to just add 'synchronized' for the allowThisRequest()?
Thx a lot.
s*w
发帖数: 729
2
显然是错了,没有把过期的count给减掉
比如 qps rate 是2 per second, 你的query 发生在 0.1, 0.9, 1.2 秒, 都应该接
受;你的程序会 reject 第三个, 以为 count=2

【在 a**d 的大作中提到】
: 之前面的一个题,现在又重新看了一下。之前有大神说用network的leaky bucket.试着
: 写了一个简单的,这样合理吗?
: interface RateLimit {
: /** Sets the rate, from 1 to 1000000 queries per second */
: void setQPS(int qps);
: /** accept or reject a request, called when request is received */
: boolean allowThisRequest();
: }
: brief example:
: server instantiates your object, calls setQPS(1)

a**d
发帖数: 85
3
谢谢。
用一个list去保存之前的Node(field:time, count),然后如果当前时间比list最后一个
大于1秒,把list清空,把当前加入。
如果小于1秒,从头开始过一遍list,把Node.time和当前时间差别大于1的remove掉,
然后记录remove了多少个,然后把后面不要remove的Node.count相应减去过期的时间个
数。

【在 s*w 的大作中提到】
: 显然是错了,没有把过期的count给减掉
: 比如 qps rate 是2 per second, 你的query 发生在 0.1, 0.9, 1.2 秒, 都应该接
: 受;你的程序会 reject 第三个, 以为 count=2

1 (共1页)
进入JobHunting版参与讨论
相关主题
问一个leetcode上Validate Binary Search Tree的问题这题到底什么意思?
java 基本问题刚刚结束的linkedIn电面
leetcode是不是最近有点问题?请教 Iterator 一题
请教个Amazo的题求教一个, Leetcode 题.
g电面新鲜Amazon面经(附参考答案) 顺便求各种大公司refer
问个Google的面试题这题咋做?
问一个system design的题,看看大家怎么想的。求教一个题目,sudoku 下面代码哪里错了。。。
C++ Q35: sizeof() (B20_20)Leetcode Timeout
相关话题的讨论汇总
话题: qps话题: previous话题: request话题: time