找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 11548|回复: 10
收起左侧

[Amazon] amazon群面 跪 细节及参考代码只有第一题

  [复制链接]

2

主题

2

精华

54

积分

资深会员

Rank: 2

积分
54
发表于 2-22-2016 12:43 PM | 显示全部楼层 |阅读模式

亲!马上注册或者登录会查看更多内容!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Sophia 于 2-22-2016 06:03 PM 编辑
  Y# B! ^7 |8 H0 W1 S" N: K) f9 P) `3 S3 w1 ~4 |
求积分——————群面已跪
! _' K) a* }$ l3 M0 H! a: [7 a& r& Q  k7 t* x
群面很多人手里都有题目了,说一下细节:
- R- O. a, U& Q6 P每天报销80的打车,65的吃饭,还有老家停车费(上飞机前存车费他们都报,要保留小票)
) h5 C( |) w+ |* t宾馆并没有吃饭的地方,隔壁也没有(坐飞机一般到了都晚上6点多)所以提前在机场多买点吃的放宾馆(保留小票报销,买了好多喜欢的naked的果汁)& o2 J; [0 x% b
那里宾馆和附近黑车的人都知道是来亚麻面试的,所以地方不知道可以问他们,但要看自己的邮件。
6 l* S0 f5 W9 p' n3 N7 s  t8 r第二天8点HR准时把人拉进去,拿ID换门禁卡,进入楼里,有个大毛培房间(上面都可以看到电线和房梁,汗一个.进去以后有小桌子上面放着电脑和姓名,找到自己的位置,然后另外一个HR发题目草稿一类的,就是一个塑封的不到10页纸张,图特别大,文字很少,基本跟传的题目是一样的,连图都差不多。
8 U1 M% L* }2 ^: M* CHR讲完PPT后,大家开始装莫做样子看题目,旁边有张白纸空表,跟组员商量好了就把自己的名字和题号写在上面,准备好的就可以开始吗代码了,(开始面试官说还不能写代码,给他们写完思路再敲,后来发现管的很松,他们在别的桌子转,没人管你写没写代码),3个面试官一个桌子一个桌子问思路,你选哪个题目,思路是什么?说完了就开始敲代码。
/ W. @7 F+ E- T" Z
; A% K6 |! F! S9 a6 V6 [第一次群面,打开IDE(导入代码不进去,找面试官调的,全是红叉,又是面试官调的),左边差不多有10多个各种各样的文件,对没做过项目,只刷锅lc的差点傻眼,后来仔细看看文件名,原来把三个题目的各种class文件都列在一起,你自己找想做的文件,然后打开发现里面的input是跟传说的不同,是3个,一个是读进来一个streamRequest(是个object), 还有2个输出文件,类似于 question1findValidRequest(streamRequest, WriteResulttoFile validFile, WriteResulttoFile, rejectFile) {} 然后读入 读出都是tsv文件,类似于txt,也在左边列出的文件里,可以随时打开来看。tsv 文件里开头是content_id[tab] areaid[tab]startTime[tab]endTime,下面列的一大堆数据5 e& r+ {- i( }9 N
0 i9 Z4 m2 b& g0 P) V
具体题目不再赘述,群里都有。 第一题的代码大概列一下,这个原始代码自己修改一下变成 读文本数据,( }1 n" I9 Y3 u
! z) a. J# j- R9 Q

