蚂蚁 大模型应用开发 一面(暑期)

1. 自我介绍

2. 如果让你设计一个面向跨境售后纠纷的智能工单中台,整体架构怎么落

可以把系统拆成接入层、规则与路由层、会话编排层、模型服务层、工单状态层、证据存储层和审计回放层。接入层处理 IM、邮件、表单和外部 API;规则层做租户隔离、语言识别、风险分级和触发策略;会话编排层维护案件上下文、节点执行历史和工具调用轨迹;模型服务层只负责生成和抽取,不直接持久化状态;状态层维护工单生命周期和人工接管点;证据层保存截图、订单记录、退款日志和模型引用片段;审计层负责回放每一步输入输出,便于定位误判和争议。真正难的点不在“能不能生成回复”,而在于把模型能力约束在可追踪、可回滚、可仲裁的业务流程里。

3. 单机服务迁移到集群后,订单类接口最先暴露的问题通常是什么

最先暴露的一般不是性能,而是状态一致性、幂等和时间窗口竞争。单机时很多逻辑默认依赖内存状态、线程串行或本地锁,迁到集群后会出现重复请求被多节点同时处理、缓存与数据库状态短暂不一致、消息重试导致副作用重复执行、读写分离下旧数据被读出来这些问题。所以设计集群前先要明确每个接口的幂等键、主状态来源、跨节点互斥方案和补偿机制,否则越扩容越容易把隐性 bug 放大。

4. 防重复下单为什么不能只靠数据库唯一索引

数据库唯一索引只能兜住最终写入冲突,但不能解决用户体验、并发窗口和链路副作用。比如两个重复请求都在写库前触发了库存预占、优惠券冻结、消息投递和日志埋点,即便最后只有一个订单写成功,前面的副作用也已经发生。更稳的做法是请求入口就建立业务幂等键,结合短期缓存占位、状态机约束和最终写库唯一索引形成多层防护。唯一索引是最后一道闸,不是完整方案。

5. 幂等 Token 的生成、传递和过期策略应该怎么定

幂等 Token 要满足唯一、可验证、作用域明确和可过期。通常会把用户标识、业务类型、关键参数哈希和时间片组合后签名生成,前端在提交时传回,服务端先做去重登记,再执行业务逻辑。过期时间不能拍脑袋,要根据用户操作时长、重试窗口和业务副作用风险来定,比如支付确认和普通表单提交完全不是一个量级。真正关键的是 Token 要绑定关键业务参数,否则同一个 Token 被拿去发不同请求就失去意义。

import hashlib
import time

