今年春招已经快要结束了,已经找到实习的同学可以准备暑期实习入职了。而没办法去实习的同学也不用担心,现在可以开始准备秋招的面试,争取在暑期提前批早日上岸,然后就可以好好享受在学校的最后一年。为了方便大家早日找到面试状态,这回特地将我之前面试的一些面经贡献出来给大家学习。我在去年的秋招过程中,主要面试的岗位都是以C++语言为主,包括后台、客户端和游戏开发等。

字节跳动-抖音 客户端开发

一面8.30 16:00 电话面:

  1. HTTP和HTTPS
  2. HTTPS加密过程
  3. 非对称加密和对称加密算法
  4. 代理模式
  5. 设计模式,观察者模式
  6. 线程和进程
  7. TCP和UDP
  8. 口述二叉树前序遍历、二分查找

二面9.6 15:00 视频面:

  1. 线程和进程
  2. epoll
  3. 僵尸进程、孤儿进程
  4. 操作系统复制粘贴如何实现
  5. 虚拟内存和物理内存
  6. C++基础,忘了
  7. 页面置换算法
  8. 进程调度算法
  9. (手撕算法)手写LRU、计算化学分子式每个元素的个数,如HMg2(H2O(P2S3))3NH3,每个元素以大写字母开头

三面9.6 视频面

  1. 接二面C++基础开放题

  2. (手撕算法)写一个链表操作,奇数位递增,偶数为递减,重新排序为递增

四面9.9 19:30 视频面

  1. 1-n,缺失了一个数,找到这个数(答:相加再减);

  2. 假设内存不够,相加溢出,怎么办(答:bitmap映射判断)

  3. bitmap也存不下内存(答:分段判断)还是存不下怎么办

  4. malloc底层实现

  5. (手撕代码)链表每隔k个反转

五面9.10 11:00 HR面

  1. 常规问题
  2. 字节范儿

虎牙 c++开发工程师

一面 8.21 19:30 电话面:

  1. new和malloc的区别
  2. delete的几种方式
  3. c++具有哪些特点和性质,和c有什么区别
  4. 面向对象的三个特点,简单总结
  5. 子类和父类在构造和析构的时候有什么特点吗,顺序
  6. 纯虚函数和虚函数的区别
  7. 引用的作用
  8. 常引用
  9. 结构体和联合体
  10. 对联合不同成员赋值,其它的值会改变吗
  11. 重载和重写c++是类型安全的吗
  12. 内存方式有几种及特点
  13. const和define的区别,哪种更好
  14. 指针和数组的区别
  15. 基类的析构函数,不是虚函数会造成什么问题全
  16. 局变量和局部变量的区别,操作系统和编译器是怎么知道的
  17. 标准模板库,哪些数据结构
  18. 什么时候用vector和list,实现的方案
  19. vector扩容怎么实现
  20. window客户端开发,界面的消息机制,有用过SDK实现过界面
  21. qt信号槽的机制
  22. window内核对象
  23. 进程间的通信
  24. 透明窗口,不规则窗口的实现
  25. 网络编程,udp和tcp有什么区别
  26. udp的限制,udp是有序还是无序的呢

商汤 智慧医疗-C++开发

一面9.13 17:00 现场面

  1. 讲项目
  2. 线程池怎么实现的
  3. 调度器、工作线程和请求队列都会干什么,状态发生什么改变
  4. 多态的多种实现方式
  5. 虚函数实现
  6. malloc的底层实现
  7. 几大内存空间,各放什么数据
  8. 手写快排

AiBee C++开发工程师

一面:

  1. 项目相关

  2. 给了一颗多叉树,实现层序遍历以及元素赋值操作

  3. 路径规划算法

二面:

  1. 项目相关,扣细节

  2. C++多态

  3. 常量指针、指针常量

  4. volatile作用,寄存器

  5. 手写代码,是否为一个栈的出栈队列

三面HR:

  1. 常规问题

  2. 作为项目负责人要注意到什么

四面技术:

1. string类的拷贝构造函数
2. 什么情况下会使用拷贝构造函数
3. 虚拟内存和物理内存
4. 项目

贝壳找房 后台开发

一面 9.12 现场面:

  1. 介绍项目

  2. epoll,select,poll

  3. 数据库 b+树

  4. 链表和数组

  5. 排序算法

  6. 手撕代码:复杂链表的复制

二面 9.12 现场面:

  1. linux系统了解吗

  2. 查看系统负载情况查看端口号,端口号被占用怎么办

  3. 让你设计一个学生选课,查成绩的系统,要怎么设计

  4. 上述系统的数据库建表设计,索引

  5. sql查询语句,选出物理课成绩最高的学生姓名

三面 9.12 HR面

360 服务器开发

一面9.10 17:00:

  1. C++基础、C基础,扣得很细,通过给出的一些程序,判断什么错误

  2. 线程和进程

  3. 内存模型

  4. 手敲代码斐波那契数列、数字反转

二面:

  1. 实现 void* memmove(void* dst, const void* src, size_t n)
  2. N个数重复3次,一个数重复一次,请找到这个数; 3N+1, int32_t, vector
  3. 实现一下string类,包括构造函数,拷贝构造函数,析构函数,运算符重载等。

阿里云智能 C++开发

一、项目

  1. 选择一个项目介绍一下

  2. 客户端是否是一对一传输数据

  3. 缓存队列是否一个还是多个

  4. 为什么选择UDP作为网络协议

  5. UDP无法保证顺序,如何解决这个问题

  6. UDP丢包的情况怎么保证

二、C++基础问题

1. 结构体和类的区别

2. 指针和引用的区别,sizeof的大小

3. 拷贝构造和移动构造

4. 什么情况下必须使用拷贝构造函数

