由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Uber onsite的设计题
相关主题
不懂就问,design uber该怎么答,有哪些要注意的地方,求大牛指点找距离在一定范围之内的(比如1mile, 25 mile, 50 mile)的点(friends, stores, etc)
地图上分割成不同区域这个设计题的核心是什么来着?报F和G的offer,分享面经和准备经验
Design POI, GeoHash 怎么存在数据库里面。F onsite 面经
如果面试就是比刷题,那是不是根本不用学啥技术FB这题怎么做?
心情非常郁闷,冒个泡非死不可的onsite 系统设计没面好 影响大么
uber 51 billion le?挑战:IBM 面试IQ智力测验题Q7
f design question 求讨论问道leetcode上的题
大家帮我看看,是不是被烙印害了?M家onsite面经
相关话题的讨论汇总
话题: uber话题: block话题: update话题: 设计
进入JobHunting版参与讨论
1 (共1页)
m***i
发帖数: 37
1
挂在了设计题, 设计Uber app的两个service。
driver/车
update (carId,log,lat), 1 update per sec.
rider
getCarsAndETA(log,lat), 1 request per sec.
某个城市,假设是SF,有1000辆车,1000个active users.
Q:
单机可以吗?
如何存储数据,用数据库吗?
如何update车移动的数据(设计数据结构)。
如何设计getCarsAndETA求得ETA最小的10辆车 (可以简单的假设距离近就ETA小)。
如果update的响应速度比getCarsAndETA快得多(getCarsAndETA计算量很大),怎么
scale这两个service,即怎么使getCarsAndETA跟得上update的响应速度。
如何scale到其他城市
1)周边小城市
2)距离很远的大城市
看过一个talk讲到Uber用的是google的一个library,将地图分成一个个block,根据某
个点画个圈,只计算圈所覆盖的blocks。
我就是按这个思路答的,不过被指出这样有个问题是如果block size不小,那同一个
block里面车,即使是在两个对角的也算同一个block,以block为单位计算距离的话不
够准确。
各位有什么想法/解法,请不吝赐教。谢谢。
A********d
发帖数: 558
2
赞楼主的分享精神!这个版太缺了,总有人把我和swjtuer那个傻逼相提并论,最大的
区别就是姐当年把所有面试面筋都奉献出来了,swjtuer就只发挑拨离间贴和阴阳怪气
的留言。
l*******i
发帖数: 25
3
Use a hash map to store locations of cars.
Cars location is updated every second, but reconstruct a KD tree only every
minute.
cache the result of getCarsAndETA() so it is only update every minute.
l*******i
发帖数: 25
4
To be more accurate. You can compute the velocity of cars and estimate their
locations between minutes.
s*********n
发帖数: 35
5
一共就1000辆车 单机存内存应该可以吧 (反正数据每秒上报,后面车的数据覆盖前
面的,不存在持久化问题)
然后将地图分为六边形小块,每个车更新位置时以hexgon id做一个index。 这样找车
的时候查当前六边形附近几个的candidates
找车api算的慢,估计时间都耗在计算距离上了,可以单独提出来做一个前端,部署多
台机器,从后端内存数据库里提取candidate list 然后逐一计算距离。
大家感觉这么的靠谱不

【在 m***i 的大作中提到】
: 挂在了设计题, 设计Uber app的两个service。
: driver/车
: update (carId,log,lat), 1 update per sec.
: rider
: getCarsAndETA(log,lat), 1 request per sec.
: 某个城市,假设是SF,有1000辆车,1000个active users.
: Q:
: 单机可以吗?
: 如何存储数据,用数据库吗?
: 如何update车移动的数据(设计数据结构)。

G****A
发帖数: 4160
6
lat是latitude的意思?

【在 m***i 的大作中提到】
: 挂在了设计题, 设计Uber app的两个service。
: driver/车
: update (carId,log,lat), 1 update per sec.
: rider
: getCarsAndETA(log,lat), 1 request per sec.
: 某个城市,假设是SF,有1000辆车,1000个active users.
: Q:
: 单机可以吗?
: 如何存储数据,用数据库吗?
: 如何update车移动的数据(设计数据结构)。

z*********8
发帖数: 2070
7
瓶颈应该不在内存而在cpu上面吧, 2000qps的计算量估计单机扛不住

【在 s*********n 的大作中提到】
: 一共就1000辆车 单机存内存应该可以吧 (反正数据每秒上报,后面车的数据覆盖前
: 面的,不存在持久化问题)
: 然后将地图分为六边形小块,每个车更新位置时以hexgon id做一个index。 这样找车
: 的时候查当前六边形附近几个的candidates
: 找车api算的慢,估计时间都耗在计算距离上了,可以单独提出来做一个前端,部署多
: 台机器,从后端内存数据库里提取candidate list 然后逐一计算距离。
: 大家感觉这么的靠谱不

G****A
发帖数: 4160
8
lat是latitude的意思?

【在 m***i 的大作中提到】
: 挂在了设计题, 设计Uber app的两个service。
: driver/车
: update (carId,log,lat), 1 update per sec.
: rider
: getCarsAndETA(log,lat), 1 request per sec.
: 某个城市,假设是SF,有1000辆车,1000个active users.
: Q:
: 单机可以吗?
: 如何存储数据,用数据库吗?
: 如何update车移动的数据(设计数据结构)。

z*********n
发帖数: 1451
9
我帮lz回答下最后一问,block的那个问题,看过网上的文章,正解(事实人家就是这
么做的)就是把周围的一圈block也考虑进来,然后以实际距离决出一个最近的。。。
lz看到这个会不会很无语
。。
s**x
发帖数: 7506
10
Block 有好多缺点阿,这是最普通的办法。估计最好是 kd tree , quad tree 或
Geohash, 其实就是 hierarchical block.
每秒update 一次,连数据库都用不着.
1000 辆车,一台机器应该足够了,但要容错,就要加备份。


