Redian新闻
>
亚麻OO design 出租车系统讨论
avatar
亚麻OO design 出租车系统讨论# JobHunting - 待字闺中
p*2
1
2. 面向对象设计,一个叫出租车的系统。乱七八糟的,我也就瞎说一通。然后他就问
了,如果不同的用户同时叫了同一辆车,怎么办?我说就像数据库事务处理会死锁一样
,标记一下,用另一个线程解就行了。他说不行,那多少工作量。我就说,用面的类来
判断重复就行了,一个车就是预订人再多,也多不哪去,这个可以分布式安在车上或者
不同出租公司的机器上,压力不大。他就不说了。
avatar
p*2
2
从来没叫过出租。一般来说怎么订?
1.在网上订?
2.打电话订?
网上订应该就是是自动的吧,打电话订是自动的还是人工的?我感觉会是人工的。如果
是人工的,那么这个系统就是给接线员准备的系统?
avatar
g*y
3
https://www.uber.com/#
他当时说的就是这个网站,你可以看看

【在 p*****2 的大作中提到】
: 2. 面向对象设计,一个叫出租车的系统。乱七八糟的,我也就瞎说一通。然后他就问
: 了,如果不同的用户同时叫了同一辆车,怎么办?我说就像数据库事务处理会死锁一样
: ,标记一下,用另一个线程解就行了。他说不行,那多少工作量。我就说,用面的类来
: 判断重复就行了,一个车就是预订人再多,也多不哪去,这个可以分布式安在车上或者
: 不同出租公司的机器上,压力不大。他就不说了。

avatar
p*2
4

你有用过这个网站吗?如果没用过的像我怎么办?面试官会把需求讲清楚吗?

【在 g****y 的大作中提到】
: https://www.uber.com/#
: 他当时说的就是这个网站,你可以看看

avatar
p*2
5

看了一下。当时面试的重点是什么?
需要考虑signup, payment, mobile devices这些吗?还是只是backend的booking
system?

【在 g****y 的大作中提到】
: https://www.uber.com/#
: 他当时说的就是这个网站,你可以看看

avatar
g*y
6
系统我没用过,他会讲得,不清楚让你再问。
让你作的是backend system
avatar
h*8
7
有可能我想的比较简单了。
如果是订车系统的话,最终是不是考虑维护一个分布式的队列?
预定就是进队列(enq),派出出租车是出队列(deq)。
由于这个队列是分布式的,可能要用到quorum consensus维护一致性,以及提供一定程
度的容错。
avatar
p*2
8

感觉request接受没什么,但是scheduling学问比较大。比如怎么match一个taxi到一个
request上,涉及到很多信息需要储存和处理。这个我准备做一下。大家一起讨论。

【在 h*******8 的大作中提到】
: 有可能我想的比较简单了。
: 如果是订车系统的话,最终是不是考虑维护一个分布式的队列?
: 预定就是进队列(enq),派出出租车是出队列(deq)。
: 由于这个队列是分布式的,可能要用到quorum consensus维护一致性,以及提供一定程
: 度的容错。

avatar
p*2
9
感觉没什么意思,随便写了一下。觉得难点是如何匹配taxi。比如要考虑taxi的当前位
置,状态,如果载人,什么时候能idle。而且还要考虑traffic情况,customer也可能
会改变当前request的destination什么的。还有要检查是否有灵异事件,比如进去两个
,出来一个什么的。
class Customer{
ID, name, address, etc.
type {maybe enum regular, premium etc}
credit card
book()
}
class Request{
customer
from
to
number of people
number of taxi
}
class Driver{

}
class Taxi{
status {on order, idle, etc.}
driver
location
request
takerequest()
donerequest()
}
BookSystem{
HashMap of customer
HashMap of driver
HashMap of taxi
Queue of request (maybe PriorityQueue)
}
avatar
p*2
10
不知道一个driver是不是固定一个taxi还是可以互换的。或者2,3个driver驾驶同一个
出租。
不知道一个customer可不可以下几个request。或者一个request可不可以支持几个
custoemer。
系统的数据量有多大。感觉都需要跟面试官交流才能做呀。
avatar
p*2
11
如果不同的用户同时叫了同一辆车,怎么办?
为什么会发生这个情况呢?不是应该系统去匹配吗?难道用户叫车的时候可以指定哪辆
车?
avatar
Z*4
12
不同用户叫同一辆车的情况应该是:
某车司机被call要去某地接人,运送过程中又 接到电话问是否愿意去另一地接人(没
有比他更近的出租车了)司机说好,等送完人以后直接去接那个人。
avatar
p*2
13

那taxi class里加一个queue是不是就解决了?

【在 Z**********4 的大作中提到】
: 不同用户叫同一辆车的情况应该是:
: 某车司机被call要去某地接人,运送过程中又 接到电话问是否愿意去另一地接人(没
: 有比他更近的出租车了)司机说好,等送完人以后直接去接那个人。

avatar
Z*4
14
简单情况下是这样。但是如果在这个司机送第一个乘客的过程中又有其他出租车恰好比
他更近的话,应该重新安排任务。

【在 p*****2 的大作中提到】
:
: 那taxi class里加一个queue是不是就解决了?

avatar
p*2
15

感觉是会有这个情况。比如路上堵车了。所以BookSystem需要保持一个pending的list
, 并且监视taxi的状况,一旦发现异常则可能重新schedule。

【在 Z**********4 的大作中提到】
: 简单情况下是这样。但是如果在这个司机送第一个乘客的过程中又有其他出租车恰好比
: 他更近的话,应该重新安排任务。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。