【面试】腾讯 C++方向面经

第一篇
一面 2019/10/21 来自于比特论坛
1、讲解项目
2、内存申请除了 brk 还有什么
3、堆和栈的区别
4、多进程的地址空间是独立的,在操作系统里是怎么实现的
5、两个进程去访问同一个线性地址,可以吗
6、段错误,是怎么导致的
7、操作系统怎么进行进程的切换
8、Linux 下相关命令
9、信号机制是干什么的?信号是怎么处理的?信号处理是同步还是异步?kill 命令什么时
候返回?
10、tcp 和 udp 的区别?tcp 怎么做到有序?
11、了解 shell 和 Python 吗?
二面 2019/10/25 来自于比特论坛
1、自我介绍
2、strlen 的递归实现
3、int rand()1-6 等概率,用这个函数实现 int rand()1-10 等概率
4、101 个硬币,有一个是假的,有一个天平,称两次判断出这个假硬币轻还是重
5、程序运行中一直进入 if 语句,怎么让它进入 else 语句
6、两个单链表相交了,遍历一次找到相交结点
7、阻塞和非阻塞
8、socket 编程的相关接口
第二篇
一面 2019/10/9 来自于比特论坛
1、虚拟地址空间和物理内存
2、哈希冲突的解决方案
3、编译过程
二面 2019/10/9 来自于比特论坛

1、主要问项目,他选了我第一个项目,HTTP 文件共享服务器
2、输入域名后发生了什么? 3、多线程安全问题,线程池,锁
4、断点续传
5、这个项目在一台主机上跑是没有问题的,那如果是多台主机,就会有问题,怎么解决
6、然后简单讲了下用 epoll 提高效率,并没有深入了问
7、HTTP 协议
三面 2019/10/11 来自于比特论坛
1、主要是锁的问题
2、线程安全的问题
3、项目
4、100G 文件,多 ip 进行排序
5、问了能不能实习,学校的课程
6、HTTPS 的实现
第三篇
一面 2019/10/14 来自于比特论坛
1、自我介绍
2、你对虚函数是怎么理解的?
3、详细讲 static 关键字吧
4、引用和指针有什么区别?
5、new 和 malloc 有什么区别?
6、知道哪些 C++11 的新特性?讲一下,说一说右值引用的应用场景?
7、C++是怎么做动态内存管理的?
8、说一下 map 和 hashmap 的区别吧
9、讲一下堆和栈的区别吧
10、讲一下 time_wait 是发生在那一端?
11、如果很多连接都是处于 time_wait 状态,该怎么处理?
12、讲一下 select 和 epoll 的区别?
13、讲一下 LT 和 ET 有什么区别?
14、讲一下 get 和 post 的区别?
15、http2 和 http1 的区别?
16、http 和 https 的区别?https 的优缺点?
17、什么时候要使用多线程编程?
18、多线程编程里面,你怎么理解互斥锁和自旋锁? 19、用 mysql 吗?
20、你认为在搭建一个 web 服务的过程中,有哪些情况会影响到 web 服务的性能? 21、怎么提升服务器的并发性能? 22、刚提到线程池,被问线程池内部的线程一般是多少个? 23、倘若你用了线程池,但是高峰时期流量就是太高了,服务器承受不住,你该怎么办? 24、倘若就算这样还是不行,怎么办? 25、倘若你就只有一台服务器,没有更多的硬件资源了,怎么办? 26、倘若你的操作无法用原子性,一个线程不断的生产任务,放到队列中,另一个从队列
中拿取请求,如何做到无锁编程? 27、你平常有什么兴趣爱好吗? 28、最近有看什么技术书籍吗? 29,你写的两个项目,搜索引擎和在线画图板,是你的课程设计吗?
30、你的 httpserver 是怎么搭建的? 31、我这边基本问的差不多了,你有什么要问的吗?
二面 2019/10/14 来自于比特论坛
1、自我介绍
2、C 与 C++的区别
3、平常有 C 和 C++混合编程吗,如果在 C++当中要调用 C 的函数,要怎么做? 4、讲讲 extern 关键字,为什么要用?讲重载的原理和使用? 5、知道覆盖吧,讲讲实现和使用? 6、讲讲你知道的 C++11 新特性
7、我看你对 C++动态内存管理有一定了解,你来谈一下 C++的内存布局吧
8、一个未初始化的全局变量存在那个区?临时变量存在那个区? 9、new 出来的空间在哪个区、为什么已经有了 malloc 和 free,为什么还要用
new/delete?
10、谈一谈数据结构,挑一种你擅长的说一下
11、你这两个项目什么时候写的?你这个 http 服务器的功能是什么?socket 这部分 api
你是怎么用的?
12、有没有看过其他常用的 http 服务器?
13、有对你这个服务器进行测试过吗?怎么测试量级的
14、你说熟悉多路复用模型,有没有在项目中用到?
15、数据库会吗?
16、讲讲搜索引擎项目中的索引是怎么构建的?
17、那你按照这样来构建索引,我搜的关键字中倘若有很多无意义词(比如 is,a 等),怎
么设计能保证我们搜的结果能符合预期?
18、搜索引擎是否有测试过?
19、我看搜索引擎中大量使用了 vector,谈一下 vector 的好处?
20、怎么 vector 规避频繁扩容?
21、sort 的排序是什么排序?
22、讲一下 https 和 http 的区别
23、讲一下 http2、0 的改进点
24、搜索引擎如果要搞一个联想功能,你觉得该怎么实现?
25、问问题吧
第四篇
一面 2019/10/22 来自于比特论坛
1、自我介绍
2、谈谈我对服务器的理解
3、对 reactor 与 proactor 理解
4、讲讲项目中服务器构架
5、对同步异步的理解
6、对 stl 的理解,stl 内存分配的理解,为什么要有空间配置器?
7、stl 与面向对象有什么联系?
8、面向对象有什么优点?为什么要有面向对象?
9、进程地址空间分布?为什么要有?如何管理?系统调用?
10、数据库索引结构?为什么要用 B+树?
11、你有什么问题问我?
12、谈谈对数据安全的理解?加密?MD5?
二面 2019/10/22 来自于比特论坛
1、堆和栈空间
2、netstat 和 ps 两个命令
3、进程和线程
4、父进程创建了两个进程,其中一个子进程除 0 错误,另外两个进程的情况? 5、上题进程换成线程

