不多说了,直接上面经。

百度

第一家接到面试的公司,电话面试。

面了两面技术面,有些问题两面都问到了,可见其对于该岗位是很重要的。

一面一开始,面试官先让我做一下自我介绍。由于自己提前对简历上的项目做了准备,自我介绍的时候还比较顺畅。听完自我介绍之后,面试官根据我的项目问了一些问题,譬如让我解释HMM和Viterbi算法。

接下来就开始快问快答环节:解释python当中的copy和deepcopy有什么区别和联系;如何上传一个文件到git的公共仓库(要注意提到git checkout特定的分支);描述TCP协议中的三次握手;为什么不能两次握手等等。

最后是一道概率题:有红球、蓝球各50个,将它们分别装入两个袋子中,使得两次取球都是红球的概率最高,问如何装袋?实际上我并不是很懂这道题是什么意思(所以我在这对题意描述也比较模糊),所以简单回答完全平分红球和蓝球即可,草草了事。

一面结束后不到15分钟,二面的电话就打过来了。我又给面试官简单介绍了一下我自己,就直接进入了快问快答环节。

Python:Python当中是否可以像C++一样可以有private、public成员变量;Python当中的装饰器是什么,有什么作用(深入理解);又问了一次copy和deepcopy的区别和联系;Python当中是否有main函数(python是解释型语言)。

Shell:如何查看上一个shell命令有没有执行成功($?);vim当中的基本操作(复制、粘贴、查找、是否用过vim当中的插件);如何删除一个目录下所有后缀名为pyc的文件。

操作系统:进程之间如何进行通信?线程之间如何进行通信?进程和线程有什么区别?有没有遇到/设计并实现过多消费者和多生产者的程序(没有)?【乱入】解释一下C里面多重指针(如**a)的含义。

数据库:写出联表查询的SQL指令?什么是数据库当中的权限?实现一个功能,如果数据库中有这个数据,就使用UPDATE语句,没有这个数据就用INSERT语句(看这个)【数据库的我真是一题都不会】【捂脸】

Git:又问了一次,如何将一个文件上传到公共仓库。面试官还夸我答得不错【之前刚问过啊喂

最后是两道编程题。首先让我描述一下快速排序的算法,接下来就砸了一道LeetCode的Medium题,要求我只能用C来实现,猝不及防【题目链接】。试了双指针等方法,想了半天还是没有答上来。实际上只需要将字符串先整体翻转,再将每一个词进行反转就可以了,非常简单。估计这就是我被拒的关键一题吧。

二面结束之后,面试官居然夸我的声音好听,还说如果有三面会过一会儿打电话通知我。结果电话迟迟没有打来,我才发现自己被面试官花式拒绝了QAQ

YY语音

YY语音也是跪在了第二轮面试上,电话面试。一面和二面时间间隔超过三周,一度以为自己跪在一面上。【虽然最后还是跪了

第一轮面试是在晚上饭点之后。一开始当然是要自我介绍一番。面试官对我之前实习的时候做的一个爬虫的项目比较感兴趣,问到了爬虫的实现细节。譬如xpath的解析规则、数据库读写的操作、爬虫抓取页面入口的选取等等。接下来面试官就问我会不会前端,我大概提了一下我用Bootstrap框架做的HTML/CSS的前端【意思就是基本上不会】。接下来问了面试官招聘的岗位都有什么样的分工,后面一半的时间都在和面试官掰扯这个。

愉快地结束了第一轮面试之后,经过了漫长的等待,来到了二面。

二面的问题非常跳跃,网络方面的问题问的比较多:常用的路由协议有哪些;TCP/IP每一层的作用;三次握手的过程;是否了解memcache,redis;session的工作原理;http和https有什么区别;https的加密方式是什么,加密方式是否对称(TLS/SSL,RSA);是否用过Linux里面自带的抓包功能,具体应该执行什么命令(我表示只用过wireshark,而且还不了解其中的工作原理)?

其它的问题也问了不少:B+树和红黑树的区别在哪(弱渣表示完全不会乱答一气);指针和引用有什么区别;数据库当中四层(传输层)负载均衡和七层(应用层)负载均衡有什么区别(然而完全不懂【摊手】);什么是僵尸(zombie)进程;进程和线程的区别与联系;如何更新git的远程仓库等等(第三次遇到了)

感觉二面的面试官是一个Geek,语速不紧不慢,自带大佬光环。他对我回答的反应比较冷淡。我也不自觉地把语速放慢了下来。

后台开发这一个岗位要求确实挺高的,需要应聘者对操作系统、计算机网络、数据库、数据结构和算法等计算机基础知识了如指掌。自我感觉回答得不好。果不其然,之后就再也没有来自YY语音的消息了,我也确信自己跪在了二面。

腾讯

腾讯的面试是校招现场面试。鹅厂在广州豪情万丈地包下了一个酒店,有不少从各地赶来霸面的同学,也真是开了眼界。我按照规定的时间到达了面试地点,没等多久,就被微信上的面试提醒叫到,前往酒店房间里面和面试官进行一对一的面试。

上来首先自我介绍,面试官根据我的项目,问了LRU Cache如何用双链表实现,数据结构应该如何写。一开始我只提到了前指针和后指针,后来面经面试官提醒,想起了利用uri作为key,lru counter和size也磕磕绊绊答上来了。

接下来需要手写代码,给一个字符串如下:”key=value&key1=value1&key2=value2”,要求提取它们的key value到一个哈希表中。思路简单,但是需要手写代码,卡了一会儿。我使用了flag指示符来指示遍历走到了key还是value,有点lowlow的。

面试官就代码里面(string) tmp += (char) s[i]的性能问题提出了质疑,要求我提高性能。我只知道把字符串放在一个vector中,再转为string,面试官沉吟一下,就此按下不表。

接下来问了C++的重载、重写和隐藏,各自的实现机制(在编译器当中的)?指针和引用的区别?我只知道重载和重写的区别,答得也一般。

面试官又就数组随机shuffle操作进行提问。如何进行shuffle?如何对shuffle后的数组进行测试?我的测试方法是每次都取shuffle后数组的第一个元素。追问,如果数组随机分布不均匀该怎么办?没想出来……就说对每一个元素都进行测试。

面试官又问道,如何求二叉树的最小公共父结点?(不允许改变二叉树的数据结构) 我答的是从根部开始遍历,把父节点都存下来,比较访问两个节点的路径。应该可以有更好的方法。

所有的问题答得都一般,自我感觉也没什么亮点。再加上我的简历当中和这个事业群(腾讯游戏)也不甚匹配,止步一面也是可以接受的。