淘天 面经
淘天-一面
手撕:多线程打印 ABC
- 请介绍一个你觉得复杂度较高或印象深刻的项目?
- 在五六万 QPS 下,这个项目带来了什么问题?
- 是因为资源本身有限吗?货拉拉的机器配置是怎么样的?
- 理论上简单扩容能解决问题吗?
- 数据是缓存到本地还是 Redis?
- 活动数据会有资金损失(资损)相关的问题吗?
- 缓存是怎么刷新的?
- 如果流量都打到 Redis 上,有什么优化方法?
- 你说的“get 加本地聚合代替 mget”具体是什么意思?
- 本地聚合是指什么?【先用 size 做判定是否在本地缓存中已经缓存了,没有的部分再去单独 get】
- 本地聚合加 mget 不好吗?【分散在各个 slot 上面,导致阻塞获取】
- 如何保证本地和 Redis 的缓存数据正确?
- 如果活动数据可以随意修改,怎么保证缓存和数据库一致?【canal 解析】
- 如果活动开始的时候,大量活动还没有刷新到本地缓存,但是出现一个流量洪峰,打到 Redis 上,会对 Redis 的压力很大,你怎么处理的?【识别流量洪峰,提前 10 分钟刷新到本地缓存】
- 这是同步操作还是异步操作?
- 这个是你设计的吗?【是】
- AOP 的原理是什么?
- bytebuddy 的代理它是在哪个环节生成的?【后面查了查,应该在运行的时候:它通过操作字节码,在类被加载到JVM之前或者运行期间,对类的字节码进行修改和生成新的字节码,从而实现对类的功能增强。】
- 为什么用 ByteBuddy?直接用 Spring AOP 不行吗?
- 组件是如何实现降级获得热点数据的?怎么确保热点的过期?
- cglib 和jdk 代理两者的核心差异是什么?
- 你们货拉拉用的是哪个版本的 JDK?没考虑用更高版本吗?
- 你会去看开源项目吗?【rocketmq】
- 你对 rocketmq印象最深的技术特点或核心机制是什么?
- 它是怎么实现消息驱动架构的?
- rocketmq 的架构说一下【生产消费+nameserver+broker】
- rocketmq 的日志如何实现高效率查找?【indexFile索引 + log】
- 你在中国移动的项目是什么时候参加的?做了些什么工作?
- 你提到的 EAV 数据库架构是如何实现动态配置的呢?
- Java 实现多线程有哪些方式?
- 除了线程池,Concurrent 包里有哪些关键方法?
- 你了解 ReentrantLock 吗?如何实现公平和非公平锁?
- 知道 CAS 的特性吗?
- CAS 会有什么问题?
- 你知道 CAS 的 ABA 问题吗?怎么解决?
- 如果用三个线程交替打印 ABC,你有什么初步想法?用什么实现?
- Volatile 能保证线程安全吗?
- 除了原子计数,还有其他方式实现交替打印 ABC 吗?【信号量】
- 你觉得项目上还有什么可以聊的?【token 算法降级】
- 你最近有了解 AI 相关的知识或做过尝试吗?你用什么工具做的?【pytorch+时间序列 预测比特币走势】
- 你对 AI 有什么看法?在工程技术领域,AI 是什么样的角色?
- 你目前面了哪些公司?
- 你在那些公司的面试流程到哪一步了?
淘天-二面
- 你在项目中承担了哪些职责?遇到了哪些困难?怎么解决的?
- 你们项目的投入情况如何?有多少人?你负责哪些模块?
- 订单 ID 是如何关联活动的?是查询后挂到缓存吗?
- 缓存的 key 是什么?是订单 ID 吗?
- 同一个订单 ID 会反复请求查询吗?
- 缓存的过期时间是多久?
- 项目是分布式部署的吗?有多少台机器? 活动模块的机器是 40 台
- 如何保障同一个请求最终落到同一台机器上? 网关层做一层 hash 的路由【需要注意什么?好在没有细问,自己还没有准备过】
- 单台机器的配置是什么?能扛住多少 QPS? 单台机器是 4C8G,6w 的 qps 路由到每台机器上就是 3000 的请求量,tomcat 的负载会很大,因此需要做下面的一系列优化,而且在大促的时候会紧急扩容
- 本地缓存会占用多少内存?有无限制?过期时间,为什么这么配置呢? 90% 的都是一个空缓存,10% 的才是实际缓存了活动列表的实际有效的请求。过期时间设计在 1 分钟,因为这个从下单到接单只有 15s 左右。而这个过期时间主要为了缓存空值,为了减少从里面获取,防止缓存击穿,所以下单的时候只需要判断当前的缓存的列表 list 里面是否是空,就能够保证是否要走第二级缓存了。
- 后续打算如何优化业务侧缓存? 紧急的情况下扩容 & 精简 BO 对象 & 运营侧加强配置的管理
- 如果 Redis 不可用,安全性如何保障?
- 多端互踢和 token 迁移是怎么实现的? logoutById 冲突的时候 让所有在 redis 中的都失效
- token 迁移方案是谁定的? 双写【需要深入去挖掘】
- 在你的理解中,有没有更好的迁移方案? 按照冷热用户做一个区分,保证整个过程中完成不停机的更新
- 你预计实习多久?
- 你 base 在杭州没问题吗?