腾讯、百度、网易游戏、华为Offer及笔经面经
面试完毕,已与网易游戏签约。特此撰写一份笔经面经,记录面试过程,同时也希望能对师弟师妹们有所帮助。这并非炫耀,只是想攒攒人品,还望各位不要鄙视我。
正所谓“饮水思源”。
我来自广州华南理工大学计算机科学与工程学院,在此也为华工计算机打个广告。
一、腾讯(2011年4月,所报职位:后台开发工程师 – 深圳)
腾讯是我一直重点准备的公司,因此对其笔试知识点及面试侧重点有一定了解。
笔试
笔试是一份时长为2小时的卷子,题目较为基础,具体题目我已记不太清。试卷内容涉及网络原理、C/C++语言基础及高级机制、基础数据结构及算法、数据库、Linux基础以及Linux下可执行文件组织机制(如内存布局、.text、.bss、.data的组织方式等)。
由于我一直在做针对性准备,所以答题相对顺利,最终成绩80 +,这个成绩为我通过实习面试起到了决定性作用。在笔试卷子上可以勾选业务单元(Business Unit,BU),我果断勾选了B3(互动娱乐)。
一面
我习惯面试时携带简历,希望面试官更多关注我的项目经验,减少对算法的提问,从而突出自己的优势。见到一面面试官后,我直接双手递上一份简历。面试官果然对着简历开始提问,按照简历中所写的技能一项项发问。
- C++方面:问到了多态实现机制,这个问题多次被面试官提及。我直接把《Insight C++ Object Models》书中的内存布局图搬了出来,面试官非常满意。
- TCP/IP原理方面:询问了TCP状态变迁图以及TCP/IP接受发送缓冲区相关概念。
- Unix环境编程和网络编程方面:问题大多出自《APUE》(《Unix环境高级编程》)和《UNP》(《Unix网络编程》),我都从容应答。
- Linux内核方面:问了一些内核源码相关的概念,问题广而浅,不难回答。
此外,还问了几个综合问题:
- QQ飞车新用户注册时,如何判断新注册名字是否已存在(数量级达几亿)?
- 编写高效服务器程序需要考虑哪些因素?
- Epoll机制相关概念(Epoll与Select机制的区别),这个概念很多面试官都会问到。
由于我一面回答得不错,加上笔试成绩也理想,面试官当场对我进行了表扬,并把他的QQ留给我,让我以后有问题直接咨询他。我知道自己肯定能通过一面,后续面试只是走流程了。
二面
二面面试官是一位35 - 45岁的和蔼大叔,他始终面带微笑。面试从简历开始,我介绍了自己的技能和项目经验,并对笔试时的系统设计题提出了改进优化方案,简单阐述了自己的想法。
HR面
HR面就是简单的聊天。
最终,我拿到了腾讯的实习Offer,并在腾讯进行了两个月的暑期实习。
二、百度(2011年10月,所报职位:软件研发工程师 – 深圳)
对于是否参加百度的面试,我一直很犹豫。主要有两个原因:一是我已经通过腾讯实习拿到了Offer;二是我觉得自己算法较差,担心被鄙视。直到考试前一天,我都还没确定是否参加。幸运的是,我最终克服了恐惧,走进了百度的笔试考场,有机会体验百度的面试流程。
百度的笔试卷子因部门而异,我报的是软件研发,考的是RD - 3的卷子。
笔试
以下是笔试题回忆版:
简答题(30分)
- 对远程Linux/Unix系统进行远程操作,通常采用终端软件通过ssh登陆远程系统进行操作,但在网络中断时,Linux/Unix端运行的程序将会中断。请阐述这种问题发生的原理、避免该问题的途径以及可避免该问题发生途径的原理。
- 实现最小堆的插入和删除操作的编程。
- 有一道题我没太理解题意。
算法与程序设计(40分,算法可以使用伪代码描述)
- 给定一个数字编码N,大多数情况下可以找到一个数字编码M,其位数与N相同,各位数字之和也与N的各位数字之和相同,并且M是大于N的数值中最小的一个,也可能M不存在。例如,N = 134,则M = 143;如N = 020,则M = 101。形式化表述为F(N) = M,如果M不存在,则F(N) = - 1。要求给定算法计算F(N)序列。
- 给定序列s = {a1, a2, …, an},构造算法求全排列和所有组合。
系统设计题(40分)
这部分题目我打算有时间再慢慢回忆。
这次笔试我考得非常糟糕,勉强得了40分(后面面试时在卷子上看到的成绩)。笔试当天是星期日,当晚我的手机没电了,充电开机后有两个未接的020 - *来电。因为其他同学都是收到短信通知,所以我没太在意,自己没收到短信通知,就清楚笔试没通过,于是决定霸面。
霸面(星期一)
我霸面的是终端研发深圳岗位,见到面试官后,他一直忙着找我的笔试成绩,我则趁机推销自己,介绍了我的项目经验、Linux技能、内核知识、TCP/IP网络知识以及嵌入式开发经验等。最后面试官问了我几个小题,让我写了几个《编程之美》上的小题,我回答得还可以,但由于是霸面,面试官对我态度不太好。这次霸面非常失败,我备受打击。
失落的星期一夜晚,我无意中又接到了020 - *的电话,对方告知我是百度公司,通知我星期二去一面。
一面(星期二)
星期二我是接到通知去参加一面,不再是霸面了。一面主要考查设计数据结构及改进,我做得不太好,便坦言自己数据结构及算法一般,但项目经验、Linux和网络知识比较丰富。于是面试官转而询问Linux及内核源码、TCP/IP原理及实现细节等问题。他还拿着笔记本上网查问题,这让我压力很大。问题既广又深,好在我对Linux掌握得还可以。记得的问题有:Linux操作系统的作用、内存管理在源码中的哪个目录(mm)、进程调度内核实现的大致机制、TCP/IP接收发送缓冲区以及内存管理实现机制等。面试官还对我的项目提出了问题,并要求我进行优化。
面试快结束时,面试官直言我数据结构及算法掌握得不熟练,希望我以后加强学习。虽然我知道这可能意味着我会被淘汰,但还是真心感谢他。
星期二晚上一直没有收到通知,我等到12点就睡了,心里充满了失望和绝望。虽然面试时我就知道自己可能被淘汰,但还是不愿接受这个事实。
二面(星期四)
星期三晚上,在我没有期待的时候,不经意间又收到了百度的通知,那一刻我感觉自己死里逃生,差点尖叫起来。
星期四的二面,有两个算法题出自《编程之美》,其他题目涉及Linux、内核、网络、项目、高效服务器以及如何预防攻击等,我发挥得不错,面试官一直面带微笑,我知道自己有机会进入三面了。
三面(星期五)
三面万幸没有考算法,主要询问了我的意向、项目经验、项目细节及能否优化以及Linux内核等问题。因为项目确实是我自己完成的,所以回答得还不错。
Offer
星期日,我收到了百度的Offer,但职位是在北京的研发岗位。
三、华为(所报职位:操作系统工程师 – 深圳)
机试
机试题目是给定一个数组,求数组中比平均数大的数字个数。这题感觉像是在考查我们的基本编程能力,让我有点汗颜。
一面
一面主要围绕我的项目进行提问。
二面
二面是群面,技术和非技术人员共16人,分成两组,讨论曹操、刘备、孙权、诸葛亮谁适合当总经理。在这个环节中,技术人员一直比较被动。最后,我们组淘汰了两个技术人员。
三面
三面是上机性格测试,共104题,听说这个环节一般不会刷人。
四面
四面是和两个“老男人”随便聊天,话题包括项目、未来发展方向、华为操作系统发展以及Linux操作系统及实现等,问题范围广但深度较浅。
四、网易游戏面试(游戏系统架构师)
笔试(10月22日)
网易游戏的笔试时长为3小时,题量非常大,涵盖了计算机各核心课程,如操作系统原理、C/C++、基础数据结构与算法、数学推理题以及网络等。题目又多又杂,几乎没有同学能做完。由于我经历过考研,一些基础课程掌握得还算扎实,前40分的题答得不错,但后面的算法题做得一般,我只能想到最笨重的方法。
一面(11月1日下午2点)
在此提醒各位同学,面试一定要多带几份简历。一面要求带2份,我带了5份,每份都发挥了作用。
通知2点面试,我1:50签到后开始做题,是矩阵相乘的题目,我差不多10分钟就做完了,然后开始等待一面。大概2:40通知我面试,有2个面试官。面试开始先让我做自我介绍,然后问了一个项目相关问题,接着问我是哪里人以及目前拿到了哪些公司的Offer,一面就这样结束了,整个过程不足10分钟,没有问任何技术问题,这让我相当不淡定。
二面(11月2日下午3点)
11月1日晚上通知我11月2日下午3点面试。我2点半左右到达网易准备面试,大概3点10分,一个女人带我进入面试房间,当时我很紧张,这是我遇到的第一个女技术面试官。
进去后,有2男1女三位面试官。他们先进行了自我介绍,一个是《大话西游II》的主程序,一个是《天下II》的主程序,靓女姐姐是HR。二面和HR面是一起进行的。
面试中问了很多C++高级机制的问题,还有2道基础算法题,题目回忆如下:
- 构造函数可以调用虚函数吗?语法和语义上是否都能通过?
- 析构函数可以抛出异常吗?为什么不能抛出异常?除了资源泄露,还有其他需要考虑的因素吗?
- C++中类型转换机制有哪些?各适用于什么环境?dynamic_cast转换失败时,对指针和引用分别会出现什么情况(对指针返回NULL,对引用抛出bad_cast异常)?
- 洗牌算法如何证明其随机性?
- 有100万个32位整数,如何最快找到中位数?如果能保证每个数是唯一的,如何实现O(N)算法?这道题出自《编程之美》或《编程珠玑》,可以使用位图,需要的空间复杂度是512M。
- 面试官对我一个关于gcc插件的项目很感兴趣,和我聊了很久。
- 拷贝构造函数的作用及用途是什么?什么时候需要自定义拷贝构造函数?
- 还有一些题目我记不太清了。
- 最后还聊了待遇问题。
签约(11月3日下午4点)
11月2日晚上我收到通过面试的通知,通知我11月3日下午4点签约。
网易游戏不同部门、不同职位的面试内容不同,但都注重基础知识。有的一面题目是BFS,这本应该很容易,但还是有一些同学完成得不好。
如果各位师弟师妹觉得这篇帖子对你们有帮助,就祝福我一下,帮我攒点人品吧,多谢。
关于书单
我一直准备的是腾讯后台开发岗位,所以书单针对性较强,可能存在一定偏见,还请见谅。下面先贴出腾讯后台开发要求的技能,这些技能要求是我选书的依据。
游戏开发类 - 后台开发工程师
职位描述
负责游戏相关后台系统的开发和设计。
职位要求
- 有Unix/Linux操作系统下的C/C++项目2年以上开发经验。
- 熟悉网络编程,熟悉Linux下的mysql开发。
- 精通TCP/IP协议及编程,熟悉互联网应用协议。
- 熟悉面向对象的大型分布式系统设计与开发,了解中间件的技术以及基于中间件的开发模式。
- 具备全面的软件知识结构(操作系统、软件工程、设计模式、数据结构、数据库系统、网络安全)。
- 具备良好的分析解决问题能力,能独立承担任务并把控系统进度。
- 责任心强,有良好的对外沟通和团队协作能力,主动好学。
优先考虑条件
- 有大型分布式系统设计开发经验。
- 有游戏后台系统开发经验。
我大部分书是在研一下学期和研二上学期购买的,大部分已经读完,一部分书反复读了3遍以上,比如《APUE》《UNP》《TCP/IP详解 卷I》等。以下是我重点推荐的书籍:
- C/C++方面
- 初级:《C语言解惑》《C和指针》
- 专家:《C专家编程》(强烈推荐)
- 《C++ Primer》《Effective C++》《Inside C++》(强烈推荐)
- TCP/IP书籍方面
- 《TCP/IP详解 卷I》(强烈推荐),卷2和卷3没必要购买和阅读,这本主要讲解TCP/IP原理。
- 《UNP》(强烈推荐),主要讲解Linux socket编程API,与《TCP/IP详解 卷I》结合阅读效果最佳。
- 《UNP2》(《Unix网络编程第2卷》),主要讲IPC,有时间可以看看。
- Linux书籍方面
- 《APUE》(强烈推荐)
- 《深入理解Linux内核》(推荐)
- 其他系列Linux源码书籍适量阅读即可。
- 应试算法及智力题方面:《编程之美》《编程珠玑》
- 海量数据处理方面:可以在网上收集资料,有时间我也会传上来。
- 数据结构方面
- 《数据结构与算法分析 - C语言描述》(Weiss,推荐)
- 《考研数据结构1800红色题集》(对于像我这种数据结构基础薄弱的同学帮助很大)
还有两本非常牛的书籍:《汇编语言程序设计》(毫不夸张地说,这本书改变了我)和《深入理解计算机系统》。
掌握了这些书的内容就足够了。我对嵌入式开发比较感兴趣,所以书单中包含了部分嵌入式书籍,不感兴趣的同学可以忽略。
广研和深圳腾讯的面试感受
广研
- 笔试:有6小题,涉及基础数据结构,如链表、树、字符串等。题目很基础,但很考验C语言功底。要熟练掌握,确保写出的代码无误且编程风格优美,这样才能增加通过的筹码。
- 一面:主要讲解笔试卷子的解题思想和项目。面试过程比较随意,面试官主要侧重考查Linux、C++和网络知识。
- 二面:围绕项目进行提问,询问一些他们实际中遇到的问题该如何解决,面试过程也比较随意。
腾讯深圳
- 笔试:考查数据结构、TCP/IP、操作系统、计算机底层机制(包括堆栈组织等,《APUE》中有相关讲解)。有20个多选题,每题3分,多选少选都不得分;还有40分的大题,每空4分,共10空,大题基本是送分题。我这次笔试得了82分(42 + 40),RAID磁盘阵列、B树/B + 树、堆等几个问题我没把握,错了6个选择题。一面面试官说82分算不错的成绩。
- 一面:可能因为笔试成绩不错,面试过程比较顺利。面试官只看了我2页简历中第1页的1/2。他根据我简历所列技能进行提问,如TCP/IP状态转换、socket API、高性能游戏服务器需要考虑的瓶颈等,我主要从TCP/IP方面回答,比如三次握手队列、数据接受/发送缓冲区等。还问了Linux的proc机制及作用,我直接跟他讲了ls /proc内核生成结果的原理,这是《APUE》中proc文件系统源码所涉及的内容,面试官比较满意。此外,还问了我使用的IPC及比较、epoll模型及优缺点(这个问题年年必考,主要对应于select的3个缺点:连接数受限、查找配对速度慢、数据由内核拷贝到用户态)。C++方面主要问了动态多态的实现,我直接画了内存布局图,这是《Inside C++》中所讲的内容,面试官也比较满意。还问了一些大数量处理的问题,由于我之前有准备,所以回答得还不错。面试过程中,面试官多次表示对我很满意,我也表达了实习后留职的意愿,他把Q号留给我,让我以后有问题在Q上联系他,那一刻我就知道自己应该可以去实习了。
- 二面:比较随意,主要让我讲项目,讲完后针对项目问了一些问题,还结合QQ相册问了一些比较难的问题,我勉强回答了几个。
- HR面:这是我所有面试中最糟糕的一次。因为之前看到别人面HR很随意,所以我没做准备,加上中午没睡好,4点去面试时头晕晕的。HR主要和我谈人生,有几个问题我回答得不好。