字节跳动社招三面面经回馈社会
😥上次四面没过,然后被飞书的HR第一时间捞起来面飞书客户端了
😖这次许愿一下offer吧
面的是飞书客户端-视频会议 C++
然后字节面试重点:知识深度+算法
C++我推荐几本书 看完基本上八股大部分都能行
《C++ pirmer plus》 哪怕你觉得自己C++再行我还是建议至少把这本书过一遍
《深度探索C++对象模型》 读完这本书你应该可以在简历上写一个熟悉C++
《Effective C++:改善程序与设计的55个具体做法》 看了对C++编码帮助挺大
以上三本书看完 C++面试岗过的话问题应该都不大
操作系统:
《深入理解计算机系统》神书,不用我多推荐了
《现代操作系统》上面那本看不懂可以先看看这本书
计算机网络:
《计算机网络自顶向下方法》
然后是面经
一面 06.08
自我介绍
问项目,深挖项目中遇到的问题
C++11的特性知道哪些
C++智能指针
unique指针怎么修改
多态(重写和重载,虚函数表,虚指针balabala
构造函数能被声明为虚函数吗,为什么
析构函数需要被声明为虚函数吗,为什么‘
new和malloc的区别
new底层是用什么实现的
new实现需要类型转换吗
调用析构函数的时候 类型是void类型,指向的是类对象,会正确调用析构函数吗
vector/list/map的底层实现,增删改查复杂度
const关键字,const怎么修改
进程和线程的同步方法,效率,那种效率最高,为什么
算法:求链表的第K个节点,说下思路(双指针)
自己写测试用例测试
数组的TOPK,给一个数组,求数组的前K个小的数字并返回
这里我说了快排,堆排,但面试官说并不是最优解
面试完我回想了一下,这里求前K个小的数字,只需要返回这个数组的容量为K的子数组,这个子数组的最大元素小于等于另一个剩余数组的最小元素即可
这里抛砖引玉,我认为应该找到一个数组元素作为基准将其分成两部分,小的部分如果容量大于K再对其进行二分,如果小于K,对大的数组再划分剩余部分,等于K返回即可,其实有点像快排的思想
反问环节
当晚收到二面邀请
二面 06.10 交叉面
自我介绍
问项目,深挖项目中遇到的问题
上一面问C++,这面问操作系统,问计算机网络
TCP三次握手
TCP如何保证可靠传输
TCP重传
数据库锁
内核态和用户态
内核态用户态切换
程序在开始运行的时候,内核态和用户态都发生了什么
算法:
给定一个网址
输出倒序网址和每个点为坐标的倒序
写第一个函数,输出www.udiab.moc
写第二个函数,输出com.baidu.www
反问
当晚收到三面邀请
三面 06.15
自我介绍
介绍项目
做过的项目里,哪个项目的收获最大
vector的push_back函数,时间复杂度是多少,涉及到vector容量不足发生拷贝的时候,时间复杂度又是多少,这两个的平均时间复杂度是多少
进程和线程的同步方式,哪些同步方式可以用在线程中,哪些同步方式可以用在进程中而不能用在线程中
同步方式哪种效率最高,为什么
前面几面你认为自己有哪些地方可以答得更好,有哪些地方不足
算法:
输出树的所有既是叶子节点又是左节点的值的总和
输出树的所有既是叶子节点又是左节点的值的总和
我先用了递归,问了下时间复杂度,能用非递归实现吗
然后用非递归又写了一次
反问
总体体验就是自己的操作系统得好好看看😥字节重算法效率,重底层
想进字节就得多思考,多看书
许愿offer