要感谢2013年认识的贵人磊哥,他指点我如何在这两年内做技术准备,以及推荐了我!
3月7号(2015年)磊哥把我的简历推到YunOS, 3月12(周二)晚七点参加一面, 3月13(周三)下午三点参加二面, 隔了一周3月20号(周三)晚八点参加三面, 3月24号(周日)参加四面, 3月30号收到offer。
一面问得问题有: (1)TCP三次握手过程, 与为啥需要采用三次握手; (2)TCP TIME_WAIT状态的原因; (3)C++ 虚函数机制(C++对象模型); (4)C++ Static关键字; (5)Select/Poll/Epoll的异同(使用与内部实现方面); (6)C++迭代器失效问题(iterator原理); (7)map/set容器的实现原理(红黑树知识+STL容器内部原理)。前面的这几个问题比较简单, 回答的都比较流畅, 估计面试官打算在最后一题发难吧, 最后一个系统设计题难度陡然提高, 一下子就没了感觉, 题的内容是 "现在有两块内存, 一块10G设名为A, 一块20G设名为B, 现在A中数据已满, 但还有新的数据到来, 因此只能转向B写入, 但是还需要把A中的内容做数据迁移, 移动到B, 那么现在问题来了: 如何保证在不打断新数据写入的前提下, 将内存A中的数据完整的迁移到B, 即不能出现在A中数据迁移完成之前B内存满了或者打断新数据输入的情况”, 这个问题纠缠了十多分钟。
二面问得问题有: (1)我的博客的访问量的问题(估计是暖场吧); (2)Linux 伙伴堆算法(slab)实现的原理, 以及与普通内存分配相比有什么优势(Linux内核); (3)Linux 高并发的实现, 线程池的实现思想, 怎样处理高并发(根据项目来问); (4) Linux 写一个并发测试程序; (5) 如何实现一个String, 他的内存是长什么样的(STL内部实现)。
记得当时二面面试官打电话过来的时候还在上课, 跟老师匆匆说明情况之后就找了一间空教室开始面试. 与一面面试官的和蔼不同, 二面面试官刚开始问得问题就咄咄逼人(相对较难),而且在我回答问题时还曾经不止一次被他打断. 由于题目相对较难(也可能是我自己水平不足)感觉需要思考一段时间才能回答, 而且有好几个问题是我以前没有接触过的(像题目2, 题目4, 题目5), 我只能凭自己的理解去回答, 面试还未结束, 我就感觉这次面试的结果有点儿悬, 可能过不了这一关了… 但当时心里倒是很坦然, 由于刚开始就没有打算能够通过, 因此也就没有那种"天生我材必有用”或那种"此处不留爷,自有留爷处,处处不留爷, 爷去投八路”的气概,只是觉得过不了就过不了,大不了从头再来.面试到最后, 我问面试官是哪个部门的, 回答说是"阿里云·云计算”部门,突然感觉今天被虐成渣不怨了, 心想如果这次面试通不过, 下次直接投云计算部门, 不投YunOS了, 后来跟同学说起这个想法,他说我是被虐疯了。
二面结束之后给磊哥发了一短信, 跟他说今天面试感觉不是太好.估计通不过了, 磊哥却说面试应该不会就此停下, 但是可能会中间再加一轮技术面, 由原来的三面变成四面. 原因是在我一面快结束时问了一下面试官对我的评价, 面试官除了说我真正的项目经验不足之外又说"大三能够有这样的扎实的基础已经相当不错了”, 褒奖之意溢于言表, 估计面试官给的评价应该不错, 因此如果二面面试官给个中评的话,那我就应该能够顺利的进入HR终面, 但如果是差评的话, 那就估计还要再加一轮技术面, 给出一个最终的技术评价。果不其然, 在等了一周之后, 三面来了…
在三面正式开始之前, 我先问了一句是技术面还是HR面, "是技术面”. 内心顿时紧张起来,但面试官告诉我不用紧张,放松就好,只是聊一下我这边的具体情况, 果然三面30多分钟基本上都是处于比较轻松的氛围之中. 问得问题有:我常用的数据结构有哪些, 对未来有什么打算, 对杭州有什么印象, 有没有女朋友, 有没有在杭州长期居住的打算,如果我去杭州的话, 我女朋友怎么办等等, 由于面试官很健谈, 后来又聊起了逻辑思维与追求完美的话题, 总的来说, 这一面并不如前两面那样技术氛围浓厚, 面试官也特别和蔼(由于面试官在正式面试之前曾经放过我鸽子, 面试开始时面试官竟然还不住给我道歉,真是受宠若惊了…), 后来面试官把他的两个联系方式都留给了我, 让我有什么就可以直接联系他。
四面是HR面, 万万没想到的是HR老师竟然在周天下午打电话过来, 当时刚刚打完羽毛球, 上气不接下气的接了HR的电话, 然后直接开始面试. 这次面试基本没问技术方面的问题, 由于我说了我的博客, 因此HR老师也看了一下我的博客, 见访问量还比较高, 我谦虚的说"可能是由于写的东西都比较基础, 因此看的人比较多吧O(∩_∩)O~~”; 然后又问到为什么不打算读研了; 在大学期间遇到的最大的困难是什么, 是怎么解决的; 除了上课,在大学里其他的时间都在干嘛等等. 总的来说, 这次面试虽然不涉及技术, 但大部分问题都是不太好答的, 因此, 在此建议大家在日常生活中对生活对一些思考, 不仅仅是为了应付HR, 更要活的明白一些。
最后再说一下: 在每次面试快要结束时, 面试官都会让你问他/她一个或几个问题, 或者你自己主动问个问题, 在这儿我比较推荐的一个问题是"在您看来, 在阿里(当然是目标公司)如果要胜任一份工程师的工作, 他/她需要怎么样的能力或素质, 或者说如果我还想继续应聘这个工作, 我还需要做那些努力”, 这个问题暗含了三层意思:一是对我这次面试结果的询问, 二是我该如何努力弥补自己的不足,三是表达了你对这份工作的渴望,希望能够胜任或者获得这份工作. 我在四次面试中都主动或被动的问到了这个问题, 四面的面试官各自给出了自己的答案, 虽然答案各异, 但是综合起来能够得出一个对自己综合评价,同时,也能够知道为接下来迎接下一轮面试或者参加工作该做哪方面的努力, 因此我感觉这个问题还是比较好的。
满意的地方:
不会因为一次面试不行就拒了你,面试流程还是会走完,是考核综合。
不满意的地方:
没有!