腾讯武汉IEG部门后台研发总结(一面,二面,HR面)
一面是在13号的下午四点收到第二天早上九点面试的短信通知的,本来以为笔试挂了,当时我的心情真可谓跌宕起伏大家可以感受下。
一面面试的内容比较基础但是很全面。主要由计算机网络,操作系统与Linux,数据结构与算法,C++与STL模板四部分为主。首先面试官问的是我的兴趣爱好,我说跑步,可以锻炼身体还可以释放压力。(这个问题二面也问了,也是基本同样的回答)接着问的是你搞过Linux编程,我说是的,那你写过Makefile吗?我说写过,他说那你就写一个Makefile吧。我写完了给了他,他啥话没说,事后我查了下有一点点问题,主体框架是对的。然后问你用过gdb吗?我说用过但是用的不多,然后他就让我把自己知道的gdb调试方法说一下,我就说了几个print查看变量,break设置断点,然后我都忘了,他又问了个怎么调试正在运行的进程,我蒙了,我说我不懂你的意思,又解释了一遍还是不懂,就过去了。
第二部分问的是C++和STL还是那几个经典的问题,虚函数啊,纯虚函数啊,vector,map底层原理啊,这一部分比较简单。他问我map和set的区别的时候,我说我没用过set,我能不能解释下map的原理?他说可以。这部分比较顺利。
接下来是数据结构与算法部分,很简单,第一题手写快速排序,五分钟时间,我当时短路了,乱涂乱画了一下,直接用了switch元素的办法而不是挖坑法,但是他也没说啥。
接着问到了TCP的过程,建立连接,销毁连接的过程,为什么要三次握手,为什么四次挥手,拥塞控制和流量控制分别是什么概念,流量控制的过程,分别要解决什么问题。建立连接的第二个syn作用是啥,我当时也不知道怎么想的,说了个建立服务端到客户端的连接,因为tcp是全双工通信,下来之后我才知道这个说法不对,当时他也没说啥,可见面试官还是允许学生犯点错误的,只要说出自己的理解就好。然后还有就是socket的整个过程中的函数调用。
接下来又是Linux中的问题,分别是会不会创建进程,创建线程,我说会,进程间通信方式,我把那几种说了下,又问,创建共享内存会写吗?我说我忘了只记住一个shmget,他给我一支笔让我把创建线程,创建进程,创建共享内存写出来。分别是fork,pthread_create和shmget,最后一个我是死马当活马医,没想到这个函数既是创建又是获取共享内存。他看了看,这一部分算是过去了。
接下来又是算法题,很简单,单链表是否有环怎么判断,我说如果有环必定两个一块一慢指针某个时刻相等,他让我证明,我就画了个图证明出来了。
接下来就介绍了下部门是做游戏后台的,我这才回过头来,我报的SNG被调到IEG了。然后面试官说后面还有一轮技术面,我追问了一句,意思是我这一轮过了?他说我们还要讨论下。第二天中午十二点我查了下微信,过了。
二面:
不同于一面的和蔼可亲,二面明显脾气比较大,全程板着脸。二面的题目不能细说,因为签了个保密协议。
首先是死死揪住我为什么是学通信的要来搞游戏后台,我就扯了一通,他硬是不满意,又问了个你知道前台和后台有什么区别,我就说了前台重视人机交互体验,后台更注重高并发。他问高并发怎么解决,我说硬件上更新,软件上选择合适的模型(大家懂得,那三个模型)。接下来就是问这几个模型的区别,实现原理是什么,你写过吗?测试过吗?我写过,没测试过,看网上写的,他让我现场写出来,并建议我回去测试下。下一个题是一个算法题,红黑树或者最小堆解决。这时他突然问,这些课你学通信的都学过?我说都学过,你自学的还是?我说老师教的。然后问了科研项目,这个大概有二十分钟吧。接下来是最后一个问题,哈希问题,纸上写出来。最后的解决方案不完美,他说你这种哈希方法不好啊,我说我知道不好但是我又没想到更好的办法,然后他说这就是面试。然后让我回去等消息。当天下午四点钟,查了下,过了。
HR面:
这个就比较简单了,聊了下生活,聊了下理想。
总结:
整个面试下来还是比较简单的,都是很基础的知识。四个算法题没有一个是特别难的,这更加坐实了我的一个观点,面试题难度不会超过二叉树,好好把基础搞定就好。我本科开始玩Linux,研究生在Linux上做内核开发,所以Linux基础还算可以。本科研究生通信相关,TCP那一套就比较简单了。算法题,我是从3月4号开始在牛客网上刷题的,一共刷了43个题目,做完之后我真心感觉自己的算法功底进步了不少。内核开发主要是C语言,没有C++,C++我刚接触一个月不到,这个地方特别简单,问题很死的。
最后祝大家找到好工作,好实习。