百度十三面
从内推到今天,总共十三面,5个部门+一次校招,身心俱疲,可能这就是菜鸡吧。每次完美面试之后,下一面必然是死亡面试。当时信誓旦旦地说面到十几面,我就在牛客写个面经,今天总算结束了。总共面试经历了三四十次了吧,我可真是菜的真实。前期每次都写面经总结,后来就发现面试官总有新花样,我学会什么就问新的什么,太菜了太菜了。
始于部门宣讲SRE
SRE部门7月上旬在学校做宣讲,然后现场面了几天,好像当时不招人,略微有些调戏我们...走完了三面。
一面-电话面试
- 主要聊项目
- 假如有一群用户打开百度崩溃,有哪些原因?
- 然后问我有没有了解一些高层的存储,比如数据库的redis和levelDB。当时完全第一次听,好吧,现在redis已经很熟了,levelDB rocksDB都能聊上一些,但感觉又没什么用了,面试官更新问题的速度总比我学习的速度快。
二面-现场
- 项目
- 逻辑题:帽子颜色问题。给了我3分钟,花了1分钟推出来,大佬可能几秒钟就会了,我太菜了。
- 编程题:一串珠子首尾相连L长度,有n种颜色,找出最短子串,包含所有颜色。
当时用的滑动窗口解的。给了我5分钟写伪代码,还有一些没写完,基本正确。 - 有0-9的数字,token密码,6位密码,拿反了,输入也能正确的概率?给了我4分钟。
少考虑了6和9的对称,太菜了。 - 同样假如我打开百度崩溃,有哪些原因?
- 聊***
三面-现场
交叉面,不同小组的面我,面完送了一个巨丑的百度吉祥物。
- 项目 请把我当小白给我讲一遍。你这个项目有什么难点。哎,菜鸡做的都不知道哪里难,现在都不会回答这个问题,说了也说不难。
- 编程题:求两个链表的相交点。给了我7分钟
先问了哪些特殊情况,我说空链表,包含关系链表,有一个链表成环。
写代码,用的先找到共同尾部,同时得到长度差,再长链表先走长度差,再找第一个公共节点。
代码没有考虑道成环情况。问我成环怎么做,我说错了,环问题剑指offer有一题原题。 - qq通信中,假如客户端时间不一定准确,客户端到服务器之间存在不确定的网络延迟,如何在服务器端保证两个客户端发送消息的先后顺序
不会,后来讨厌应该是效仿tcp
内推上海百度
兴致勃勃地找师姐内推,而且很膨胀,作死的开始,看着45个cpp hc依旧投了。
智能云-一面即凉
C++
- inline介绍 static+inline会产生什么样的效果
- ++i和i++有什么区别。效果上有区别,性能上++i会快一些。被专门问这个问题以后,写算法题都用++i了。
- volatile关键字
- 虚函数 构造 析构
- 智能指针 当时C++小白,这个没回答上来,所以马上接下来C++Primer全温习了一遍。
- move函数 模板
-
vector的capacity和size
操作系统
-
malloc原理 不会,后来学会了brk和mmap 学会了虚存管理和伙伴算法 slab分配器
- 多线程经验?没有 锁有哪些 spin_lock mutex_lock rw_lock 乐观锁 悲观锁
- top 命令详解
- LRU实现
-
linux内存管理 进程怎么调度内存
网络
-
TCP三次握手 四次挥手 为什么
- 半双工和全双工知道吗
- 出现大量的time_wait怎么办 当时连time wait是什么都不知道
也算让我清醒的认清了现实,可是马上第二个部门就捞我了,没来得及消化这些知识
垂直搜索一面
因为有了上一次智能云的面试经验,对C++ 网络 操作系统也算现背现用,所以过了,会的比较多了。面试官人也很好,问我会的,不会的也会引导我,基础面试。
- 根据我会的,先让我讲了机械硬盘和SSD的区别
- 操作系统的进程和线程概述
- 锁
- 大端小端
- TCP 三次握手 四次挥手 time_wait这次我会了
- 海量数据top k 不会,被引导的,学会了小根堆找top k
- 快排算法 归并排序算法 怎么避免快排的最坏情况, 当时不会,后来查了一下没有完美的解决方案,可以随机取三值取中位数
C++有关
老生常谈的几个:虚函数 多态 智能指针 move struct和union的区别
容器的安全迭代删除
LRU如何防止扫描,我现在也不会,没找到答案
垂直搜索二面-死亡面试
上来先素质三连,写三道编程题
- 海量数据,有m个有序数组 求总共的top k
我写的是每个数组的尾部k个数据入优先级队列,得到最后top k,面试官并不是很满意 - 2个文件,每个都有1亿个url,找出其中相同的
我写的是先用set写入1个文件,再查另一个 emmm显然这有点蠢
一般这种海量应该是切割小文件,再多线程,再归并 - 2000万行数据,每一行可以看成很多列,比如找出列值>0 <10的行 说一下思路就行
我我我。。。不会
提示一下 类似数据库
我我我。。。还是不会
后面就是垃圾时间了
- 怎么查看目录下有多少文件数量
不会。。。ls+grep find 找了答案,现在还是不会 - top命令的sy和us
- 进程通信 线程通信 多个进程怎么维护锁
- *** SSD 机械硬盘区别
然后开始疯狂吐槽我
百度云一面即凉---太太太难了,要去造航母
- 项目引申淘汰算法 LRU ARC 分级热度
- TCP
- selcet poll epool 背诵
- TCP nodelay 好吧,我又是第一次听说,涨姿势
- fork具体过程 又涨姿势 我只知道fork一个一样的子进程
- 父进程open文件 fork之后子进程能用吗 能,拷贝了文件描述符
- 程序dump了,怎么查看出错在哪里,有这方面的经验吗 又是知识盲区
我说log gdb 查看堆栈之类的,面试官应该觉得不对 估计是正在跑的程序dump了怎么办吧 - 性能分析是基于工具的吗 怎么做性能测试
我说之前是用的fio 跑数据集 然后用top iostat这些命令看 还是不满意 凉凉 - 程序有一个很热很热的cpu消耗点 比如代码写错 怎么找到它 又触及道知识盲区了
后来百度之后大概知道应该用perf oprofile这些工具
编程题
1.链表找中间节点 快慢指针法
- 怎么把数写到文件再恢复出来
你先说一下二叉树,我说先序和中序都存一遍
多叉树,我说存当前节点的ID和父节点的ID,恢复的时候根据ID挂到树上
我觉得行,但是面试官好像有点怀疑
好吧,最后几个真是死亡问题,我太菜了
部门直招 系统部存储组--北京的希望
跟我做的方向很接近,也是有关于openchannel SSDs还有kv数据库,我已经把redis levelDB都熟悉了,然后因为写论文,看了好些文献,百度也用了wisckey,一面面试官对我也很感兴趣,评语写的太好了。然后二面就地狱难度。这几次面试没有写面经具体记不清楚。
错觉一面---感觉完美
聊项目 聊openchannelSSDs 聊kv emmm把面试官聊的很开心
这几个星期把国内外的kv和ocs的没看的文献也都看了,跟面试官吹,然后就觉得我研究的挺深的
死亡二面---跌落谷底
昨天聊了深度,今天聊一聊广度,死亡的开始
最底层的硬件开始往上聊 全栈式存储
聊硬件 不懂
聊NVMe协议,问我协议内容,命令内容 知识盲区,只懂一些
IO调度程序层 当时也不知道 盲区
通用块层 了解
文件系统 了解一些
VFS 了解一些
用户态到内核态 了解一些
levelDB 了解一些
分布式存储 ceph 盲区
虚拟化 盲区 估计指docker这些
简单聊一下测试工具 fio
io深度 我说--depth
这个真的是io队列的深度吗,我说是的 踩雷
多线程 我说numjobs 他说是这是进程 线程在后面加--thread emmm这个我持怀疑态度
你知道一些新的硬件吧
我做过NVM上的文件系统
那你知道PCM吗 我知道
它的颗粒怎么存储数据的? 盲区 应该是状态变化
然后说我还是差了一点
三面
emmm聊聊项目 聊聊人生
因为正直内推上报的前几天,非常激动以为三面了就可能有offer了
我还舔了好几波,可以去北京,很喜欢百度
问了好多我工作之后的事,好吧最后还是没有offer
说中旬来武汉现场聊聊,事实证明他把我忘了,这几天校招面试他并没有找我
北京校招---最后的进击
一面--基础面
40分钟快速解决,看别人都1个小时
- 僵尸进程 孤儿进程 知道基本的,往深了问我就不会了
- TCP模型 和UDP的区别 拥塞算法 基本都懂
- 如何判断一个机器是32位还是64位
我说sizeof指针,他说那不用这个呢,我说那我try访问32位后面的地址,抛出异常就是32位
面试官当时也不懂这个对不对,实际上是错的,非法访问,PCB中没有这部分页表,程序终止
可能还可以地址差吧,但是这个跟sizeof一个道理,还有网上一些方法,感觉都跟sizeof差不多的思路 - 聊redis 底层实现 再聊到跳跃表
- 写一个二分查找
写了,然后说我这个有点问题,emmm会溢出, left+right溢出,后来看了一下网上的,应该left+差值/2
不过还是感谢给我过了
二面---完美的错觉
30分钟快速解决,除了红黑树聊不下去以外,没什么问题
- 项目 测试
- TCP模型
- 数据库写了3个select语句
- static
- C++常见容器及其底层实现
- 续上一个讲到map 红黑树的时候 让我讲解一下红黑树 emmmm 知识盲区
- 续上一个hash_map时候讲一下hash的冲突解决
- C++11特性,并让我写了个很简单的vector的一些用法
- linux命令 grep top这些 基本都会
- 手写单例 然后重载赋值构造函数
今天最后的死亡面试---还是结束我的秋招吧,我累了
为什么大多数人的校招三面都是聊聊人生,我的这么黑暗,面试官还是个妹子
- 聊项目,去重压缩
- 聊项目 redis openchannel SSDs等
- 聊操作系统
什么时候用进程 什么时候用线程 背完问为什么就懵逼了
我说多机分布式用进程 高并发多线程用线程
为什么
我说因为多机只能用进程而且进程管理简单 线程管理复杂 安全性各种 自己要管理
我理解的本来就不是很深,一连串的问题直接击倒
select poll epoll
开始我强大的背诵能力
面试官:你用过吗
我没用过
一看就是背的
面试官:话说你对面试准备了多少
我说我看了很多面试常用的,背了很多(我可能说错话了) - 二叉树有8个度为1的节点,3个叶子节点 总共有几个节点。 懵逼
答错 答成了10个。 应该是3+2+8=13 - 二维坐标系里有很多矩形,这些矩形有一条边始终在一条直线上,找出外包矩形 懵逼
我说了往四边查找最外边直线的办法。面试官说可能不对,而且效率也低 - 聊人生
课外兴趣爱好
写写字玩玩乐器 - 职业规划
做技术就行,数据库 存储方向最好 - 你还有什么要问的吗
请问您(给我死亡一击的)是哪个部门的
地图的 大组
总结起来就是很多都会背,一问深入就不懂,我又没用过