当前位置: 首页 > news >正文

北京明光云振铎数据科技Java面经

Nacos、OpenFeign、Gateway 三个组件的作用及协作流程

首先:

  • Nacos 主要负责服务注册发现和配置中心
  • Gateway 作为统一网关入口,负责路由、鉴权、限流
  • OpenFeign 负责服务之间的远程调用

用户请求先进入 Gateway

Gateway 会先做 JWT 鉴权,比如校验 token 是否合法,然后解析 userId,通过 Header 透传给后面的微服务。之后 Gateway 会根据路由规则,把请求转发到对应服务。

这个时候 Gateway 并不是写死 IP,而是通过 Nacos 获取服务实例列表,实现动态服务发现和负载均衡。

比如:

/api/order/** → cloud-service-order

真正调用时:

Gateway 会从 Nacos 拿到 order-service 的实例。

后面如果 order-service 需要调用 user-service:

就会通过 OpenFeign 发起 RPC 调用。

OpenFeign 底层同样会从 Nacos 获取 user-service 的实例地址,然后通过 LoadBalancer 做负载均衡。所以整体链路是:

Client → Gateway → Nacos 服务发现 → OrderService → OpenFeign → UserService

这样整个系统就具备:

  • 服务解耦
  • 统一入口治理
  • 配置动态管理

MySQL 慢查询如何分析?索引优化有哪些?

1.查看慢查询日志

2.explain对应的sql查询语句

3. 分析是否命中索引
4. 分析索引是否失效
5. 分析是否存在回表 ( filesort / temporary)

6.判断是否需要分库分表优化
7.查看是不是数据库连接池满了导致的偶尔慢查询

Redis 缓存穿透、击穿、雪崩的区别及解决方案

缓存穿透:是查询一个不存在的数据。

因为缓存和数据库都没有,请求会直接打到数据库。

解决方案一般是:

  • 缓存空值(redis缓存空值)
  • 布隆过滤器

缓存击穿:是某个热点 key 突然失效。

大量请求同时访问数据库,这个是高并发场景最危险的。

解决方案:

  • Redis 分布式锁(setnx + expire+Lua 保证原子性)
  • 热点数据永不过期

缓存雪崩:是大量 key 同时过期,导致数据库瞬间压力暴增。

解决方案:

  • 过期时间随机化
  • 多级缓存
  • 熔断降级
  • 限流保护

定时任务的实现方式;如何避免集群环境下任务重复执行?如何防止任务堆积?

我项目里定时任务用的是 XXL-JOB。

调度中心统一触发任务,业务服务作为执行器 Executor注册到调度中心。

这样在集群环境下,调度中心会根据路由策略选择某个执行器节点执行任务,不会让每个节点都各自执行一遍。

比如我会配置:

路由策略:第一个 / 轮询 / 一致性 Hash / 分片广播 阻塞处理策略:单机串行 失败重试次数:有限次数

其中避免重复执行主要靠两点:

第一,任务不是每个节点自己触发,而是由 XXL-JOB 调度中心统一调度

第二,对于同一个任务,可以配置单机串行,避免上一次还没执行完,下一次又重复触发。

依赖包引入导致脏数据的识别规则及自动清理实现方式

识别规则

1. 唯一性校验
比如用户 id、手机号、业务单号不能重复。
2. 完整性校验
必填字段不能为空,比如 userId、tenantId、status。
3. 时间有效性校验
比如过期数据、历史版本数据不能覆盖新数据。

自动清理实现上,我一般不会直接物理删除,而是采用:

定时任务扫描
→ 按规则识别脏数据
→ 标记为 DIRTY / INVALID
→ 记录清理日志
→ 异步清理或人工复核

数据更新时,如何保证用户服务中缓存数据及时清除与更新?

用户数据更新时,我不会直接更新缓存,而是先更新数据库,再删除缓存。

因为缓存本身是派生数据,数据库才是主数据源。

具体流程是:

用户服务更新 MySQL 成功后,删除 Redis 中的缓存

如果系统有多级缓存,还会发布 MQ 消息,让其他服务或其他节点删除本地缓存


对于并发场景,可以加延迟双删,降低旧数据重新写入缓存的概率。

延迟双删是什么

“更新数据库后,删除两次缓存”

如何用Java 和 Redis 实现滑动窗口限流器

我会用 Redis 的 ZSET 实现滑动窗口限流。

ZSET 的 score 存请求时间戳,member 存请求唯一标识。

每次请求进来,先删除窗口外的旧请求,再统计当前窗口内请求数量。

如果数量超过阈值,就拒绝;如果没超过,就把当前请求写入 ZSET。

由于删除、统计、判断、写入这几个操作必须保证原子性,所以我会用 Lua 脚本在 Redis 端一次性执行,避免并发场景下限流失效。

http://www.jsqmd.com/news/826600/

相关文章:

  • 项目七: 配置与管理Web服务器(2) C2
  • 长期使用Taotoken后对月度账单与用量分析的感受
  • LaTeX-PPT:如何在3分钟内将专业数学公式融入PowerPoint演示
  • 从WCGW代码事故集看软件开发的常见陷阱与防御性编程实践
  • 沧州散热器测评:河北卓兴质量优但创新稍慢,综合得分领先其他
  • 零基础OpenClaw 小龙虾连接企业微信图文教程
  • 硬件预取技术:Alecto框架优化与性能提升
  • AI智能体安全防护:AgentGuard如何保障工具调用安全与可控
  • 汽车MCU调试接口技术解析与工程实践
  • PCB 设计避坑指南|从基础规范到制造验证,一文吃透所有核心规则
  • 行业复盘|高端金融礼盒设计逻辑拆解:民生银行百夫长黑金卡案例
  • 你还在手写提示词?:2024最稀缺的提示词自动化工作流(含可运行Python脚本+权重映射API)
  • WarcraftHelper终极指南:魔兽争霸3优化工具完整教程
  • 等保2.0安全通用要求第二级别之安全管理人员
  • Midjourney V6未来主义出图失控?:4步精准锁定风格漂移根源并重建可控生成管线
  • SoC 原理图与 PCB 设计实战课程大纲
  • 2026 断桥铝系统门窗选购指南:品牌综合实力榜与技术选型要点
  • 初学者如何初识 Git?
  • 红杉资本 AI Ascent Keynote | 2026: This is AGI
  • 游戏开发SDK架构解析:从薄层抽象到性能优化实战
  • 在Taotoken控制台中管理多项目API密钥与查看实时用量数据的操作指南
  • 2026年4月市场评价好的母线槽源头厂家推荐,插接式母线槽/梯式桥架/玻璃钢桥架/桥架/镀锌桥架,母线槽实力厂家哪家好 - 品牌推荐师
  • 【DeepSeek生产级ArgoCD配置白皮书】:覆盖RBAC、GitOps策略、回滚SLA与审计日志的9项强制规范
  • 四旋翼无人机安全控制:CBF与双相对度系统实践
  • 全网首份DeepSeek-MMLU交叉验证报告:在真实业务场景中,高分≠高可用——5类典型失败案例与鲁棒性加固方案
  • 广州娱乐器具哪家推荐
  • Delphi7 突破局限!借助Python扩展程序能力。
  • 自定义实现 vxe-table 展开子表格的树结构复选框
  • 集成三相桥驱动的MCU:AiP8F7201电机控制方案解析
  • 去人类中心主义研究引擎:多模态知识图谱与跨学科关联发现