Java后端面试题(微服务相关2)(day13)

news2024/9/24 5:51:18

目录

  • Gateway的三大属性
  • Gateway的三大案例组件
  • 为什么要用服务网关
  • 不同服务之间如何进行通信
  • 在微服务中如何监控服务
  • Openfeign如何使用
  • Openfeign自定义拦截器
  • Seata中2PC和3PC的区别
  • 项目的几种发布方式和特点
  • MongoDB和mysql区别
  • 什么是分布式锁,Redisson有什么用?
  • 下单请求三重防重

Gateway的三大属性


  1. 路由(route):由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则转发到该路由

  2. 断言(Predicate): 路由的筛选条件,允许开发人员匹配 HTTP 请求中的任何内容,比如请求头、请求参数或请求路径

    匹配条件

  3. 过滤器(filter):可以在返回请求之前或之后修改请求和响应的内容

    • 生命周期
      1. PRE:前置过滤器,在请求被路由目标服务之前调用
      2. POST:后置过滤器,在路由到微服务以后执行
    • 作用范围
      1. 局部过滤器: GatewayFilter,应用到单个路由或者一个分组的路由上(需要在配置文件中配置)
      2. 全局过滤器: GlobalFilter,应用到所有的路由上(无需配置,全局生效)

Gateway的三大案例组件


  1. LogTime:下游接口耗时
  2. TokenGlobalFilter:全局Token认证
  3. TraceGlobalFilter:traceId全局链路跟踪

为什么要用服务网关

  1. 简化客户端的工作
  2. 降低函数间的耦合度
  3. 解放开发人员把精力专注于业务逻辑的实现

不同服务之间如何进行通信


可以使用OpenFeign来实现不同服务之间的通信。

OpenFeign是一个声明式的Web客户端,它可以简化编写Web服务客户端的代码。它是Spring Cloud的一部分,主要用于简化与RESTful服务的集成。

在微服务中如何监控服务


可使用Skywalking实现服务监控,Skywalking是一个分布式系统的应用程序性能监控工具 (Application Performance Managment),提供了完善的链路追踪能力。

  1. skywalking主要可以监控接口、服务、物理实例的一些状态,特别是在压测的时候可以看到众多服务中哪些服务和接口比较慢
  2. skywalking还可以设置告警规则,如果项目出现bug可对开发人员进行通知,以便在第一时间进行修复

Openfeign如何使用


  1. 引入依赖
  2. 编写FeignClient接口
  3. 在启动类中开启对OpenFeign注解的支持
  4. 注入FeignClient
  5. 发起调用,像调用本地方法一样调用远程服务

Openfeign自定义拦截器


可以通过在OpenFeign中自定义拦截器的方式,来实现服务远程调用过程中的日志输出、认证授权等应用。

自定义拦截器步骤:

  1. 继承RequestInterceptor
  2. 实现apply方法,编写相应逻辑
  3. 将拦截器类放入Ioc容器中
    拦截器

Seata中2PC和3PC的区别


XA协议包括两阶段提交(2PC)和三阶段提交(3PC)两种实现

  • 2PC(二阶段提交协议)

    1. 第一阶段:预提交阶段
      由事务协调者询问通知各个事务参与者,是否准备好了执行事务
    2. 第二阶段:提交阶段
      协调者收到各个参与者的准备消息后,根据反馈情况通知各个参与者commit提交或者rollback回滚
  • 3PC(三阶段提交协议)

    1. 第一阶段:准备阶段
      协调者向参与者发送 canCommit 请求,判断是否具备执行条件,参与者如果可以提交就返回Yes响应,否则返回No响应
    2. 第二阶段:预提交阶段
      协调者根据参与者的反应情况来决定是否可以进行事务的 PreCommit 操作
    3. 第三阶段:提交阶段
      协调接收到所有参与者发送的ACK响应,根据反馈情况通知各个参与者commit提交或者rollback回滚
  • 区别:与2PC相比,3PC降低了阻塞时长,加入了超时机制,并且在等待超时后,协调者或参与者会中断事务,避免了协调者单点问题,阶段三中协调者出现问题时,参与者会继续提交事务,但是数据不一致问题仍然存在。