6、线程栈空间给了一个超过栈内存的变量,会发生什么? 7、进程间通信
8、进程和线程的优劣,进程和线程一般开辟几个? 9、http 协议,报头,状态
10、服务端客户端模型和浏览器服务端模型做对比,分析其优劣,安全性
11、tcp 和 udp 的对比
12、发送报文的具体函数调用?
13、主要就这些方面,考察底层原理,有的题需要说出自己的看法
第五篇
一面 2019/10/16 来自于比特论坛
1、什么是三次挥手?为什么要三次挥手?为什么不是两次和四次?
2、什么是四次握手?为什么要四次握手?有没有抓包抓过四次握手?讲了一下什么情况
有三次握手?
3、双方发送 SYN,为什么要发送 SYN? 4、四次挥手里 FIN_WAIT2 状态一直持续怎么办?
5、问了项目
6、从项目扯到了 epoll,讲了一下 epoll 和 select 的区别,讲了一下水平触发和边缘触发
7、然后讲了一下 strcpy 怎么实现的,然后 strcpy 内部有没有动态内存管理
8、知不知道双向链表,快速阐述一下双向链表怎么实现的
9、再讲一下项目,问到那个线程创建进程,对 fork 的优化,有没有优化
10、都接触过哪些开源库
11、平时碰到问题是怎么解决的?
二面 2019/10/16 来自于比特论坛
1、讲项目,怼着项目一直问。你为什么知道你的服务器性能瓶颈在哪里? 2、cpu 给进程分配哪些资源? 3、桶查找
4、怎么确定你的哈希表大小? 5、字符串哈希算法
6、文件写到磁盘的流程
7、内存页大小?磁盘块大小? 8、职业规划
9、创建一个线程占用的内存是多少?
10、一个系统中能创建多少进程?
11、一个进程可以创建多少个线程?
第六篇
一面 2019/10/14 来自于比特论坛
1、自我介绍
2、看你简历上有写智能指针,你能给我简单描述一下吗?
3、C 文件的编译过程?
4、链接有哪些链接方式?
5、指针数组、数组指针的 sizeof 求值分别是什么?
6、你对模板有了解吗? 7、你了解运行时多态的实现过程吗?
8、你了解 STL 吗?map 的底层实现?map 中查找一个元素的时间复杂度?hash 冲突的
解决方法?
9、排序算法
10、core 文件的调试方式?gdb 的使用方法你了解过哪些?要是你的代码 core 掉,你一
般会怎样调试?
11、多进程间通信的方式?你认为哪一种的效率最高?
12、那多线程间通信有哪些方法?线程安全问题如何解决?如果想让数据属于线程私有应
该怎样实现?有了解过 tls 的底层实现吗?
13、TCP/UDP 可以进行广播吗?UDP 可靠吗?MTU/MSS 的大小?
14、unique_lock 和 lock_groud 的区别?我看到你的项目中有个 bug?我看到你的项目
中用的 send 和 recv,怎样设置为非阻塞?非阻塞如果没有数据可读返回值是什么?
15、三次握手和四次挥手?
16、有没有了解过 malloc 的底层?
17、查看服务器连接的工具?你有抓过数据包吗?
18、你有了解过开源的东西吗?你有了解过协程吗?分布式?阿帕奇?
19、算法题:K 行,每一行有无穷多的数,每一行都是由大到小排列,从这 K 行中找前 N
个最大的数
20、你要问的问题
二面 2019/9/2 来自于比特论坛
1、自我介绍
2、主要聊项目
3、算法题:在无数个无序数中找到中位数
4、你问的问题
三面 2019/9/5 来自于比特论坛
1、问了学校相关专业课
2、算法题:一个文件中有 100 亿个 int 数据,用最短时间找到最大的 1000 个 3、进程和线程的区别
4、线程池的实现方法?有什么好处?
5、vector 和 list 的区别,push_back 如何实现?vector 的扩容方式?为什么扩容有这样
差异?
6、vector、list、map、set 有什么区别?分别的使用场景?
7、Linux 下进程间通信方式?管道、共享内存什么场景下会用?两个进程不在同一个机器
如何通信?
8、有用过 socket 吗?UDP 不可靠为啥还要存在?
9、微信聊天用的是 UDP 还是 TCP?
10、Linux 下查看网络端口?
11、Linux 下查看负载情况?
12、临时变量 int arr[]可以达到的最大大小
13、一个进程最大能占用多大的内存空间?
14、你考虑读研究生吗?你家是哪里的?
第七篇
一面 2019/9/12 来自于比特论坛
1、虚拟地址空间和物理内存
2、哈希冲突的解决方案(开散列,闭散列,多阶哈希),一致性哈希
3、编译过程
二面 2019/9/17 来自于比特论坛
1、主要问项目,他选了我第一个项目,HTTP 文件共享服务器
2、输入域名后发生了什么?
3、多线程安全问题,线程池,锁
4、断点续传
5、这个项目在一台主机上跑是没有问题的,那如果是多台主机,就会有问题,怎么解决
6、然后简单讲了下用 epoll 提高效率
7、HTTP 协议
第八篇
一面 2019/9/17 来自于比特论坛
1、说一下 HTTP 服务器
2、你写的是什么样的服务器呢,是单进程多线程还是多进程还是线程池,讲解一下
3、线程池如何实现的?
4、那所有线程之间有什么是共享的吗?
5、线程之间同步和互斥问题
6、你在写这个服务器的时候遇到过什么问题吗?怎样处理的?
7、高并发的情况怎样处理呢?
8、select 和 eopll? 9、说一下搜索引擎项目
10、你的索引如何构建的
11、你的正排索引和倒排索引都是在堆上建立的,进程退出就没有了,那有什么办法保存
下来吗?
12、说一下共享内存
13、搜索引擎项目用到的服务器是自己写的还是其他的什么
14、看过什么书?给你推荐一本书《Unix 环境高级编程》
15、玩过什么游戏,喜欢玩游戏吗?
二面 2019/9/24 来自于比特论坛
1、我们是做游戏开发的,之前有做过关于游戏这方面的项目吗?
2、那你说一下你的服务器
3、你这个是用了 cgi,那你是怎么实现的?
4、如果我不用 fork 加 exec 那怎样去实现
5、你玩过王者荣耀吧,我在手机上按下一个技能会怎么样?
6、既然你说到了 udp,那你说,服务器是会把你按下的这个技能,所返回的 udp 这样的
数据怎样处理,在客户端上
7、技能释放之后,会在你的客户端上显示出来,也会在其他玩家那里显示,我服务器要
怎样缓存?
8、你说的是有局部缓存还有一些全局的缓存,那么它们分别都是怎样处理的呢?
9、你玩过 mmo 的游戏吗?
10、那你知道,假如说我现在有很多个人大约是几千人几万人在一起玩,我的服务器会怎
样处理?
11、你说的这种,并不是我的意思,假如说,现在有一张地图,我有几万人同时连接进
来,那你说我的服务器或者客户端怎样处理?
12、那我再问你,假如我现在所有的人都聚集到了一起,在一个主城里,那此时我又改怎
样处理?
13、那我再问你一些编程中的知识吧
14、析构函数什么时候要用 virtual
15、Dynamic_cast 用过吗
16、那我问你一个很深入的问题,怎样实现一个 dynamic_cast,你就只说是指针的情况
吧,答不出来也没关系
17、我看你学过很多数据结构,那你知道 map 和 unordered_map 吗?
18、红黑树和哈希说一下
19、红黑树和哈希他们增删查改的时间复杂度
20、假如说,我现在有很多数据,是只读的,我要把他们存起来,那你有没有什么办法可
以改进一下这个 map 和 unordered_map,效率更高一点
21、Perfect hashing
22、那再比如说,我现在有很多只读的字符串,再让你改进一下你有办法吗
23、你听说过 tire 吗
第九篇
一面 2019/10/8 来自于比特论坛
1、纯虚函数是什么
2、多态是什么
3、new 和 malloc 区别
4、static 的理解
5、指针和引用的区别
6、左值引用和右值引用
7、hashmap 和 map 的区别
8、list 和 vector 的区别
9、三次握手和为什么是三次
10、HTTP2 和 1 的区别
11、服务端和客户端的 socket 流程
12、TCP 滑动窗口
13、自旋锁和互斥锁,分别应用于什么场景
14、线程数量有什么讲究
二面 2019/10/15 来自于比特论坛
1、HTTPS 和 HTTP 的区别
2、设计一个带论文查重的方式
3、设计一个类似 QQ 同步助手的云同步通讯录
4、设计一个数据库存储视频
5、设计 QQ 后面通讯的逻辑
6、设计一个 vector
第十篇
一面 2019/6/5 来自于比特论坛
1、什么是三次挥手?为什么要三次挥手?为什么不是两次和四次?
2、什么是四次握手?为什么要四次握手?有没有抓包抓过四次握手?讲了一下什么情况
有三次握手?
3、双方发送 SYN,为什么要发送 SYN? 4、四次挥手里 FIN_WAIT2 状态一直持续怎么办?
5、问了项目
6、从项目扯到了 epoll,讲了一下 epoll 和 select 的区别,讲了一下水平触发和边缘触发
7、然后讲了一下 strcpy 怎么实现的,然后 strcpy 内部有没有动态内存管理
8、知不知道双向链表,快速阐述一下双向链表怎么实现的
9、再讲一下项目,问到那个线程创建进程,对 fork 的优化,有没有优化
10、都接触过哪些开源库
11、平时碰到问题是怎么解决的?
二面 2019/6/11 来自于比特论坛
1、讲项目,怼着项目一直问。你为什么知道你的服务器性能瓶颈在哪里? 2、cpu 给进程分配哪些资源? 3、桶查找
4、怎么确定你的哈希表大小? 5、字符串哈希算法
6、文件写到磁盘的流程
7、内存页大小?磁盘块大小? 8、职业规划
9、创建一个线程占用的内存是多少?
10、一个系统中能创建多少进程?
11、一个进程可以创建多少个线程?

求职必备刷题官网:https://github.com/bennyrhys/interview
【更多互联网公司笔试面试真题请关注“让我遇见相似的灵魂”公众号】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章