avatar
大山还真是大嗓门# Music - 天籁之音
s*9
1
电梯design的问题经常在Amazon的面试中出现。在版上和网上搜了一圈,没有看到比较
完整的解答。一直不清楚回答这种问题应该体现一个什么样的思路。试着做了一下,请
大家给些意见。
分析:
1. 电梯至少要处理两个事件,乘客按电钮是一个事件,电梯到达某层楼是一个事件。
每个事件发生时,电梯应当做相应的操作。
2. 电梯的操作不单取决于事件,还依赖电梯的状态,状态包括任务列表(需要去的楼
层)和运行状态(上行、下行)。
3。按电钮和到达某层的事件可以是同时的,电梯应提供互斥机制保护shared resource。
设计:
class Elevator{
pubic:
buttonPushed(int source, int destination);//source层有人要去destination层
levelArrived(int level);//level层到了
private:
stop(); //停
up(); //上行
down(); //下行
mutex;
taskList;
stat
avatar
x*y
2
似乎定位是女高音。 但不像高音特别高的样子。 离李娜的水准差得有点远
avatar
s*t
3
ding
完全没有面向对象的经验

resource。

【在 s**9 的大作中提到】
: 电梯design的问题经常在Amazon的面试中出现。在版上和网上搜了一圈,没有看到比较
: 完整的解答。一直不清楚回答这种问题应该体现一个什么样的思路。试着做了一下,请
: 大家给些意见。
: 分析:
: 1. 电梯至少要处理两个事件,乘客按电钮是一个事件,电梯到达某层楼是一个事件。
: 每个事件发生时,电梯应当做相应的操作。
: 2. 电梯的操作不单取决于事件,还依赖电梯的状态,状态包括任务列表(需要去的楼
: 层)和运行状态(上行、下行)。
: 3。按电钮和到达某层的事件可以是同时的,电梯应提供互斥机制保护shared resource。
: 设计:

avatar
w*w
4
有链接么?
木有浙江卫视看的悲摧啊~~
avatar
s*9
7
我是觉得这些解答没有考虑一个问题。考虑下面的场景:
乘客在1楼进电梯,按10楼。走到3楼,5楼有乘客按电梯。电梯停5楼,乘客上电梯,按
7楼。电梯继续上7楼,停,再到10楼。
假设电梯提供一个moveToFloor(int destination)的函数。在上面的场景中,设电梯在
1楼,bank调用elevator1.moveToFloor(10)。 moveToFloor(10)不能等电梯到了10楼
才返回,否则电梯不能停5楼。所以moveToFloor(10)应该给电梯设一个去10楼的任务,
把电梯设成向上运动,然后返回。这样就有一个问题,到了10楼谁来停电梯?我想的就
是除了buttonPush的事件,还应该有一个levelArrived事件,每到一层楼,该事件触发
一次,就是elevator提供一个levelArried(int)函数,每到一层楼,该函数被调用一
次。
我一开始假设单电梯的情况,没有bank,只有电梯和乘客,所以对怎么调用这个
levelArried函数有些问题。加上bank,由bank来调用levelArried,看起来就通顺了。
这个Message Disp

【在 s******i 的大作中提到】
: 可以参考这个http://stackoverflow.com/questions/493276/modelling-an-elevator-using-object-oriented-analysis-and-design
: 我觉得需要有一个类似elevator bank之类的central control,因为这里有两个
: elevator,也可以更多。
: 至于消息传递和设计模式,我觉得
: 1. Button informs bank (Observer pattern)
: 2. bank makes decision
: 3. dispatches message to best elevator (Message Dispatcher pattern)

avatar
E*t
8
李娜网球打得好 还会飙高音 人才 哈哈哈
avatar
s*i
9
Message Dispatcher pattern不一定是一个严格意义上的pattern。当然任何人都可以
定义和实现自己设计的pattern。
基本的思路就是有一个message receiver pool,但是一个message只能给一个特定的
receiver,而不是像observer pattern那样broadcast给每一个receiver。每一个
receiver需要注册到这个pool以接收消息。可以理解为1:1的observer pattern而不是1
avatar
f*4
11
虽然我没给amz问到这个问题,但是要是我来回答,我会告诉他depends
1.如果只有1台电梯,就非常简单,电梯分停,上行,下行3个状态;电梯内外按钮优先
级一样,根据停,上下行来处理;处理开关门;处理故障(如果电梯出故障了,怎么办
,故障时电梯门要维持开着等等)
2.如果要多台电梯同时运行,一个控制类;n台电梯。控制类用消息队列来控制各个电
梯;电梯可以再增加;内部按钮是这台电梯必须实现的请求;外部按钮只是把请求发到
控制类,由控制类来调度合适的电梯完成请求;各台电梯上下行,停3个状态;电梯提
供状态查询给控制类(上行还是下行,上行最大楼层/下行最低楼层;停在第几楼);最
后提供故障处理
这类问题没有具体环境;这样就需要你先来进行假设,然后再做设计
并且你的设计只要够用就好,比如只有1台电梯,就没必要弄那么复杂
avatar
w*w
13
目前还卡在欢哥唱费尔克林斯的苦孩纸~~
avatar
i*t
14
李娜很苦逼啊
这么个大山都要和她比
avatar
x*y
15
听不懂。 李娜为啥哭比?

【在 i******t 的大作中提到】
: 李娜很苦逼啊
: 这么个大山都要和她比

avatar
i*t
16
大山是谁啊 给李娜的方丈 提鞋的实力都不够啊

【在 x******y 的大作中提到】
: 听不懂。 李娜为啥哭比?
avatar
h*8
17
王妃这首歌真不适合女生唱,
萧敬腾唱的真心好。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。