[八我司] 介绍一下Uber tech stack和各个大组的情况

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
码农求职神器Triplebyte:
不用海投
内推多家公司面试
把贵司招聘信息放这里
查看: 9912|回复: 6
收起左侧

电梯设计题目总结

[复制链接] |试试Instant~ |关注本帖
chenwoo 发表于 2015-8-5 00:57:59 | 显示全部楼层 |阅读模式

2015(7-9月) 码农类General 硕士 全职@Amazon - 网上海投 - Onsite  | Pass | fresh grad应届毕业生

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

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

x
楼主前段时间Amazon onsite,遇到了Amazon经典的电梯设计题目,下面是我对这个题目的总结,也是答案不是最好的,欢迎大家来补充。


我感觉对于OOP设计问题,关键要和面试官进行讨论,弄清情景situation ,who will use it,在这个situation都是有哪些对象,他们在干什么,他们之间是什么关系,然后一个对象一个对象的去分析这个对象应有的属性,和行为。多和面试官讨论,越细致越好!如果可以使用什么单例,或者factory method 来设计的话,multi threading, 就尽量的添加上这些东西。

elevator:
First ask the interviewer what kind of elevator?  there is only one elevator serving that building or multiple elevators serving the building simultaneously?
this situation is that: there is one elevator serving the building.  there are many floors in the buliding. Maybe there are some users in different floor pressing the button simultaneously. This results in some requests to RequestProcessCenter for processing. The  RequestProcessCenter figure out the first request that need to be processed in such an algorithm that the distance between target floor and current floor is shortest.
First describe the whole situation. and check it with your interviewer;
Second sketch out the main classes and methods on the whiteboard;
So we need the following classes:
public class User {
private name;
public pressButton(int toFloor) {
    Request req = new Request( toFloor);
    RequestProcessCenter  center = RequestProcessCenter.getInstance();
    center.addRequest(req);
}
}
public class Request {
    private int toFloor;
    public Request(int _toFloor) {
        toFloor = _toFloor;
}
public getToFloor() {
    return toFloor;
}
}
public class Elevator {
    public static Elevator instance = null;
    private int currentFloor;
    public static Elevator( ) {
        if (instance == null) {  // late loading and eager loading
                    // connection pool
            synchronized (Elevator.class) {
                instance = new Elevator();
}
}
return instance;
}
public getInstance() {
    if (instance == null) {
            synchronized (SingletonDemo.class) {
                instance = new Elevator();
}
}
return instance;
}
public getCurrentFloor() {
    return currentFloor;
}
public moveToTargetFloor(int toFloor) {
    currentFloor = toFloor;
}
public void moveUp();
public void moveDown();
}
public RequestProcessCenter implements runnable {
    public LinkedList<Request> queue;
public RequestProcessCenter( ) {
        queue = new LinkedList<Request>( );
}
public void run() {
        while ( true ) {
            processRequest( )
}
}
public void addRequest(Request request) {
    queue.add(request);
}
public void removeRequest(Request request) {
    queue.remove(request);
}
public Request getNextRequest( ) {
    Request shortestReq = null;
    int shortest = Integer.MAX_VALUE;
    int curFloor = Elevator.getInstance( ).getCurrentFloor( );
    for (Request item : queue) {
        int distance = Math.abs(curFloor - item.getToFloor( ) );
        if (distance < shortest) {
            shortest = distance;
            shortestReq = item;
}
}
return shortestReq;
}
public void processRequest( ) {
    Request req = getNextRequest( );
if (req != null) {
        int toFloor = req.getToFloor( );
        Elevator.getInstance.moveToTargetFloor( toFloor);
        queue.remove(req);
}
   
}
}



评分

6

查看全部评分

本帖被以下淘专辑推荐:

陈润鹏 发表于 2016-6-21 04:05:05 | 显示全部楼层
LZ的电梯好像缺少一个方向 一旦有请求 离得远的 就几乎别想坐上电梯了
回复 支持 2 反对 0

使用道具 举报

ricace 发表于 2017-11-27 04:02:15 | 显示全部楼层
谢谢楼主分享。有两个问题:
1. 用singleton, 但是如果有两个电梯的话是不是不太好, 是否用blockingqueue来处理两个电梯竞争user的问题 来源一亩.三分地论坛.
2. 电梯的上下行方向问题。一般往上走了就会先到上面的楼层,而不是选shortest distance。shortest distance有可能是下方的楼层
回复 支持 1 反对 0

使用道具 举报

夏末微凉 发表于 2015-10-13 03:45:30 | 显示全部楼层
楼主你好,我想请问下这一步:
public getInstance() {
    if (instance == null) {
          synchronized (SingletonDemo.class) {. 牛人云集,一亩三分地
                instance = new Elevator();
}
这里面的singletonDemo.class是什么意思呢? 为什么要单独定义一个getInstance() method ?
回复 支持 反对

使用道具 举报

xiangxiang 发表于 2015-10-15 00:28:52 | 显示全部楼层
夏末微凉 发表于 2015-10-13 03:45
楼主你好,我想请问下这一步:
public getInstance() {
    if (instance == null) {
.留学论坛-一亩-三分地
singleton design pattern 吧
回复 支持 反对

使用道具 举报

hackjutsu 发表于 2017-11-27 08:01:19 | 显示全部楼层
public getInstance() {
    if (instance == null) {
          synchronized (SingletonDemo.class) {
                if (instance == null) { // Check again
                    instance = new Elevator();
                ...
} 来源一亩.三分地论坛.


Singleton Pattern 的实现需要double checked locking。
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

关闭

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

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-5-25 15:22

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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