面灵AI→

小红书 Agent 平台研发一面(约29分钟)

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 请做一个自我介绍。
  2. 上一段实习的感受怎么样?实际工作状态和你想象的一致吗?
  3. 你所在的团队主要做什么业务?属于硬件相关方向吗?你接触的工作与团队主线有什么区别?
  4. 后续更想找 Agent 相关岗位,还是后端岗位?
  5. 实习期间有没有遇到你认为不太好的同事?
  6. 如果从能力上定义一位优秀同事,你会选谁?他有哪些特质?负责、认真就足以定义优秀吗?
  7. 最近有没有一件让你感到幸福或骄傲的事情?
  8. 设计一个能够支撑 10 万 QPS、并可继续水平扩展的商品详情查询服务。底层只有一张存储商品详情的 MySQL 表,直播间用户点击商品后会调用该服务;管理端修改价格后,C 端用户也需要看到新价格。
  9. 把缓存更新链路完整串起来:管理端修改商品价格后,如何让使用缓存的 C 端及时看到新价格?
  10. 现场算法题:求最长回文字符串。

《参考解析》

10 万 QPS 商品详情服务怎么设计:思路按「读多写少 + 单表 MySQL」这个前提展开,核心是让绝大多数读不落库。第一层是接入层缓存,用 Redis 存商品详情,key 按 item:{id} 设计,value 存序列化后的完整详情或哈希结构(哈希便于按字段更新,但要注意大 key 拆分)。第二层是本地缓存,热点商品在应用进程内用 Caffeine/Guava 做二级缓存,能吃掉大部分重复读,配合短过期时间(1~5 秒)控制一致性窗口。第三层才是 MySQL,单表在这个量级下必须靠主键等值查询,禁止范围扫描。水平扩展有两条线:缓存层用 Redis Cluster 分片或客户端一致性哈希;应用层无状态,直接加机器。还要补几个工程细节:热点商品(明星直播间)会打出单分片热点,需要本地缓存 + 热点探测自动加长本地缓存时间;缓存未命中回源要用互斥锁或 singleflight 防止击穿;接口层做限流和降级(比如降级返回只读的价格字段);DB 侧用读写分离和从库承载回源,但一致性要求高的场景要强制走主库。数据量再大就该考虑按商品 ID 分库分表,但题目限定了单表,说明考点在缓存而不是分片。

管理端改价后 C 端怎么及时看到新价格:可选方案按一致性强度和时间延迟排序。最朴素的是「先更新 DB,再删除缓存」而不是「更新缓存」——删除把并发写导致的脏数据概率降到最低,因为更新缓存的两个并发写请求到达顺序可能和 DB 提交顺序相反。想更稳可以叠加延迟双删:写完 DB 删一次缓存,延迟几百毫秒(大于一次读请求的耗时)再删一次,覆盖掉「读请求在删除前拿到旧值又回填」的窗口。更彻底的方案是订阅 binlog(Canal/Maxwell 或云厂商 DTS)异步删缓存,业务代码不做双写,天然按 DB 提交顺序投递,是目前大厂主流做法。如果业务对价格这种字段要求秒级强一致(比如直播间下单校验),不要指望缓存,正确做法是在下单链路上直接读主库或做缓存旁路校验,缓存只服务展示。另外别忘了多级缓存下要广播失效(用 Redis Pub/Sub 或消息队列通知所有应用实例清本地缓存),否则本地缓存那几分钟的过期时间就是价格不一致窗口;如果无法接受,可以用「版本号 + 短 TTL」代替强失效,读到的版本落后就异步刷新。

最长回文字符串怎么手撕:最稳的是中心扩展法,时间 O(n²)、空间 O(1),面试里够用且好写:枚举 2n-1 个中心(n 个单字符中心 + n-1 个双字符中心),从中心向两边扩,越界或字符不等就停,记录最长区间。写成两层循环,内层用 while (l >= 0 && r < n && s[l] == s[r]) 向两侧展开,注意区分奇偶两种中心的初值(奇数 l=r=i,偶数 l=i, r=i+1)。如果面试官继续追问线性解法,就要提 Manacher:先在每两个字符间插入分隔符(如 #)把奇偶统一成奇数长度,再维护当前最右回文边界 R 与中心 C,利用对称点 i' = 2C - i 的半径做初始化,只有超出 R 的部分才暴力扩展,总复杂度 O(n)。手写时最容易错的是边界与返回值要求(返回子串还是长度、多个答案取哪个),写完主动跑一遍 "babad"、"cbbd"、单字符、全相同字符这几个用例,比嘴上说复杂度更有说服力。

「更想做 Agent 还是后端」这类方向题怎么答:面试官问这句是在评估两件事——你的兴趣是否和这个岗位的真实工作匹配,以及你会不会入职后就想转组。有效的答法是把自己的经历、岗位的技术栈和长期目标串成一条线:先说清两边的技术共性(Agent 平台研发本身既要有后端的并发、存储、稳定性能力,也要有模型调用编排、工具调用、上下文管理的能力),再给出你的偏向以及为什么这个偏向和这个团队对得上(比如「我实习做的是 XX,偏后端链路,但我更想做的方向是把模型能力落到稳定可用的系统上,这正好是 Agent 平台要解决的问题」),最后补一句你能接受阶段性做纯后端工作。最差的答法是「都行」「看哪个给的钱多」,或者答一个和岗位明显冲突的方向。

同事评价与成就感这类软问题怎么答:问「有没有遇到不太好的同事」不是让你吐槽,考点是你会不会在背后做人身评价。正确的处理是把人和事分开:可以说某次协作里对方的做法让你为难(比如接口约定反复变更、不及时同步信息),然后讲你当时做了什么(拉齐书面约定、把变更走评审、私下先沟通),最后给一个客观结论,不要延伸到人品,也不要点名。反过来「谁是你认为优秀的同事」要给出可验证的特质,而且不能只停在「负责、认真」——面试官会追问「负责任就够了吗」,这时要补充具体行为:主动暴露风险而不是等被问、把不确定性量化、在跨团队协作里把对方的约束也考虑进去。成就感那一题选一件具体的小事(带一个小功能上线、帮同学解决一个卡了很久的问题),说清你做了什么、结果如何、为什么这件事让你有获得感,比堆一堆宏大叙事更可信。