SpringCloud Alibaba(2021.0.1版本)微服务-OpenFeign以及相关组件使用(保姆级教程)
💻目录
- 前言
- 一、简绍
- 二、代码实现
- 1、搭建服务模块
- 1.1、建立父包
- 1.2、建立两个子包(service-order、service-product)
- 1.3、添加util 工具类
- 2、添加maven依赖和yml配置文件
- 2.1、springcloud-test父包配置
- 2.2、服务模块配置
- 2.2.1、service-order订单模块配置
- 2.2.1、service-product产品模块配置
- 2.2.1、service-util工具模块配置
- 3、添加service-util工具模块代码
- 3.1、添加实体
- 3.2、添加统一返回类
- 4、添加service-order功能代码
- 4.1、启动类
- 4.2、添加配置类
- 4.3、添加controller
- 4.4、添加feign进行远程调用
- 4.5、添加ProductFeignClientImpl(用于熔断时降级)
- 5、添加service-product服务功能代码
- 5.1、启动类
- 5.2、添加controller
- 5.3、添加service
- 三、功能测试
- 1、启动服务,
- 2、接口测试
前言
🌟 本套mode使用的是Alibaba的2021.0.1版,springboot的2.6.3实现(适用于springboot 2.7~2.4),使用到的组件包括OpenFeign(实现远程调用)、loadbalancer(负载均衡)、hystrix(熔断降级)、nacos(注册中心)
nacos的安装和基本配置使用可以查看我这篇博客,或者关注下面的专栏后续会持续更新其他的Spring Cloud 组件介绍以及使用
🍅Nacos下载与安装配置(2.2.3版本示例)
🥒Spring Cloud Alibaba专栏
一、简绍
openFeign是要声明式的web服务客户端,或叫做声明式REST客户端,它让编写web服务客户端变得简单。
能够干什么?
可以让我们实现调用别的服务模块像调用本地模块接口一样方便,并且在配合上
loadbalancer可以实现负载均衡的效果,实现集群化部署,避免请求全部到一个服务;并且通过hystrix实现一个服务降级到效果,可以当请求过多无法按时返回时,实现一个服务降级到效果,以及通过nacos实现一个服务注册的效果。
实现原理
OpenFeign在进行远程调用时主要是采用一种动态代理的方式实现,项目启动时其实就会把被 @FeignClient修饰的接口生成一个代理对象,全部注入到spring容器中,然后在被调用时,在内部会通过这个代理对象把接口调用转化为一个远程调用到 的Request,并发送给目标服务。
具体代理实现原理可以看下面这个博主讲解,相对比较详细
OpenFeign基本介绍和原理了解
二、代码实现
1、搭建服务模块
1.1、建立父包
- 首先建立一个父包,用于指定统一版本,避免出现版本
⭐记得使用maven方式建立,然后去自己加依赖指定版本,不同版本之间差距很大

1.2、建立两个子包(service-order、service-product)
记得依赖父包,便于指定版本
- service-order(订单模块)
-
service-product(产品模块)

-
1.3、添加util 工具类
用于存放统一的model以及统一返回工具类一些其他的工具类

2、添加maven依赖和yml配置文件
spring的 Spring Boot 3.0,Spring Boot 2.7~2.4和 2.4 是变化比较大的版本,我的这个架构依赖适用于Spring Boot 2.7-2.4之间的版本的,因为
SpringCloudFeign在Hoxton.M2RELEASED版本之后抛弃了Ribbon,使用了spring-cloud-loadbalancer,变动会比较大,也就是Spring Boot 2.4以后都使用的spring-cloud-loadbalancer做的远程调用
- 因为ribbon以及部分组件目前已经没有更新了,所以不建议使用2.4之前的版本,而3.0的最新的也不太建议使用,因为版本过新,相对bug比较多,选择中间的就好
具体需要查看自己spring对应的组件版本可以查看
springcloud组件版本对应说明

