由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - U电面经历
相关主题
找工作告一段落了,发点面经回馈本版Bloomberg Onsite 面试
电面面经各个公司电面分别用什么工具写code啊?
报个z******ts的onsite面经问道OS的面试题。
y的电面面经LRU Cache Question
Google电面大伙G的onsite之后多久收到消息?
求祝福。攒RP. 发些收集到的Google的面经问两道interval的题目
电面被羞辱了,求安慰~~~service now 卧佛和面筋
总结一下我的经历,回报版上。这些大牛怎么记住所有面试的题目的【update:透部分面经】
相关话题的讨论汇总
话题: 调用话题: counter话题: 100话题: 10话题: index
进入JobHunting版参与讨论
1 (共1页)
w**v
发帖数: 14
1
被U家猎头联系,安排电面。
第一轮,用coderpad做题,首先merge two sorted list。然后实现功能,使得某函数
在过去给定时段(比如过去10秒)的调用次数不超过100次。
第二轮,同样用coderpad。实现key value store。同时要求限制容量,新的数据挤走
旧的数据,类似LRU。
两轮都要求现场调试加测试。我感觉还不错,但几天后收到猎头反馈,说不match,但
有可能再联系我。我追问反馈细节,猎头就不理我了。:-(
感觉U的bar似乎不低。
f**********d
发帖数: 42
2
赞面经!
“实现功能,使得某函数在过去给定时段(比如过去10秒)的调用次数不超过100次。
”这个怎么做的?能贴一下代码吗?谢谢!

【在 w**v 的大作中提到】
: 被U家猎头联系,安排电面。
: 第一轮,用coderpad做题,首先merge two sorted list。然后实现功能,使得某函数
: 在过去给定时段(比如过去10秒)的调用次数不超过100次。
: 第二轮,同样用coderpad。实现key value store。同时要求限制容量,新的数据挤走
: 旧的数据,类似LRU。
: 两轮都要求现场调试加测试。我感觉还不错,但几天后收到猎头反馈,说不match,但
: 有可能再联系我。我追问反馈细节,猎头就不理我了。:-(
: 感觉U的bar似乎不低。

w******x
发帖数: 28
3
google leaky bucket
[在 futureinhand (Future in Hands) 的大作中提到:]
:赞面经!
:“实现功能,使得某函数在过去给定时段(比如过去10秒)的调用次数不超过100次。
:...........
f*******r
发帖数: 976
4
U的bar比较高啊

被U家猎头联系,安排电面。
第一轮,用coderpad做题,首先merge two sorted list。然后实现功能,使得某函数
在过去给定时段(比如过去10秒)的调用次数不超过100次。
第二轮,同样用coderpad。实现key value store。同时要求限制容量,新的数据挤走
旧的数据,类似LRU。
两轮都要求现场调试加测试。我感觉还不错,但几天后收到猎头反馈,说不match,但
有可能再联系我。我追问反馈细节,猎头就不理我了。:-(
感觉U的bar似乎不低。

【在 w**v 的大作中提到】
: 被U家猎头联系,安排电面。
: 第一轮,用coderpad做题,首先merge two sorted list。然后实现功能,使得某函数
: 在过去给定时段(比如过去10秒)的调用次数不超过100次。
: 第二轮,同样用coderpad。实现key value store。同时要求限制容量,新的数据挤走
: 旧的数据,类似LRU。
: 两轮都要求现场调试加测试。我感觉还不错,但几天后收到猎头反馈,说不match,但
: 有可能再联系我。我追问反馈细节,猎头就不理我了。:-(
: 感觉U的bar似乎不低。

f*******r
发帖数: 976
5
我的思路是用一个circular ring来实现,因为只要求最近10秒,这个ring只要保存11
个元素就可以了,每个元素保存一个pair p. p的第一个值是epoch time
的秒,第二个值是在该秒调用的次数。每次这个函数被调用,就查询一下最近10的总的
调用次数,如果超过了100次,就返回true。否则就返回false。C++代码如下:
class Counter {
private:
vector > counter;
int index;
const int times;
public:
Counter(int seconds, int ts) : counter(seconds+1), index(-1), times(ts) {}
bool quotaExceeded() {
time_t current = time(NULL);
long sum = 0;
for (int i = 0, e = counter.size(); i < e; ++i) {
if (counter[i].first >= current - 10) {
// This happens in the last 10 seconds.
sum += counter[i].second;
} else {
counter[i] = make_pair(0, 0);
}
}
// More than 100 times, we return here directly.
if (sum >= times) return true;
if (index != -1 && counter[index].first == current)
counter[index].second++;
else {
index = (index+1)%counter.size();
counter[index] = make_pair(current, 1);
}
return false;
}
};
比如,你有个函数g,你想要保证g每10秒只被调用100次,那你就可以这么做:
void g() {
static Counter counter(10, 100);
if (counter.quotaExceeded()) return;
std::cout << "g() " << count << std::endl;
}

赞面经!
“实现功能,使得某函数在过去给定时段(比如过去10秒)的调用次数不超过100次。
”这个怎么做的?能贴一下代码吗?谢谢!

【在 f**********d 的大作中提到】
: 赞面经!
: “实现功能,使得某函数在过去给定时段(比如过去10秒)的调用次数不超过100次。
: ”这个怎么做的?能贴一下代码吗?谢谢!

f**********d
发帖数: 42
6
谢谢!点赞!

11
time

【在 f*******r 的大作中提到】
: 我的思路是用一个circular ring来实现,因为只要求最近10秒,这个ring只要保存11
: 个元素就可以了,每个元素保存一个pair p. p的第一个值是epoch time
: 的秒,第二个值是在该秒调用的次数。每次这个函数被调用,就查询一下最近10的总的
: 调用次数,如果超过了100次,就返回true。否则就返回false。C++代码如下:
: class Counter {
: private:
: vector > counter;
: int index;
: const int times;
: public:

c*******t
发帖数: 123
7
我觉得你这个似乎有问题?
首先你返回true or false是O(1)吗?这种题目一般要求查询O(1) 复杂度,而你里面还
有for loop.我没细看。
其次,你时间判断 “counter[i].first >= current - 10” 我怎么觉得有点问题?
你下面调用
if (counter.quotaExceeded()) return;
std::cout << "g() " << count << std::endl;
如果在0.000000000秒有100次调用。第10.00000秒你执行if 判断,答案是不能再调用
了。
但实际上是可以调用的,因为假设你if判断执行了0.01毫秒,到第二行std::cout....
真正执行的时候,
第0.0000000000秒的已经过期了。
所以 “counter[i].first >= current - 10” 中的等号是不是应该去掉?
为什么不用queue 呢?
每次只要检查queue前端是否已经过时,过时弹出,这个是不变量,
然后只要 return queue.size<100;
queue size最多100。
而且我们还要考虑多线程调用的情况。

11
time

【在 f*******r 的大作中提到】
: 我的思路是用一个circular ring来实现,因为只要求最近10秒,这个ring只要保存11
: 个元素就可以了,每个元素保存一个pair p. p的第一个值是epoch time
: 的秒,第二个值是在该秒调用的次数。每次这个函数被调用,就查询一下最近10的总的
: 调用次数,如果超过了100次,就返回true。否则就返回false。C++代码如下:
: class Counter {
: private:
: vector > counter;
: int index;
: const int times;
: public:

f*******r
发帖数: 976
8

我觉得你这个似乎有问题?
首先你返回true or false是O(1)吗?这种题目一般要求查询O(1) 复杂度,而你里面还
有for loop.我没细看。
=======================================================
你还是仔细看完再做评论,没看你就发表评论不好。还有一个就是这题根本没写O(1)的
复杂度。你可以写一个O(1)或者是O(-1)的给大家来欣赏一下。
其次,你时间判断 “counter[i].first >= current - 10” 我怎么觉得有点问题?
你下面调用
if (counter.quotaExceeded()) return;
std::cout << "g() " << count << std::endl;
如果在0.000000000秒有100次调用。第10.00000秒你执行if 判断,答案是不能再调用
了。
但实际上是可以调用的,因为假设你if判断执行了0.01毫秒,到第二行std::cout....
真正执行的时候,
第0.0000000000秒的已经过期了。
==========================================
if判断根本就不要0.01秒,你的假设就已经错了。跟你说一下,Linux不是real time
kernel。你要精确到0.01秒,你还得要发明个hard real-time kernel再来做这道题。
所以 “counter[i].first >= current - 10” 中的等号是不是应该去掉?
为什么不用queue 呢?
================================================
你知道C++ queue是怎么实现的吗?queue和circular ring相比有什么好处吗?
每次只要检查queue前端是否已经过时,过时弹出,这个是不变量,
然后只要 return queue.size<100;
queue size最多100。
=================================================
loop through 100效率高还是loop 10个效率高?
而且我们还要考虑多线程调用的情况。
================================================
对,是要考虑多线程,reentrant, 还要考虑IPC等等
还要考虑时钟漂移,处理器过热等

【在 c*******t 的大作中提到】
: 我觉得你这个似乎有问题?
: 首先你返回true or false是O(1)吗?这种题目一般要求查询O(1) 复杂度,而你里面还
: 有for loop.我没细看。
: 其次,你时间判断 “counter[i].first >= current - 10” 我怎么觉得有点问题?
: 你下面调用
: if (counter.quotaExceeded()) return;
: std::cout << "g() " << count << std::endl;
: 如果在0.000000000秒有100次调用。第10.00000秒你执行if 判断,答案是不能再调用
: 了。
: 但实际上是可以调用的,因为假设你if判断执行了0.01毫秒,到第二行std::cout....

r*****n
发帖数: 17
9
也许我没看仔细,这个解法似乎没有解决sparse caller的情况:比如说20秒的window
,前10秒每秒调用1次,这样buffer的每个counter是1,后10秒只在最后1秒调用1次,
那么前面的9个couter清空了么?

11
time

【在 f*******r 的大作中提到】
: 我的思路是用一个circular ring来实现,因为只要求最近10秒,这个ring只要保存11
: 个元素就可以了,每个元素保存一个pair p. p的第一个值是epoch time
: 的秒,第二个值是在该秒调用的次数。每次这个函数被调用,就查询一下最近10的总的
: 调用次数,如果超过了100次,就返回true。否则就返回false。C++代码如下:
: class Counter {
: private:
: vector > counter;
: int index;
: const int times;
: public:

e********2
发帖数: 495
10
java的DelayQueue。
f*******r
发帖数: 976
11
你代码没看懂,再仔细读读。前9个不清空,看你的window大小,只有超过了window
size的才被清空。

window

【在 r*****n 的大作中提到】
: 也许我没看仔细,这个解法似乎没有解决sparse caller的情况:比如说20秒的window
: ,前10秒每秒调用1次,这样buffer的每个counter是1,后10秒只在最后1秒调用1次,
: 那么前面的9个couter清空了么?
:
: 11
: time

c*******t
发帖数: 123
12
我说的是0.01毫秒,不是0.01秒。你怪别人看你代码不仔细,你就不能仔细看看别人说
的?
你那个确实是bug. 没有什么real time kernel那么复杂,程序执行有一个特征时间,
比如一次程序执行的特征时间是千分之一毫秒,你时间window判断的浮点数误差只要小
于这个特征时间,
就可以排除这个bug.
楼主缺乏精益求精的科学态度。

【在 f*******r 的大作中提到】
: 你代码没看懂,再仔细读读。前9个不清空,看你的window大小,只有超过了window
: size的才被清空。
:
: window

1 (共1页)
进入JobHunting版参与讨论
相关主题
这些大牛怎么记住所有面试的题目的【update:透部分面经】Google电面
有人面试遇到word-ladder-ii这道题目吗?求祝福。攒RP. 发些收集到的Google的面经
这个题目该怎么做电面被羞辱了,求安慰~~~
leetcode #220很好总结一下我的经历,回报版上。
找工作告一段落了,发点面经回馈本版Bloomberg Onsite 面试
电面面经各个公司电面分别用什么工具写code啊?
报个z******ts的onsite面经问道OS的面试题。
y的电面面经LRU Cache Question
相关话题的讨论汇总
话题: 调用话题: counter话题: 100话题: 10话题: index