今年春招已经快要结束了,已经找到实习的同学可以准备暑期实习入职了。而没办法去实习的同学也不用担心,现在可以开始准备秋招的面试,争取在暑期提前批早日上岸,然后就可以好好享受在学校的最后一年。为了方便大家早日找到面试状态,这回特地将我之前面试的一些面经贡献出来给大家学习。我在去年的秋招过程中,主要面试的岗位都是以C++语言为主,包括后台、客户端和游戏开发等。
字节跳动-抖音 客户端开发
一面8.30 16:00 电话面:
- HTTP和HTTPS
- HTTPS加密过程
- 非对称加密和对称加密算法
- 代理模式
- 设计模式,观察者模式
- 线程和进程
- TCP和UDP
- 口述二叉树前序遍历、二分查找
二面9.6 15:00 视频面:
- 线程和进程
- epoll
- 僵尸进程、孤儿进程
- 操作系统复制粘贴如何实现
- 虚拟内存和物理内存
- C++基础,忘了
- 页面置换算法
- 进程调度算法
- (手撕算法)手写LRU、计算化学分子式每个元素的个数,如HMg2(H2O(P2S3))3NH3,每个元素以大写字母开头
三面9.6 视频面
接二面C++基础开放题
(手撕算法)写一个链表操作,奇数位递增,偶数为递减,重新排序为递增
四面9.9 19:30 视频面
1-n,缺失了一个数,找到这个数(答:相加再减);
假设内存不够,相加溢出,怎么办(答:bitmap映射判断)
bitmap也存不下内存(答:分段判断)还是存不下怎么办
malloc底层实现
(手撕代码)链表每隔k个反转
五面9.10 11:00 HR面
- 常规问题
- 字节范儿
虎牙 c++开发工程师
一面 8.21 19:30 电话面:
- new和malloc的区别
- delete的几种方式
- c++具有哪些特点和性质,和c有什么区别
- 面向对象的三个特点,简单总结
- 子类和父类在构造和析构的时候有什么特点吗,顺序
- 纯虚函数和虚函数的区别
- 引用的作用
- 常引用
- 结构体和联合体
- 对联合不同成员赋值,其它的值会改变吗
- 重载和重写c++是类型安全的吗
- 内存方式有几种及特点
- const和define的区别,哪种更好
- 指针和数组的区别
- 基类的析构函数,不是虚函数会造成什么问题全
- 局变量和局部变量的区别,操作系统和编译器是怎么知道的
- 标准模板库,哪些数据结构
- 什么时候用vector和list,实现的方案
- vector扩容怎么实现
- window客户端开发,界面的消息机制,有用过SDK实现过界面
- qt信号槽的机制
- window内核对象
- 进程间的通信
- 透明窗口,不规则窗口的实现
- 网络编程,udp和tcp有什么区别
- udp的限制,udp是有序还是无序的呢
商汤 智慧医疗-C++开发
一面9.13 17:00 现场面
- 讲项目
- 线程池怎么实现的
- 调度器、工作线程和请求队列都会干什么,状态发生什么改变
- 多态的多种实现方式
- 虚函数实现
- malloc的底层实现
- 几大内存空间,各放什么数据
- 手写快排
AiBee C++开发工程师
一面:
项目相关
给了一颗多叉树,实现层序遍历以及元素赋值操作
路径规划算法
二面:
项目相关,扣细节
C++多态
常量指针、指针常量
volatile作用,寄存器
手写代码,是否为一个栈的出栈队列
三面HR:
常规问题
作为项目负责人要注意到什么
四面技术:
1. string类的拷贝构造函数 2. 什么情况下会使用拷贝构造函数 3. 虚拟内存和物理内存 4. 项目
贝壳找房 后台开发
一面 9.12 现场面:
介绍项目
epoll,select,poll
数据库 b+树
链表和数组
排序算法
手撕代码:复杂链表的复制
二面 9.12 现场面:
1. linux系统了解吗 2. 查看系统负载情况查看端口号,端口号被占用怎么办 3. 让你设计一个学生选课,查成绩的系统,要怎么设计 4. 上述系统的数据库建表设计,索引 5. sql查询语句,选出物理课成绩最高的学生姓名
三面 9.12 HR面
360 服务器开发
一面9.10 17:00:
C++基础、C基础,扣得很细,通过给出的一些程序,判断什么错误
线程和进程
内存模型
手敲代码斐波那契数列、数字反转
二面:
- 实现 void* memmove(void* dst, const void* src, size_t n)
- N个数重复3次,一个数重复一次,请找到这个数; 3N+1, int32_t, vector
- 实现一下string类,包括构造函数,拷贝构造函数,析构函数,运算符重载等。
阿里云智能 C++开发
一、项目
选择一个项目介绍一下
客户端是否是一对一传输数据
缓存队列是否一个还是多个
为什么选择UDP作为网络协议
UDP无法保证顺序,如何解决这个问题
UDP丢包的情况怎么保证
二、C++基础问题
1. 结构体和类的区别 2. 指针和引用的区别,sizeof的大小 3. 拷贝构造和移动构造 4. 什么情况下必须使用拷贝构造函数 5. 智能指针的情况 6. 内存堆栈对比,分配效率 7. 全局变量放哪儿 8. 碎片会出现在哪内存区域
三、数据结构
1. 数组和链表的区别,单向链表和双向链表的区别,优势 2. C++的多态 3. 红黑树,特点,要求
四、瞎聊
1. 学过的编程语言 2. 学科课程比较突出的 3. 在项目中的优势和劣势
远景智能-后台开发
一面 8.20 电话面:
自我介绍
介绍项目,为什么要用UDP,有什么好处
为什么要用多线程
static用法
epoll和select区别
reactor模式
虚拟内存和物理内存
为什么用多线程,不同线程共享栈吗
time_wait 和close_wait,客户端断开连接了,服务器会怎样
C++内存分配,分几部分
堆和栈的区别
http状态码
二面 8.24 现场面
- 主要是针对项目来发散问
- reactor模式
- UDP数据传输数据类型变化,如何保证
- 软中断什么时候发生
- 大量qq号存储、查询和查重 bitmap 布隆过滤器
- Linux常用命令
三面 8.24 现场面 总管面
- 项目,研究方向
四面 8.24 HR面
作业帮 后台开发
一面 :
C++多态
析构函数
一些常见C++基础问题
epoll和select对比
UDP和TCP对比
数据结构 map unordered_map 哈希表 红黑树
算法题:
- 从n个数中抽m个出来,按从大到大输出所有排列组合
- 改编的约瑟夫环问题
网易雷火 游戏服务器开发
一面8.9 40min:
疯狂做题,选择填空,包括概率论、路径寻址、向量点积、二叉树、epoll等等
C++是单继承还是多继承,菱形继承的问题,为什么虚继承能解决
哪几种多态,扯到有函数重载、虚函数、强制类型转换、模板
讲四种CAST,static_cast和dynamic_cast的区别,为什么dynamic_cast能够向上向下转
RTTI的底层实现原理,如何动态获得类型,怎么判断指针对象的继承关系
epoll和select的区别,边沿触发和水平触发,怎么通知,通知的是什么
TCP的可靠性,超时重传怎么实现,M1,M2,M3,M4,M5,丢失M2;怎么重传M2?为什么不用重传M4,M5?
二面8.9 20min 闲聊
- 主要聊项目
- 最大的挑战
吉比特 游戏客户端开发
一面:
- static关键字
- 常量指针与指针常量
- 函数参数传常引用 和普通函数参数
- 内存泄漏原因及如何避免
- 有没有了解智能指针
- 深拷贝和浅拷贝
- 右值引用
- 虚表
- 所有类都有虚表吗
- 常见排序算法及其复杂度
- 快速排序为什么随机选初始值
- 建堆的过程及建堆后如何排序
- 快速排序和归并排序的过程
- 红黑树 平衡二叉搜索树
- 哈希冲突解决办法
- 如何判断图的连通性
- 有没有了解设计模式,说一下单例模式的线程安全实现
- 设计模式原则
- 有没有了解显卡
- 课余时间都在干什么
- 进程间的通信方式
祖龙娱乐 服务器开发
一面8.2:
- STL中两种map的底层实现
- Linux系统的gdb调试
- Linux查看进程的命令
- ping一个ip发生了什么
- 多线程中对A,B同时加锁的时候,需要注意什么问题(死锁的情况)
- 如何避免死锁c++的对象模型(内存模型,讲虚函数表,虚函数指针)
- 操作系统中epoll和select区别,水平触发和边沿触发
- 看过什么书,看过什么库
- Reactor模式
- dynamic_cast有什么用
- 智能指针shared_ptr,循环引用的情况怎么办,weak_ptr的弱引用什么意思
- 写一个lambda函数
- 情景题:抽奖箱设计,三种颜色A,B,C,要求每种颜色的权重(概率)分别为1:10:100,怎么产生三种颜色
- rand函数需要注意什么
- 会不会游戏相关的算法
- c++模板
手撕算法:LRU
二面8.9:
- 手写最小堆
- TCP的TIME_WAIT 和CLOST_WAIT
- 闲聊,意向城市,游戏等等
算法题:
下面是邻接表存储的图,以[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
总结
对于技术岗的面试而言,无非就是项目+计算机基础+手撕代码。校招的学生在项目上相对较为薄弱,因此面试的重心在于计算机基础和手撕代码。手撕代码需要多做多思考,积累算法思想培养算法思维,方能比较好的应付。而计算机基础可以说是最简单又最难应付的部分,简单是因为基础就那么些东西,每年都不会有太多的变化;最难应付是因为基础需要理解透彻,不可是死记硬背的概念。上面的面经都是从比较全面的角度上考察计算机基础,每一个基础的技术点可能会挖的很透彻,所以这部分的复习一定是重在理解,重在自己的思考。