Java面试高频问题(26-28)

二十六、熔断降级框架:Hystrix与Sentinel对比

核心机制对比

特性 Hystrix Sentinel

隔离策略 线程池隔离 信号量/线程池混合隔离

熔断策略 错误比例熔断 异常比例/异常数/慢调用熔断

实时规则配置 支持 支持动态规则(Nacos集成)

流量控制 不支持 滑动窗口计数器

java

// Sentinel流控规则配置示例

FlowRule rule = new FlowRule();

rule.setResource("order_create");

rule.setGrade(RuleConstant.FLOW_GRADE_QPS);

rule.setCount(100); // QPS阈值

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

核心架构差异

mermaid

graph LR

Hystrix-->线程池隔离A依赖服务

Sentinel-->信号量控制B依赖服务

Hystrix-->熔断回退CFallback逻辑

Sentinel-->实时监控D控制台

源码深度解析

  1. Hystrix:`HystrixCommand`通过`execute()`方法触发熔断逻辑,依赖`CircuitBreaker`状态机

  2. Sentinel:`Entry`入口对象调用`SphU.entry()`触发资源统计,`DegradeRuleManager`管理熔断规则

二十七、Service Mesh架构:Istio数据面通信原理

核心通信流程

  1. 服务发现:Pilot通过xDS协议下发服务路由规则

  2. 流量劫持:iptables重定向流量到Envoy代理

  3. 遥测数据:Envoy上报指标到Prometheus

性能优化点

  1. Sidecar资源控制:通过`resources.limits`限制CPU/Memory

  2. mTLS双向认证:使用SPIFFE标识服务身份

  3. WASM扩展:用WebAssembly实现自定义过滤器

二十八、热点数据治理:缓存击穿与雪崩防护

高并发场景解决方案

问题类型 解决方案 技术实现

缓存击穿 互斥锁+永不过期 Redis SETNX + 异步更新

缓存雪崩 随机过期时间+热点Key拆分 Caffeine二级缓存

数据一致性 双删策略+延迟双删 MySQL binlog监听

java

// 互斥锁实现缓存击穿防护

public Object getData(String key) {

Object value = redis.get(key);

if (value == null) {

if (redis.setnx("lock:" + key, "1")) {

try {

value = db.query(key);

redis.setex(key, 3600, value);

} finally {

redis.del("lock:" + key);

}

} else {

Thread.sleep(50);

return getData(key);

}

}

return value;

}

进阶挑战

  1. 多级缓存同步:Redis+LocalCache+MQ实现最终一致性

  2. 冷热数据分离:Redis ZSET按访问频率分层存储

  3. 自动降级策略:Sentinel动态切换数据源

相关推荐
:-)33 分钟前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
wuqingshun3141591 小时前
说一下消息队列的模型有哪些?
java
fīɡЙtīиɡ ℡2 小时前
布隆过滤器
java
yaoxin5211232 小时前
462. Java 反射 - 获取声明类与封闭类
java·开发语言·python
kyriewen2 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
wuqingshun3141594 小时前
MYSQL的乐观锁和悲观锁是什么?
java
Jerry4 小时前
LeetCode 101. 对称二叉树
算法
黄敬峰5 小时前
从零搭建 RAG 应用 —— 一个故事带你彻底搞懂检索增强生成
面试
唐青枫5 小时前
Java SLF4J 实战指南:从日志门面到 Logback、MDC 和链路追踪
java
众人皆醒我独醉5 小时前
etcd,其实不是你以为的"数据库"——Kubernetes 大脑的六个反直觉真相
面试·kubernetes