2018年秋招面试总结
January 15, 2018
interview折腾完毕设,记录一下校招的经历、心态和思考,以及对于行业、公司平台、技术方向的个人选择。
首先认清自己的定位,是高校还是企业,也就是读研/博还是工作。刨除所谓学历和名校加成这些无聊因素外,以我个人见闻以及切身体会,国内绝大多数的研究生都不值得读,除非纯学术或者所加入的实验室口碑甚好并且课题方向有意义且合意。否则,对于cs专业来说到工业界工作才能接触到业务的锻炼。无论是工程还是算法都一样。
其次,定位于工业界的话(忽略掉传统外企、国企和银行),需要选择业务/行业方向。包括:电商、游戏、金融、社交、ai(视觉/语音/自动驾驶等)、云计算、基础架构等。
- 其中游戏最累但钱最多,电商和云计算次之,基础架构薪资相对少但加班情况也比较少,而ai作为最近三五年最受关注的方向薪酬和发展都是工业界的顶配。
- 在这里我并不打算以钱多少来区分业务方向的选择。一般来说,不同行业有自身的技术特点,比如游戏是一个很特殊的方向,而云计算中的IaaS和基础架构则与os和计算机系统关系比较紧密,这主要关乎于个人的技术方向。
- 除了个人技术方向外,我认为选择一个行业看的是未来,也就是预测3~5年后的发展情况。“以史为镜,可以知兴替“。(普通)人作为社会渺小的一员,若以世俗的成功眼光看待行业选择这个问题,那么选择的重要性比能力的重要性要大,这也成为了大多数人口中所说的运气。然而所谓的选择也必须需要先有得到这些选项的可能性,因此先打好基础吧~
我应聘的岗位是后台开发,根据自己擅长的内容初始定位在分布式系统方向。曾经在研一的时候在机器学习方向有点入门,参与过两个小比赛,但由于种种原因未能有时间和精力深入,权当扩展知识面。
在秋招中我面试过的公司比较少,主要是:阿里、腾讯(offer)、网易(offer)、拼多多、华为(offer)、美团(二面放弃)。由于精力不足放弃面试的公司有:美团、网易游戏、百度、招银网络科技等。互联网外企在国内变数较多,长期比较稳定的是ms、Google,其他不好评估,刷题较少的我没在外企投入什么精力……
拼多多
拼多多是秋招第一个面的公司(实际上华为最早但面试都在侃大山,略过),公司给我的感觉就是缺乏人手开发,据说是11-11-6,虽然累但工资高啊很高啊十分高啊……个人对这种电商模式持怀疑态度,尤其是盈利的方向。二面凑巧面到创始人,他直白地跟我说了当前并不需要考虑盈利,有人投钱就行,后续可以接广告投放之类的。
一面:一面面试体验不错,面试官一直在认真听我讲项目内容,还提出几个关键的问题点,几乎也是我之前做项目时也在处理的,第一次碰上这样的面试官我还是挺兴奋的,跟他面了得有100分钟。
- raft如何用于分布式kv数据库中保证数据一致性,主要的疑问点在于读操作是否要进行raft commit
- 分布式kv数据库中进行slave join/leave时,如何进行hash partition的transfer
- one loop per thread网络并发模型中,连接的并发数量受限在哪个点
- 问了一发实际业务场景的问题:如果设计抢购时商品数量的扣除,其中商品数量不能出现小于0
二面:二面面试官后面看新闻脸熟,发现是拼多多的创始人。其面试过程给人感觉相当不友好,一开始问了下实习内容怼了一发,后面手撕算法也莫名开怼。刷了三题leetcode hard后不耐烦的我不想写了。
阿里巴巴:计算平台事业部
捞我的部门是大规模机器学习组。当时托师兄查到后我时相当困惑,我完全没在简历上表明我有机器学习的背景啊……总共是面了三面,莫名其妙到了总监面后就不了了之,吊了我两个多月简历后把我挂了,应该是发现方向不对口吧【不管怎么说一直吊简历太恶心了。
一面:在晚上9点来了个电话面到10点,然后email了一个题目让11点前撕掉,这面试时间十分阿里……一面面试官比较重视基础,基本上针对简历问了点问题,但他通过基础一步步深入,到了后面转换到项目问题我才反应过来。通过这种方法能够测试一个人到底是否理解所做的项目,是一个不错的面试经历。
- 进程线程:多线程和多进程的区别,进程和线程的通信方式(不太清楚面试官试图问什么,因为只有进程强调通信,线程本来就共享内存区域只强调同步)
- 为什么one loop per thread IO模型中采用管道进行master和worker之间的通信(为什么多线程的程序要用多进程的通信方式):问这个个人觉得有点刁钻……有可能是我讲项目时没讲好,管道主要用于同步(定向唤醒),通信是用thread-safe queue来做的
- 线程和协程的区别
二面:二面面试官主要问了点Linux内存问题,包括文件系统、内存管理、信号处理等
- 内存管理:逻辑地址空间和物理地址的关系
- 物理内存只有8g,malloc 10g内存会怎样
- malloc之后memset呢:swap page;OOM,kill进程(This usually occurs because all available memory, including disk swap space, has been allocated.)
- 网络编程:
- libevent、epoll原理
- epoll中注册的进程如何被唤醒
网易杭研:云计算存储
网易我一开始在投简历的时候发现c++只有考拉一个部门可以选择(后续hr面告诉我还有很多部门在招c++时,只想吐槽他们的招聘页面能不能好好做),然后我就只好改投云计算存储。分布式存储是我个人比较感兴趣的技术方向,只是网易云计算在业界的知名度比较低。
整体说来网易的笔面试都比较玄学,看学校和项目经历(包括本科),笔试全a的也有可能没法得到面试机会。网易的面试经历个人体验有好有差,相对来说十分看面试官。面完以后我觉得很悬不抱什么希望,但后面还是莫名其妙得到了offer。
一面:一面面试官十分认真面试过程挺好的,针对我的简历广度和深度都有涉及,从这次面试中我也对自己的知识面进行查漏补缺。逐层深入地问我golang并发、Linux多进程多线程网络编程、raft协议等,也多亏他将我从二面手下救回来给了我加面的机会……【鞠躬
- 进程线程协程:
- 进程和线程的区别, 进程通信和线程同步方法
- 进程切换的操作叫什么:上下文切换,具体切换操作是怎样的
- 什么是协程,go的特点是什么,协程怎么切换,为什么go可以实现比系统线程并发数据高那么多个量级,go怎么处理协程和线程的配合,goroutine陷入了系统调用怎么办
- 信号处理:怎么唤醒一个进程:信号
- 编译:
- c语言编译过程,漏了汇编,静态链接和动态链接区别
- Gdb怎么调试多线程
- Linux:
- 怎么查看进程运行,怎么查看网络状态,怎么递归建立目录
- 怎么抓包,熟悉什么参数
- 网络编程:
- Select和epoll区别
- 手写tcp单进程服务器,多进程服务器,多线程服务器
- 如何有效管理多线程
- Tcp为什么要三次握手,握手握的是什么,画一下时序图
- 服务器很多tcp连接处于Send_rcvd是什么情况,listen的backlog有什么用
- time_wait发生在哪方,为什么要有这个状态
- 客户端跟一个服务器建立连接的数量有没有限制,多少,如果频繁建立和断开连接导致端口耗尽怎么解决,port为什么可以reuse,原理是什么
- 分布式系统:Cap是什么,Raft解决cap的什么问题,raft怎么保证数据一致性,raft怎么进行leader选举,leader选举完后进行什么操作,kv怎么跟raft结合起来,kv如何持久化
- 数据库:什么是索引,查询怎么用索引,优点和缺点
二面:一直怼我不懂Linux内核中的存储子模块和内核开发,面试过程不怎么友好。
三面加面:加面了一发数据挖掘【黑人问号脸,粗略地问了下实习经历、Leveldb的原理和利弊、Linux多进程多线程。
腾讯sng QQ音乐
音乐整个面试流程合起来是:音乐两面+sng两面+hr面。其他bg不太清楚,sng的面试过程比较常规。在四轮技术面中,实习经历和个人项目都问得比较少。面鹅厂一定要把基础打牢(c++、ds、stl、os、network等),否则有种无法施展出拳脚的无力感。之前面实习就是这样挂掉的,以致于这次面试十分紧张。不过音乐的面试官十分友好,一点也不push,好感度max。
美团:到店综合
美团是我最后一个面试的公司,一面电面过了两周才邀请现场面试。因为上海不是目标工作地点,由于实验室压迫的缘故也没有余力去兼顾,于是就放弃了现场面试。一面面试官整体下来感觉水平挺高,对项目和数据结构算法等的发展缘由及性能取舍比较重视,就是java的面c++很僵硬……总的来说是一个很不错的面试经历。
电面一:
- 粗略问了下实习经历后,问了一发实际业务场景的问题:如何设计相似图片检索系统。一开始懵了以为要问算法,后面才反应过来问架构设计,然而自己架构设计能力太弱了……直接崩盘
- 语言:
- c++怎么实现泛型,c++怎么实现多态
- 怎么判断程序死锁位置(好像是问java的工具吧……)
- 基础:
- TCP建立连接和断开连接过程
- 线程有哪些状态,是怎么转换的
- 聚集索引
- 数据结构&算法:
- map有哪些实现方法
- B树和B+树的区别,红黑树和B树的区别,为什么map不用b树,为什么磁盘检索不用红黑树
- 根号n怎么算
- 数组的查找方法有哪些,链表的查找方法,链表查找的优化方法,跳表和红黑树的区别