狗家716 五轮Onsite面试 身处盛夏,心入寒冬

1.(白人男)高频题,利口三旧旧 直接union find(区别是他了两个 input file, 第一个input file 类似“USD”“EUR” “0.669”, 第二个input file 是查询“USC” “RMB” 自己要想好如何处理input file, 因为查询次数可能很大 我直接用的UF, 同时我讲了 dfs bfs的时间复杂度,以及UF的好处)2.(国人男)connected 4 game 。给你一个play (k,n,i) 返回嬴或者输。 自己定义 数据结构,类。问题抽象成一个数组, k是连续的石子,N是数组长度,i是每次你放石子的位置。当你放一个石子到数组里,使连续的石子长度大于等于K 就返回true 否则返回false。 我上来给了O(K)的解法,然后跟面试官讨论更好的解法,最后没搞出来 写了最初的算法
3.(国人女)高频题, 一个map分为n层,每层都m个node, 每个node有值,每一层跟下一层的node是full connected,edge的值不一定相同,求从第一层到最后一层的mini cost DP解决,
也是高频题(区别的需要自己定义input data)我最后写的是 一维DP
4. (三哥)没见过的题
给一个String “a{1,2}b{3,4}d”输出 “a1b3d”,“a2b3d”,“a2b3d”,“a2b4d” 我说可以把string 抽象成树的结构 用dfs 或者bfs解决。 如果数字过多bfs可能会overflow(我最后用bfs写的,当时脑子抽风)
这轮三哥一直 ok great ok great 听的我都虚得慌
5. 超级爆炸的一轮 (国人男)
上来没给例子,白板上也没解释,直接口述题(很长一段)(当时脑子宕机,挺累的)然后花了能有十几分钟才理解题意。backtracking问题
给你很多node(他说是Apple)每个Apple之间有关系 friend 或者 enemy, 你有N个袋子,每个袋子能装无限多个苹果,限制条件是每个袋子装的苹果只能是friend 不能是enemy
要你输出最后所有装袋子的可能(这题我最后没解出来,虽然写了 backtracking 但是代码肯定有问题… 思路都没想明白 代码就更惨不忍睹了)要求所有Apple都装进袋子
我用的HashMap<Integer, int[]> 代表每个袋子最后装的苹果, Integer 是袋子的index, int[]代表APPLE

总结一下,五轮面试,有两轮高频题,也对得起我[刷题]一个半月的付出。第二轮不难(很简单)但是我一开始就想给出最优解,结果到最后也没写出来,也没有时间让他出follow up。估计不会是positive feedback
第五轮 血炸。。。。
当时心态也有点炸,花了很多时间理解他的话,一开始我以为是dp背包问题,后来他说你自己定义node,bla bla bla,我又以为是偏向design的题,花了十几分钟沟通才知道是backtracking。 最后说我用backtracking 然后讲了讲细节如何实现,他说他没想过可以这样bt,也许对 也许不对 时间不够了 你就写吧,我就硬着头皮写(我知道我写的肯定不对…)
另外有一个问题大家注意,面试之前我跟recruiter说onsite我想用JAVA,,但是recruiter 跟面试官们说的是用c++ (我电面的时候用的c++),结果面试结束后跟recruiter电话联系她问我为什么用java… 也许她太忙了忘了我跟她说过,我跟她解释,我写算法用java,做项目用c++ 或者 python (简历里最新的项目用的就是python)她也没说什么

最后总结一下,看面经还是很有用的。五轮面试如果不考虑最后一轮,我对自己的表现还是满意的(对得起我刷的题)但是最后一轮实在是难受,估计直接fail 欲哭无泪的心。
之前看的Tree PriorityQueue 问题都没考, Binary Index Tree SegmentTree 等各种知识盲点都一顿恶补 结果还是敌不过一个 backtracking。 估计凉凉了 Move On

那个第二轮我看就是 易二巴

最后一题,感觉抽象成graph coloring更直接一点。感觉楼主介绍里面没有要求比如A和B两个苹果是朋友,就要求AB必须到一个袋子里面,他们可以在一个袋子,也可以不在一个袋子。

可以构建一个graph,两个node是敌人,就在两者之间加一条边,然后在这个graph里面看能不能用n个颜色对node着色,要求相邻的node不能同色就好了。 graph coloring也是np complete的问题。

然后最最暴力的解法就是遍历每个node的n种情况,有K个苹果,就有N^K种情况,然后对每种情况检查一下就好了。

第五轮本质上是一个图的分团覆盖问题(Clique Cover),你把每个苹果看作图上一个节点,两个节点之间有一条边当且仅当它们是friend关系。

寻找最小分团覆盖是NP-Complete的:

然后这个面试官是在这一图论经典问题上做了个玩具问题,就是枚举所有可行的Clique Cover(这一枚举一定是指数复杂度的,否则就证了P=NP了)——感觉这也是面试的一种套路,先抛出个唬人的经典NPC问题背景,然后出一个无视复杂度的玩具问题。

5+ yoe的职位才考Sys Design

你可以跟HR说不会Sys design 然后HR会给你降级到L3

楼主哪个office面的 祝好运!

请问楼主,第五轮的题、A的Friends的Enemy算不算是A的Enemy呢?如果是的话,岂不是可以Graph分到2类 Friends,Enemys?

我在MTV面的 字数字数

friend的关系不可传递, A和B是friend B和C是friend A和C可能是enemy

面试语言一开始就决定好了的吧 c++和java会问的不太一样

其实只要是有3+轮positive的话就能送hc了 一轮炸了没事

5轮没有system design啊?是不是fresh没有system design,有工作经验的才有?

请问楼主,第二轮是1d还是2d的呢?
谢谢