暑期实习面经 攒人品
持续大概一个月
得物 golang 一面
约半小时,没写题
- 自己选择一个项目进行介绍,项目有没有压测
- 项目中遇到的难点
- select * from tableA where a=1;a有索引但是走了全表扫描为什么,什么情况下会发生?
- defer func(){recover()
}
panic()
- map,range两次为什么会不同,怎么实现并发安全
- 版本管理工具,git 分支
- http2特性
- IO多路复用
- 鉴权除了session还有哪些,jwt https://developer.aliyun.com/article/1358589
- 你了解哪些限流算法
- 用到了zset,增加的命令是什么:zadd
- redis两种持久化方式,区别
面试官很nice,初面缓解了自己的紧张情绪qaq
后续:几天后,2.24 hr告知通过,只有一面技术面,但是不能立即到岗,拒
automq 在线编程
公司主java,一面选择一道力扣中等题,20min限时。应该是初创公司,里面应该有大牛,估计难度不小
momenta 一面 苏州 c++
约45min,没问什么项目(可能和他们不相关)
- c++11新特性,智能指针的引用计数是怎么实现的
控制块是一个动态分配的对象,其中包含:
- vector,map范围遍历,如果自己实现的类,怎么才能实现范围遍历(迭代器)
- 存储相关,之后的工作方向想做什么
- c++多线程相关,我回答的怎么互斥,并发,共享
- 线程,进程区别,,有点紧张,面试时分不清了,直接说的thread,process。。。
- 算法题,先介绍思路(表述的乱七八糟),数组删除对应若干下标
- 反问
莫名紧张
京东零售
2.28号,约1h
项目存储相关,主要问项目,没咋问八股
- 设计一个缓存,lru,lfu,
- lsmtree和B+树
- 找零钱
可能因为方向对应,面试官详细介绍了业务,做内部的数据库支持,不对外出售。问了一些意向,愿不愿意来京东,做数据库相关的,研三能实习吗
3.7号,约45min
主要问实习,问的比较细,直到给面试官讲明白
- SGL结构
- 压缩具体怎么做的
- -10000~10000之内的数据,有一百万个,怎么O(n)排序
没手撕
3.13约三面hr面
wxg微信游戏
timeline :
3.4 一面
3.10 二面
3.18 三面
3.26 面委会
3.27晚7.30 hr面,加了微信,约一俩小时收到云证
4.1 晚饭前还是hr面试链接,晚十点半收到offer邮件
4.2 上午接了offer,很快收到红围脖
hr面后,因为官网一直是hr面试链接且收到了别的offer,中间催过。4.1号回微信hr说先发邮件了,没有offer call
3.4号,自我介绍
- mallloc,delete为什么只用传指针,不需要大小
- 浏览器敲下回车发生什么
- 发送 a b c 三个请求,服务端只调用一次 recv 会接收到什么数据,如果用 udp 呢
- const int* p 和 int* const p
- go的map可以无限增长吗,内存是有限的,怎么无限增长。
- mysql删除表有哪些命令,自增id区别?
drop table [ if exists ] table_name; truncate table table_name; //自增列重置 delete from table_name [ where condition ]
- 介绍下leveldb结构
- 介绍项目中的下单,怎么区分用户是真的想下两单还是因为网络重发的请求,事务id在哪里生成的,
- 代码:
3.10号,二面,约50min
面试官没开摄像头,自我介绍
- c++什么函数不能是虚函数
- 进程和线程区别 协程,为什么要协程(忘了面试官说的正确答案了)
- 追问协程和线程的调度,用户态到内核态的调度?(想问协程调度吗?),记不清怎么问的了,胡扯到了gmp。。追问了很多
- 怎么知道协程被阻塞了,没答上来,说用epoll
- 实习项目的节点数 20?单机上的并发数 100000qps?kv的k大小(RocksDB 本身不建议使用大 key,但是它支持的 key 的最大长度是 8MB,value 的最大长度是 3GB;)
- 比赛项目,项目几个人,承担的角色,做的内容
- 有点记不起来了
手撕:爬楼梯。。。
3.18号,三面,自我介绍,约45min
- 问项目布隆过滤器怎么实现的
- lsmtree内存碎片?
- lsmtree的key value大小,定长的不定长的
- lsmtree落盘是按顺序的还是有权重的,权重怎么设计,回答了链表+map,面试官说堆也可以,分析时间复杂度
- 你怎么写个脚本判断某个程序是都存在内存泄露,数组越界等问题,回答了valgrind,一个字节一个字节比较,面试官提到了动态和静态两种方式
- 介绍一下智能指针
- 介绍一下你做的操作系统实验6.s081
- epoll采用的数据结构,和select比较
- 介绍一下在实验室参与的项目
没手撕,反问,主要用c++开发,涉及到一些kv存储,没用到协程这些,可以多学习些网络相关的
面完当天状态变回复试
3.26号,四面 面委会,跨部门面试,一个面试官,约半小时,没手撕。问了点项目 & 一个大数据处理题
- raft的read index和lease 区别,在leader上读的区别(还好之前准备raft的时候看过)
- lsmtree的项目:
- 问比赛
- 100g的文件,10g内存,磁盘容量不限,怎么统计词频。hash去重
面试观察,腾讯的面试官大多不开摄像头,所以不用根据这个怀疑是不是kpi面了
3.27号晚7.30,hr面,hr加了微信。晚十点收到信息核实邮件(云证)
4.1号晚饭前还是hr面试链接,晚上十点半收到offer邮件(可能是因为3.31因为一直卡在hr面试链接和别的offer下来了催过hr,hr 4.1号晚上回微信说先发了offer,第二天打电话。
4.2号上午点接受之后收到红围脖
快手
3.11 一面,主要问项目,没问八股,大概1h
- 介绍项目用户登录注册下单等流程
- 项目中怎么使用分布式锁解决缓存击穿问题的
- 项目中lsmtree怎么和raft结合的
- lsmtree项目和实习做的区别是什么
- 项目插入kv的流程,对于key比较大的情况,有什么优化
- 项目性能怎么样,为什么差,原因是什么,提到了锁的问题
- 跳表细粒度锁针对我说的这种情况怎么优化
- 实习项目主要做了什么,和rocksdb性能对比,为什么性能比它差
- 介绍一下实习中用到的学习型索引
- lsmtree适合写多读少的场景,针对lsmtree读性能低做了什么优化
- 压缩是怎么实现的,带来什么优化和开销
- SGL结构是用来干嘛的
手撕:前序遍历,中序遍历构造出二叉树,acm模式
面试官人很nice
3.13查看,挂
快手
3.19 一面,介绍项目。约1h,没问很多,主要是最后那个二分思考题
- SGL结构是什么,rocksdb中使用这个结构了吗
- lsmtree和B+树的优劣
- b+树把16kb页写入磁盘是原子性的吗,会存在一部分写成功,一部分没写成功的情况吗,(回答了redo log,undo log,感觉这可能答非所问了),面试官说不是原子性的,可以做一些补偿
- sstable有哪些结构,在sstable中找key的过程,回到了先查布隆过滤器,再查索引,然后对应的block
- xv6(面试官可能之前做过这个实验)实验的fork:cow时,怎么触发的page fault做的什么判断
- page table子进程和父进程是共享的吗,线程之间共享吗
- 父进程子进程共享的物理页都是只读的吗,父进程要写入数据,是分配新的内存页吗,子进程这时候再写入,是会分配新的物理页吗,原来的物理页怎么回收
有序数组可能重复,实现lower_bound,返回下标
怎么只扫描一遍,找到lower_bound和upper_bound,他们实际工作遇到的问题,最后还展示了他写的python代码
部门是做图数据库的,比如人是节点,关注是边,bwtree融合lsmtree和b+树的优势
卡了很久之后挂
蚂蚁
一面,3.12 自我介绍,问了一下项目,然后问八股,电话面约1h
- 项目 lsmtree 和 b+树对比
- c++创建的空类会自动创建什么函数
- 重载和重写有什么区别
- 虚函数和纯虚函数有什么区别
- 菱形继承是什么,怎么解决,除了虚继承还有什么方法
- 三个智能指针的区别
- weak_ptr怎么初始化
- c++检查内存对齐的方法
- c++的常见容器,介绍一下
- 进程线程区别
- 如何保证线程安全
- 什么是递归锁(可重入锁),使用场景
- tcp的半连接队列是什么
- ping域名过程中发生了什么
- epoll的边缘触发和水平触发
- 网络字节序和主机字节序的区别
- 介绍归并排序的过程
3.14 一面,电话面试,后面发邮件写题,一个半小时。主要问实习项目,问数据规模
- lsmtree存储的元数据,对应的数据有多大
- lsmtree的key大小
- level层有多少
- 一个lsmtree实例存多少个kv总数,一个主机有多少lsmtree实例
- 合并过程一般几个sstable合并
- 下一层是上一层的多少倍
- wal文件怎么编解码
- 还有一些简历上相关的,最后问了一些八股
手撕:(感觉这个题目很奇怪,后面面试官提示归并?不知道正确方法是啥。貌似应该以A的数组的元素作为枢轴对B进行快排?)
两个数组长度相同,元素是相同数字的不同排列,比如A={10,50,40,30,20},B={40,20,30,10,50}将两个数组的元素进行调整位置,使得对于任意i,a[i]=b[i]
限制条件:
*1.空间复杂度0(1)
*2.数组元素只能在本数组内被移动/交换
*3.所有数值的比较只能在一个A的元素和一个B的元素之间进行
能不能时间复杂度O(nlogn)
3.24 二面,说是业务终面,约半小时,主要技术闲聊,没拷打。面试结束后显示通过。
3.28(周五) hr面,40min,说下周二之前给答复。面试结束后公众号显示通过。
3.31 收到offer邮件
字节
3.12号,主要问项目以及一些关于项目相关的开放性问题,比如技术选型。约1h
- 跳表和B+树,lsmtree为什么采用跳表
- lsmtree有什么优势,适合做什么,适合什么需求,答得是备份和冷存储,追问备份有更适合的存储产品
- 做的这些数据有序,布隆过滤器,索引目的是为了提高lsmtree读性能,为什么lsmtree要兼顾读性能(其实是上个问题的追问,lsmtree适合做什么
- 为什么raft写入需要半数节点以上成功写入才能返回客户端
- 写请求在内存中可能因为崩溃而丢失,怎么避免
- 写前日志也需要写磁盘,为什么不直接写磁盘
- 为什么采用跳表的lsmtree的写性能高于B+树,B+树的写入性能也没很差,扯到了锁粒度
- 当读写比例差不多的时候怎么选择存储引擎
- 跳表的细粒度锁怎么实现的
- 当写入的时候可以允许读请求吗,(读请求和写请求能够并发吗),怎么实现,读的时候读什么时候的数据,新写入的数据还是旧数据?引出下面的mvcc
- 用一句话解释一下mvcc
手撕:合并两个有序数组
面试官很nice,不难为人,引导着思考。部门用go做数据库上层,用c++对mysql(5.7吗)做二次开发
3.17号,字节二面,约1h
- 你了解TSM吗
- 如果考虑时序,lsmtree怎么更改(时序 会有冷热
- 读取比如一个月的数据,从1s读取一回到5min读取一回,lsmtree怎么更改
- ceph的osd块大小是多少,不同块粒度有什么影响
- rocksdb为什么比B+树读取性能低
- 读过谷歌那篇 学习型索引的论文吗(没读过,不记得他说的论文名了qaq Recursive Model Indexin?
- 房间里面两台机器传输的带宽为什么会比中美之间两台机器的带宽高?因为需要确认,数据包的往返时间越长,通信的效率就越低
- 了解纠删码吗,了解raid吗
- io调度策略有哪些,在vfs上层下层,在块层上面下面
- 你怎么设计降低内存碎片,你了解slab系统吗
- ceph
- 以及一些简历上涉及的问题,压缩需要字符比对,建立字符匹配啥的,定长输出压缩怎么确定从哪里截断
手撕:线程依次打印abc,打印10次 C++|四种方法解决三线程按顺序轮流打印ABC的问题:互斥锁和条件变量、原子操作、信号量_c++多线程按顺序输出abc n次 条件变量-CSDN博客
次日挂
4.2号一面,后端开发实习生-视频与边缘。做视频的编解码,存储啥的。简单总结下,有些忘了。
- gomall项目八股,缓存三剑客,夹杂着场景问
- 两个sql
手撕:只能传输0-8,要传输0-9怎么编解码。普通编码会有传输数据量爆炸的情况。大数转换成9进制。
拼多多
一面,3.20,1h
先开始问项目相关的
开始做题,中缀表达式求值,只有加减,有嵌套括号,没写对orz
时间不够了,最后问了一点八股
- 给个字符串,怎么压缩,怎么样才能压缩率高(可能简历上写了压缩的
- 介绍一下索引
- 前缀索引的数据结构
二面,3.26,约1h
先开始问项目相关的,后面结合项目问了个场景题,手撕
- 介绍一下lsmtree结构,与B+树区别
- kv系统中数据结构怎么设计的,比如redis,说下hash
- 哈希之后链表存储,你有其他想法吗,回答avl树,红黑树,你认为这样能提高性能吗
- 项目中提到压缩,你设计一个压缩系统,需要考虑什么
- lsmtree项目有没有做缓存来加速读,如mysql的buffer pool
- 跳表为什么要做细粒度锁,怎么实现的
- 缓存雪崩,缓存击穿是什么
- 假如一个热key,大量请求来了之后会导致redis崩溃,这个场景怎么解决
- 为什么用rocketmq异步下单,回答说学习用。。面试官说业务中一般不这样
- 虚拟地址和物理地址区别,为什么要有虚拟地址,解决了什么问题,怎么解决的。这里面试官问虚拟地址是怎么实现进程隔离,物理页面之间不重复的,可能他不是很熟,差点被带偏。后面问物理页(他可能不是搞操作系统的,先开始说的是别的词)多大
手撕:二维数组,存0 1 2,1禁止通行,从位置0,0到2所在位置的最短路径。pdd不能自己这边调试,不知道为啥运行结果不对。不过面试结束后发现pdd给的样例好像有问题。
拒三面
美团
3.25号,主要问项目,基本一句一句问简历上的项目怎么做的,怎么实现的,连带着八股
- 布隆过滤器返回1,做什么优化可以避免误判
- 跳表的锁做了读锁,写锁吗,还是没区分
- 异步compact会影响读写性能吗,怎么优化
- 分布式共享session存的是什么?存的用户id,怎么防止伪造
- rocketmq异步下单,假如前100个下单成功,第101下单失败,什么时候返回失败,需要等很久?
- 订单超时未支付则取消订单有什么方法
- zset多久扫描一次,回答的30s。。
手撕:版本号比较
部门是做医药健康的,比如美团送药
次日挂
4.1号一面,1h多点,应该是目前为止最有技术深度的一场拷打。美团对象存储部门,元数据啥的。面试官很懂技术。根据个人技能逐个问八股技术,后面问一点项目,最后面问你觉得你还有哪些比较熟的没有问到的。感觉有几个问题在故意挖坑
- 介绍一下malloc
- stl哪些是线程安全的(怀疑面试官在故意挖坑
- c++11新特性也不新了,说一下rail,它有什么好处
- 介绍一下虚拟内存和物理内存
- 内存碎片怎么解决,比如用户已经拥有了一个这个内存区域的指针,怎么进行内存碎片整理
- 介绍一下gmp模型,gmp模型有什么问题,有哪些优化的地方。回答了全局队列的锁的竞争问题
- 如果一个协程迟迟获取不到cpu运行,我回答了放回全局队列,面试官说可以通过刚才提到的窃取,具体怎么样面试的时候没细说
- go协程没有优先级,怎么保证协程之间的优先级比如先让用户读写io,再compact。面试官说他也不确定怎么做,不过应该有一些方案
- 你实验室做信息存储的,主要做什么,为什么简历上只写了熟悉文件存储的路径解析过程,这只是一小点。
- 介绍一下inode和dentry,
- 硬链接和软链接
- 介绍vfs
- mysql的双写
- lsmtree和mysql的b+树的对比
- bwtree,那你读过bwtree的那篇论文吗
- 分布式锁,面试官说校招都说熟悉分布式锁,但实际上都不能深问。我来问一个:分布式锁的召回。描述了一个场景:b和c向a申请了d资源的锁。现在b可能宕机了或者b与a网络延迟了或者b与d网络延迟了,怎么保证访问d资源的互斥性,该怎么做。说目前还没有什么解决方案
- 说简历上异步compact这里,自己这里可能写的简历有点问题。磁盘有io多路复用吗
- raft是校招标配了吗,笑死,说不问raft了
- 讲一下布隆过滤器
- 你觉得你还有哪些比较熟的没有问到的。回答了lsmtree
- rocksdb写入性能快的原因有哪些
- wal怎么保证宕机恢复的时候最后一条日志的原子性。先写日志还是先更新index,index怎么实现原子更新,回答了faa,cas。我和他都笑了,他说与mysql的双写有点像
- rocksdb的remote compact
说部门是做对象存储,元数据,存算分离,计算层,存储卸载到巴拉巴拉
晚上挂
阿里控股
3.27号,一面,2h,有点抽象
- 问项目
- 共享屏幕画图讲sstable结构,字段,怎么存储的
- 面试官不是很了解lsmtree
- 别的什么数据库或者存储用到了lsmtree
- memtable底层有用b+树实现的吗
- compact过程有什么优化的手段
- 你了解clinkhouse吗
面了俩小时,手撕力扣30,力扣没写过这道题,words=[ab,cd,ef]求words全排列在s中的首次出现的位置,最后讨论用滑动窗口做,自己这也没法运行,一个样例过了,又有下一个样例报错,写了1h还是太菜了。不过为啥面试官不提前结束orz,合理怀疑面试官在趁机摸鱼。没反问,究其恶心,共享屏幕给他画sstable结构怎么存储的,什么字段。语言项目都不匹配还捞人面试干啥。而且hr打电话约面试的时候我还专门问了是否匹配,她说部门有做存储的,巴拉巴拉。
周末挂