## 腾讯音乐后端一面

可以看的出面试官很忙,因为是在工位上面我的,面试时间是晚上8点了,人还是很多,身后频频有人走动,感觉大伙这个点正工作的带劲呢。

面试官很注重基础知识

golang

1. GMP调度模型
2. GC 问的很细致
3. slice、map、channel、context
4. 内存逃逸
5. golang锁的底层实现
6. defer底层实现原理
7. golang的内存管理机制

MySQL

1. 隔离级别
2. 可重复读如何避免幻读
3. 使用MVCC和nextkey lock就一定能避免幻读吗
4. MVCC实现原理
5. undolog redolog binlog
6. 主从复制
7. 锁相关...比如锁的退化机制、什么时候行锁会退化成表锁等等
8. 索引相关 .....比如为什么用B+树不用B树不用红黑树、索引失效场景等等
9. 慢sql排查

Redis

1. 数据结构应用场景以及底层数据结构
2. 跳表的实现
3. 持久化
4. 集群
5. 一致性哈希
6. Raft如何解决脑裂问题
7. 大key与热key如何解决

然后还有项目相关的一些问题,让我意外的是一面并无手撕,我的感受是一面面试官更加注重基础,问的很多很细。
全部评论
面试造火箭
点赞 回复 分享
发布于 2024-06-18 14:50 广东

相关推荐

问题1:为什么会使用分库分表,到达了什么样的数据级别才会去加设计,是否对数据量有一个统计我的理解:看星哥之前写过 单表行数超 500 万行或者单表容量超过 2GB,推荐分库分表,但是面试的过程中怕被问自己写的项目会有这么大的数据量吗不要这么硬背,具体情况具体分析,有的表字段少,经常是条件等值查询,这样加个索引,一个亿也不用分表,有的字段多,还是范围查询,可能5000万就得分表,面试官问你你说是自己在学习分库分表应用到项目中,自己造了几千万的数据量问题2:基因法需要分表的一个数量和确定的一个东西(我的理解是分表的依据,例如大麦中是订单编号和用户id),但是正常的生产环境中是可能动态改变的,比如说需要动态扩容的话,怎么解决呢(例如当前有4个分表,但是现在需要扩充到8个分表),是使用双写吗?这个在扩容前就要考虑好能维持多少年内不需要再扩容。转转架构师在分库分表前,通过之前记录的数据增长量,做了256张表,能在7年内不需要再扩容,如果需要扩容的话,可以使用双写,新扩容表写的过程中,用新的分库分表算法问题3:如果在防止超卖的过程中,Redis不可用了,怎么解决我的理解:使用Redis集群和主从复制吗?因为Redis宕机的话数据库的数据也不能保证是最新的版本,所以得尽量保证Redis不宕机?肯定要使用redis集群模式,但可能会有主从延迟,导致从节点数据不是最新的,但关系不大。可以在用户生成订单后,修改数据库的座位和库存,然后用户支付后,再改数据库的座位和库存,每一步都做好验证。这样从节点的数据问题会降到最低。问题4:如果在当前的幂等验证逻辑中,有一个消息所对应的幂等标识符是不存在的,按照现有的逻辑是可以执行的,但是幂等验证之后的业务系统异常了,这个时候应该怎么处理呢(即通过了幂等的验证,但是后面的服务down掉了,比如说下游抛了一个异常出来)【没太明白应该回答什么,是指需要将幂等标识符重新进行设置吗】异常了就异常了呗,把这个请求的标识从redis中删除了,就像分布式锁时,业务异常也要执行解锁一样,让下一个请求进来正常执行,然后设置好标识位问题5:本地缓存为什么使用Caffine呢,为啥不用Guava因为caffine的性能要远高于Guava,没有其他复杂原因我的理解:查了下Caffine就是Guava改进而来的,可以这么说吗- Caffine在读写操作方面的性能更高,是基于异步的操作,将淘汰过期操作与读写进行分离- Caffine采用了一种结合 LRU、LFU的算法W-TinyLFU+,具有高命中率,低内存占用的特点
查看5道真题和解析
点赞 评论 收藏
分享
评论
8
43
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务