一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 7540|回复: 33
收起左侧

uber 新鲜热乎的面经 求offer

[复制链接] |试试Instant~ |关注本帖
zn88358800 发表于 2015-7-24 05:58:59 | 显示全部楼层 |阅读模式

2015(7-9月) 码农类 硕士 实习@Uber - 网上海投 - 技术电面 |Otherfresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
之前也看了好多uber的面经, 本以为会考算法 leetcode, 结果却考了一个ood的题目

直接上原题
Develop an API Rate-limit Throttling Client
要求写一个api, 请求第三方api, 如果一秒内的请求太多, 自己的api就直接忽略掉。
面试小哥给了个框架
import time
import datetime

class GoogleMapsClient(object):
    """3rd party maps client; we CANT EDIT THIS."""

    def __init__(self):
        self.requests_made = 0

    def make_request(self):
        self.requests_made += 1. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
        now = datetime.datetime.now().time()
        return "%d - %s - San Francisco" % (self.requests_made, now)


刚开始对python time的单位不熟悉,有个bug。后来改了. 1point3acres.com/bbs
class MyRequest(object):

    def __init__(self):
        self.client = GoogleMapsClient(). 鍥磋鎴戜滑@1point 3 acres
        self.time = time.time()
        self.request_times = 0

    def make_request(self):. more info on 1point3acres.com

        if (time.time()-self.time)>1:
            self.time = time.time(). 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
            self.request_times = 0. 1point 3acres 璁哄潧
        else:
            self.request_times += 1. from: 1point3acres.com/bbs
        if self.request_times>=10: . From 1point 3acres bbs
            time.sleep(1) 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
        return self.client.make_request()
. Waral 鍗氬鏈夋洿澶氭枃绔,

Follow up 是如何让myclient 继续接受request。 可能我也没听明白题意, 小哥直接说time.sleep(1).

面试题目就这一个, 开始还有介绍自己和简历。  求水果啊。。. 1point 3acres 璁哄潧

.鐣欏璁哄潧-涓浜-涓夊垎鍦
补充内容 (2015-7-24 06:08):
感觉最近Uber家面试OOD的频率比较高

补充内容 (2015-7-25 06:47):
今天收到邮件 说是跪了 也不知道哪里跪了, 估计申请人很多吧。

评分

3

查看全部评分

本帖被以下淘专辑推荐:

puncsky 发表于 2015-8-9 02:32:06 | 显示全部楼层
最优解难道不是 token bucket 和 leaky bucket 么?

http://zhengyun-ustc.iteye.com/blog/1895814

  1. var rate = 5.0; // unit: messages. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  2. var per  = 8.0; // unit: seconds
  3. var allowance = rate; // unit: messages. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  4. var lastTime = new Date(); // floating-point, e.g. usec accuracy. Unit: seconds

  5. while (var msg = recv()) {
  6.   var currentTime = new Date();
  7.   var timeElapsed = (currentTime - lastTime) / 1000;
  8.   var lastTime = currentTime;
  9.   allowance += timeElapsed * (rate / per);. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  10.   
  11.   if (allowance > rate) {
  12.     allowance = rate; // throttle.鐣欏璁哄潧-涓浜-涓夊垎鍦
  13.   }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  14.   if (allowance < 1.0) {. 1point3acres.com/bbs
  15.     discard(msg);
  16.   } else {. 1point 3acres 璁哄潧
  17.     forward(msg);. Waral 鍗氬鏈夋洿澶氭枃绔,
  18.     allowance -= 1.0;
  19.   }. 1point 3acres 璁哄潧
  20. }
复制代码
回复 支持 4 反对 0

使用道具 举报

sjtuzyt 发表于 2015-7-24 07:56:34 | 显示全部楼层
我昨天面的和这个差不多, 要求控制每秒发送req数量小于100。我用队列做的,但最优解应该是循环队列,O(1)时间复杂度。
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-7-24 10:37:06 | 显示全部楼层
sjtuzyt 发表于 2015-7-24 07:56. From 1point 3acres bbs
我昨天面的和这个差不多, 要求控制每秒发送req数量小于100。我用队列做的,但最优解应该是循环队列,O(1) ...

那HR说多久给feedback了么?
回复 支持 反对

使用道具 举报

sjtuzyt 发表于 2015-7-24 10:59:43 | 显示全部楼层
zn88358800 发表于 2015-7-24 10:37. more info on 1point3acres.com
那HR说多久给feedback了么?

没有额 应该蛮快的 这是我第二轮电面了 第一轮是三天出的
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-7-24 13:08:15 | 显示全部楼层
sjtuzyt 发表于 2015-7-24 10:59
没有额 应该蛮快的 这是我第二轮电面了 第一轮是三天出的