项目的几种发布方式和特点


  • jar包发布
    jar包发布过于依赖于环境
  • docker发布
    docker发布虽然解决了环境依赖问题,但是不好管理
  • k8s发布
    k8s发布可以进行流量监控,针对流量规模对容器进行自动伸缩,可以热部署,可结合cicd自动发布,容器的自动化编排,还可以在yaml配置文件里设置调优参数

MongoDB和mysql区别


  1. MongoDB是文档型非关系型数据库,mysql是关系数据库。
  2. MongoDB比较灵活,相比mysql不用建表就可以直接进行存储,针对变化比较频繁的场景,MongoDB比较适合。
  3. 使用场景不同,MongoDB是首页,包括我们的一些活动页,快速开发,快速迭代,MongoDB后台。

什么是分布式锁,Redisson有什么用?


分布式锁 确保在同一时间只有一个节点能获得对共享资源的独占访问权限,从而解决并发访问问题。

Redisson锁,简称看门狗,通过对分布式锁进行独特的续命机制,既避免了锁的时间过长造成的效率低下,又避免了锁的时间不够,业务未执行完时资源被其他线程抢占的问题。

原理:当锁的剩余时间到某个阈值时,业务仍未执行完,就会对锁进行续命,延长锁的时间,直至业务执行完成。

下单请求三重防重


  • 前端:用户点击下单后显示loading层,或者按钮置灰,防止重复发送请求
  • 后端
    1. redis分布式锁:处理完该用户一个下单请求后会设置一个分布式锁(比如实际场景中一般5秒内不会下单两次)
    2. Redisson锁(看门狗):如果业务执行时间超过五秒,就会通过看门狗机制对锁进行续命,直到业务执行结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能面试题(Artificial Intelligence Algorithm Interview Questions)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

JavaWeb--纯小白笔记06:使用Idea创建Web项目,Servlet生命周期,注解,中文乱码解决

使用Idea创建一个web项目----详细步骤配置,传送门:http://t.csdnimg.cn/RsOs7 src:放class文件 web:放html文件 out:运行过后产生的文件 一创建一个新的web项目(配置好了后): 在src创建一个文件…

使用【Sa-Token】实现Http Basic 认证

使用Sa-Token开源架构快速实现Http Basic 认证&#xff0c;如上图 1、springboot环境下直接添加starter即可 <!-- Sa-Token 权限认证&#xff0c;在线文档&#xff1a;https://sa-token.cc --> <dependency><groupId>cn.dev33</groupId><artifactI…

基于gorm.io/sharding分表中间件使用案例

项目背景 项目中需要用到mysql的分表场景&#xff0c;调研了一些常用的分库分表中间件&#xff0c;比如&#xff0c;mycat&#xff0c;小米的Gaea&#xff0c;这两个中间件太重了&#xff0c;学习成本较大&#xff0c;另外mycat不是go写的。我们需要一个轻量级的go版本的分表中…

Docker与Kubernetes学习

基本概述 Docker 是一个流行的容器化平台&#xff0c;允许开发人员在容器中创建、部署和运行应用程序。 Docker 提供了一组工具和 API&#xff0c;使开发人员能够构建和管理容器化应用程序&#xff0c;包括 Docker Engine、Docker Hub 和 Docker Compose。 Kubernetes 是一个…

MySQL如何实现并发控制?(上)

前言 最开始学习数据库的时候都会被问到一个问题&#xff1a;“数据库系统相比与文件系统最大的优势是什么&#xff1f;”。具体的优势有很多&#xff0c;其中一个很重要的部分是&#xff1a;数据库系统能够进行更好的并发访问控制。 那么&#xff0c;数据库系统到底是怎么进…

yolov5-7转onnx并推理(包括缩放图推理与原始图片推理)

