早上9:30到12:30: 在laptop上面现场写代码,解决一个实际问题。
中午12:30到1:00:一边吃lunch,一边和hiring manager 面试。就是一个lunch interview
下午1:00到2:00,一个小时的时间,有两个engineers会和你go through早上写的代码,并且做优化。
下午2:00到2:30: 两个面试的engineer会讨论是否要继续面试下去。
下午2:30到3:30:面试
下午3:30到4:30:面试
下午4:30到5:30:面试
先说说我的经历:我面试前觉得用他们提供的电脑,应该会比较好,因为毕竟是他们准备的实际问题,他们提供的电脑的编程环境应该是已经调试好了的。但后来发现,完全不是我想象的这样。
早上9:15am到达大楼,之后一个年轻的女孩领我到了会议室。给了我一个laptop,说让我不要打开,等两个engineer来了之后,再开始。9:30am,两个engineers来了,一个是老员工,一个是刚来不久的新员工。给我讲解了要解决的实际问题。当我打开他们提供的macbook后,发现这个macbook从来没有设置过编程环境,连gcc compiler都没有安装上。这两个engineers也不知道是这种情况,没办法,我只好开始下载,安装,设置编程环境。关键是这个实际问题,还需要用到json,我平时json用的少,弄了半个小时,都没有成功的让gcc link上json library。当时就感觉这个面试要挂了
再来说说这个实际问题:
建立一个production-level的system来模拟厨房中食品订单的fulfillment和delivery。给了一个json input file。 这个json input file包含所有用户的orders。order是这样定义的:
{
{
"name": “sandwich”,
“temp”: "hot",
"shelf_life": 300,
"decay_rate": 0.45
}
}
Orders can be asynchronously read from 这个json file
shelf life是按秒来计算,温度temp是enum value: hot, cold, and frozen
厨房是以Poisson Distribution来接收orders,假设food可以立刻做出来,然后,把食物摆在shelf上面。
厨房里面有4种shelf:
1) hot shelf, 可以存放20个hot orders
2)cold shelf,可以存放20个cold orders
3)frozen shelf,可以存放20个frozen orders
4)overflow shelf,可以存放30个任意order
当每个hot,code,frozen,shelves放满后,可以放在overflow shelf。当overflow shelf 放满后,food order需要被removed,浪费掉。
就是要设计一个系统来实现上面所说的功能。系统输出的形式自己定义。
上午9:30到12:30这三个小时,就是写一个系统,下午1:00到2:00,这两个engineer再回来和我聊我的系统设计的怎么样。 比如并行的问题,performance的问题,multi-threading的问题,测试问题,等等。
中午的lunch interview是和一个hiring manager聊天,一边吃着sandwich,一边聊。 聊天的感觉是,当前员工还是挺辛苦的,工作压力大。所有的系统都要重新build。这个lunch interview主要目的是考察candidate是否对这个startup所做的事情感兴趣。
我的面试到下午2:30之后就结束了,早上面试我的两个engineers决定不再面试下去了。这也基本在我的预料当中,3个小时写一个小型系统,前面一个小时在,下载,安装编程环境。后面2个小时,实现了70%左右的功能。 没有完成全部的功能。在下午的1:00到2:00的面试中,并行问题,asynchronous等问题,回答的不是很好。 就这样就结束面试。
给以后面试的candidates的建议是:还是带自己的电脑来,这样比较好,至少可以省去前面的编程环境的调试时间。
在面试的过程中,也问了问他们的工作内容和公司整体发展的情况。在这样一个初创startup里面,工作内容基本都是纯engineering的工作,就是赶紧弄一个working的版本出来。他们现在的用户数还比较小,qps比较低,也不需要考虑scalability的问题。 不过,long term来说,还是会改善系统设计的。
公司的发展方向,我个人觉得还是不清晰的。没有感觉出来和DoorDash有啥本质的区别和优势。现在DoorDash也有了共享厨房。觉得他们做的和DoorDash差不多吧。
大家有啥问题,可以在下方留言,我会尽量解答。
This comment has been removed by the author.
ReplyDelete请问这个系统设计具体实现的功能和要求的输出是什么?是整个orders process完了之后的shelf state吗? 那些overflow shelf装不了的就直接remove了?多谢!
ReplyDelete还有这个shelf live 和decay rate是怎么用到的?
ReplyDeleteHey 楼主 加个微信不?觉得你post挺有用的,帮你内推一下google和通过朋友帮你推一下apple和linkedin
ReplyDelete