5.  智能指针的情况

6.   内存堆栈对比,分配效率

7.   全局变量放哪儿

8.   碎片会出现在哪内存区域

三、数据结构

   1. 数组和链表的区别,单向链表和双向链表的区别,优势
   2. C++的多态
   3. 红黑树,特点,要求

四、瞎聊

   1. 学过的编程语言
   2. 学科课程比较突出的
   3. 在项目中的优势和劣势

远景智能-后台开发

一面 8.20 电话面:

  1. 自我介绍

  2. 介绍项目,为什么要用UDP,有什么好处

  3. 为什么要用多线程

  4. static用法

  5. epoll和select区别

  6. reactor模式

  7. 虚拟内存和物理内存

  8. 为什么用多线程,不同线程共享栈吗

  9. time_wait 和close_wait,客户端断开连接了,服务器会怎样

  10. C++内存分配,分几部分

  11. 堆和栈的区别

  12. http状态码

二面 8.24 现场面

  1. 主要是针对项目来发散问
  2. reactor模式
  3. UDP数据传输数据类型变化,如何保证
  4. 软中断什么时候发生
  5. 大量qq号存储、查询和查重 bitmap 布隆过滤器
  6. Linux常用命令

三面 8.24 现场面 总管面

  1. 项目,研究方向

四面 8.24 HR面

作业帮 后台开发

一面 :

  1. C++多态

  2. 析构函数

  3. 一些常见C++基础问题

  4. epoll和select对比

  5. UDP和TCP对比

  6. 数据结构 map unordered_map 哈希表 红黑树

算法题:

  1. 从n个数中抽m个出来,按从大到大输出所有排列组合
  2. 改编的约瑟夫环问题

网易雷火 游戏服务器开发

一面8.9 40min:

  1. 疯狂做题,选择填空,包括概率论、路径寻址、向量点积、二叉树、epoll等等

  2. C++是单继承还是多继承,菱形继承的问题,为什么虚继承能解决

  3. 哪几种多态,扯到有函数重载、虚函数、强制类型转换、模板

  4. 讲四种CAST,static_cast和dynamic_cast的区别,为什么dynamic_cast能够向上向下转

  5. RTTI的底层实现原理,如何动态获得类型,怎么判断指针对象的继承关系

  6. epoll和select的区别,边沿触发和水平触发,怎么通知,通知的是什么

  7. TCP的可靠性,超时重传怎么实现,M1,M2,M3,M4,M5,丢失M2;怎么重传M2?为什么不用重传M4,M5?

二面8.9 20min 闲聊

  1. 主要聊项目
  2. 最大的挑战

吉比特 游戏客户端开发

一面:

  1. static关键字
  2. 常量指针与指针常量
  3. 函数参数传常引用 和普通函数参数
  4. 内存泄漏原因及如何避免
  5. 有没有了解智能指针
  6. 深拷贝和浅拷贝
  7. 右值引用
  8. 虚表
  9. 所有类都有虚表吗
  10. 常见排序算法及其复杂度
  11. 快速排序为什么随机选初始值
  12. 建堆的过程及建堆后如何排序
  13. 快速排序和归并排序的过程
  14. 红黑树 平衡二叉搜索树
  15. 哈希冲突解决办法
  16. 如何判断图的连通性
  17. 有没有了解设计模式,说一下单例模式的线程安全实现
  18. 设计模式原则
  19. 有没有了解显卡
  20. 课余时间都在干什么
  21. 进程间的通信方式

祖龙娱乐 服务器开发

一面8.2

  1. STL中两种map的底层实现
  2. Linux系统的gdb调试
  3. Linux查看进程的命令
  4. ping一个ip发生了什么
  5. 多线程中对A,B同时加锁的时候,需要注意什么问题(死锁的情况)
  6. 如何避免死锁c++的对象模型(内存模型,讲虚函数表,虚函数指针)
  7. 操作系统中epoll和select区别,水平触发和边沿触发
  8. 看过什么书,看过什么库
  9. Reactor模式
  10. dynamic_cast有什么用
  11. 智能指针shared_ptr,循环引用的情况怎么办,weak_ptr的弱引用什么意思
  12. 写一个lambda函数
  13. 情景题:抽奖箱设计,三种颜色A,B,C,要求每种颜色的权重(概率)分别为1:10:100,怎么产生三种颜色
  14. rand函数需要注意什么
  15. 会不会游戏相关的算法
  16. c++模板

手撕算法:LRU

二面8.9

  1. 手写最小堆
  2. TCP的TIME_WAIT 和CLOST_WAIT
  3. 闲聊,意向城市,游戏等等

算法题:
下面是邻接表存储的图,以[0]点出发,求深度优先遍历(DFS)或 广度优先遍历(BFS)的结果:

[0]->[1]->[5]->[6]->END

[1]->[0]->[2]->END

[2]->[1]->[3]->END

[3]->[2]->[4]->[7]->END

[4]->[3]->[5]->[8]->END

[5]->[4]->[0]->END

[6]->[0]->[8]->[7]->END

[7]->[6]->[8]->[3]->END

[8]->[6]->[7]->[4]->END

总结

对于技术岗的面试而言,无非就是项目+计算机基础+手撕代码。校招的学生在项目上相对较为薄弱,因此面试的重心在于计算机基础和手撕代码。手撕代码需要多做多思考,积累算法思想培养算法思维,方能比较好的应付。而计算机基础可以说是最简单又最难应付的部分,简单是因为基础就那么些东西,每年都不会有太多的变化;最难应付是因为基础需要理解透彻,不可是死记硬背的概念。上面的面经都是从比较全面的角度上考察计算机基础,每一个基础的技术点可能会挖的很透彻,所以这部分的复习一定是重在理解,重在自己的思考。