字节 后台开发 2面问题+思考
1、背景
最近收到字节面试通过的通知,把自己当中碰到的一些面试问题、复盘分享出来,祝大家求职顺利。
比较多放一个不太合适,按照123面这样一个一个具体说。当中有一些我的思考可能回答的点大家也可以参考。
1面:https://www.nowcoder.com/discuss/1074492
2、字节2面 技术面
个人自我介绍【略过】
项目上,你做了哪部分工作,这些工作里哪些你觉得是难点?以及做的比较有价值的事情。
分布式id
- 聊一聊雪花算法。还有其他的唯一id算法,背后的原理
雪花算法就可以谈各种,比如id 他是怎么分布的,哪一些位放什么信息,以及单台机器上生成id是否有序,雪花算法的缺点啊,推特最后为什么没有继续用呢?
还有比如java的uuid,或者美团的overleaf 方案等等,都可以谈。最起码我可以引入redis/mysql,做一个自增的id,然后引入了他就可能有各种的问题,比如单点故障啊等等,可以一直说。
go语言
- golang的协程 是怎么实现的?和线程比有什么不一样,又给他带来哪些的好处?
这个问题1面有涉及到,所以后面也好好准备了一下。可以谈的点很多,除了上一篇提到了,还可以说栈,保护现场恢复现场,用户态内核态,对比等等。最后可以加上一句,避免了内核频繁状态切换的成本。
- go channel的调度机制有了解吗?泛型?
这两个确实不了解,直接说不太清楚。
redis
- 谈一谈常用的数据结构。
其实就是5个基本的,string,list,set,hash,zset。大概说说用途。
还有几个有意思的结构,hyperloglog,这个涉及到伯努利试验,桶分布等等,我觉得本科同学学过概率论的真的可以好好研究下,说出来很加分的。
以及geo 地理位置的结构。
顺着string也可以提bloom过滤器,应用场景,黑名单,顺着还可以下击穿穿透雪崩等等等等,只是串联起来 什么都能说了。
- 五大数据结构怎么实现的,有了解过吗?
没看过源码,直说了。
- 提到了跳表,有没有替代方案?
zset用到跳表,大概讲讲跳表怎么回事,降低了查询时间啊,以及mysql为什么不用跳表而是b+树,两个的区别等等,可以说很多也是。
- redis物理集群怎么搭建,怎么部署 有了解吗?
只要是集群,就要意识到,要么主从那种高可靠集群,解决单点故障,要么解决压力过大的沙丁分片。有了这个框架什么都好说了,比如二者区别,大概是什么意思等等。
- redis分布式锁有了解吗?
这个建议好好看看,有很多权衡的点。
首先结论是,redisson 都帮我们解决实现了,他解决 有许多需要考量的点,概括上来讲可以包括:
【basic】本地锁
1、死锁
2、重复锁
3、正确的删除
4、性能问题
5、可靠性问题
6、红锁和红锁的缺点。
- redis有许多开源的 偏集群的方案,有了解吗?
不了解。但是只要是集群,就可以从AKF这个角度去考虑,那就可以提到redis在AKF上的考量。同时集群有集群理论,比如CAP BASE理论等等。
- redis集群在cap关注的是哪两点呢?
p分区容错性一定是有的;集群的话,比如主从,信息可能同步不上来,不一致;所以AP。
- base理论,和CAP 提出了什么新鲜玩意?
阐述一下base理论是什么,比如一致性,就可以说 强一致性、弱一致性、最终一致性,kafka特殊的一致性(ISR,OSR)等等,很多。
zookeeper
- zk在CAP上是怎么的一个选择。
马上意识到选举过程200ms,是没法干其他事情的,所以在这个时间是不可用的,CP。那zk和eureka都可以作为注册中心,eureka在掉的时候有自我保护机制,心跳等等,保证可用但不是一致的;同样还可以说zk的目录树结构,隔离等等。
- PAXOS协议有具体了解吗?
讲自己知道的就行,比如背后论文的故事,大概流程,角色等等。
- 除了PAXOS,业界常用的RAFT有了解吗?
没具体了解,后续会了解一下。
- zk的脑裂问题听过吗?
当时答得不太对,正确的是指集群里面,因为一些问题 产生两个主,不知道听谁的,具体见下一面,下一面面试官问到了。
算法 层次遍历
层次遍历改一下,一行从左往右,一行从右往左这样遍历。
3、其他
欢迎收藏点赞~有问题可以评论区指出哈
#字节面试##23届秋招笔面经##字节跳动#