1、商品详情页接入“智能推荐文案”AI接口,如何设计调用链路保证接口延迟可控?

核心目标:延迟可控、高可用、防超时、降级兜底
 
完整设计方案
 
1) 前置缓存- 热门商品预调用大模型,把AI推荐文案缓存到Redis;优先返回缓存,减少实时AI调用。
2) 超时熔断- 使用Sentinel/Hystrix设置AI接口超时时间(如200ms) 超时直接熔断,返回兜底文案,不阻塞商品详情页。
3) 异步+降级策略- 同步优先读缓存;缓存未命中,异步调用AI更新缓存;实时不阻塞主链路,保证详情页响应速度。
4) AI调用链路优化- 统一AI网关,限流、鉴权、负载均衡;

批量调用、参数精简,减少token;
接入本地小模型兜底,大模型挂了用轻量模型。
5) 队列削峰- 高并发下,AI调用走消息队列,异步生成文案,避免瞬时大量请求打垮大模型服务。
6) 监控告警- 监控AI接口延迟、失败率、缓存命中率;异常自动告警,及时降级。
总结
缓存优先 + 超时熔断 + 异步兜底 + 降级策略,保证商品详情页延迟可控,不依赖AI实时响应。

2、 Java线程生命周期及状态流转6大状态


NEW 新建:创建线程对象,未调用 start() 
RUNNABLE 可运行:调用 start() ,包含就绪+运行,等待CPU时间片
BLOCKED 阻塞:等待获取 synchronized 内置锁
WAITING 无限等待:无期限等待, wait() / join() / LockSupport.park() ,需主动唤醒
TIMED_WAITING 限时等待: sleep() / wait(long) / LockSupport.parkNanos() ,超时自动唤醒
TERMINATED 终止:线程执行完毕/异常退出
 
 NEW  →  start()  →  RUNNABLE 
 RUNNABLE  竞争锁失败→ BLOCKED ;调用wait→ WAITING ;sleep→ TIMED_WAITING 
阻塞/等待被唤醒 →  RUNNABLE 
线程执行结束 →  TERMINATED 

3、synchronized 和 ReentrantLock 区别与使用场景核心区别

1) 底层实现-  synchronized :JVM层面,内置锁,对象头MarkWord实现,自动加解锁
ReentrantLock :API层面,AQS队列同步器,手动 lock() / unlock() 
2) 可重入:都支持可重入
3) 公平锁:synchronized非公平;ReentrantLock可指定公平/非公平
4) 可中断:synchronized不可中断;ReentrantLock支持 lockInterruptibly() 中断等待
5) 条件变量:synchronized只有1个等待队列;ReentrantLock可多个 Condition 精准唤醒
6) 锁降级:synchronized偏向锁→轻量级锁→重量级锁;ReentrantLock无锁升级
7) 异常释放:synchronized异常自动释放锁;ReentrantLock必须手动unlock,否则死锁

简单场景、代码量少:用 synchronized ,简洁不易出错
高并发、公平锁、可中断、精准唤醒、尝试获取锁:用 ReentrantLock 

4、 volatile关键字的作用和底层实现 及 作用


保证可见性:一个线程修改volatile变量,其他线程立刻可见,禁止缓存到寄存器/本地内存
禁止指令重排:避免CPU、编译器乱序执行,解决单例DCL双重检查锁问题
不保证原子性:不能保证 i++ 这类复合操作原子底层实现
 
汇编层面:变量修改时,加Lock前缀指令

缓存行锁定,刷新主内存;
触发内存屏障,禁止指令重排;

JMM内存模型:读写volatile变量插入内存屏障,保证有序性和可见性。

5、 Java线程池核心参数与执行流程7大核心参数

1) corePoolSize :核心线程数,常驻存活
2) maximumPoolSize :最大线程数
3) keepAliveTime :非核心线程空闲存活时间
4) unit :时间单位
5) workQueue :任务队列(Array/Linked/Synchronous)
6) threadFactory :线程工厂,创建线程
7) handler :拒绝策略(4种)
执行流程
1. 提交任务,线程数 < 核心线程数 → 创建核心线程执行
2. 核心线程满,任务进入阻塞队列
3. 队列满,线程数 < 最大线程数 → 创建非核心线程
4. 线程数达到最大线程数 → 触发拒绝策略(抛异常/丢弃/调用者执行等)

6、Redis常用数据结构及电商场景应用

String:商品库存、分布式锁、热点商品详情缓存、计数器
Hash:购物车、商品基础信息、用户收货地址
List:订单消息队列、秒杀排队、商品浏览历史
Set:商品标签、用户收藏、抽奖去重、好友关系
ZSet:商品销量排行榜、秒杀有序排队、延时订单
BitMap:用户签到、商品状态标记
HyperLogLog:商品UV统计

7、Redis持久化方式(RDB/AOF)及优缺点

RDB(快照持久化)
 
- 原理:定时全量二进制保存内存数据到磁盘
- 优点:文件小,恢复快,性能好,适合备份
- 缺点:定时保存,可能丢失最后一次快照后数据,大文件fork阻塞
 
AOF(追加日志持久化)
 
- 原理:记录所有写命令,追加到日志文件
- 优点:实时性高,数据丢失少,支持秒级恢复
- 缺点:文件大,恢复慢,性能低于RDB
 
最佳实践
 
RDB+AOF混合持久化,兼顾性能和数据安全。
 

8、什么是最终一致性?在电商下单流程中如何体现?

最终一致性
 
分布式理论,系统短期数据不一致,经过一段时间后,所有节点数据最终一致,不需要实时强一致,满足业务可用。
 
电商下单体现
 
1. 库存扣减、订单创建、支付、物流、优惠券,不同服务;
2. 下单成功后,库存、订单可能短暂不一致;
3. 通过消息队列+重试+补偿机制,最终库存扣减、订单生成、优惠券核销全部一致;
4. 不用强事务锁,保证高并发下最终数据正确。

9、拼多多大促时,如何用Redis+消息队列做库存扣减与订单异步创建?

1. 预热:大促前把商品库存加载到Redis,设置库存key
2. 预扣库存:用户下单,Redis执行Lua脚本原子扣减库存,防止超卖
3. 发消息:库存扣减成功,发送订单创建消息到RocketMQ/RabbitMQ
4. 异步下单:MQ消费者接收消息,数据库创建订单、扣减真实库存
5. 兜底补偿:- 库存不足直接返回失败;
- MQ消息重试+死信队列,订单创建失败补偿;
- Redis定时校验库存和数据库库存,不一致则校正;
6. 限流降级:Redis令牌桶限流,防止超大量请求打垮系统
 
核心关键点
 
- Lua脚本保证Redis库存扣减原子性;
- MQ削峰,异步创建订单,提升并发;
- 最终一致性,保证库存和订单数据一致。

10、 手写算法:反转单链表
// 单链表节点
class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

// 迭代写法(面试首选)
public ListNode reverseList(ListNode head) {
    ListNode pre = null;
    ListNode cur = head;
    while (cur != null) {
        ListNode next = cur.next; // 保存下一个节点
        cur.next = pre; // 反转指针
        pre = cur;
        cur = next;
    }
    return pre;
}

// 递归写法
public ListNode reverseListRecur(ListNode head) {
    if (head == null || head.next == null) return head;
    ListNode newHead = reverseListRecur(head.next);
    head.next.next = head;
    head.next = null;
    return newHead;
}
 
 
// 测试用例
// 1→2→3→4→5  反转成  5→4→3→2→1 ;空链表、单节点链表都要覆盖。

#大数据 #软件外包 #职场 #AI

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