面试经验-拼多多一面
前言
比较体现自身能力的一次面试,项目问的比较多,对答如流,但八股问的比较少而且我都不会。
内容
自我介绍
- 学校背景
- 有较长时间实习经历
- 通过读文档、源码很快适应工作
- 合作完成中期交付并上线
- 工作之余我还参加了一些比赛,考了一些证件
介绍一下项目主要是做什么的
- 核心目标
- 主要功能
- 使用的技术
看到你们有用到 Redis,是怎么集成进去的,用的什么缓存策略
- 旁路缓存
- 主要存了一些,没必要持久化的状态变量
- 功能背景
- 使用了
String
存了点赞数、Hash
存了直播间状态变量、ZSet
存了直播消息、弹幕、举手等用timestamp
作为score
- 举例子
我看到你说使用了 Session,主要存放的是什么,知道 JWT 吗
- 因为 JWT 是携带 token,每次访问 API 都要从数据库中拿用户数据,如果分表了就时间比较长,对用户不友好
- Session 存放的是用户登录数据,因为我们有个泛在化学习空间
- 功能背景
- 需要存放一些要同步的数据
文档光标协同这个是怎么做的
- 从直播间 Hash 中有一个文档 ID,然后去 Redis 中重新找一下 ZSet
每个用户每输入一次就需要更改吗,还是其他的
- 20 次左右一提交,因为中间态没必要保存
缓存穿透怎么做的
- 布隆过滤器 + 逻辑过期 + 逻辑删除 + 缓存空值
你项目中有写布隆过滤器,讲讲
- 我的理解就是,布隆过滤器是用来缓解缓存穿透问题的。用多个
Hash
函数对live:room:{roomId}
算 hash 值,然后存到列表或者说二维列表中。01 存,其他的过来,看看是否全 1,不是就不放行。
一次查询的过程中用到了哪些协议
- 普通查询肯定是用的 https
- 对于协同交互这块我们用的 WebSocket,因为 ws 中有多个 http 请求,是一个 http 长轮询;我们的项目又是微服务项目,所以没法保证每次 http 请求都能打到同一台服务器,所以我们还开了粘性回话。
- 总结下来就是协同用 ws,其他调接口用 https
架构演进这块怎么做的
- 老的使用了 peer.js 这块做的 mesh
- 新的使用了 sfu
- 同时水平拓展
- 解耦信令、媒体流、状态服务,水平拓展
你觉得项目中还有哪些可加强的点
- WebRTC 不好,应该用 RTSP
- 说了一下二者优劣
RAG 这块做了什么
- 起步阶段
- 用了本地 RAG 发现效果不太理想
- 用了 Congee 来加持
来点八股
ThreadLocal 原理
- 只知道怎么用和它的流程
- 探讨了下进程与线程的关系
垃圾回收机制有了解吗
- 简单说了下 G1,带了点标记和里面的算法
来点手撕
- 单例模式加锁 不太会
- 层次遍历
反问
咱们业务组的 RPC 是怎么弄的,是 DDD 来保障单体,还是直接 MVC 来互相 RPC
- 说了下 RPC 是微服务组件,其实与 DDD 和 MVC 无关。实际业务中这些都是混杂的。
- 涉及到人员管理、开发流程方面,实际上就不会太去想 DDD 和 MVC 了。
项目业务还是不太懂,是纯做微服务搭建吗
- 微服务全链路,中间件、容灾、数据中台、排障
- 就像从软件工程出发,做业务解耦、加功能
追问
有其他大厂提前批 offer 吗
从今天的面评来看,你项目已经很棒了。但是你要去加强下八股和算法,其他面试官很喜欢卡这两个。
复盘
- 面试官很和蔼,问的问题都是我比较会的,也归功于之前的模拟题吧
- 还需要加强下八股
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ali5669!
评论