3月初从武汉回到帝都,休息了一个周末,开始拿出各类书籍开始复习,目的就是为了能在3月份找份不错的互联网公司的实习,复习了一周的基础数据结构与算法之后,开始给在各大互联网公司的同学、学弟、学长送简历,帮忙内推,同时自己也在大街网上广投简历,过了几天也陆陆续续收到了一些公司的面试通知。
面试的第一家是创新工场的“秘密”团队,这个是大街上投的公司,过去就聊了聊之前在中科院空间所做过的Python的实习,差不多快两年没接触Python了几乎全忘,聊了一会实习的项目,接着用C语言写了一道二分搜索,最后外加一道简单的智力测试题,一面大概持续了40多分钟就结束了,让回去等通知,回去从网上查到这个职位从去年11月份就开始招了,持续到现在,肯定是想找一个立即入职接着就能上手的人员,我自己Python都忘了,而且就只接触过一个Python的项目,过去肯定需要比较长时间的学习过程,而且也觉得团队不是像豌豆荚那么有名,同时自己也收到了其他公司的面试通知,因此就放弃掉了。
第二家面的是蓝汛,做CDN,是一个ACM队的学弟内推的,过去面试,本来是两面一起的,最后面试官问是不是校招,我说我刚刚研二,只是找个实习,所以二面就取消了,直接一面过了,然后就给了offer。一面开始聊了会我看过的NoSQL软件Redis源码方面的一些知识,接着写了几道算法题,第一题是只给一个链表的指针,没有头指针,让O(1)删除该指针节点,题目很简单,《编程之美》上面的原题,写代码的时候只需要考虑空指针和释放指针后需要将迷途指针赋值为NULL即可。第二题也是《编程之美》上的原题,但是我没有看到,题目是保证队列的先进先出性质不变的原则上添加的获取队列最大值的接口,我给出的方法是O(logn)的算法,就是用heap来获取最大值,只需要注意heap的删除、插入、调整即可,这不是最佳算法,用栈模拟队列,再加上辅助栈存储每个栈的最大值位置就能实现O(1)的算法了,当时只想到能用栈实现队列,但是就差用辅助栈存储栈中元素的最大值位置这一步,比较遗憾,最后回宿舍看《编程之美》才发现是原题。第三题是一道DP,我完全不会DP,题目是N个元素的数组,给定一个数M,找到数组中元素和等于M的不同组合的个数,第一想法就是使用递归搜索,本题在JULY大神的面试题库中有原题,递归搜索的代码也写出来了,但是面试官让想想能否用DP来解决,本人实在不会DP,最后没答出来,回去和ACM同学讨论了,就是一个背包的变种,还是比较简单的DP。面试结束,在公交车上内推的学弟告诉我过了,等着给offer了。
第三家面的是网易有道,本科室友也是ACM队友帮我内推的,有道总共有两面,一面比较顺利,问得算法题全部都会,Linux指令问题也OK,还问了Redis,详细说了下Redis的内部数据结构,接着面试官问了Redis数据持久化AOF与RDB时fork一个子进程是否会导致内存翻倍,Linux OS在fork子进程时候使用了Copy-on-Write的技术,当然是不会,而且在持久化过程中是不能Rehash的,目的也是为了写时复制的原理。接着就是三道算法题,第一题是让写堆排序,这个就不说了写过不知多少遍了,一气呵成直接搞定,第二题是循环有序数组的查找,算法也是二分搜索,在何海涛的博客中有类似的题目,是找循环有序数组中最小值的位置,该题说白就是二分的加强版,网上也很多博客写过,easy,第三题是栈实现队列,何海涛博客中的原题,就算不是原题,思路也十分简单。一面结束自己感觉肯定能过了,果然一天后给通知一面过了,准备二面。说到二面就悲剧了,有道的二面是一个高级leader面的,我同学说其他的工程师都比较忙,正好这个leader有空,面试刚刚开始就被该leader强大的气场给震住了,前15分钟,简单聊了工作想做什么,Redis一些实现,接着一道字符串的题目,给定一个字符串去掉首位的空格,tab键也算空格,字符串中间遇到多个空格将其修改为一个空格,并且在原有字符串上进行修改,我个人的思路就是遍历字符串找到不是空格的然后使用memmove进行移动,但是代码没有写好,思路也不知道对否,该题给了15分钟不到的时间,面试官就让停,然后面试也就结束了。从有道出来就觉得二面挂了,回去催了同学几次让查下面试结果,果然是挂掉了,就这样与有道无缘了。个人觉得很遗憾吧。
第四家面的是美团网,也是ACM队的学弟内推的,美团是三面一起面,总共面试时间花了两个小时加十分钟。一面技术面是数据组的leader面的,开始聊了大三下半年与同学一起合作开发的本校OJ系统,说了系统的架构与数据库的设计,面试官也给出了一些数据库负载的问题,我自己也给出了一些改进的方案,面试官还是比较满意的,接着是一道算法题,同样也是基于二分算法的,不过这里需要写的二分不仅仅是找出等于的值,还需要找出大于、小于的值,总之比较简单,题目听完就直接说了思路,写了代码,然后与面试官讨论了一下,一面总体感觉挺不错。二面是一个国外回来的海归面的,先问了一些数据库、C语言、Java的一些常规问题,聊了Java中Hashmap的实习原理,基于Hashtable实现,类似于Redis中的dict数据结构,用桶存储,链表来解决碰撞问题,查找的时间复杂度O(M),接着问题许多算法问题,不过只让说思路即可,题目有你会哪些排序方法,对于ACMER来说基本的排序方法哪个不会呢,杨氏矩阵的查找问题,Top K问题,用堆来实现,时间复杂度O(nlogk),一堆正整数最大值为N,问用最小的集合中的几个数就能构成那一堆数中的任意一个,其实就是个二进制问题,答案就是2^n(0<=n<=logN),我当时给面试官说了高中填高考准考证时候的1248码的事情,当时高中就没搞明白为什么只需要这四个数就能组成0-9这10个数,学了计算机后才知道原来就是二进制,最后面试官让手写了递归打印组合数的代码,比较简单。二面算法和基础知识问题基本算良好,问了技术层面的问题,因为没接触过,说不上来,不过面试官听到没接触过也就跳过了。美团一面二面的技术面顺利过关,接着是非技术面的第三面,第三面的问题就是一些很常规的问题了,实习时间,你的优缺点,做过了项目简单介绍等等,感觉三面面试官比较严肃,最后让我问了些问题,来美团的工作主要是哪方面的。三面面完,让学弟问了一下,三面的面试官大概讨论了有半个多小时,最后一面的leader告诉我学弟说我面试通过了,下面会有hr联系我,面试结束两天了,美团hr还没联系给offer,不过听说美团hr的效率不高,那就等吧。
第五家面的是百度LBS,让我们ACM队的神人,前ACM队队长,我的学长,俗称猫哥帮忙内推的,百度也是三面一起,昨天面的,三面总共持续两个小时四十分钟。面试结果我个人觉得发挥一般般,一面过于紧张发挥不够好,二三面紧张情绪缓解不少,从学长那得到内部面试评价也是面试太紧张了,今天上午百度hr给电话问了一些学历情况,并且告诉面试通过了,这周内会发实习offer。百度的面试总体评价是,算法问题非传统类能在各大面试题总结中能找到的原题,并且面试题目比较开放,更注重面试者的思考情况。一面总共面了两道算法题,两道都是从简到难扩展,第一道是回文字符串,首先问如何判断一个字符串是否为回文,很简单,网上有原题,紧接着如何判断一个字符串通过各种调整能够构成回文串,也很简单,再接着就是如何把能构成回文的字符串通过相邻字符的位置交换将原字符串变成回文并且手写代码,代码写的一般般,全部用指针操作,但是面试官指出了一些有问题的地方,总体还算ok,最后就是如果条件是能够交换任意两个字符,如何在最短步数内得到回文,求出最短步数,思考了5分钟左右,没有太好的思路,就直接与面试官说不会,面试官也就跳过该问题,第二道是两个有序的数组合并成一个有序数组并且重复元素只保留一个,这个用vim来写,面试官把他的thinkpad交给我,写完编译,在linux下gcc编译报了一些未知错误并不是代码写的有错,然后从linux中拷贝到Windows系统,使用dev c++编译器,编译通过运行得到了正确结果,但是由于过于紧张写代码花了比平时要多了一点时间,也被面试官说了下,我也是思考好好检查最好能一次编译通过,过分谨慎花时间检查了,一面就到此结束,面试官让等二面,这时候小心脏还在扑通扑通的跳,紧张的不行了。二面面的都是开放性题目,首先就是地图搜索结果的排序,问这些排序需要考虑哪些因素,巴拉巴拉说了很多,再者不同的搜索内容排序的要素是否一样,如何对不同搜索内容给用户推荐更好的结果,题目很开放,能说的有很多,我对自己的回答总体来说一般般。第二题就是AB两个大文件给key value值通过key找出两个文件的交集,正确方法就是hash,根据hash的值将大文件分割成多个小文件,然后再匹配,我当时头脑只能条件反射的去回答问题了,回答的答案过于复杂化,总体来说还是基于hash,最后问了一个随机化问题,一个骰子,如何等概率生成1到10,答的一般般,给出第一个答案后面试官让改进一下,我个人误解了上个答案不行,需要换方法,最后面试官也说方法过于复杂。二面就这样结束了,三面是非技术面,问题同美团三面问的差不多。六点出来之后,就给学长反馈了面试情况,让帮忙问问,学长说6点有点晚了,明天再问,第二天百度hr给我电话了,学长那边也得到了内部消息,面试通过了,等hr给发offer了。
面了五家公司,过了四家,被有道拒了,表示比较遗憾。为了面试奔波劳累,复习看书总共花了25天,还算得到了一个比较满意的结果,接下来就是等美团和百度的hr给发offer了。这一个月看了C++程序设计,计算机操作系统,计算机网络原理,编程之美,编程艺术,大数据处理方法,Redis源码,Linux指令,各类面试算法与数据结构题目,手写了一些基础的算法。总之找个实习真心不易,做好准备,虽然很多知识面试不一定会问到,但是有底气,有些面试问题也就是常见问题的一类变种。
一个月来的工作没有白费,等待offer,休息一周,开始实习之旅。
感谢为我内推的各位同学,感谢女友对我的支持,谢谢你们。