2.1、springcloud-test父包配置
- maven
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>springcloud-test</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>service-order</module><module>service-product</module><module>service-util</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from repository --></parent><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><cloud.version>2021.0.1</cloud.version><alibaba.version>2021.0.1.0</alibaba.version><mysql.version>8.0.30</mysql.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
</project>
2.2、服务模块配置
2.2.1、service-order订单模块配置
因为为了测试方便,我没有使用到数据库,所以就没加sql相关的依赖和配置,如果自己需要使用到,自行添加就行
- maven
2.4之前openfeign是内置了Ribbon是可以不用加loadbalancer依赖的,但之后的版本弃用了,所以需要添加
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-test</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>service-order</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>provided</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
<!-- 远程调用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><scope>provided</scope></dependency><!-- nacos 服务注册 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
<!-- 引用util工具包--><dependency><groupId>org.example</groupId><artifactId>service-util</artifactId><version>1.0-SNAPSHOT</version></dependency>
<!-- 熔断降级--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><version>2.2.9.RELEASE</version></dependency><!-- 负载均衡--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>
</project>
- yml
配置注册nacos和feign开启负载均衡和熔断的相关配置
server:port: 8201spring:application:name: service-orderprofiles:active: dev# nacos配置cloud:nacos:discovery:server-addr: localhost:8848
# 开启负载均衡(默认是不开启的)
feign:circuitbreaker:enabled: true# 熔断配置
hystrix:command:default:execution.isolation.thread.timeoutInMilliseconds: 3000 # 设置Hystrix超时时间(毫秒)ProductFeignClient#getProducts:execution.isolation.thread.timeoutInMilliseconds: 1000 # 为特定的Feign方法设置超时时间
2.2.1、service-product产品模块配置
-mavne的依赖和xml和前面的order模块一样,就是端口和name不同
server:port: 8203spring:application:name: service-product# 注入到nacoscloud:nacos:discovery:server-addr: localhost:8848
2.2.1、service-util工具模块配置
- maven
加个lombok就行,没有yml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>springcloud-test</artifactId><groupId>org.example</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>service-util</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency></dependencies>
</project>
3、添加service-util工具模块代码
3.1、添加实体
- OrderInfo
@Data
public class OrderInfo {private Long id;/**订单号*/private String orderNo;/**产品列表*/private List<ProductInfo> productInfoList;/**收货人姓名*/private String receiverName;
}
- ProductInfo
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductInfo {private Long id;/**销量*/private Integer sale;/**价格*/private Integer price;/**名称*/private String name;/**类型*/private Integer type;/**端口*/private Integer port;
}
3.2、添加统一返回类
- Result
@Data
public class Result<T> {//状态码private Integer code;//信息private String message;//数据private T data;private Result(){}//设置数据,返回对象的方法public static <T> Result<T> build(T data, ResultCodeEnum resultCodeEnum) {//创建Result对象,设置值,返回对象Result<T> result = new Result<>();//判断返回结果中是否需要数据if (data != null) {//设置数据到result对象result.setData(data);}//设置其他值result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());//返回设置值之后的对象return result;}//成功的方法public static <T> Result<T> ok(T data) {return build(data, ResultCodeEnum.SUCCESS);}//成功的方法public static <T> Result<T> ok() {return build(null, ResultCodeEnum.SUCCESS);}//失败的方法public static <T> Result<T> fail(T data) {return build(data, ResultCodeEnum.FAIL);}
}
- ResultCodeEnum
@Getter
public enum ResultCodeEnum {SUCCESS(200,"成功"),FAIL(201, "失败"),;private Integer code;private String message;ResultCodeEnum(Integer code, String message) {this.code = code;this.message = message;}
}
4、添加service-order功能代码
4.1、启动类
- 添加feign和nacos注解
@SpringBootApplication
@EnableDiscoveryClient //启动nacos注解
@EnableFeignClients //开启feign的客户端
public class ServiceOrderApplication {public static void main(String[] args) {SpringApplication.run(ServiceOrderApplication.class,args);}}
4.2、添加配置类
- 添加LoadBalancedConfig 负载均衡
用于配置负载均衡,负载均衡的策略这里写了两个,也可以使用权重或者自定义策略;还有远程调用时的重试策略相关配置,
Default()方法可以传参数自行配置
@Configuration
public class LoadBalancedConfig {/*** 配置负载均衡策略* @param environment* @param loadBalancerClientFactory* @return ReactorLoadBalancer<ServiceInstance>*/@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
// 轮询负载均衡RoundRobinLoadBalancer roundRobinLoadBalancer = new RoundRobinLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);
// 随机
// RandomLoadBalancer randomLoadBalancer = new RandomLoadBalancer(loadBalancerClientFactory
// .getLazyProvider(name, ServiceInstanceListSupplier.class),
// name);return roundRobinLoadBalancer;}/*** 请求失败时,默认重试策略(默认重试5次)* @Param * @param null* @return*/@Beanpublic Retryer feignRetryer(){//每次重试之间等待 500 毫秒。//最大等待时间为 1 毫秒。// 最多尝试 3 次。return new Retryer.Default(500,1,3);}
}
4.3、添加controller
添加了两个接口,一个是用于测试,当前模块是否可以正常被调用接口的,一个是测试远程调用是否会有问题,并且也没有写service层,直接进行调用feign进行远程调用
@RestController
@RequestMapping("/admin/acl/index")
public class index {@Resourceprivate ProductFeignClient productFeignClient;/*** 测试订单服务是否有问题* @author yingfeng* @return * @return Result*/@PostMapping("/login")public Result login(){HashMap<String, String> map = new HashMap<>(16);map.put("token","token-admin");System.out.println();return Result.ok(map);}/*** 测试远程调用接口的接口* @version 1.0*/@GetMapping("/getorderinfo/{type}")public Result getrderinfo(@PathVariable Integer type){OrderInfo orderInfo = new OrderInfo();//因为返回的是list,所以如果远程调用超时,或者报错时,进入熔断所以会返回一个空集合List<ProductInfo> productInfoList = productFeignClient.getProductInfoList(type);if(CollectionUtils.isEmpty(productInfoList)){return Result.ok("当前人数过多,稍后重试!");}orderInfo.setOrderNo("dd131312");orderInfo.setId(1234l);orderInfo.setProductInfoList(productInfoList);orderInfo.setReceiverName("张三");return Result.ok(orderInfo);}
}
4.4、添加feign进行远程调用
@FeignClient:启用远程调用(启动类需要有@EnableFeignClients,才会生效)
- name/value:指定注册到注册中心的服务的名称,如果项目使用了负载均衡,name属性会作为微服务的名称,用于服务发现
- url: url一般用于调试,可以手动指定
@FeignClient调用的地址- fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现
@FeignClient标记的接口(也就是发生熔断时,会执行该类)
@GetMapping地址需要记得写全,,方法名称要和被调用的接口一致
@FeignClient(value = "service-product",fallback = ProductFeignClientImpl.class)
@LoadBalancerClient(name = "service-product",configuration = LoadBalancedConfig.class)
public interface ProductFeignClient {@GetMapping("/admin/Product/innet/getProductInfoList/{type}")public List<ProductInfo> getProductInfoList(@PathVariable Integer type);
}
⭐value 指定了nacos的服务名

4.5、添加ProductFeignClientImpl(用于熔断时降级)
@Slf4j
@Service
public class ProductFeignClientImpl implements ProductFeignClient {@Overridepublic List<ProductInfo> getProductInfoList(Integer type) {log.info("请求接口失败,进入熔断!");List<ProductInfo> productInfoList = new ArrayList<>();return productInfoList;}
}
5、添加service-product服务功能代码
5.1、启动类
和上面的一样,占位置就不出现放上来了
5.2、添加controller
用于给order进行远程调用接口,因为是内部调用便于取出,就直接返回对应的参数,不需要返回统一result处理类
@RestController
@RequestMapping("/admin/Product")
public class ProductInfoController {@Resourceprivate ProductInfoService productInfoService;@GetMapping("/innet/getProductInfoList/{type}")public List<ProductInfo> getProductInfoList(@PathVariable Integer type){List<ProductInfo> productInfoList = productInfoService.getProductInfoList(type);System.out.println("查询产品详情:"+productInfoList);//如果传入的类型未查询到,自定义返回一个运行时异常if (CollectionUtils.isEmpty(productInfoList)){throw new RuntimeException();}return productInfoList;}
}
5.3、添加service
- 接口
public interface ProductInfoService {List<ProductInfo> getProductInfoList(Integer type);
}
- 实现类
因为为了测试方便就没添加数据库调用代码了,这里获取端口是为了,测试查看负载均衡方便
@Service
public class ProductInfoServiceImpl implements ProductInfoService {// 获取当前服务的端口@Value("${server.port}")private Integer port;@Overridepublic List<ProductInfo> getProductInfoList(Integer type) {ProductInfo productInfo3 = new ProductInfo(3l,800,20,"哈密瓜1",1,port);ProductInfo productInfo1 = new ProductInfo(1l,50,8,"苹果1",1,port);ProductInfo productInfo2 = new ProductInfo(2l,200,13,"牛肉1",2,port);ProductInfo productInfo4 = new ProductInfo(4l,50,9,"青菜1",2,port);/* 实际项目中,会从数据库查出数据 */List<ProductInfo> productInfoList = Arrays.asList(productInfo1,productInfo2,productInfo3,productInfo4);// 根据传入的类型返回指定类型List<ProductInfo> result = productInfoList.stream().filter(productInfo -> productInfo.getType() == type).collect(Collectors.toList());return result;}
}
三、功能测试
1、启动服务,
service-order启动一个、service-product启动两个

设置访问可以并向启动

2、接口测试
- 先测试login接口,返回成功代表order没问题

- 测试getorderinfo接口
- 第一次测试

- 第二次测试,因为采用的是轮询的策略,所以会依次轮询调用该服务名称的不同服务

- 当传的type类型是3时,service-product没有这个类型,会返回自定义的异常,然后order就会进入熔断降级的代码


然后返回熔断的数据

- 如果请求超时也会进入熔断
在getProductInfoList方法上打上断点,让不能返回,实现请求超时

因为设置的是三秒未返回,所以会在三秒后进入熔断

相关文章:
SpringCloud Alibaba(2021.0.1版本)微服务-OpenFeign以及相关组件使用(保姆级教程)
💻目录 前言一、简绍二、代码实现1、搭建服务模块1.1、建立父包1.2、建立两个子包(service-order、service-product)1.3、添加util 工具类 2、添加maven依赖和yml配置文件2.1、springcloud-test父包配置2.2、服务模块配置2.2.1、service-orde…...
豆制品废水处理设备源头厂家方案
豆制品废水处理设备源头厂家方案 豆制品生产过程中产生的废水含有有机物、悬浮物、油脂等污染物,需要经过合理的处理才能达到排放标准或循环再利用。以下是一个可能的豆制品废水处理设备及方案: 1.初步处理: 格栅:用于去除大颗粒的…...
lnmp环境搭建
文章目录 一、环境信息二、LNMP环境搭建2.1 准备编译环境2.2 nginx安装2.3 mysql安装2.4 php安装2.5 nginx配置2.6 mysql配置2.7 配置php 三、常见问题3.1 安装其它版本的nginx服务3.2 php版本过低 一、环境信息 操作系统:公共镜像CentOS 7.8 64位 本文的部署配置…...
全球研发中心城市专题协商会课题调研组莅临麒麟信安考察指导
9月7日上午,长沙市政协党组副书记、副主席石长松,市委统战部副部长、市工商联党组书记何惠风,市政协研究室主任郑志华,市工商联党组成员、副主席王婧等领导一行莅临麒麟信安开展全球研发中心城市专题协商会课题调研,麒…...
ZeroTier客户端连接服务器
ZeroTier客户端连接服务器 下载客户端 https://www.zerotier.com/download/加入新的网络(例如d5e04297a16fa690,由管理员提供)管理员授权并告知服务器IP测试连接:ping 服务器IP使用putty, pycharm, vscode等工具连接即可 官方文…...
NFT Insider#106:The Sandbox 与 Light Matrix 以及鲁比尼拳击场达成战略合作
引言:NFT Insider由NFT收藏组织WHALE Members、BeepCrypto联合出品,浓缩每周NFT新闻,为大家带来关于NFT最全面、最新鲜、最有价值的讯息。每期周报将从NFT市场数据,艺术新闻类,游戏新闻类,虚拟世界类&#…...
【猿灰灰赠书活动 - 04期】- 【分布式统一大数据虚拟文件系统——Alluxio原理、技术与实践】
👨💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨💻本文简述:博文为大家争取福利,与机械工业出版社合作进行送书活动 👨…...
前端element表格导出excel
一:安装依赖 npm install xlsx file-saver --save二:在组件中导入 import FileSaver from file-saver import XLSX from xlsx三:给对应表格添加id,绑定方法 <el-table idtableDom> <el-button click"exportExc…...
React中的类组件和函数组件(详解)
React的核心思想就是组件化,相对于Vue来说,React的组件化更加灵活和多样。主要可以分为两大类:函数组件,类组件,这两大类组件的名称必须是大写字母开头 一、函数组件 函数组件通常是function进行定义的函数࿰…...
1987-2021年全国31省专利申请数和授权数
1987-2021年全国31省国内三种专利申请数和授权数 1、时间:1987-2021年 2、来源:整理自国家统计局、科技统计年鉴、各省年鉴 3、范围:31省市 4、指标:国内专利申请受理量、国内发明专利申请受理量、国内实用新型专利申请受理量…...
欧洲云巨头OVHcloud收购边缘计算专家 gridscale
边缘计算社区近日获悉,欧洲云巨头OVHcloud已进入全面收购德国公司 gridscale 的谈判,该公司是一家专门从事超融合基础设施的软件提供商。 此次战略收购将标志着 OVHcloud 的另一个重要里程碑,使该集团能够显着加速其地理部署,并进…...
java从入门到起飞(八)——循环和递归
文章目录 Java循环1. 什么是循环?1.1 为什么需要循环?1.2 循环的分类 2. Java中的循环结构2.1 for循环2.2 while循环2.3 do-while循环 3. 循环控制语句3.1 break语句3.2 continue语句 4. 总结 Java递归1. 什么是递归2. 递归的原理3. 递归的实现4. 递归的…...
架构师成长之路|Redis实现延迟队列的三种方式
延迟队列实现 基于监听key过期实现的延迟队列实现,这里需要继承KeyspaceEventMessageListener类来实现监听redis键过期 public class KeyExpirationEventMessageListener extends KeyspaceEventMessageListener implementsApplicationEventPublisherAware {private static f…...
51单片机智能电风扇控制系统proteus仿真设计( 仿真+程序+原理图+报告+讲解视频)
51单片机智能电风扇控制系统仿真设计( proteus仿真程序原理图报告讲解视频) 讲解视频1.主要功能:2.仿真3. 原理图4. 程序代码5.设计报告6. 设计资料内容清单 51单片机智能电风扇控制系统仿真设计( proteus仿真程序原理图报告讲解视频) 仿真图…...
【设计模式】Head First 设计模式——工厂方法模式 C++实现
设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 设计思想 定义一个用于创建对象的接口,让子…...
【爬虫】7.2. JavaScript动态渲染界面爬取-Selenium实战
JavaScript动态渲染界面爬取-Selenium实战 爬取的网页为:https://spa2.scrape.center,里面的内容都是通过Ajax渲染出来的,在分析xhr时候发现url里面有token参数,所有我们使用selenium自动化工具来爬取JavaScript渲染的界面。 fr…...
c语言实训心得3篇集合
c语言实训心得体会一: 在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里…...
2023高教社杯数学建模B题思路代码 - 多波束测线问题
# 1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播, 在不同界面上产生反射, 利用这一原理,从测量船换能器垂直向海底发射声波信 号,并记录从声波发射到…...
MySql 变量
1.系统变量 1.1 系统变量分类 变量由系统定义,不是用户定义,属于 服务器 层面。系统变量分为全局系统变量(需要添加 global 关键字)以及会话系统变量(需要添加 session 关键字),有时也把全局系…...
2023-简单点-make和build都是什么东西?
make make命令根据makefile.txt中的命令进行批量处理。 编译时自动检查文件是否更新,如果文件已经更改,make会对他重新编译,否则跳过。 编译选定的目标,但是Make只编译上次编译变化过的文件,减少重复劳动࿰…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
