发一波C++面经攒人品,希望8月能收获offer
写在前面:秋招提前批开始已经有一段时间了,从7月末开始投递简历,目前也面试了一些公司,在提前批的末尾发一波面经攒攒人品,也希望在8月结束之前,收获一份心仪的offer。
首先声明我投递都是C++研发相关的岗位(客户端/后台),所以面经也基本上都是C++相关的。
阿里云一面:
1.static关键字的作用
2.函数指针
3.引用和指针
4.new和malloc的区别
5.堆和栈的区别
6.栈溢出
7.二叉平衡树和红黑数
8.哈希表解决冲突的方法
9.进程和线程的区别
10.为什么切换进程的代价比切换线程大
11.TCP和UDP的区别
12.TCP如何保证可靠性
13.TIME_WAIT状态
14.介绍一下项目
15.举几个例子说明你喜欢专研技术
16.了解其他语言吗
2.函数指针
3.引用和指针
4.new和malloc的区别
5.堆和栈的区别
6.栈溢出
7.二叉平衡树和红黑数
8.哈希表解决冲突的方法
9.进程和线程的区别
10.为什么切换进程的代价比切换线程大
11.TCP和UDP的区别
12.TCP如何保证可靠性
13.TIME_WAIT状态
14.介绍一下项目
15.举几个例子说明你喜欢专研技术
16.了解其他语言吗
阿里云一面总的来说问的还都是比较基础的知识点,所以比较顺利地进入了二面。
阿里云二面:
1.项目
2.有没有数据库分表、索引等经验
3.怎么确定查询有没有落实到索引上呢
4.看你熟悉redis,是在项目中有实际用到吗
5.讲讲redis中的sds、跳跃表是怎么实现的,redis中还有哈希表,那他为什么不用hash表而要实现一个跳跃表呢
6.redis怎么做范围查询
7.sizeof是实现原理,是需要函数支持呢,还是操作系统支持
7.sizeof的结果是在哪个阶段确定的
8.让你实现sizeof的话怎么实现呢
9.对象的首地址好确定,怎么确定一个对象的尾地址呢
10.项目中怎么处理高并发的问题呢
11.随着访问量的提高,你觉得项目中最可能那一块会出问题?
12.用过git吗,git和svn相比有什么优点吗
13.有多线程编程经验吗?如果多线程中要对一个变量进行修改,要怎么做呢
14.互斥锁的实现原理
15.操作系统是怎么实现信号量的
16.多进程通信有哪些方式
17.实际中有用到过这些通信方式吗
18.有没有抓过包
19.你说的主要是http抓包的,有Tcp的吗
20.你觉得你有什么擅长的,我这边还没有问到的
21.讲一下平衡二叉树
22.二叉树的几种遍历方式中,知道哪种或哪几种遍历顺序确定可以唯一确定二叉树
23.除了堆啊栈啊,平时项目中会用到哪些数据结构
24.vector有大小限制吗
25.从浏览器中输入一个网址,需要经过哪些步骤
26.假如全国的人在同一时刻访问一个网站,怎么顶住这个压力?
1.项目
2.有没有数据库分表、索引等经验
3.怎么确定查询有没有落实到索引上呢
4.看你熟悉redis,是在项目中有实际用到吗
5.讲讲redis中的sds、跳跃表是怎么实现的,redis中还有哈希表,那他为什么不用hash表而要实现一个跳跃表呢
6.redis怎么做范围查询
7.sizeof是实现原理,是需要函数支持呢,还是操作系统支持
7.sizeof的结果是在哪个阶段确定的
8.让你实现sizeof的话怎么实现呢
9.对象的首地址好确定,怎么确定一个对象的尾地址呢
10.项目中怎么处理高并发的问题呢
11.随着访问量的提高,你觉得项目中最可能那一块会出问题?
12.用过git吗,git和svn相比有什么优点吗
13.有多线程编程经验吗?如果多线程中要对一个变量进行修改,要怎么做呢
14.互斥锁的实现原理
15.操作系统是怎么实现信号量的
16.多进程通信有哪些方式
17.实际中有用到过这些通信方式吗
18.有没有抓过包
19.你说的主要是http抓包的,有Tcp的吗
20.你觉得你有什么擅长的,我这边还没有问到的
21.讲一下平衡二叉树
22.二叉树的几种遍历方式中,知道哪种或哪几种遍历顺序确定可以唯一确定二叉树
23.除了堆啊栈啊,平时项目中会用到哪些数据结构
24.vector有大小限制吗
25.从浏览器中输入一个网址,需要经过哪些步骤
26.假如全国的人在同一时刻访问一个网站,怎么顶住这个压力?
二面完了之后就等通知了,挂电话前面试官说,如果后面还有面试的话,至少还会有两轮,所以还是要好好准备。
今天看官网状态还没有被回绝,所以应该还是有希望。总体来说,感觉阿里的面试周期还是比较长的。
美团后台开发一面:
1.介绍项目
2.引用和指针的区别
3.什么时候用引用,什么时候用指针
4.C++11里面构造函数有几种
5.析构函数需要注意什么
6.析构函数能不能调用虚函数
7.内存泄漏和内存溢出的区别,有什么联系
内存泄漏最终会导致内存溢出)
8.什么情况下CPU会达到100%
9.介绍一下项目中工具集的实现
2.引用和指针的区别
3.什么时候用引用,什么时候用指针
4.C++11里面构造函数有几种
5.析构函数需要注意什么
6.析构函数能不能调用虚函数
7.内存泄漏和内存溢出的区别,有什么联系
内存泄漏最终会导致内存溢出)
8.什么情况下CPU会达到100%
9.介绍一下项目中工具集的实现
面试完了之后,面试官问我现在有没有时间二面,他去联系一下二面面试官,我说有,然后挂了电话等了一会,面试官又说跟HR联系了,二面必须要现场,我一想反正周末要去滴滴现场面,
就和面试官约了下周一现场面试,收到了面试通知之后,我就去坐火车了,谁知道火车上面试官突然联系我说他们组需求变了,不招应届生了,然后面试取消了,挺尴尬的,也只能作罢。
滴滴一面:
问项目
vector list set的区别
多态原理
深浅拷贝
静态多态和动态多态
构造和析构需要注意什么
C++内存管理
代码管理工具
Redis恢复数据方式
TCP连接和断开步骤
服务器如果有大量的半连接状态的客户端连接,如何处理
手写冒泡
手写字符串拷贝
vector list set的区别
多态原理
深浅拷贝
静态多态和动态多态
构造和析构需要注意什么
C++内存管理
代码管理工具
Redis恢复数据方式
TCP连接和断开步骤
服务器如果有大量的半连接状态的客户端连接,如何处理
手写冒泡
手写字符串拷贝
如果要考虑内存重叠呢?
总的来说,一面还是比较基础的,比较顺利进入二面
二面:
项目
熟悉的排序算法
画图并解释快速排序流程和堆排序流程
手写算法题:第一天发1块钱,二三天发2块钱,四五六天发3块钱,那么求第n天时总共发了多少钱
熟悉的排序算法
画图并解释快速排序流程和堆排序流程
手写算法题:第一天发1块钱,二三天发2块钱,四五六天发3块钱,那么求第n天时总共发了多少钱
二面大部分时间都在问项目相关的问题,我这边就不展开了,算法题面试官要求O(1)的空间复杂度。
三面:
项目,问得很详细,喜欢追着一个点展开问
觉得最难的是哪个点
提到了设计模式,看我有Qt的项目,问我Qt的信号槽是用什么设计模式实现的,或者让你来实现,会怎么做
MySQL两种引擎的区别,为什么MyISAM查询比较快
redis集群,有四台机器,假如其中一台断电了,redis是怎么做的,如果是你会怎么做
数据库读写分离怎么做到数据一致性
觉得前面两面有什么答的不好的,或者答的好的,我这一面呢
觉得最难的是哪个点
提到了设计模式,看我有Qt的项目,问我Qt的信号槽是用什么设计模式实现的,或者让你来实现,会怎么做
MySQL两种引擎的区别,为什么MyISAM查询比较快
redis集群,有四台机器,假如其中一台断电了,redis是怎么做的,如果是你会怎么做
数据库读写分离怎么做到数据一致性
觉得前面两面有什么答的不好的,或者答的好的,我这一面呢
三面明显就问的比较深,面试官喜欢揪着他感兴趣的某个点问,总体来说还是有难度的。另外如果你对你自己做的项目的某一个细节不清楚或者忘了,那么就GG了
个人感觉三面面得不是很好,求个offer吧!
腾讯一面:
当时投递的是C++客户端开发岗位,但意向工作地点选的是北京。过了两天Hr给我打电话问愿不愿意试试测试开发岗,我心想反正现在也没有面试,就试试吧。
主要问一些项目的问题,感觉测开面试官关注的点不是说你这个项目做得有多牛逼,而是你了不了解为什么要做这么个东西,它的意义在什么地方。
所以问完一个项目之后面试官就会问为什么客户需要做这么个东西,有一些点我也确实是不知道客户是怎么想的,所以答得没有让她满意
项目问完了就说写个简单的算法题吧,我说好
给你一个字符串,求字符串的最长重复子串。
感觉这个题并不简单啊,想了几分钟迟迟没有下手,面试官就说你先写个最笨的方法吧,然后我就用暴力方法写了一个。
解释了一下思路,面试官看了一下,就说时间关系匆匆下线了
第二天看官网状态,已经变灰了。
网易雷火:
雷火的不多说了,感觉如果你以前没有做过游戏的话,还是慎投吧,即使他们说对这方面没有要求。
虽然雷火是报销现场面试的差旅费的,但是感觉还是白白浪费了时间啊,笔试4个小时,面试一上午,火车来回10个小时,有这时间,真不如刷刷题,好好准备其他岗位的面试。
记得当时面试的时候,面试官跟我说的第一句话就是
看你这边之前没有做过游戏开发啊,为什么投游戏,我就知道已经凉了一半了
第二句话是
没有关系,我们游戏开发和计算机图形学是比较重要的,之前有接触过吗?好,我知道我已经凉了,后面也就走走流程了。
贝壳:
一面:
手写快排,问了一下复杂度计算,最差时间复杂度等
两种方式判断字符串是否对称
C++四种转换
C++内存区域
new和malloc
二叉树几种遍历方式,你是怎么来理解前/中/后序的
还有没有其他的遍历方式
数据库事务特点
数据库隔离级别
MySQL引擎
有没有分表/分区的经验
假如查询的字段不是你分区的字段,如何提高效率
怎么查找一条执行很慢的sql慢的原因
http过程
linux熟悉吗,平时用linux都做什么事情
二面:
会不会自己去学习一些新的技术。
是通过什么途径去学习的
哪个点印象比较深刻
讲一下redis中的跳跃表
跳跃表有什么优势
跳跃表有什么设计比较巧妙的点
对于上层使用redis的用户来说有什么好处
redis和关系型数据库比有什么特点
数据放在内存中的数据库有什么隐患
redis中是怎么避免突然断电等数据丢失的问题的
为什么要自学redis,而不是其他的数据库
有25匹马,设计一种方案,使比较次数最少,找出跑的最快的两匹马,如果找三匹呢
有什么想问我的,二面的面试官还是很nice的,我感觉二面大部分时间不是他在问我问题,而是在解答我的问题。
手写快排,问了一下复杂度计算,最差时间复杂度等
两种方式判断字符串是否对称
C++四种转换
C++内存区域
new和malloc
二叉树几种遍历方式,你是怎么来理解前/中/后序的
还有没有其他的遍历方式
数据库事务特点
数据库隔离级别
MySQL引擎
有没有分表/分区的经验
假如查询的字段不是你分区的字段,如何提高效率
怎么查找一条执行很慢的sql慢的原因
http过程
linux熟悉吗,平时用linux都做什么事情
二面:
会不会自己去学习一些新的技术。
是通过什么途径去学习的
哪个点印象比较深刻
讲一下redis中的跳跃表
跳跃表有什么优势
跳跃表有什么设计比较巧妙的点
对于上层使用redis的用户来说有什么好处
redis和关系型数据库比有什么特点
数据放在内存中的数据库有什么隐患
redis中是怎么避免突然断电等数据丢失的问题的
为什么要自学redis,而不是其他的数据库
有25匹马,设计一种方案,使比较次数最少,找出跑的最快的两匹马,如果找三匹呢
有什么想问我的,二面的面试官还是很nice的,我感觉二面大部分时间不是他在问我问题,而是在解答我的问题。
hr面:
问了某个项目具体是做出来什么样一个东西
了解贝壳吗,简单讲讲
现在有收到offer吗,或者有在流程中的公司吗
做个题,两个玻璃球,从某一层开始丢下玻璃球会碎,求出这一层,设计一种方案最优方案
能不能实习
对转语言有没有什么看法
贝壳面完之后就可以走了,两个礼拜内通知结果,希望能给个offer吧!
字节跳动
后端一面:
编码能力得到了比较大的提升,如何体现
设计能力呢
讲一下最近在学的新技术
讲一下redis有哪些数据结构
讲一下sds和跳跃表
跳跃表查询复杂度为什么是logN
RDB持久化和AOF持久化,为什么要两种持久化方式
知道有哪些索引类型吗
联合索引知道吗,有什么特点
输入网址的过程
dns是什么,过程
http建立什么连接,建立连接的过程
tcp握手为什么是3次而不是两次或四次
编码能力得到了比较大的提升,如何体现
设计能力呢
讲一下最近在学的新技术
讲一下redis有哪些数据结构
讲一下sds和跳跃表
跳跃表查询复杂度为什么是logN
RDB持久化和AOF持久化,为什么要两种持久化方式
知道有哪些索引类型吗
联合索引知道吗,有什么特点
输入网址的过程
dns是什么,过程
http建立什么连接,建立连接的过程
tcp握手为什么是3次而不是两次或四次
手写算法题:
二叉树从右边看能看到的节点列表(后面的节点会被前面的节点挡住)
二叉树从右边看能看到的节点列表(后面的节点会被前面的节点挡住)
一面其实有些个点答得不好,面试官说你确定是这样吗,然后我就没底了,但面试官还是让我过了。
收到过了的短信时已经快12点了,我看他们12-13.00是中午休息时间,我就打算去吃饭了,没想到接到二面面试官的电话,
说看我没在线,问我现在有没有时间,赶紧上线。
二面:
大数相加,问了怎么优化的问题
64匹马8跑道问题
二面面试官还是很不错的,就问了两个问题就让我先去吃饭了,并且让我过了。
三面:
怼项目,不得不说三面的大佬还是牛逼啊,一针见血,根据我的问题,提出了一个疑问点问我是怎么做的,尴尬的是,恰好那个点,我当时怎么都想不起来了,血崩。。
操作系统熟悉吗,线程和进程
为什么线程切换代价比进程小
进程间通信的几种方式
有没有多线程开发相关的经验,简单说说
线程池是怎么实现的,有什么好处
LRU知道吗
觉得可以用什么数据结构来实现
三面:
怼项目,不得不说三面的大佬还是牛逼啊,一针见血,根据我的问题,提出了一个疑问点问我是怎么做的,尴尬的是,恰好那个点,我当时怎么都想不起来了,血崩。。
操作系统熟悉吗,线程和进程
为什么线程切换代价比进程小
进程间通信的几种方式
有没有多线程开发相关的经验,简单说说
线程池是怎么实现的,有什么好处
LRU知道吗
觉得可以用什么数据结构来实现
我说可以用链表,他说链表怎么保证效率呢,我想了一下说用stl里面的deque和哈希表吧
他就让我手写
他就让我手写
最后写完了发现,还是O(N)的时间复杂度,因为我在哈希表里面存了元素的下标,所以某个元素删除或移动的时候,还需要维护哈希表。。
面试官让我想想怎么做到O(1)的时间复杂度,想了两分钟没有想出来,面试官就说因为时间原因,让我等会再想想。
挂了视频之后,就想到了,我为什么不存迭代器呢,为什么不存迭代器呢,为什么不存迭代器呢?
过了十分钟就收到了感谢信,哎,挺难过的,两个比较重要的点没有答好,就失去了进入字节的机会。
网易互联网:
一面:
1.C++中static的作用
2.C++内存存储区,static变量在哪个区域,生命周期
3.C++代码到可执行程序的过程,static变量内存分配在哪个阶段确定 编译时分配内存
4.内存对齐的原因
5.内存对齐的原则,struct{char a;char b;int c};sizeof结果
6.const char* p和char* const p的区别
7.类默认函数有哪些
8.如何避免隐式转换?
9.写一个函数指针
10.写一个多线程安全的单例
11.socket通信过程,需要调用哪些函数?
12.四次挥手的过程
2.C++内存存储区,static变量在哪个区域,生命周期
3.C++代码到可执行程序的过程,static变量内存分配在哪个阶段确定 编译时分配内存
4.内存对齐的原因
5.内存对齐的原则,struct{char a;char b;int c};sizeof结果
6.const char* p和char* const p的区别
7.类默认函数有哪些
8.如何避免隐式转换?
9.写一个函数指针
10.写一个多线程安全的单例
11.socket通信过程,需要调用哪些函数?
12.四次挥手的过程
网易一面很顺利,面试官也比较满意,顺利进入下一轮
二面:
一上来Linux和网络编程那块熟悉吗?我一想完了,这两块确实是我最薄弱的两块,平时项目中没有用过,都是自己看书简单的学学。
IO多路复用
有一个10G内存的进程,fork之后
写时复制
C和C++的内存区域
内存泄漏平时用什么方法检测
CRT库是怎么知道有内存泄漏的,怎么定位到具体哪个文件哪一行代码
TCP连接和断开过程
TIME_WAIT
多线程编程,现在有多个线程,每个线程会用malloc申请一块内存,然后做一个计算md5的操作,发现cpu始终没有达到100,分析一下可能是什么原因
可能是malloc底层做了控制,不允许多个线程同时申请内存
怎么解决这个问题
解决方案:每个线程单独管理内存,内存池;使用其他的支持并发的malloc库
伪代码写消费者生产者模型
IO多路复用
有一个10G内存的进程,fork之后
写时复制
C和C++的内存区域
内存泄漏平时用什么方法检测
CRT库是怎么知道有内存泄漏的,怎么定位到具体哪个文件哪一行代码
TCP连接和断开过程
TIME_WAIT
多线程编程,现在有多个线程,每个线程会用malloc申请一块内存,然后做一个计算md5的操作,发现cpu始终没有达到100,分析一下可能是什么原因
可能是malloc底层做了控制,不允许多个线程同时申请内存
怎么解决这个问题
解决方案:每个线程单独管理内存,内存池;使用其他的支持并发的malloc库
伪代码写消费者生产者模型
最后我问面试官,他们那边是不是比较看重网络编程和Linux这块,他说是的。哎,又凉了一家心仪的公司。
说实话,网易这一轮面试,也是我提前发面经的主要原因,前面真的被问的心态崩了