2024.1.12(抖音)
字节抖音开放平台一面(主要是考察基础相关,平时工作中涉及的技术)
- 面试官自我介绍,简单讲讲了他们团队所负责的事情
- 自我介绍
- 这次看外部机会的原因是啥?
- Redis平时用过哪些数据类型
- 你们用string的话,有遇到大key的场景吗(例如,100-200KB就挺大了)
- 用来做二级缓存的话,你们是怎么和数据库保持一致性的呢
- 你刚提到的回写任务中的分布式锁具体是怎么实现的呢?
- 直接SET成功就结束了吗,不会手动释放吗,完全依靠它TTL自己过期吗?
- 那你们释放锁具体是怎么做的呢
- 但你先查出来,再去删的时候,这期间有可能比如触发TTL过期或其它因素,你能保证你删的是你查的吗?
- 那是不是如果你的服务实例挂了,就会锁一段很长的时间(TTL)
- 那你知道标准的分布式锁解法是啥吗?
- 按你们现在的搞法,我理解可能出了问题,得手动去删,比如像典型的当你要发布重启实例的时候,没有去删那个key的话,就只能等着它自己过期呗(确实在我们一些重跑报告的场景,需要重新触发回写任务时哦,先手动删key,被面试官diss这种手动做法特别草台班子5555)
- 讲讲innoDB数据存储大致是怎样的结构
- 是所有B+树的叶子节点都存这个数据吗
- 有遇到一些深翻页的问题吗
- 你们订单大概有多少,说量级就好
- 那按这个量级,业务上线一段时间之后,比如运营人员去查,或者要给平台的卖家吐一些查询接口的时候,你肯定就会遇到这个深翻页问题呀
- 刚才好像听到你们针对C端有一个account_id维度的分表,还有一个面向运营相当于B端查询的表,那你们这2个表相当于是存储同一份冗余的数据,是这样吗?
- 你们是业务逻辑上实现就是双写吗,就比如用户下单,要写DB的分表,还要写ES(其实那会我已经不在这个组了,我也不知道后续具体是怎么实现的了...)
- 那如果是让你自己来设计这个DB和ES的数据同步方案,你会怎么做呢
- 那MySQL主从方案你有了解吗
- 索引失效的场景遇到过吗,你知道的有哪些
- 那如果线上有一些慢SQL的报警,你一般会怎么去优化呢
- 有遇到过有时即使命中了索引,还是查询超时吗?该怎么解决
- 你说的这个覆盖索引优化,我理解不就相当于你手动去回表吗
- explain命令,具体对它的输出,我们会看哪些字段去分析呢
- 问一下go相关的,sync.Mutex和RWMutex有什么区别?
- 有去了解过sync.Mutex是怎么实现的吗?(支支吾吾卡了1分钟,好不容易回想起来锁升级机制和饥饿模式orz)
- 我想再了解一下计费这个系统,能聊吗?
- 我是想了解你们计费系统是怎么来保证资金安全的呢?
- 你们这个retail是toB的离线计算吗
- 但是离线资金计算场景,比如上游给你的数据给错了,有可能你已经算完把钱打给商户,不是会有一些挑战或什么的吗?
- 那你们自身会有做什么监控手段,能够提前发现问题,而不是依赖业务反馈issue
- 那你促销活动预算池中设计的对账监控任务,扫描的数据量有多大呢,对账具体是怎么做呢
- 算法题:leetcode.cn/problems/me… (一面就考察hard我是没有料到。。。)
- 没有反问环节,面试官匆匆结束下线。。。