/ s. G* A! f$ h) |//这个是非常naive的方法,有合法的就先读进来,插入到相应的timeslot (并读到validfile里面),然后后面进来的发现位置满了,或重复的,则踢到rejectfile里面,这个方法可能做得人太多,没什么新意,当面试官问你怎么优化,很可能是怎么踢非法的优化过程,因为文件很长,request很多,所以如果naive的方法,很快合法的就安排好了,后面一大堆的数据都没用到,但是可以想想你现在手里合法的schedule是不是最优的(optimize,并不单单指算法方面,自己去想,怎么安排广告,拿offer的人,我也不知道他们怎么优化的,貌似提的人非常少)2 Z) j) n3 d4 I. ^5 \' q

) v. O$ X4 M. ~+ G8 Z# |6 y参考代码: 并不是最优,也不是offer代码,本人小菜鸟一个,所以仅供小菜鸟和没有资料的同学学习,大牛希望多多指点。
0 `$ U0 u& K3 ]5 N- \+ L, i
) r! m! Z, z, A' @. D+ D顺便加点积分啊,加的好慢~~ 求大米啊~~ 谢谢
9 l$ g7 U' Z5 M' H. R2 b+ V5 D
* s  f6 e6 H# I" ]  x& Y2 r
public void makeValidSchedule(ScheduleRequest schedulerequest, WriteResulttoFile validFile, WriteResulttoFile rejectFile) {
                // use a hashmap, with locationId(String) as key, a hashmap as value, with time(Integer) as key, list of ScheduleRequest as value to handle the legal content.
                HashMap<String, HashMap<Integer, ArrayList<ScheduleRequest(这里直接存String(contentid)就可以,没必要存object)>>> scheduleForArea = new HashMap<String, HashMap<Integer, ArrayList<ScheduleRequest>>>();
                    while (schedulerequest.hasNext()){ //while 是题目里给的
                        //后面是写的主程序,以前一直是存的object,改成string存就可以,主要参考思路就可以,当时自己写的时候没写输出到文件,因为不知道有。
                        String request = schedulerequest.next();
                        if (request == null) break;               
                        String contentAreaId = request.getLocationId();
                        if (!scheduleForArea.containsKey(contentAreaId))
                        {
                                scheduleForArea.put(contentAreaId, new HashMap<Integer, ArrayList<ScheduleRequest>>());
                        }
                        // for each group of requests, divided by locationId
                        for (Map.Entry<String, HashMap<Integer, ArrayList<ScheduleRequest>>> entry : scheduleForArea.entrySet()) {
                                // for each group of request divided by time
                                // use a boolean isConflict to check if there are conflict in
                                // the duration from starttime to endtime
                                if (entry.getKey().equals(contentAreaId)) {
                                        boolean isConflict = false;
                                        for (int i = request.getStartTime(); i <= request.getEndTime(); i++){
                                                if (entry.getValue().containsKey(i)) {
                                                        // check if there is duplicate
                                                        for (ScheduleRequest schedule: entry.getValue().get(i)) {
                                                                if (schedule.getContentId().equals(request.getContentId())) {
                                                                        isConflict = true;
                                                                        break;
                                                                }
                                                        }
                                                        //int size = entry.getValue().get(i).size();
                                                        //System.out.println("time:"+ i +" size:"+size);
                                                        if (entry.getValue().get(i).size() > 2 ) {
                                                                isConflict = true;
                                                                 //可以吧非法的直接输出到reject文件,有一个非法的就输入文件一次(这时要输出object,而不是string)
                                                                 //rejectFile.writetofile(request); //最简单的思路大概是这样
                                                                break;
                                                        }
                                                }                                                
                                        }
                                        // if no conflict in that period, then add the content to each key time in hashmap and also output this request
                                        if (!isConflict) {
                                                //可以吧合法的直接输出到validoutput文件,
                                                validFile.writetofile(request);
                                                for (int i = request.getStartTime(); i <= request.getEndTime(); i++) {
                                                        if (!entry.getValue().containsKey(i)) {
                                                                entry.getValue().put(i, new ArrayList<ScheduleRequest>());
                                                        }
                                                        entry.getValue().get(i).add(request);
                                                }
                                        }
                                        break;                                                
                                }                                
                        }
                }

. ~3 h8 y- M9 s5 @
        }
" h  }( F& q, X+ W6 s
( [0 F: n( l; U" S" Z7 M
) U! w2 W- u% J* A2 m$ t. M
补充内容 (2-22-2016 12:46 PM):
) u8 b% q, D7 d% g, v; K8 t不要抄代码啊,你抄了大家都一样了,去的25个20个都能写出代码,要做出自己的特色,有自己的独特的优化点子才能跟面试官眼前一亮啊。 面试官估计面过无数个解法了,所以拿出自己的优化是最好的。

评分

参与人数 1金钱 +9 收起 理由
Sophia + 9 感谢您的认真和用心的分享!大米满满送上!

查看全部评分

0

主题

0

精华

0

积分

新米人

Rank: 1

积分
0
发表于 2-22-2016 12:44 PM | 显示全部楼层
感谢dnait分享~~~
回复 支持 反对

使用道具 举报

2

主题

2

精华

54

积分

资深会员

Rank: 2

积分
54
 楼主| 发表于 2-22-2016 12:47 PM | 显示全部楼层
南西 发表于 2-22-2016 12:44 PM
& h8 y4 i3 [  x0 ^感谢dnait分享~~~

2 D2 h5 H5 x6 a# Y1 p4 u怎么求积分啊。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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