那你的第二轮电面都面啥了啊 能不能分享下?
回复 支持 反对

使用道具 举报

sjtuzyt 发表于 2015-7-24 20:59:43 | 显示全部楼层
zn88358800 发表于 2015-7-24 13:08
那你的第二轮电面都面啥了啊 能不能分享下?

clone graph
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-7-24 23:43:13 | 显示全部楼层

好的 谢谢了
回复 支持 反对

使用道具 举报

mmliu 发表于 2015-8-10 12:01:32 | 显示全部楼层
sjtuzyt 发表于 2015-7-24 07:56. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
我昨天面的和这个差不多, 要求控制每秒发送req数量小于100。我用队列做的,但最优解应该是循环队列,O(1) ...

请问 层主 提到的循环队列的解法是这个意思么:

new 一个长度为100的数组,用来存放已做过的请求,如果数组有空槽就依次放入,反之,若发现要放的槽已经有元素了,就查看一下已存在的这个元素的时间,超过一秒就直接replace,一秒以内的说明请求超限,直接丢弃。

另外没太明白楼主说的time.sleep(1)是什么意思
回复 支持 反对

使用道具 举报

glaciersilent 发表于 2015-8-10 13:23:59 | 显示全部楼层
求问下这个一定要用python来演示思路么?
回复 支持 反对

使用道具 举报

flamen 发表于 2015-8-10 14:19:42 | 显示全部楼层
patpat卤煮 我也是电面考一题ood 答出来了还是挂了。。。
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-8-10 14:24:50 | 显示全部楼层
glaciersilent 发表于 2015-8-10 13:23
求问下这个一定要用python来演示思路么?

没有规定, 就是用熟悉的就好。 面试官也是让我自己选的
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-8-10 14:28:37 | 显示全部楼层
flamen 发表于 2015-8-10 14:19
patpat卤煮 我也是电面考一题ood 答出来了还是挂了。。。

嗯嗯 move on吧。。
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-8-10 23:00:24 | 显示全部楼层
mmliu 发表于 2015-8-10 12:01
请问 层主 提到的循环队列的解法是这个意思么:
. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
new 一个长度为100的数组,用来存放已做过的请求,如 ...
. Waral 鍗氬鏈夋洿澶氭枃绔,
time.sleep(1) 是当时面试官说的 ,等1s后 计数器都清零,就会继续接受消息了 当时我也没太明白他到底要我怎样
回复 支持 反对

使用道具 举报

glaciersilent 发表于 2015-8-11 00:15:40 | 显示全部楼层
zn88358800 发表于 2015-8-10 14:24
没有规定, 就是用熟悉的就好。 面试官也是让我自己选的

酱紫 听说uber主要用python?以为必须要他们工作语言面试
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-8-11 01:17:10 | 显示全部楼层
glaciersilent 发表于 2015-8-11 00:15. 1point3acres.com/bbs
酱紫 听说uber主要用python?以为必须要他们工作语言面试

.鐣欏璁哄潧-涓浜-涓夊垎鍦是啊 主要是用python 以至于我准备的时候还看了看python的一些面试题 但是也没问到 就只是做这一题
回复 支持 反对

使用道具 举报

jiebour 发表于 2015-8-11 01:48:32 | 显示全部楼层
mmliu 发表于 2015-8-10 12:01
请问 层主 提到的循环队列的解法是这个意思么:

new 一个长度为100的数组,用来存放已做过的请求,如 ...

应该就是循环队列,Google也有一个类似的面试题,用deque也行其实....
回复 支持 反对

使用道具 举报

jiebour 发表于 2015-8-11 02:09:06 | 显示全部楼层
楼主毕业了嘛?请问是怎么拿到内退的?
回复 支持 反对

使用道具 举报

 楼主| zn88358800 发表于 2015-8-11 02:09:59 | 显示全部楼层
jiebour 发表于 2015-8-11 02:09
楼主毕业了嘛?请问是怎么拿到内退的?

没毕业 没内推 海投的 暑假在当地小公司实习。
回复 支持 反对

使用道具 举报

jiebour 发表于 2015-8-11 15:59:37 | 显示全部楼层
zn88358800 发表于 2015-8-10 23:00. 1point 3acres 璁哄潧
time.sleep(1) 是当时面试官说的 ,等1s后 计数器都清零,就会继续接受消息了 当时我也没太明白他到底要 ...
. From 1point 3acres bbs
他这样说,并不能听出有什么卵用。。。。
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-11 10:36

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表