「字节跳动Golang面试」字节跳动后端开发巨水的面经
1. 自我介绍
2. redis结构都有哪些
答:string,list,set,zset,hash,bitmap,geo,hyperloglog,stream
3. zset是怎么实现的
答:skiplist + hash
4. zset查找key的rank的复杂度
答:O(logn)
5. 讲一讲redis的string
答:底层由三种结构实现int,字符串长度小于20且纯数字,embstring,长度小于40,或小于20不为纯数字,rawstring,字符长度大于等于40
6. 知道embstring和raw string为什么以40为分界线吗
没答出来
7. redis集群模式了解吗
答:讲了slot那些
8. redis分布式锁了解吗
答:口头实现了基础的带过期的分布式锁,uuid做value的那种
9. 集群模式下,某个分布式锁所在的slot挂了,这锁怎么解决
没答出来
10. 介绍下自己的项目
11. mysql的mvcc了解吗
答:为了实现隔离级别的一种机制,每行数据尾部有存储一些数据,例如事务ID,指向log中sql的指针等
12.mysql的隔离级别
答:blablabla,就那几种
13.mysql锁了解吗
答:乐观锁,悲观锁,行锁,表锁,间隙锁,读锁,写锁。每个都大概解释了一下
14. mysql间隙锁的底层实现
没答出来
15. redis的hash的rehash了解吗(上面忘说了)
没答出来
16. 算法
答:leetcode中等偏简单,多嘴了一句说我做过类似的,用了20min,后来被说coding不行,太慢了。
感受:其实三个月前有面试过字节,但是那时候新项目启动,比较忙,没好好准备,挂了。这次稍微准备了下,但是感觉这次难度剧增,底层问得好深,面试官不苟言笑,也有点紧张。