之前投过阿里,无奈缺乏实战经验,算法能力也不够出众,面试的时候没什么可说的被刷。这次被通知过了电话面试,所以就去了现场面。
这是我第一次过了所有轮的技术面最后面了HR面的经历,所以对我挺有意义的,所以想写下来。
先说说之前的电话面吧,接到电话的时候我刚刚坐飞机在浦东机场降落,所以跟面试官约了第二天上午,第二天上午电话准时响起。网易的电面不像阿里的一样会有较长的前戏,当时阿里电面跟我聊了很多我研究生在学什么研究什么东西,才开始的技术问题,这次直接在几句话的自我介绍之后就开始问问题,整个过程也大概在22分钟左右就结束了。
电面的问题时间有点长了,可能有些不太记得,过程大概包含了这些:
说说集合类,用过哪些,我说了不少,提到Map的时候,又问了hashmap和hashtable的区别,然后又顺理成章的扯到了线程安全问题,为什么hashmap不安全,因为jdk里的源码方法上没有synchronized关键字嘛,那么除了synchronized关键字还有什么方法,那就是加锁,那么知道几种锁等等(后来特意去查了,我忘记了还有atomic的一些类,原子操作去实现线程安全,还有在循环中使用wait和notify等等方法,还有我之前不知道的java的四个pipe类),后来还有提到synchronized锁类锁方法锁对象等等。这些问题应该算是面试比较常见的东西,都问烂了。
然后问了一个那时候我不知道的东西,ThreadLocal,幸好他没有计较,这个东西JDK1.2就有了,回来自己补了一下课。
然后问了网络,问了RMI和RPC,socket是哪一层的等等。
然后大概还问了几个linux命令,比如怎么查看进程,怎么去对一些文本里的内容做筛选然后显示之类的,应该就是top和grep加正则表达式吧,这个我也打算有时间去看看,后来问了一些别的命令我有些知道有些不知道,因为用的少,可能水过去了。
接着问了数据库的问题,用过什么,我说postgreSQL、mysql、mongo等等,然后毫无悬念的,问了mysql,有问锁(表级锁行级锁这样子),然后问了索引数据结构,B树B+树分别是怎么样的,有点久远的东西,幸好也都记得。然后又问了一个什么我不知道的问题(某些地方怎么优化,但是具体不记得了),应该跟mysql的执行引擎有关,也记录一下准备去恶补一下。
然后好像又绕回了java,这次问了个我不会的问题,java中有几种引用,我的脑子里闪过的就是强引用弱引用,但是我自己也不记得什么叫强引用弱引用了,还是认怂说了不太清楚,回来查了一下有四种:强引用,软引用,弱引用和幽灵引用(phantom)。具体细节自己去查了。
可能还有一两个问题我不记得了,当时感觉是没戏的,后来还是接到了通过的通知,有点侥幸,可能他们今年比较缺人。
二面的时候女朋友专门从上海来杭州陪我去面试,我有点被鼓励也有点压力的感觉。当时觉得最尴尬的就是我进去一会儿就出来了,很丢脸,但是也不想让她等太久(结果还是在传达室等了我一整个下午,有点感动和愧疚)。
二面第一个面试官非常的冷酷,话不多也没有什么表情,上来说了一下自我介绍,就开始对着简历问问题,因为我现在在平安实习,做一个框架,所以问了这个框架是什么,我做了什么之类的。我就拿了他给的纸和笔,因为刚来平安的时候,经常缠着蔡老大解释他设计框架时候的想法和设计思路还有实现方法,所以我也是有种滚瓜烂熟的感觉,我写写画画写了三页纸,才把框架的设计和实现的一些细节说清楚(这是一个消息驱动的面向领域建模的框架,细节也就不多说了)。然后他问了我几个里面他表示不理解的问题,然后又问我,因为现在大公司都有多个数据中心,如何保证分布式事务的数据一致性等等,当然这种问题这个框架肯定是考虑到的,没什么压力。
这个框架就聊了20几分钟,然后感觉那时候面试官对我的印象应该还不错,然后问了我几个mysql数据库问题,mysql真的被问烂了,当时怕他问到一面我不会的那个问题,结果幸好问的比较简单,问到锁什么的就好了。
然后我给他安利了一下EventSourcing数据库的思想。。。。不知道他怎么看待。
然后又翻了一下简历,问我硕士期间做的project。那是我在香港学校实验室跟着一个师兄做的隐秘信道通信的实验和研究,这个东西我当时在找导师的时候就觉得非常耳目一新,虽然可能在互联网或者工程师领域还未必能用到,但是新鲜的东西往往会激发的人的求知欲和好奇心,我给面试官介绍了隐秘信道的实现方法之后他好像很快懂了,然后觉得很有趣的样子,然后我主动说了很多实现细节,他就没有深究。(当然在这里要感谢带我的师兄教我的很多高科技方法。。)
问到这里,他说有没有问他的,然后连着说你还是出去直接等下一轮吧。当时心里舒了一口气。
等了十几分钟,进去换了一个面试官,风格还是跟第一个比较迥异的,这个面试官语速感觉快了一倍。翻了翻简历开始问问题。
第一个问题是:说说java怎么实现序列化,我以为让我手写实现那种,就说什么扫描反射json什么乱七八糟的,然后他说你想多了,我就是想问你实现个什么接口,我说Serializable接口,然后问了序列化有什么用啊之类的。不知道为啥从那开始他每说一句话都带着微笑,气氛好像轻松起来了。。。。。
后面问题的顺序不太记得清了,但是我记得又问了集合,这次问了arraylist和linkedList的区别,就是数组和链表的区别,查询和插入的时间复杂度有什么区别,这个太简单了。又问了map,后来问treemap我当时不确定我记不记得细节,我就说不知道了(其实就是红黑树,但是红黑树我不太熟还是不要装逼了,平衡二叉树的旋转太难记了)。
然后又问了数据库的事务(ACID),解释了一下概念之后,又问了索引的数据结构,后来他好像每什么兴趣继续问了。
然后说做两个题吧,心里咯噔一下,当时面那个日本叼公司WAP的时候就现场做题被刷了,阿里也是做题做的不太好。
幸好,第一题,找出一大堆数中前K大的数,而且不用写代码,写过程想法和计算比较精确的时间复杂度就可以了。水过第一题。
第二题,10G数据,1G内存,排序。我说用分片数据,然后当时脑子短路了,没说清楚,后来说如果数据每重复用bitmap方法,这是学弟教我的,他说,没事,反正还有下一题。
第三题,用两个栈实现一个队列。。。。。哈哈哈。我就笑笑,然后做出来了,后来发现还可以优化一下,不过实现了就好。
然后做完了他说可以了,然后问了我冒泡快排和堆排序的各种比较,时间空间复杂度,稳定性,具体实现方法等等。幸好都记得。
然后好像就没什么问题了,说等HR通知吧。
后来就是面了HR。总的来说,网易的面试都比较基础难度也不高,而且感觉现在都不问框架了,以前的阿里面试各种问框架。可能每一年都有一点区别。
总觉得有些地方比较欠缺,比如各种web容器,数据库的架构和底层,并发的一些进阶知识,包括算法和数据结构,当然还有IO和网络等等,也准备买几本书去恶补一下比较薄弱的知识,然后也不能放松写代码。
不知道能不能拿到offer,让我回来等消息了。希望接下来校招季节可以收几个满意的offer。