def build_idempotent_token(user_id, biz_type, payload, ts=None):
    ts = ts or int(time.time() // 60)
    raw = f"{user_id}|{biz_type}|{payload}|{ts}"
    return hashlib.sha256(raw.encode()).hexdigest()

print(build_idempotent_token("u1001", "create_order", '{"sku":1,"cnt":2}'))

6. 为什么很多分布式 ID 方案最后还是会回到雪花算法或它的变体

因为大多数业务真正需要的是高吞吐、趋势递增、基本有序、可横向扩展且不依赖中心数据库。UUID 无中心但太长且无序,对索引和存储不友好;数据库自增简单但扩展性差,跨库后还要解决冲突和热点;号段模式能缓解一部分问题,但仍依赖中心分配。雪花算法把时间、机器标识和序列号拼起来,兼顾吞吐、可排序性和工程落地性,所以非常常见。它不是绝对最优,但在大量业务场景里是平衡后的结果。

7. 雪花算法在时钟回拨下为什么危险,工程上怎么补

雪花算法高度依赖时间戳单调递增,一旦机器时钟回拨,就可能生成重复 ID 或打破全局有序性。工程上常见补法有三种:检测回拨后拒绝服务并告警,等待时钟追平;引入逻辑时钟,用上一次成功发号时间兜底;或者在集群层做时钟隔离和节点摘除。真正稳的做法往往不是某个算法技巧,而是配合 NTP 治理、监控告警和容灾切换一起做。

8. 订单状态机设计时,为什么“中间态”往往比终态更重要

因为线上故障大多发生在中间态,而不是最终成功或最终失败。比如已创建未支付、支付中、支付回调处理中、库存锁定中、退款审核中、取消申请中,这些状态决定了系统在异常、重试和人工介入下如何继续推进。没有中间态,系统只能把复杂过程硬塞进一个接口里,出问题后既无法恢复,也无法解释。状态机设计的关键不是状态个数,而是每个状态的触发条件、可见性和可转移边界。

9. 在网络乱序、重复投递、回调延迟同时存在时,怎么保证状态不被错误覆盖

不能只靠“后来的消息覆盖前面的消息”。更稳的办法是每个状态转移都带版本号或事件序号,状态更新时校验当前状态是否允许这次转移,再结合幂等表记录事件处理结果。也就是说,系统接受的不是“谁先到谁赢”,而是“谁满足状态机约束谁生效”。如果外部回调链路不可靠,还需要把回调处理设计成可重放但不可重复生效。

allowed = {
    "CREATED": {"PAYING", "CANCELLED"},
    "PAYING": {"PAID", "PAY_FAIL", "CANCELLED"},
    "PAID": {"REFUNDING", "DONE"},
}

def can_transfer(cur, nxt):
    return nxt in allowed.get(cur, set())

print(can_transfer("PAYING", "PAID"))
print(can_transfer("PAID", "CREATED"))

10. 评论系统做分库分表时,分片键为什么经常选内容主体 ID 而不是评论 ID

评论读取通常围绕内容主体发生,比如某个视频、商品、帖子或文章下拉评论。按主体 ID 分片可以让同一个主体下的大部分评论落在同一分片,分页、排序和聚合更自然;如果按评论 ID 分片,单个主体的评论会散落到多个库表,查询和统计代价会明显上升。缺点是热点主体会更热,所以后续还要配合二级分片、冷热分层和缓存兜底。

11. 爆款内容下评论热点倾斜怎么治理

热点倾斜本质上是访问集中到少量主体,单纯扩容不一定有效。一般会同时做三层:读层用多级缓存和热点副本,把热门第一页、热门楼中楼、计数结果提前顶住;写层用异步削峰、批量聚合和局部顺序写,避免数据库被高频小写打穿;数据层对超热点主体做特殊分桶或逻辑拆分,让单个主体不至于压死单个分片。真正难的是一边保持读一致体验,一边接受最终一致的工程现实。

12. 一级评论表和二级回复表拆开设计,和统一单表设计各自的边界在哪里

拆表的好处是语义清晰,一级评论和楼中楼回复的查询路径、排序策略和数据规模通常不同,单独设计更容易优化。统一单表的好处是结构简单,扩展方便,尤其在层级不深时维护成本低。边界在于业务是否真的把两者当成两种不同对象来运营,如果一级评论要按热度分页、回复要按时间展开、审核和折叠策略还不同,那拆表通常更合理;如果只是简单树形展示,统一单表加 parent_id 往往够用。

13. 评论计数这类高频字段为什么不建议每次都直写数据库

因为这类字段更新频率高、竞争强、对一致性的要求又常常没有强到必须事务同步完成。每次直写数据库不仅放大行锁竞争,还会带来主从延迟和缓存不一致问题。更常

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

AI-Agent面试实战专栏 文章被收录于专栏

本专栏聚焦 AI-Agent 面试高频考点,内容来自真实面试与项目实践。系统覆盖大模型基础、Prompt工程、RAG、Agent架构、工具调用、多Agent协作、记忆机制、评测、安全与部署优化等核心模块。以“原理+场景+实战”为主线,提供高频题解析、标准答题思路与工程落地方法,帮助你高效查漏补缺.

全部评论
算是八股里面比较难的
点赞 回复 分享
发布于 04-16 22:12 辽宁

相关推荐

感觉面完人都通透了,还是太菜了,下去沉淀一下1.redis和lua实现库存防超卖和一人一单,redis用lua的方式和使用2.redis本身的事务特性的方式的区别是什么?为什么不用redis本身的事务特性做防超卖?3.redis的set、get是原子性操作吗?用redis的set已经是原子性的了,为什么还需要使用lua脚本4.lua脚本过长会导致阻塞吗?5.怎么解决实际生产环境中防超卖导致的并发的吞吐量的问题呢?lua会阻塞,那怎么解决既要保证不重复下单又要保证吞吐量6.如果下单的时候,有一个单子在lua中判断秒杀资格卡了很长时间,其他人操作点都点不了 ,会出现这种情况吗7.如果lua脚本中某一步出错异常了会怎么办8.lua脚本写了哪些功能9.布隆过滤器是怎么拦截无效查询的10.volatile关键字作用11.Lock锁的实现原理12.AQS原理13.spring的AOP原理是什么?14.如果是分布式系统,怎么解决分布式系统的事务一致性15.如果用消息队列,如果有一条消息没有及时处理,可能是对堆积了也可能是消息发送给系统但是系统繁忙给丢弃了,你会怎么做16.如果服务器处理任务有上限,不能及时处理新的消息,从消费者来说应该做什么处理17.如果系统繁忙,支付消息丢失了,客户没付钱,但是订单创建成功了,应该怎么后续弥补18.如果lua脚本中有abc三步操作,如果a成功b失败,工程层面上来讲系统应该怎么设计,怎么保证系统的鲁棒性?19.生产环境中抢一笔订单,抢到了但是因为系统的问题内部要做abc三个操作,在做b的时候可能网络抖了一下导致b操作异常,这时候要让客户重新点击一次吗?20.智能客服,使用redis支持会话记忆,agent中会话记忆有几种记忆管理?21.向量数据库中怎么保证获取到的数据是尽量有效且准确的,而不是一些无用的数据22.用向量相似性完成rag召回一般用什么算法23.你了解skill吗?自己写过吗?24.有prompt,为什么引入skill处理25.Ai coding用过吗?ai coding现在有个spec coding,sdd的研发模式,这是一种什么样的概念26.你现在用的ai coding工具有哪些
查看25道真题和解析
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务