昨天,两个在小米做技术的朋友,分别联系我关注他们的校招笔试。我嘴上说,那好我“关注”一下吧;其实我心里在想,“去XX的6天工作制”。
然后一个之前认识的hr联系我,说直接给我在明天安排个面试。考虑再三,决定去这个神奇的创业公司走一遭,一直觉得小米比较靠谱呢。
到了小米,宏源大厦的新办公地点。新办公室比较空,很多空位。前台领我到一个会议室,然后请来了一面的面试官。
首先bs一下打印我简历的那个人,我给您一个pdf简历的url,您不但不会直接打印,还费劲把内容粘贴出来弄得齐丑无比。
先随便聊了一下背景,让我写一个有序链表的归并。然后讨论一下n条直线可以把平面切多少份,然后再证明一下直线分割开的平面可以用两种颜色染色。呃,我数学归纳法不太玩的转,不过最终解释通了。随后,让写一个最大子段和,很快写出来了O(n)的,做过acm的都懂的。于是面试官让我再搞一个最大子段积,其实就是在子段和的基础和考虑一下正负就可以了,做过acm的都懂的。面试官琢磨了一会儿我的程序,然后说你这个中间过程会变成0的啊?于是我写了一组测试数据和中间过程,然后过了一会儿他表示没问题了。
然后让我等一会儿,他去请下一个面试官。什么?下一个啊,我以为今天就是一面呢。
二面的面试官先问了我面向对象的三个特性,勉强想起来俩,并通过项目中spider的实现解释了这三个特性。
然后开始bs我不懂B+Tree,搞不清堆和栈,说不清线程和进程的区别,说我数据结构和操作系统都没学好。(汗,我承认操作系统确实没学过,但数据结构您是正好问到我的盲点了)
于是他让我写一段双向链表的相邻的奇偶Node调换顺序的程序,学过c的都会写的,细心就好。
然后跟我讨论一个支持*和?通配符的字符串匹配。我说这个递归一下就行了啊,面试官说不行,要避免递归,递归多了容易挂。我说那就用栈模拟递归,他这个还有更简单的办法。他说可以考虑只有*的情况,我想出了将pattern按* split开,然后逐段贪心匹配的方法。面试官又问考虑‘?’的情况,我说可以在每一段匹配的时候解决,但还是要递归,不然会丢解。他继续问:有没有不递归的方法。我想了一阵,说想不出来了。这时面试官嫣然一笑,说这是个陷阱,确实没有不递归的方法,我就考察一下你对自己的解决方案有没有信心。
他让我把只考虑*的情况写一份code,然后就出去了。10分钟后他回来看完code说很满意。
花絮:面试官看到我的U880,问,你这个是V880么,我说不是。他说他的手机是V880。我好好奇,你们不发小米手机的么?
然后让我等三面。等了好久进来一个30+的广东口音。聊了两句,发现他在对前面的面试做总结,感觉是个大boss。于是问了一下他负责哪个部门,他说他是小米的合伙人,叫KK。然后他问我是否实习,我说毕业前不会有机会实习了。他讲了他以前上学时实习,先去moto,觉得不爽,遂去ms,觉得爽,就留下来了(回来一查他曾是微软工程院首席工程师)。KK问我现在工作找的怎么样,面了几个公司。然后说现在还早,我跟你约下个月中旬,到时候你跟hr联系,咱们再谈一下。然后他送我出门上电梯,我想这就算通过了吧~
在白板上coding很爽,第一次在白板上面试。感觉不像纸上一旦涂改就乱七八糟。但也会觉得紧张,因为下面有另一双眼睛在盯着看你的一举一动。
感觉呢,每个公司关注的问题是不一样的,有的关注工程实现,有的重视思想,或者创新能力什么的。另外,大家的threshold也是不一样的~
回去还是要恶补一下操作系统、计算机组成原理之类的CS专业课,不然迟早还被BS。