2512 杭州有赞一面挂
面试录音转文字记录,然后AI总结
业务与项目经验(电商/订单方向)
Q:针对淘宝接口的时间限制,你们如何拉取和存储订单?
A: 淘宝默认只给 3 个月数据。通过聚石塔接入,普通版用户调 API 实时拉取;高级版用户则通过 TMC 消息队列或 RDS 数据库实时同步并持久化存储,可回溯至 6 个月。
Q:复购标签/复购率的具体判定逻辑是什么?
A: 在 6 个月范围内,若当前订单的买家 ID、卖家 ID 及商品 SKU ID 与历史记录匹配,则判定为复购。
Q:如何优化复购查询性能并处理高频刷单场景?
A: 数据库层面:建立专门的索引表,包含买家/卖家 ID、SKU/SPU ID 及创建时间,避免直查主库。缓存层面:使用 Redis 缓存“最近 6 个月内最早一笔相同订单”的创建时间。入库时优先查缓存,缓存失效或超期才查库并刷新。
Q:ES 搜索时如何处理商品标题中的特殊符号(如 %、#)?
A: 在写入和查询前进行预处理,将特殊符号替换为可被分词器识别的特定字符。
Q:网盘系统的权限模型是如何设计的?
A: 采用 ACL(访问控制列表) 模型。虽然数据量大,但语义简单(用户-资源-权限),通过组合实现复杂的继承和判定逻辑。
Q:如何解决权限层级过深导致的循环查询性能问题?
A: 使用 Redis 缓存权限数据,并在请求级别引入 ThreadLocal 缓存,避免同一次请求内对相同权限节点的重复判断。
订单系统的表结构如何设计?如何处理一笔订单多笔退款?
A: 结构:分为 Trade(交易)和 Order(SKU 级别子订单)两张表,一对多关联。
退款:设立独立退款表,在 Trade 表中冗余退款 ID 数组,实现逆向流程关联。
以下是八股部分
- 问了不了解dubbo,我说前司没用过,后续没问了
- 简述 Java 内存模型(JMM)及内存区域。
- CMS、G1 和 ZGC 垃圾回收器的区别
- 线程有哪些状态?如何唤醒指定线程?
- 装饰器模式和观察者模式的应用场景?
