Java面试高频问题(11-15)

 十一、分布式事务最终一致性方案对比

 

 核心实现模式

 方案        技术原理         适用场景         核心缺陷 

 TCC:(TryConfirmCancel)  业务阶段补偿机制 跨服务强一致性 开发成本高,幂等性难保证 

 本地消息表:  事务消息+本地日志 异步最终一致性 消息堆积处理复杂 

 Saga模式:  长事务拆分为本地事务链 跨系统长流程事务 补偿逻辑复杂度高 

 

java

// Seata AT模式示例

@GlobalTransactional

public void createOrder(Order order) {

    // 1. 扣减库存(本地事务)

    inventoryService.deductStock(order.getProductId());

    // 2. 创建订单(本地事务)

    orderDao.insert(order);

    // 3. 写入分支事务记录到TC

}

 

 关键技术点

1. Seata AT模式:通过代理数据源实现全局锁与回滚日志

2. 消息事务可靠性:RocketMQ的事务消息两阶段提交

3. 幂等性设计:唯一流水号+状态机控制

 

 十二、缓存穿透/雪崩/击穿解决方案对比

 

 核心防御策略

 问题类型       产生原因     解决方案   技术选型建议 

 缓存穿透: 恶意查询不存在数据 布隆过滤器+空值缓存 RedisBloom+Guava Cache 

 缓存雪崩 :大量缓存同时失效 随机过期时间+多级缓存 Caffeine+Redis集群 

 缓存击穿:  热点key集中失效 互斥锁+逻辑过期 Redisson分布式锁 

 

java

// 布隆过滤器防穿透实现

public Object getData(String key) {

    if (!bloomFilter.mightContain(key)) {

        return null;

    }

    Object value = redisTemplate.opsForValue().get(key);

    if (value == null) {

        value = db.query(key);

        if (value != null) {

            redisTemplate.opsForValue().set(key, value, 300, TimeUnit.SECONDS);

        } else {

            // 写入空值标记

            redisTemplate.opsForValue().setex(key, 60, "NULL", 60, TimeUnit.SECONDS);

        }

    }

    return value;

}

 

 高级技巧

1. 二级缓存架构:Caffeine本地缓存+Redis分布式缓存

2. 逻辑过期:缓存数据附加时间戳实现延迟双删

3. 热点Key探测:Redis的keyspace通知+监控统计

 

 

 十三、Netty线程模型与性能优化

 

 Reactor线程架构

mermaid

graph TD

    AMain Reactor -->Accept BSub Reactor1

    A -->Accept CSub Reactor2

    B --> DIO Thread Pool

    C --> EIO Thread Pool

    D --> F业务线程池

    E --> F

 

 核心参数调优

1. ChannelOption.SO_BACKLOG:服务端SYN队列长度(建议2048)

2. TCP_NODELAY:禁用Nagle算法减少小包延迟

3. ALLOCATOR:使用PooledByteBufAllocator降低内存碎片

 

java

// Netty服务端启动示例

EventLoopGroup bossGroup = new NioEventLoopGroup(1);

EventLoopGroup workerGroup = new NioEventLoopGroup();

try {

    ServerBootstrap b = new ServerBootstrap();

    b.group(bossGroup, workerGroup)

     .channel(NioServerSocketChannel.class)

     .option(ChannelOption.SO_BACKLOG, 2048)

     .childHandler(new ChannelInitializer<SocketChannel>() {

         @Override

         protected void initChannel(SocketChannel ch) {

             ch.pipeline().addLast(new HttpServerCodec());

         }

     });

    ChannelFuture f = b.bind(8080).sync();

    f.channel().closeFuture().sync();

} finally {

    bossGroup.shutdownGracefully();

    workerGroup.shutdownGracefully();

}

 

 性能优化点

1. 零拷贝:FileRegion+CompositeByteBuf组合使用

2. 内存池化:重复利用ByteBuf减少GC压力

3. 线程绑定:EventLoop处理固定Channel避免锁竞争

 

十四、Spring Cloud Alibaba Sentinel熔断降级

 

 核心工作原理

mermaid

graph LR

    A资源调用 --> B{QPS>阈值?}

    B -->是 C滑动窗口统计

    C --> D{异常比例>5%?}

    D -->是 E触发熔断

    E --> F快速失败返回

    F --> G半开状态探测

 

 关键配置参数

 参数           默认值           说明 

 grade :1 0慢调用比例,1异常比例 

 count :5 熔断阈值 

 timeWindow :5s 熔断持续时间 

 minRequestAmount :5 触发熔断最小请求数 

 

java

// 自定义流控规则

FlowRule rule = new FlowRule();

rule.setResource("getUserInfo");

rule.setGrade(RuleConstant.FLOW_GRADE_QPS);

rule.setCount(100);

FlowRuleManager.loadRules(Collections.singletonList(rule));

 

 高级特性

1. 系统自适应保护:基于系统负载动态调整阈值

2. 关联限流:根据调用关系进行链路限流

3. 预热模式:渐进式提高允许QPS

 

 十五、分布式消息事务可靠性保障

 

 事务消息实现流程

mermaid

sequenceDiagram

    事务发起方->>MQ: 发送半消息

    MQ-->>事务发起方: 返回消息ID

    事务发起方->>业务系统: 执行本地事务

    事务发起方->>MQ: 提交/回滚消息

    alt 事务提交

        MQ->>消费者: 投递可读消息

    else 事务回滚

        MQ-->>消费者: 删除消息

    end

 

 核心可靠性保障

1. 生产者端:本地事务表+异步消息回查

2. 服务端:事务消息状态机管理

3. 消费者端:消息幂等消费处理

 

java

// RocketMQ事务消息示例

TransactionMQProducer producer = new TransactionMQProducer("transaction_group");

producer.setTransactionListener(new TransactionListener() {

    @Override

    public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {

        // 执行本地事务

        boolean success = localTransaction();

        return success ? LocalTransactionState.COMMIT : LocalTransactionState.ROLLBACK;

    }

 

    @Override

    public LocalTransactionState checkLocalTransaction(MessageExt msg) {

        // 事务回查

        return checkTransactionStatus(msg);

    }

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值