https://www.jiuzhang.com/qa/6175/
之前面SDE的时候由于根本没刷题所以电面没过。所以在九章学习后准备继续试试可是还没有满一年而我现在又急需工作所以HR给我安排了Test Engineer 的面试。。然后刚刚完还在等结果。。分享一下面经吧,感觉还是很有难度的,本来以为TE会简单很多。
1.电面。包装的题目是,给两个字符串,每个字符串有相等数目的单词,要写程序判断是不是每个单词都是近义词。想了一下应该是基本的BFS+graph搞定,然后直接进入on site。
onsite跟电面比确实难了几个级别,我之前也有过两次电面,题目都很简单,个人经验而已,劝小伙伴们不要掉以轻心。。不过大家都知道吧
首先是个热身题,不用写代码,说思路就可以了。2sum。听到题目心中暗喜,想接下来就是3sum了吧,还在思考演技该怎么表现,不要一下就做出来了。但是接下来却是4sum。刷题的时候由于偷了下懒,没有刷这道题(还有ksum)。这个时候肠子都悔出来了。不过还好面试官很nice,给了我几个提示,最后左改右改还是做出来了。 做完题还有14分钟,面试官又给了我一道题,不过他说这道题做不做的出来已经不重要了。热身部分是一个有序数组有1-n个数,每个数出现两次,只有一个数出现一次,问怎么找到那个数?这个很简单。接下来就有序数组变为无序数组,o(1)的空间做。我本来想用异或运算来,但是被告知只能用log(n)复杂度。于是我说那只能是2分法了,然后和面试官讨论了起来怎么用2分法解,最后根据提示(面试官真是活菩萨)解出来了。。
题目链接:
http://www.lintcode.com/en/problem/two-sum/
http://www.lintcode.com/en/problem/4sum/
http://www.lintcode.com/en/problem/single-number/
第二面先问了些测试方面的问题然后进入coding。我想也因为我没有什么测试经验所以coding是占重头。这次题比较简单。给两个string A,B,根据B里面字母出现的顺序来重新排序A。比如A=google,B=dog,那么排序后的A中o要出现在g的前面,所以就变成oogle或者oogel,没有出现的字符排在最后顺序不限。这道题不知道名字所以找不到链接。用hash map+sort搞定,这里要自己写comparator,九章的课程里面很多题都会要求到所以只要不偷懒面试绝对能应付。
先问了测试方面的问题,叫我选一个google产品,然后设计一系列测试计划。然后进入coding,感谢之前有朋友分享的面经,才看了这道题。一个数组1-n,有一个数不见了,有一个数是重复的,找到这两个数。这道题没什么说的。但是面试完才发现自己的代码有bug会死循环,不过为时已晚。。反着黑不提白不提就过去了。最后让我提供各种test cases来测试这段代码
题目链接(两个题被揉到一个题):
http://www.lintcode.com/en/problem/find-the-duplicate-number/
http://www.lintcode.com/en/problem/find-the-missing-number/
面试官很直接,很冷酷,跟前面很nice的面试官们比起来让我感觉很不舒服,产生了怕怕的感觉。。其实这里我也觉得面试对心理素质的考验是很大的,比如做不出来或者面试官很不友善的时候,脑子容易一片空白,这也是需要锻炼的地方。没有问测试的问题,直接进入coding。
题目是写迭代器(iterator)。要求你的迭代器接受一个数组(反复确认后其实是接受另外一个迭代器而不是数组,虽然他写的题目是数组,所以跟面试官的交流也很重要),数组是两个两个数传进来的,分别是(count,value)。如果传进来的是(2,3,4,5)那么最终通过我不断调用next的输出结果就该是:335555。如果是(3,4,2,3,1,2,0,3)最后结果就应该是444332.
题目写出来后,面试官提出空间占的太多,要我优化,优化完后,要我提供test cases,然后每个test case都要过一遍,发现一些bug,修改,然后如此反复。最后改完了问我代码的时间法度,面试结束。
这道题如果练过的话不难但是lintcode上找不到原题可以练练类似的题,上强化班的时候觉得这种题怎么可能考到,不过幸好练习了。。再次感谢九章
http://www.lintcode.com/en/problem/flatten-nested-list-iterator/
最后一次面试。 进来一位面试官,这下干了,这位面试官的英语好烂,感觉跟她交流十分困难,一半的时间她说话都是半个句子半个句子的蹦,搞得我很伤心。遇到就认命吧。先问测试问题,你如何测试手机摄像头。这个部分感觉我答的不好,因为面试官后来问如何测试ios或者android specific的摄像头,完全找不到思路,然后直接进入coding。
热身部分,给你三个整数,要你写个程序判断这三个数能不能组成三角形。
正式题目:给你一连串数字,无序,要你找到组成最大三角形的三个数。我想了一下应该是个2sum greater 换层皮,于是按照这个题的思路把题解出来了。
http://www.lintcode.com/en/problem/two-sum-greater-than-target/
然后就结束了。。。现在还在等通知。不过觉得这种经历真的很好。。
我把面试的细节写出来主要是像帮像我一样的小白了解一些算法题目以外的面试的东西,因为我之前完全没想到真正的面试跟在电脑上刷题的差别那么大,而且在白板上写字确实跟键盘打很不一样,还好练习了,大家也一定要练习白板解题。
更新
hr通知我说,coding部分我都很好,但是测试部分我全砸了。。。所以准备月底让我面SETI。。。哎。。。而且说题会更难