注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
本帖最后由 A_wu 于 2021-4-17 03:12 编辑
General software engineer interview - 第二轮Onsite面(video) - 通过
一天内4个面试:
1. Coding 45min
2. Coding 45min
3. Behavioral 45min
4. system design 45min
------------------
第一轮:Coding
照例两道题,每道题20min。
第一题:kth largest num
Input: a list of integer
Output: the kth largest of this list
Example:
Arr: [5, 3, 9, 1]
K = 0, return 9 (the 0th largest)
K = 1, return 5 (the 1th largest)
K = 3, return 1 (the 3th largest)
先是问了关于输入合法性的问题:
a. K 有可能大于n
b. Arr 有可能为空
我一开始的想法是按照 kth smallest 来做,把 kth largest 转换为 (n-k)th smallest。
然后说用小根堆,把整个array push进去,接着再连续pop (n-k)次,就能得到 (n-k)th smallest 了。
面试官:这是可行的,那这个堆是不是要把所有item都放进去?有没有办法不把整个list放进去?
我:可以只放k个item进去。。(这时我有点卡壳了,只记得是可以的,但没想明白怎么做。)
然后面试官提示我说:我们先focus在 kth largest,先别转换成 kth smallest,let's leave it later(万万没想到这一句也是个hint啊!用于解决follow up问题!而且估计面试官自己也没注意到他在这里泄露了hint了哈哈)。虽然逻辑上他们是一样的,但是实现细节上有些不同。
然后多亏了这个hint,我也想明白了:直接用min heap,然后先放k个items进去heap,接着继续iterate后面的nums,如果新的num不大于当前的heap root,那么就不放进去。这样能保证整个min heap维护了最大的k个。这样最后的heap root就是kth largest了。
算法讨论完毕,开始写code。
循例分析算法复杂度:【主动去详细分析复杂度能加分!】
a. 空间:开了一个size 为k的 heap,所以是 O(k)
b. 时间:for loop 是 O(length of array),里面的 heappush和heappop都是O(logk) 复杂度,所以总共是 O(len(arr) * logk)
注意:比起直接说O(n),改为说O(length of the arr)更好,因为这样更精准。如果有别的题目是O(2n),比起直接说O(n),最好先说是O(2*len(arr)),解释为什么,再接着说这样是O(len(arr))。
而且在解释的过程中自己思路也会更清晰,就更加不容易答错了。
Follow up:
So we know in the worse case, e.g. K is (n-1), the space copi,写了 readNewFeed(…) -> … 这个接口。
然后开始画图做设计。
画完service后开始画db tables,然后写有哪些fields,并且分析说用哪种数据库。
后面还讲到了怎么处理hot data,怎么做notification,怎么做error handling。
也聊到了在Internet受限的地方,要如何改进service。
【面试结果】面试官人很好,题目也是很经典的题目。问的问题我都能答上,我也有主动说一些内容,所以整体感觉还不错。
【总结】SD主要就是要言之有理,能分析利弊,知道怎么做tradeoff。
------------------
最后这个onsite是过了,fb别的不说,速度还真的很快。狗家比fb早面完,结果fb却是先发offer的,给了E5。
不过跟我接触的fb recruiter真的人不咋地,刚给面试结果说通过的时候,我要详细的每一轮的feedback,他不给,说只要过了就好。我解释我要feedback的原因,但他还是不肯给。
接着谈offer的时候,各种PUA我,踩我现公司(我现公司在pre ipo中,被这个recruiter嫌弃得体无完肤),还踩谷歌,真的让我觉得这人素质很低,也很不专业。
不过为了谈个好价格,我还是要心里mmp,脸上笑嘻嘻。
扯远了,总的来说,面试这一块:
* 积极沟通!!
* Think out loud!!
* 不管最后面试结果如何,一定要跟recruiter拿详细的面试反馈!!(方便查缺补漏!)- 遇到不肯给的recruiters那也是没办法 ˉ\_(ツ)_/ˉ
我把面试过程尽量详细地分享出来,是想给大家知道,其实要通过面试真的不用说一上来就给出完美答案,重要的还是沟通过程,通过面试官的提示得到结果写出代码,也是可以通过面试的。
|