今天早上刚刚面完了convoy的第一轮面试,还在等结果,来发个热乎乎的面经。
这家公司是recruiter在linkedin上找到的我,要不然我都没有听说过
因为公司在dt,我还好死不死的开车去的,这找个停车的位置真是痛苦,卡着点到的公司。
先是跟面试小哥聊了聊,他介绍了公司,他的工作等等。面试的人自己说是他们公司是truck届的uber。其他的大家可以去他们家网站看。他家现在在扩大团队,现在是100个左右的engineer,到年底要到至少200个。
tech部分的其实也不算难的,也是很基础的数据结构和算法。
题目是说,n个人同时开始完成一个任务,完成后按照结束时间进行了排序。将排序结果给你,这里我们管排序结果就直接叫做result了。result里面有对应的rank,人名和时间。不用考虑给你的是个什么形式,给你的数据里面已经按照rank排列好
了。
e.g
1.A.1h
2.B.2h
3.C.3h
4.D.4h
跟面试官确认后:所以给你的数据都是valid的,所以不需要考虑invalid input
问题:
1.给了你rank,print出人名
2.给你人名, print出时间
3.给你人名,print出排在他前面一个和后面一个人的人名和时间
4.(optional)给你一个任意时间,暂时叫这个为target time,(问过面试官之后,这个时间不一定在给你的result里面),print出在这个时间之后的最近的3个时间
前面三个我先开始说给出两个map,一个是rank-name,另一个是name-time。这样第一第二都是O(1) 如果这种方法第三个是O(n) 他不是很满意 我想了再建立一个map 不过觉得不是很好因为如果数据很大,其实很费空间。不过最后和面试官讨论的,他说可以三个map。如果大家有什么好的idea可以回复告诉我第四个这里,我先开始忽略了传进来的数据已经是排序好的了,在这里只是需要找到比target time大的最近的一个时间就好了。思路就是binary search。
最后写完程序之后问了一个如果写test都会写什么test。就是unit test的状况了。这里就不多说了
整体来说算是顺利,不过写代码的过程中,很多小点没有被注意到。。。被面试小哥提醒了好几次。。。哎。。。感觉真的太久没面试了,所以一到白板写就各种磕磕绊绊。。。
最后剩了几分钟,然后就聊了聊他的project一类的。
现在还在等结果,知道结果会update的