趋势科技、美团、小米、网易互娱 C++后台开发offer面经
前言
经过六月到九月这几个月的努力,***有幸拿到了趋势科技、小米、美团、网易互娱的offer,之前看了好多分享的面经,是时候该回馈了一波。
先介绍下***的基本情况:在导师的创业公司待过一年多(没有课就去公司),做过C++图像处理、java后台开发、移动web开发,由于自己比较水,学的东西都不深,在7月初离开公司后就猛补基础知识点。
艰辛经历
***在校招七月初就开始投简历,没有统计过投过多少家,基本把牛客网上的可以投的公司全部投了一遍,投了简历的至少有60家公司;笔试也不知道做了多少了,至少有25家的笔试,最后收到的面试情况:
- 招银网络科技:电话一面挂;
- 金山WPS:电话一面过,电话二面挂;
- CVTE:现场技术一面挂;
- 美团点评:现场技术一、二三面、hr面拿到offer;
- 网易互娱:现场技术一面、二面拿到offer;
- 趋势科技:现场技术一面、二面拿到offer;
- 小米:现场霸面技术一面、二面拿到offer;
- 腾讯:现场一面挂;
- 深信服:和腾讯面试冲突放弃;
其他公司:百度、头条、京东等这些公司挂在笔试上了,360、搜狐、搜狗、美丽联合等直接挂在简历上了;
对现在的offer情况比较满意,准备结束秋招;先感谢给我offer的面试官,找工作真的是很看运气的,碰到好的面试官会一步一步引导你,碰到风格不搭的面试官那就有点难受了;然后感谢一起找工作的小伙伴们,一起学习一起进步,多交流面试经验,少走了很多坑;也谢谢很多牛友分享的面经;
准备校招的还是蛮辛苦的,***7月份开始基本都是7:30起来刷编程题刷到8:30吃早点去实验室准备其他知识点,中午午休前半小时刷编程题,晚上回去洗澡后刷编程题到12:30左右睡觉,没办法,基础不行只能靠努力来补;由于智商还是不够用,最后也只把牛客上的leetCode题刷完了而已,看了几遍剑指offer,这两个都是神一般的存在,算法题就靠这两个。
***想对小伙伴们说:
-
心态很重要:***的offer可以说都在9.22号这天拿的,在这天之前,我也是一个offer也没有,也比较难受,看着一起的小伙伴面试、拿offer,我在9.22之前就在9.18号现场面了CVTE一家(招银科技、WPS是电话面的),还一面挂了,当时也是很难受,但是还是要继续学习,毕竟,机会是给有准备的人,如果offer还没来,那么要么就是适合你的offer还在后面,要么就是还需要继续学习。摆正心态,厚积薄发!
-
多交流:***的实验在8月底就组织了一系列活动,基本每天晚上有个小伙伴来分享,而分享的内容没有限制,面试经验、操作系统、hr面如何回答、网络知识、排序算法、实习经历、大数问题解决方法、如何讲项目等等,只要和面试有点相关的都可以,大家一起讨论,互补知识点,听者从面试角度来提问,讲者回答,讨论知识点会从哪些角度来问等等;
-
补上盲点:这一点起始是对修改简历的建议,***初始版本的简历的技能就是写自己会哪些就写哪些,发现基本都在挂在简历上;之后看到上一届师兄们的简历,就专业技能方面就比我多好多项,至少看上去高大上一些;然后***就去腾讯招聘C++开发工程师的要求直接粘贴到简历上,适当修改后感觉简历瞬间高大上了--------好多知识点都不懂,然后根据简历上写的狂补。只要你补上了之后那就不虚了,因为实在不懂的你可以写个了解,如果有时间的话就深入学习。
面经
- 金山WPS 时间九月初,具体时间忘了,
电话一面: 过了 - 如何检测内存泄漏
- 讲讲智能指针
- C++容器有哪些
- list 和 vector有什么区别
- 讲讲大端小端,如何检测
- public 和 private 关键字,在继承中有什么区别
- 设计一个内存分配类---参考STL中空间配置器
- 现有一个程序需要申请的地址是要求起始地址必须是16的倍数,如何设计----将申请大小上调至16的倍数,那么最多会浪费15byte空间,真正存储从16byte倍数上开始利用。
电话二面: 9.12号, 挂了。 不过这个要吐槽下,约的2.30, 等到下午5点才打电话过来,等得心累;
- TCP三次握手
- http状态码,403是什么
- http 与 https的区别
- 智能指针,shared_ptr 内部实现
- IPC通信有哪些
- 多线程的死锁,死锁避免(讲了银行家算法额思想)
- Vistual Studio 怎么调试,如何设置条件断点
- JVM 内存回收
招银科技 9.15号
电话一面: 挂了
- tcp、udp的区别
- spring 依赖注入
- 面向对象的特征,讲讲多态,什么是多态?
- 进程与线程的区别
- 什么是信号量,信号量与信号的区别
- 依赖注入
- 怎么创建索引
- 知道哪些设计模式,工厂方法与抽象方法的区别
- 怎么统计char二进制中1的个数
- sizeof 与 strlen的区别
CVTE 9.18号
现场一面: 挂了
- 挑一个最拿手的项目讲
- 面向对象的基本特征:封装、继承、多态;
- 析构函数能不能用virtual
- 引用与指针的区别
- 引用必须初始化,先在要设计在一个类中如何初始化引用:
class A{
int &a;
}
如何给a初始化? - static、const、virtual结合使用情况,以下几种可以么:
static void fun(){};
static void fun() const {};
static virtual void fun() const {};
static virtual void fun() {};
以上四种函数可以这样定义嚒? 为什么?
美团 9.20号
现场一面: 过了
- 进程与线程的区别
- 数据库索引为什么用B+树而不用B-树
- spring mvc 的处理流程
- 访问一个网页的具体过程
- 手写单例模式
- 手写数组合并
- java线程安全了解么
- hashmap、hasptable、concurrenthashmap的区别,concurrenthashmap如何实现高并发?
- 知道哪些NoSQL,讲下redis,redis的实现原理,redis怎么实现高并发?
- C++如何处理异常,异常向上抛出抛到最上层是什么情况?
- get、post的区别,什么是幂等性,put和post的区别。
现场二面: 过了
- tcp三次握手,第三次握手的时候如果直接发送数据会怎样。
- 一个http请求的具体过程以及具体的协议,越详细越好,dns的查询过程
- 设计一个订单,同时有多个骑手抢订单该如何设计,有多个服务器处理请求要怎么处理?
- select、epoll的区别,什么时候用select,什么时候用epoll
-
讲项目
-
网易互娱 9.21号面试,22号晚上出结果; 到了现场先写一个算法,不难。
现场一面: -
讲下快排
- 手写插入排序
- 进程与线程的区别,如何创建多线程、如何创建多进程。
- IPC通信,会问你自己实际使用过不
- socket编程过程
- vector实现原理
- 如何实现vector 在扩容的时候不进行新的空间申请,即不想有扩容操作,该如何设计? --- 从operator new和placement new方面来讲。
- 如何将一个序列均等分为两部分,使得这两部分之和尽量小-----没做出来,比较尴尬。
现场二面: 过了
- 全程讲项目
- 最后出了个题:在王者荣耀中(干嘛不说阴阳师中呢)如何统计全服中所有玩家阿轲这个英雄的胜场排名?
呀呀,到了神奇的9.22这天了
神奇的9.22号
- 9:00 美团三面:
-
全程问项目
-
9:50 美团hr面:
-
把一个项目用通俗易懂的语言讲懂给她听
- 如何处理同事关系
- 一个人不会在公司待一辈子,你会出去创业嚒?---坚决咬定不会,美团特别好,留在公司做贡献
- 为什么来美团?美团的价值观是啥
- 你选择offer的最重要的两个因素
24号发消息说进入录用池了,28号打电话询问手里offer情况,然后定薪资, 30号打电话说薪资情况,要决定是否接offer,我说考虑一天,31号打电话回去把offer拒了,机会留给小伙伴们,小伙伴们加油。
10:50才发现趋势科技也是上午面试(以为下午面试),赶紧跑过去面试现场。
- 12:00 趋势科技 (忘记记录,凭记忆写咯)
现场一面:- 根据简历上写的项目、技能来问你是熟悉还是了解,你只是自己用过而已嚒?你不是自己从底层设计的哦,那就不用说了!!!!
- 讲下项目,给我项目中的问题看我怎么解决。
这个一面的面试体验比较不爽,不问里面的具体技术,只问是不是只是用过,也不让讲深入一些的知识点,感觉你要是自己设计出来一个类似的东西或者深入研究过源码才行或者修改源码才行一样,给我的感觉不爽,不过还是感谢让我过了。
12:50 现场二面
- 讲项目
- 写一个字符串拷贝函数,你这个会出现异常嚒?怎么改进?
- 简单英语口语交流
13:30 hr签offer
当时就问了要不要违约金,然后就签了,当时到手的第一个offer,其他都还没信,心里老高兴了,准备好久,终于有个offer,差点就蹦起来了!
2:30 吃完饭后看到小伙伴有去小米霸面的,我也凑个热闹就去了...,第一次去霸面百度,百度没鸟我,觉得霸面应该没机会,不过小米还是支持霸面的,面试体验不错,赞一个(小米面试的酒店要刷卡才能进某一楼层,我上它们面试的上一层楼上,想从消防电梯走,结果进了消防电梯到了面试楼层发现要刷卡才能出消防楼层....,然后尴尬的打电话给小米hr姐姐来解救我们。。。。 当时好尴尬)。
- 6:30 小米,到了先从三道题中选一道题做,
现场一面: - 先写个堆排热热身吧!!! 有点忘了,然后自己画图,根据自己的图来写过程,面试官看了两次都说不急,你慢慢写,我哪敢慢慢写,赶紧写完就给面试官了,有些错误,不过总体思路是对的。
- 统计逆序对个数,我记得剑指offer上利用归并的思想将原序列分成前后两个序列,分别统计两个序列中的逆序对个数,再统计两个序列中的逆序对个数,然后再合并继续的思路;我把思想说了之后面试官就让我手写代码,写好之后他看下了应该是对的。
- 还手撸了一个算法,不太记得,不过没上面两个难,面的不好,全程手撸代码,不过让我过了,真是开心。
中间在等二面的时候跟hr姐姐聊天,漫长的等待中。。。
现场二面:
- 二面面试官看了下我写的堆排,然后让我讲了下STL中的空间配置器,问了为什么自由链表中的是8byte的倍数?
- 问了那个刚开始那道题: 如何在一个队列中记录当前队列的最大值,这个跟那个栈的最小值有点相识,不过这个难一些,我用那个栈的思想说下我的解决思路,然后面试说你确定嚒?我说我看下,然后自己发现了问题,就把自己发现的问题跟面试官讲了下,然后讲了我那个解决方法的思想就是那个栈的最小值演变而来的;之后面试官提示我pop、push、getmax这三个方法都是O(n*lg(n))的时间复杂度,我说用堆嚒?他说堆插入的时间复杂度比较长,我思考了下说做不出来。
- 最后问了那个逆序对个数的时间复杂度,让我手推公式,我也没推出来,然后面试官在我面前手推了一把,然后就结束了。。。。。。。
二面面完后出去跟小米hr姐姐说我挂了,然后hr姐姐说我过了,呀呀,说了谢谢就去按电梯下去了,按电梯的时候接到网易互娱的通知说过了, 当时就蹦起来了。下了楼之后一看时间已经是晚上8:30了,辛苦了这么久终于有点小成果了。
- 腾讯 9.24
现场一面:挂了 - 自我介绍,然后面试官说来个自我介绍,说他就问点基础!!!
- 写个二分查找--这个倒是很基础
- 现在多个活动,有多个开始和结束时间,计算出其中某个时间有最多活动的个数, 当时脑袋发热,这个没想出来,我记得是做过的。
- 知道一致性hash嚒? 设计一个一致性hash。 我讲了点概念,说要用到虚拟节点,这样可以负载均衡(自己给自己挖坑)
- 讲下负载均衡吧----懵了,讲了同学的cdn当时的负载均衡项目,有点懵逼。
- 讲下epoll的内核实现吧----红黑树、就绪队列
- 讲下linux的内存管理吧。 我:有点忘了,不太清楚您是要问哪方面,是虚拟地址空间还是进程调度方面的,能提示下嚒? 面试官:不行。 我:一丢丢就行了。 面试官:我们换个问题吧。
- 讲讲数据引擎吧, 我:有inodb,还有一个另一个忘了叫啥了,inodb是用的B+树做索引,另一个好像用的B-树(这里记错了,也是用的B+树做索引), (我心里想,你问我B+树、B-树吧的区别吧,以及为什么要用B+树之类的,然而并没有问)
- 面试时间差不多,你有什么要问的, 我问了问常问的问题(心里:怎么不问B+、B-树的区别)。
晚上回来一查妥妥挂了,好气哦,说好的问基础,C++基础知识一个没有,感觉应该那个活动的编程题做出来了会好很多,当时脑细胞转不动,实在想不出来,还是自己掌握的不行,继续前进。
腾讯挂了之后,我就结束秋招了。 还在路上的小伙伴们加油,机会总是给有准备的人的,如果机会还没到你,要么就是真正的机会还留在后面,要么就是你还没准备好!
总结
-
***也是学渣,成绩排名靠后,基础不牢靠,都是靠这几个月狂补知识点积累的,之前面的招银科技、WPS、CVTE问的问题都不难,但都还是挂了,都是因为基础不行,补补就好了。
-
对于面试:当你面了5次以上的面试之后就会发现,其实问来问去就那么几个问题,所以把常问的问题搞懂搞深,尤其是要搞深,要是你也回答的比较常见的回答,那公司为什么要你而不要别人? 所以对于某个问题一定需搞的深,比如问select 与 epoll的区别,别人回答文件描述符限制,需要不需要轮询这些大家都能记住的答案,那公司怎么决定就要你呢?其实就是比别人深那么一点,查查资料看看epoll的内核具体如何实现的、ET、LT模式具体实现的区别,这就是公司要你的原因!
-
对于知识点:这里推荐一篇学院大佬的文章,估计很多小伙伴都看过:https://www.nowcoder.com/discuss/29890 ,这里基本囊括大部分常问的知识点了,不过没有C++的,下面是C++中常问的知识点:
C++基础知识点:
- 面向对象的特性;
- 多态: 重载、虚函数, override、overload;
- 继承中的private、public; class 与 struct的区别;
- 内联函数与虚函数;
- 指针和引用;
- static 和 const;
- 智能指针;
- 宏和const 、 inline;
- 构造函数、析构函数、虚函数、拷贝构造、赋值操作符;
- new与malloc;
- 进程地址空间内存分配;
- strcopy、memcpy、memmove;
- 内存对齐;
- 类型转换;
- 单例模式:
- sizeof 与 strlen的区别;
- 深拷贝、浅拷贝;
- 静态链接、动态链接的区别;
C++ 进阶知识点
- STL 空间配置,具体实现过程,如果内存自由链表中没有空间会怎么处理,如果内存池中没有空间会怎么处理,如果heap中没有空间会怎么处理,为什么自由链表中的倍数是8byte,而不是其他。
- vector 的实现,如何实现不发生拷贝到新空间就只在当前空间扩容(new operator、operator new、placement new),vector的内存时如何分配的(空间配置器)
- set、map的底层实现,红黑树的概念,红黑树的插入(删除太复杂了,能把插入搞清楚就可以了,很少问到这一层次了)
最后的最后,祝小伙伴们都拿到满意的offer!