字节推荐架构面经
4.7 一面
面试官没开摄像头,听声音比较年轻
- 首先自我介绍
- LSMKV:详细介绍当时介绍的不好,因为没有准备,已经忘光了,介绍得没什么逻辑提问垃圾回收:因为介绍的时候没有讲,但是简历里面有写,我直接回答忘了
- 提问布隆过滤器 它是绝对准确的吗?不是,假阳性;时间复杂度?哈希函数越多越好吗? 太多了太少了都会让假阳性率上升
- C++八股
- 面向对象是什么?析构函数?
- 虚函数是什么?
- 未初始化的已定义变量默认值?
- 类型转换?回答了static_cast等,但是进一步问细节就不知道了(不知道具体的细节)
- 指针和引用的区别?
- 析构函数执行顺序?
- 智能指针?unique_ptrshared_ptrweak_ptr 并详细介绍,照着前几天看的八股讲了
- 一个指向了对象A的智能指针,对象A有智能指针成员变量,问如果另一个智能指针指向了这个对象A,是否会影响对象A的智能指针成员变量的refcnt?回答的是不会影响
- 常用容器有哪些?vector、list、map、set
- C++原子操作的实现?
- 什么时候用加锁,什么时候atomic?
- 我们来做两道题吧!实际就做了一道,因为第一道题就花了我很长时间给一个数组,如[1,1,1,4],问数组内的元素任意组合后能够达成的最长的连续整数序列长度为多少? 题目原意:[1,1,1,4]有诸如[][1,1][1,1,4]的组合,全部的范围为[0,1,2,3,4,5,6,7],答案即为8当时用回溯法,可能可以过,但是时间复杂度高建议用类贪心思想,先排序,然后从左到右
- 反问其实我当时已经觉得要寄了,但是面试官挺好的,我就索性问了下他有啥建议否 简历不要写两页,紧凑一点写一页就行了C++掌握得还行,但是有些回答比较同质化、公式化,写简历里的项目就是要会的,因为就是会被问到觉得我刷题太少
4.14 二面
面试官感觉是小leader,不是很热情,有点冷淡
- 自我介绍
- 问文件系统 介绍了单机inode文件系统的架构,但是语言组织得有点一般,反正就是inode table, inode bitmap, block bitmap以及在curd文件的时候整个架构会做什么反应
- 问如果分配大文件也要一个一个block地分配吗?答曰这个项目是这样的,但可能ext4的extent结构更好一点
- 问分配一个文件获取block id用bitmap遍历太慢了,如何优化,答曰用queue,分配的时候出队头、回收的时候入队头/队尾;反馈是基本思路是对的,但是具体细节会更复杂
- 问sql场景题,纯小丑不会sql 他先问了我会不会mysql,我说不是很熟,就是做后端项目的时候用过
- 问有众多用户的观看各类视频的时长信息,统计每个类别时长占所有视频总时长的比例,要求写出sql语句,我只给了思路
- 根据type构建索引
- group by type进行对时长的分类累加(view不会写)
- 各类时长累加得总时长
- 然后除sql写得全错,只有思路讲清楚了
- 手撕:先递增后递减的数组,找出最大值 刚开始写了个的算法,说时间复杂度太高了然后反应过来写了个二分查找,推敲了下细节之后过了(指测了很多数据集没发现bug)顺便说下,他那个是内嵌的ide,输入输出需要自己指定的
- 反问 问对我的评价,不给
- 你们在做什么,回答了一些我没听懂的东西结束
二面挂,被捞,重新一面
4.18 重新一面
面试官看起来有点疲惫,但是人还是挺好的
前一天被拼多多二面暴击了,然后又有很多七七八八的材料要填,然后就摆了(面出PTSD了)
- 问科研项目,不方便介绍
- TCP的流量控制?流量窗口八股,讲得有点简单,但还是放我过了
- 开始C++八股
- inline函数作用?答曰在编译的时候进行函数代码展开;追问如果函数体太大了还会不会展开,刚开始不太清楚,后面猜一下说应该不会,可能生成的可执行文件太大了
- 指针和引用的区别以及使用场景?
- 问hadoop、大数据算法会不会,我答曰不会(第一次一面我就发现投了一个不对口的岗...)
- MapReduce怎么理解的?答曰Map做子任务,Reduce整合Map的任务;然后问了个shuffle算法,我说没听说过,然后他说是不是要hash一下找到对应的Reducer,我反应过来他这里指的是多个Reducer的系统,但是我依然不太懂
- 估计时间还剩很多但是方向不太对口没啥好聊的,让我讲了讲Raft水时间,没提问
- 做了一道题,第k个最大元素算法,hot100原题,我写了个原地建堆算法,好几天没刷题了手有点生,最后还是写出来了
4.25 重新二面
这次面试官有点小帅,还很温柔
- 自我介绍提到了分布式系统,开始拷问(寄,没复习!) 他先让我简述,但是我扯得有点远,先扯了比较熟悉的2PL,提到Conflict Serial时候被叫停,让我解释2PC(Two Phase Commit):回答第一次prepare,第二次accept,都需要全部ack才能提交,否则全部回滚问2PC满足CAP的那两个,我只说了C,另外两个忘记啥意思了,他就没继续问了问你了不了解数据库事务,我说了解一些,他没有追问
- 问你了不了解ACID
- 原子:all-or-nothing and undo log
- 一致:逻辑约束一致和外键一致
- 隔离:不可重复读和幻读
- 持久:已提交脏页持久化 redo log
- 问单例模式怎么写 先解释是什么:一个类有且仅有一个全局对象用C++怎么写?没研究过...现场糊了一个 static静态成员对象和成员函数,同时用delete禁止所有的构造函数要求我不要写静态类,就普通new一个出来,我确实不会,也没太get到他意思,纠缠了3分钟后跳过
- 问了一道不知是智力题还是编程题的题,后面写了个程序 题目:n*n的棋盘,初始位置(x,y),走m步,问m步后仍在棋盘的概率
- 想了许久,面试官给了提示:从第一步到第二步如何考虑?打算让我用动归但是我反其道而行之(大雾),给了如下思路:
- bfs遍历m次这个地图,每次step == m的时候count++;
- 排除掉不可能到达的区域
- 面试官刚开始以为我的思路是错的,一直提示我走了不足m步掉下棋盘的后续情况不要计入,遂与之争辩,开始在纸上画图并在模糊的摄像头上跟他理论
- 最后我的做法确实是对的
- 他说你后面可以了解了解动态规划的解法
- 结束:其实我应该问问他有没有什么建议给到我...但是脑子卡壳没问走人了...
最终结果是4.28 hr面,4.30感谢信