: 我帮lz回答下最后一问,block的那个问题,看过网上的文章,正解(事实人家
就是这

: 么做的)就是把周围的一圈block也考虑进来,然后以实际距离决出一个最近的
。。。

: lz看到这个会不会很无语

: 。。



【在 z*********n 的大作中提到】
: 我帮lz回答下最后一问,block的那个问题,看过网上的文章,正解(事实人家就是这
: 么做的)就是把周围的一圈block也考虑进来,然后以实际距离决出一个最近的。。。
: lz看到这个会不会很无语
: 。。

相关主题
uber 51 billion le?找距离在一定范围之内的(比如1mile, 25 mile, 50 mile)的点(friends, stores, etc)
f design question 求讨论报F和G的offer,分享面经和准备经验
大家帮我看看,是不是被烙印害了?F onsite 面经
进入JobHunting版参与讨论
z*********8
发帖数: 2070
11
kdtree quadtree不还是把地图分块的思想吗。。。实际上uber就是用的google s2
library把地图分成若干cell

【在 s**x 的大作中提到】
: Block 有好多缺点阿,这是最普通的办法。估计最好是 kd tree , quad tree 或
: Geohash, 其实就是 hierarchical block.
: 每秒update 一次,连数据库都用不着.
: 1000 辆车,一台机器应该足够了,但要容错,就要加备份。
:
:
: 我帮lz回答下最后一问,block的那个问题,看过网上的文章,正解(事实人家
: 就是这
:
: 么做的)就是把周围的一圈block也考虑进来,然后以实际距离决出一个最近的
: 。。。
:
: lz看到这个会不会很无语

j**********3
发帖数: 3211
12
uber设计题感觉向来都是乱问的
k***a
发帖数: 1199
13
看看geohashing的文档

【在 m***i 的大作中提到】
: 挂在了设计题, 设计Uber app的两个service。
: driver/车
: update (carId,log,lat), 1 update per sec.
: rider
: getCarsAndETA(log,lat), 1 request per sec.
: 某个城市,假设是SF,有1000辆车,1000个active users.
: Q:
: 单机可以吗?
: 如何存储数据,用数据库吗?
: 如何update车移动的数据(设计数据结构)。

s****7
发帖数: 19
14
难得的正能量帖,先顶再看,感谢分享

【在 m***i 的大作中提到】
: 挂在了设计题, 设计Uber app的两个service。
: driver/车
: update (carId,log,lat), 1 update per sec.
: rider
: getCarsAndETA(log,lat), 1 request per sec.
: 某个城市,假设是SF,有1000辆车,1000个active users.
: Q:
: 单机可以吗?
: 如何存储数据,用数据库吗?
: 如何update车移动的数据(设计数据结构)。

z*********n
发帖数: 1451
15

我怎么记得Google S2的精度要高于Geohash呢。。Geohash主要优点是速度快,对数据
库比较友好吧

【在 s**x 的大作中提到】
: Block 有好多缺点阿,这是最普通的办法。估计最好是 kd tree , quad tree 或
: Geohash, 其实就是 hierarchical block.
: 每秒update 一次,连数据库都用不着.
: 1000 辆车,一台机器应该足够了,但要容错,就要加备份。
:
:
: 我帮lz回答下最后一问,block的那个问题,看过网上的文章,正解(事实人家
: 就是这
:
: 么做的)就是把周围的一圈block也考虑进来,然后以实际距离决出一个最近的
: 。。。
:
: lz看到这个会不会很无语

w******g
发帖数: 262
16
学习了
w*m
发帖数: 1806
17
大牛们赶快详细写个code吧
s**x
发帖数: 7506
18
那个cell不是简单的分块,是用Hilbert curve 弄的。俺也不憧。


: kdtree quadtree不还是把地图分块的思想吗。。。实际上uber就是用的google
s2

: library把地图分成若干cell



【在 z*********8 的大作中提到】
: kdtree quadtree不还是把地图分块的思想吗。。。实际上uber就是用的google s2
: library把地图分成若干cell

w*m
发帖数: 1806
19
大牛们赶快详细写个code吧
z*********n
发帖数: 1451
20

google
用Hilbert curve弄就是简单的把2维映射到1维,方便数据库检索而已,有一定的错误


【在 s**x 的大作中提到】
: 那个cell不是简单的分块,是用Hilbert curve 弄的。俺也不憧。
:
:
: kdtree quadtree不还是把地图分块的思想吗。。。实际上uber就是用的google
: s2
:
: library把地图分成若干cell
:

1 (共1页)
进入JobHunting版参与讨论
相关主题
M家onsite面经心情非常郁闷,冒个泡
square这个公司现在怎样uber 51 billion le?
Pocket Gems, Quantcast, Zenefit, Symantec 面经f design question 求讨论
算法问题大家帮我看看,是不是被烙印害了?
不懂就问,design uber该怎么答,有哪些要注意的地方,求大牛指点找距离在一定范围之内的(比如1mile, 25 mile, 50 mile)的点(friends, stores, etc)
地图上分割成不同区域这个设计题的核心是什么来着?报F和G的offer,分享面经和准备经验
Design POI, GeoHash 怎么存在数据库里面。F onsite 面经
如果面试就是比刷题,那是不是根本不用学啥技术FB这题怎么做?
相关话题的讨论汇总
话题: uber话题: block话题: update话题: 设计