找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

  [复制链接]

2

主题

2

精华

54

积分

资深会员

Rank: 2

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

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

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

x
本帖最后由 Sophia 于 2-22-2016 06:03 PM 编辑
* V; a0 d0 u/ I2 ?. K7 }
* y  T0 Z* S- ~, z( B. t求积分——————群面已跪
0 E0 s3 M: Q, \# Z2 ?& |2 M8 a4 J) {8 k& i, W  h" K
群面很多人手里都有题目了,说一下细节:
2 ]5 ], z- }0 m- S& V  \( O每天报销80的打车,65的吃饭,还有老家停车费(上飞机前存车费他们都报,要保留小票)
' k5 ~6 R; f; P9 h3 L& O宾馆并没有吃饭的地方,隔壁也没有(坐飞机一般到了都晚上6点多)所以提前在机场多买点吃的放宾馆(保留小票报销,买了好多喜欢的naked的果汁)
$ e9 N4 L, y( C9 e, o4 p& w那里宾馆和附近黑车的人都知道是来亚麻面试的,所以地方不知道可以问他们,但要看自己的邮件。
/ e" Z# L+ f8 v4 d) A/ [% j/ i第二天8点HR准时把人拉进去,拿ID换门禁卡,进入楼里,有个大毛培房间(上面都可以看到电线和房梁,汗一个.进去以后有小桌子上面放着电脑和姓名,找到自己的位置,然后另外一个HR发题目草稿一类的,就是一个塑封的不到10页纸张,图特别大,文字很少,基本跟传的题目是一样的,连图都差不多。
  U7 A# G* N' y- _HR讲完PPT后,大家开始装莫做样子看题目,旁边有张白纸空表,跟组员商量好了就把自己的名字和题号写在上面,准备好的就可以开始吗代码了,(开始面试官说还不能写代码,给他们写完思路再敲,后来发现管的很松,他们在别的桌子转,没人管你写没写代码),3个面试官一个桌子一个桌子问思路,你选哪个题目,思路是什么?说完了就开始敲代码。
0 e% P/ N; r1 e3 n" g2 l& m
6 J: X" l* X! T1 e第一次群面,打开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,下面列的一大堆数据" S( t  ~- r, Z0 J1 N- t1 m

6 Z% y; u( ]4 y! u1 y8 g, E具体题目不再赘述,群里都有。 第一题的代码大概列一下,这个原始代码自己修改一下变成 读文本数据,
$ X7 u$ t  ]; j" X8 Z" ?6 A( Y9 k7 ]1 h" o$ {- H6 z5 K

" Q, G5 d/ O! L9 l6 g5 ~//这个是非常naive的方法,有合法的就先读进来,插入到相应的timeslot (并读到validfile里面),然后后面进来的发现位置满了,或重复的,则踢到rejectfile里面,这个方法可能做得人太多,没什么新意,当面试官问你怎么优化,很可能是怎么踢非法的优化过程,因为文件很长,request很多,所以如果naive的方法,很快合法的就安排好了,后面一大堆的数据都没用到,但是可以想想你现在手里合法的schedule是不是最优的(optimize,并不单单指算法方面,自己去想,怎么安排广告,拿offer的人,我也不知道他们怎么优化的,貌似提的人非常少)' j9 p$ d4 z/ S2 |, Q# K

9 q7 `1 k: Q2 p( G/ y参考代码: 并不是最优,也不是offer代码,本人小菜鸟一个,所以仅供小菜鸟和没有资料的同学学习,大牛希望多多指点。
/ d* I0 b+ j% B& }7 l% Z# d. n  P& w. k
顺便加点积分啊,加的好慢~~ 求大米啊~~ 谢谢+ c2 g% H$ {# Z1 l

7 B: {4 q6 S/ v' \( I6 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;                                                
                                }                                
                        }
                }
+ L9 z7 `$ b  g
        }

- ?( O( N" [+ Z" _  `) ?
# r  l. G9 L3 a* c' [: ?2 ^: M3 f" S8 P2 H/ z  T
补充内容 (2-22-2016 12:46 PM):
5 O6 H' T3 @$ {% P  I- P+ s8 v不要抄代码啊,你抄了大家都一样了,去的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
8 g9 `2 q. \' B7 Z6 T感谢dnait分享~~~

( l& t. w5 u- V2 q, p7 N  Q怎么求积分啊。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

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