[复盘] Arista Networks第一轮面试后,被拒
我人生的第一场技术面试。
Arista Networks只允许在C/C++, Java中三选一进行coding interview,因此我此前一直用的python毫无用武之地了。
用什么语言刷题
说起来我在刚开始刷题的时候就纠结过这个问题。我会C++和Python,两种语言的熟练程度差不太多(都不行),我看了很多人的经验贴,也问了一些大佬,基本大家的答案都是选python。因为python写得快,不用在很多语法问题上卡半天,可以更专注在算法本身而不是细枝末节上。
我觉得很有道理啊!从那开始我就专注python刷题,python学算法,选的算法课也是以python举例的课(MIT 6.006)。为了让python越写越快,后面做项目也选了Django来做,这样双向促进学习。
谁知道我人生中第一场技术面试不允许用python……
收到HR邮件之后我就开始了为期四天的C++复习。是的,从我决定用python刷题开始,我就一点都没再碰过C++,我至今写for循环都不记得打括号,python真的已经形成肌肉记忆了……!
用C++刷了四天的leetcode和hackerrank,基本上就是复习基本语法,然后把glassdoor上看到的面试题找出来做几遍。我自我感觉已经100% prepared了,于是自信上场。
面试过程
一打开CoderPad我就懵了。我一个用leetcode, hackerrank, Visual Studio的人,哪会用GDB啊……不会debug,连run程序run出错了都不知道下一步要怎么办。
界面不熟悉这是其一。第二个问题是,leetcode, hackerrank这种更注重考察算法而不是基本功的网站,至少我是没见过输入参数长这样的:
int FunctionName(char* v1, char* v2)
如果要比较两个字符串,我理解怎样都应该是
int FunctionName(string v1, string v2)
开局吧?
我都忘了,原来在公司每天搞得焦头烂额的,就是在那不停地找指针,这个指针指到哪里去了,那个指针又是个什么鬼。结果第一步,零零零基础的,怎么获得指针指向的字符串,就把我难住了。
当然面试官人很好,给出了很多建议,也看出来了我平时不怎么写C++(其实一年前我都是写C++的,但是自己写C++从来不给自己使绊子……),总之是磕磕绊绊地,在第一题,用python可能10分钟就写完了的easy难度的题上,卡了一小时……
其实第二题也是easy难度的题,不过面试官希望我用二分法做,而我没时间写了,就口头描述了一下。
面试一共90分钟,原本应该要做出来3道题,写完第二题已经75min了,原本要留出来45min交流coding以外的事情,现在只留了15min。
其实我觉得我沟通还行的。我原本以为半年没说英语了,现场可能会开不了口,但实际上我感觉沟通方面十分顺畅,也有可能是面试官向下兼容了,但至少在英语这方面没有打击到我的自信心。
面试题
第一题是给两个软件版本号 v1
和 v2
,版本号是这样的格式:"1.100.2", "2.3.1.4", "1.1"
。 比较这两个版本号的大小,有一些规则啥的。
很简单的题,把字符串按点分开,然后每个小字符串转成整数,再比较就行了。没有涉及到算法。
但是这题用python,一个split
函数就能解决的问题,在C++里需要手动实现这个步骤……而我,卡在这里一会之后问面试官:C++里有没有像Python的split
那样的函数……?
面试官:据我所知没有的。
好吧,只好硬着头皮处理字符串。如前所述,这个处理甚至卡在了第一步,获取这两个字符串。
说实话,比起失去信心或者受到打击,我更多的是感到丢脸……这家公司在organize面试之前还把我成绩单收走了。我拿着TCD的1:1学位,连easy难度的题都卡了一小时,感觉给TCD丢大脸了。
第二题是给一个连续数组,这个数组有且仅有一个数字是缺的。比如[2, 3, 4, 6, 7, 8]
,找到这个数组中缺少的那个数。
我直接就写了这个数组不缺数字的时候的Sum,减去这个数组实际上的Sum,得到的结果就是缺少的那个数。很straightforward,但是效率是O(n)
。面试官让我想个效率更高的办法,我说二分法可以做。然后口头描述了一下就只有不到15min了,没让我写。
feedback
其实没有找HR要feedback,我自己感觉表现就不好。最后那15min我就直接问面试官了,你觉得我表现得怎么样。
面试官人真的很好,讲话都不敢说重。他说原本90min你should have solved 3 questions, now you only solved 2. And you supposed to implement the binary search at least.但是还给我找补说,看得出来你的main language不是C++。
我说对,我最近在做我的personal project,是用python做的,所以有一段时间没写过C++了,但是真的做起项目来还是很快就能pick up。
他说我理解,但是我们没有Python面试,对你来说最好的选择就是C++了,也没有办法。
这话一说我就知道这把面试结果不好了。
总结
虽然结果不好(今天也确实收到拒信了),但总的来说还是很庆幸第一场技术面试不是微软(我的第一志愿),而且如果这场面试结果positive的话,为了准备下一轮面试我还得继续扑在C++上,那我的算法学习又得继续卡着。
我的Graph卡了一个多月了还没学完,BFS和DFS至今不会应用……还是要算法优先才对!
另外我感觉自己的英语还可以,真的面对面试官的时候,还是很能侃的!我只是不会small talk,幸好面试不考small talk!