一、yolov5转onnx 先安装onnx, onnxruntime-gpu, ( pip install 就可以) 1. 静态模型&#xff1a; python export.py --weights yolov5s.pt --include onnx2.动态模型&#xff1a; python export.py --weights yolov5s.pt --include onnx --dynamic3.这里谈谈静态与动态的…

在虚幻引擎中实时显示帧率

引擎自带了显示帧率的功能 但是只能在编辑器中显示 , 在游戏发布后就没有了 , 所以我们要自己做一个 创建一个控件蓝图 创建画布和文本 , 修改文本 文本绑定函数 , 点击创建绑定 添加一个名为 FPS 的变量 格式化文本 用大括号把变量包起来 {FPS Int} FPS 然后转到事件图表…

【html】基础(一)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

怎么录制游戏视频?精选5款游戏录屏软件

对于热爱游戏的你来说&#xff0c;记录游戏中的精彩瞬间并分享给朋友或粉丝&#xff0c;无疑是一种享受。然而&#xff0c;在众多录屏软件中&#xff0c;如何选择最适合你的那一款&#xff1f;今天&#xff0c;我们就为大家精选了五款游戏录屏软件&#xff0c;需要的朋友快来选…

【LeetCode:1014. 最佳观光组合 + 思维题】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

EfficientFormer实战:使用EfficientFormerV2实现图像分类任务(一)

摘要 EfficientFormerV2是一种通过重新思考ViT设计选择和引入细粒度联合搜索策略而开发出的新型移动视觉骨干网络。它结合了卷积和变换器的优势&#xff0c;通过一系列高效的设计改进和搜索方法&#xff0c;实现了在移动设备上既轻又快且保持高性能的目标。这一成果为在资源受…

【Python报错已解决】NameError: name ‘variable‘ is not defined

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

把任务管理器里面的vmware usb arbitrition停了,虚拟机一直识别不到手机设备了

在设备管理器--服务 里面找到VMware usb arbitrition服务&#xff0c;点击“启用”就好了。 参考大佬的文章&#xff1a; 吐血经验&#xff01;&#xff01;&#xff01;解决虚拟机连不上USB&#xff01;最全&#xff01;_为什么vmware虚拟机不能连接上usb设备-CSDN博客

C语言 | Leetcode C语言题解之第432题全O(1)的数据结构

题目&#xff1a; 题解&#xff1a; //哈希队列 //哈希检查是否存在 //双编标维护次数顺序 #define MAXSIZE 769/* 选取一个质数即可 */ typedef struct hashNode {char* string; //字符串int count; //次数struct doubleListNode* dList;str…

箭头与数字识别系统源码分享

箭头与数字识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

JavaScript 安装库npm报错

今天在编写JavaScript代码时&#xff0c;缺少了包express。 const express require(express); const app express();app.get(/, (req, res) > {res.send(Hello, world!); });app.listen(3000, () > {console.log(Server is running on port 3000); });npm install exp…

【C++指南】C++中nullptr的深入解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 一、nullptr的引入背景 二、nullptr的特点 1.类型安全 2.明确的空指针表示 3.函数重载支…

从决策树到GBDT、随机森林

何为决策树 决策树&#xff08;Decision Tree&#xff09;&#xff0c;它是一种以树形数据结构来展示决策规则和分类结果的模型&#xff0c;作为一种归纳学习算法&#xff0c;其重点是将看似无序、杂乱的已知数据&#xff0c;通过某种技术手段将它们转化成可以预测未知数据的树…

3D 模型GLTF、GLB格式文件介绍使用

一、介绍 GLTF&#xff08;GL Transmission Format&#xff09;和 GLB&#xff08;GL Binary&#xff09;是用于在 Web 和各种应用程序中传输和加载 3D 场景和模型的开放标准格式。它们由 Khronos Group 开发&#xff0c;旨在提供一种高效、可扩展且易于使用的 3D 内容格式。以…