apache-dubbo
dubbo
文档地址
dubbo 官方文档地址
https://dubbo.apache.org/zh-cn/docs/user/references/api.html
nacos 官方文档地址
https://nacos.io/zh-cn/docs/quick-start.html
nacos下载地址
https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.tar.gz
案例代码
https://gitee.com/hailong1024/springboot-dubbo.git
组件版本
组件 | 版本 |
---|---|
Spring Boot | 2.7.7 |
dubbo | 3.2.9 |
nacos客户端 | 2.4.3 |
nacos | 2.3.0 |
maven依赖
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.9</version></dependency><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>2.3.0</version></dependency>
单协议,单注册中心
yml配置
dubbo:application:name: dubbo-producerprotocol: # 单协议(dubbo)name: dubboport: 2881registry: # 单注册中心address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=public
多注册中心
yml配置
dubbo:application:name: dubbo-producerprotocol: # 单协议(dubbo)name: dubboport: 2881registries: # 多注册中心local: # 本地address: nacos://127.0.0.1:8848timeout: 1000dev: # 开发address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=publictimeout: 1000default: true
服务注册
@DubboService(registry = {"local"})
public class ProducerServiceImpl implements IApiService {@Overridepublic String print(String name) {return name + ":hello";}
}
在服务注册中使用 @DubboService(registry = {“local”,“dev”}) 指定注册中心,可以指定多个注册中心。
多协议 (dubbo和rest协议)
yml配置
dubbo:application:name: dubbo-producerregistries: # 多注册中心local: # 本地address: nacos://127.0.0.1:8848timeout: 1000dev: # 开发address: nacos://192.168.10.4:8848?username=nacos&password=nacos&namespace=publictimeout: 1000default: trueprotocols: # 多协议dubbo: # dubbo协议name: dubboport: 2882 # dubbo协议默认端口是20880rest: # rest协议name: rest # port: 2883 # rest协议默认端口是8080server: jetty
dubbo接口层配置
maven依赖
<dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-client</artifactId><version>3.13.0.Final</version></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jaxrs</artifactId><version>3.13.0.Final</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-server</artifactId></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-servlet</artifactId></dependency>
接口配置
@Path("/api")
public interface IApiService {@GET@Path("/print")String print(String name);
}
服务注册
@DubboService(registry = {"local"},protocol = {"dubbo","rest"})
public class ProducerServiceImpl implements IApiService {@Overridepublic String print(String name) {return name + ":hello";}
}
使用 @DubboService(registry = {“local”},protocol = {“dubbo”,“rest”}) 指定注册中心和协议
注:不推荐使用rest协议,rest会存在一些问题,比如序列化
负载均衡策略
//服务端配置
@DubboService(loadbalance = "roundrobin")
//消费端配置
@DubboReference(registry = {"dev"},check = false,loadbalance = "random")
private IApiService iApiService;
loacdbalance属性指定负载均衡策略,默认是random,可选值有:random、roundrobin、leastactive、consistenthash
- random:随机
- roundrobin:轮询
- leastactive:最少活跃调用数
- consistenthash:一致性hash
集群容错机制
cluster属性指定集群容错策略,默认是failover,可选值有:failover、failfast、failsafe、failback、forking、broadcast
- failover:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过retries="2"来设置重试次数(不含第一次)。
- failfast:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
- failsafe:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
- failback:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
- forking:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
- broadcast:广播调用所有提供者,逐个调用,任意一台报错则报错。通常用于通知所有提供者更新缓存或日志等本地资源信息。
服务降级
histroy配置
@Reference(version = "1.0.0",group = "dubbo",timeout = 1000,check = false,retries = 0,loadbalance = "roundrobin",cluster = "failfast",registry = {"dev"},mock = "com.example.dubbo.service.impl.ApiServiceMock")
mock = “com.example.springbootdubboconsumer.mock.ApiServiceMock”
public class ApiServiceMock implements IApiService {@Overridepublic String print(String name) {return "print:服务降级"+System.currentTimeMillis();}
}
常见配置
dubbo启动检查
@DubboReference(check = false) // 关闭启动检查,默认为true,消费端会从注册中心检测提供端服务是否存在。
dubbo超时配置
@DubboReference(timeout = 1000) // 配置超时时间,单位毫秒,默认是1000ms
dubbo重试次数
@DubboReference(retries = 2) // 配置重试次数,默认是2次,不含第一次调用。
dubbo版本控制
@DubboReference(version = “1.0.0”) // 配置版本号,默认是*,表示所有版本。
dubbo分组控制
@DubboReference(group = “dubbo”) // 配置分组,默认是*,表示所有分组。
dubbo多版本控制
@DubboReference(version = “1.0.0”,group = “dubbo”) // 配置多版本,默认是*,表示所有版本。
dubbo多注册中心
@DubboReference(registry = {“local”,“dev”}) // 配置多注册中心,默认是*,表示所有注册中心。
dubbo多协议
@DubboReference(protocol = {“dubbo”,“rest”}) // 配置多协议,默认是*,表示所有协议。
dubbo多注册中心多协议
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”}) // 配置多注册中心多协议,默认是*,表示所有注册中心所有协议。
dubbo多注册中心多协议多版本
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”) // 配置多注册中心多协议多版本,默认是*,表示所有注册中心所有协议所有版本。
dubbo多注册中心多协议多版本多分组
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false) // 配置多注册中心多协议多版本多分组,默认是*,表示所有注册中心所有协议所有版本所有分组。
dubbo多注册中心多协议多版本多分组多重试次数
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”) // 配置多注册中心多协议多版本多分组多重试次数,默认是*,表示所有注册中心
所有协议所有版本所有分组所有重试次数。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”) // 配置多注册中心多协议多版本多分组多重试次数多超时
时间,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”) // 配置多注册中心多协议多版本多分组
多重试次数多超时时间多负载均衡策略,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class) // 配置多注册
中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000
) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000) // 配置多注册中心多协议多版本多
分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000
,check = false) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间所有检查。
dubbo多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查多重试次数
@DubboReference(registry = {“local”,“dev”},protocol = {“dubbo”,“rest”},version = “1.0.0”,group = “dubbo”,retries = 2,timeout = 1000,check = false,loadbalance = “roundrobin”,cluster = “failover”,filter = “myFilter”,interface = IApiService.class,timeout = 1000
,check = false,retries = 2) // 配置多注册中心多协议多版本多分组多重试次数多超时时间多负载均衡策略多过滤器多接口多超时时间多检查多重试次数,默认是*,表示所有注册中心所有协议所有版本所有分组所有重试次数所有超时时间所有负载均衡策略所有过滤器所有接口所有超时时间所有检查所有重试次数。
优先级配置
方法层级别的配置优先于接口层面,接口层配置优先于全局配置
如果级别一致,客户端的配置优先,服务端次之
dubbo泛化
泛化调用:泛化接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过泛化调用实现。
泛化调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值中的所有POJO均用Map表示,通常用于框架集成,比如:实现一个通用的远程服务Mock框架,可通过泛化调用实现。
服务端
package com.example.springbootdubboproducer.service;public interface IHelloService {String sayHello(String name);
}
消费端
@DubboReference(interfaceName = "com.example.springbootdubboproducer.service.IHelloService")private GenericService genericService;@GetMapping("/sayHello")public String sayHello(){return genericService.$invoke("sayHello",new String[]{"java.lang.String"},new Object[]{"world"}).toString();}
多序列化支持
dubbo支持多种序列化方式,包括hessian、fastjson、kryo、protostuff等,默认使用hessian2序列化方式。
hessian2序列化方式
hessian2序列化方式是dubbo默认的序列化方式,它是一种二进制序列化方式,性能较好,但是可读性较差。
fastjson序列化方式
fastjson序列化方式是一种基于json的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。
kryo序列化方式
kryo序列化方式是一种基于二进制的序列化方式,性能较好,可读性较差,但是相对于hessian2性能较差。
maven依赖
<dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.2</version>
</dependency>
protostuff序列化方式
protostuff序列化方式是一种基于protobuf的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。
自定义序列化方式
如果dubbo自带的序列化方式不能满足需求,可以自定义序列化方式,实现com.alibaba.dubbo.common.serialize.Serialization
接口,并在配置文件中配置自定义序列化方式。
json序列化方式
json序列化方式是一种基于json的序列化方式,性能较好,可读性较好,但是相对于hessian2性能较差。
xml序列化方式
xml序列化方式是一种基于xml的序列化方式,性能较差,可读性较好,但是相对于hessian2性能较差。
性能调优
- 网络传输优化:可以通过调整网络参数、使用压缩协议等方式来优化网络传输性能。
- 序列化优化:可以通过调整序列化方式、使用压缩协议等方式来优化序列化性能。
- 线程池优化:可以通过调整线程池参数、使用线程池监控等方式来优化线程池性能。
- 服务端优化:可以通过调整服务端参数、使用服务端监控等方式来优化服务端性能。
- 客户端优化:可以通过调整客户端参数、使用客户端监控等方式来优化客户端性能。
- 负载均衡优化:可以通过调整负载均衡策略、使用负载均衡监控等方式来优化负载均衡性能。
- 集群容错优化:可以通过调整集群容错策略、使用集群容错监控等方式来优化集群容错性能。
- 服务治理优化:可以通过调整服务治理策略、使用服务治理监控等方式来优化服务治理性能。
- 服务降级优化:可以通过调整服务降级策略、使用服务降级监控等方式来优化服务降级性能。
- 服务限流优化:可以通过调整服务限流策略、使用服务限流监控等方式来优化服务限流性能。
- 服务监控优化:可以通过调整服务监控策略、使用服务监控监控等方式来优化服务监控性能。
- 服务调用优化:可以通过调整服务调用策略、使用服务调用监控等方式来优化服务调用性能。
- 服务注册优化:可以通过调整服务注册策略、使用服务注册监控等方式来优化服务注册性能。
- 服务发现优化:可以通过调整服务发现策略、使用服务发现监控等方式来优化服务发现性能。
dubbo缓存文件
dubbo缓存文件主要包括以下几个方面:
- 注册中心缓存文件:注册中心缓存文件主要用于缓存注册中心的数据,提高注册中心的性能和可靠性。
- 服务提供者缓存文件:服务提供者缓存文件主要用于缓存服务提供者的数据,提高服务提供者的性能和可靠性。
- 服务消费者缓存文件:服务消费者缓存文件主要用于缓存服务消费者的数据,提高服务消费者的性能和可靠性。
- 服务调用缓存文件:服务调用缓存文件主要用于缓存服务调用的数据,提高服务调用的性能和可靠性。
dubbo:registry: #注册中心file: /path/to/registry/cache/fileprovider: #服务提供者file: /path/to/provider/cache/fileconsumer: #服务消费者file: /path/to/consumer/cache/fileinvocation: #服务调用file: /path/to/invocation/cache/file
dubbo-admin
简介
- dubbo-admin是一个可视化的dubbo管理工具,可以用于查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
- dubbo-admin的安装和使用非常简单,只需要将dubbo-admin的war包部署到tomcat中即可。
- dubbo-admin的配置文件位于
/WEB-INF/dubbo.properties
,可以配置注册中心的地址、dubbo-admin的端口等。 - dubbo-admin的界面非常友好,可以方便地查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
- dubbo-admin的监控功能非常强大,可以监控dubbo服务的调用次数、调用耗时、调用成功率等。
- dubbo-admin的配置管理功能非常强大,可以管理dubbo服务的配置、查看dubbo服务的配置历史等。
- dubbo-admin的日志管理功能非常强大,可以查看dubbo服务的日志、下载dubbo服务的日志等。
- dubbo-admin的告警功能非常强大,可以配置dubbo服务的告警规则、查看dubbo服务的告警历史等。
- dubbo-admin的权限管理功能非常强大,可以配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
- dubbo-admin的插件功能非常强大,可以安装各种插件来扩展dubbo-admin的功能。
安装
- 下载dubbo-admin的war包,可以从dubbo的官方网站上下载。
- 将dubbo-admin的war包部署到tomcat中,可以将其放在tomcat的webapps目录下。
- 启动tomcat,访问
http://localhost:8080/dubbo-admin
即可打开dubbo-admin的界面。
配置
- 在
/WEB-INF/dubbo.properties
文件中配置注册中心的地址、dubbo-admin的端口等。
dubbo.registry.address=zookeeper://127.0.0.1:2181 #注册中心的地址
dubbo.admin.port=8080 #dubbo-admin的端口
- 在
/WEB-INF/dubbo.properties
文件中配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
dubbo.admin.username=admin #dubbo-admin的用户名
dubbo.admin.password=admin #dubbo-admin的密码
dubbo.admin.access.log=true #是否记录dubbo-admin的访问日志
- 在
/WEB-INF/dubbo.properties
文件中配置dubbo-admin的告警规则、查看dubbo-admin的告警历史等。
dubbo.admin.alert.rule=cpu_usage > 80 #dubbo-admin的告警规则
dubbo.admin.alert.history=true #是否记录dubbo-admin的告警历史
- 在
/WEB-INF/dubbo.properties
文件中配置dubbo-admin的插件功能、查看dubbo-admin的插件日志等。
dubbo.admin.plugin=com.example.MyPlugin #dubbo-admin的插件
dubbo.admin.plugin.log=true #是否记录dubbo-admin的插件日志
- docker部署dubbo- admin
docker run -d -p 8080:8080 --name dubbo-admin -e JAVA_OPTS="-Xmx512m -Xms512m" -e TZ=Asia/Shanghai -e DubboAdminConfig.admin.registry.address=zookeeper://127.0.0.1:2181 -e DubboAdminConfig.admin.monitor.address=nacos://127.0.0.1:
8848 dubbo-admin/dubbo-admin:latest
功能
- 查看dubbo服务的状态:可以查看dubbo服务的状态,包括服务的名称、版本、分组、状态等。
- 监控dubbo服务的性能:可以监控dubbo服务的性能,包括服务的调用次数、调用耗时、调用成功率等。
- 管理dubbo服务的配置:可以管理dubbo服务的配置,包括服务的权重、负载均衡策略、超时时间等。
- 查看dubbo服务的日志:可以查看dubbo服务的日志,包括服务的调用日志、异常日志等。
- 配置dubbo服务的告警规则:可以配置dubbo服务的告警规则,包括服务的调用次数、调用耗时、调用成功率等。
- 查看dubbo服务的告警历史:可以查看dubbo服务的告警历史,包括服务的告警时间、告警内容等。
- 配置dubbo-admin的访问权限:可以配置dubbo-admin的访问权限,包括用户的权限、角色的权限等。
- 查看dubbo-admin的访问日志:可以查看dubbo-admin的访问日志,包括用户的访问时间、访问内容等。
- 安装dubbo-admin的插件:可以安装dubbo-admin的插件,扩展dubbo-admin的功能。
- 查看dubbo-admin的插件日志:可以查看dubbo-admin的插件日志,包括插件的安装时间、插件的内容等。
- 查看dubbo-admin的版本信息:可以查看dubbo-admin的版本信息,包括dubbo-admin的版本号、dubbo-admin的构建时间等。
- 查看dubbo-admin的帮助文档:可以查看dubbo-admin的帮助文档,包括dubbo-admin的使用方法、dubbo-admin的配置方法等。
- 查看dubbo-admin的关于信息:可以查看dubbo-admin的关于信息,包括dubbo-admin的版权信息、dubbo-admin的开发团队等。
- 查看dubbo-admin的更新日志:可以查看dubbo-admin的更新日志,包括dubbo-admin的更新时间、dubbo-admin的更新内容等。
- 查看dubbo-admin的反馈建议:可以查看dubbo-admin的反馈建议,包括用户的反馈时间、用户的反馈内容等。
- 查看dubbo-admin的插件市场:可以查看dubbo-admin的插件市场,包括各种插件的介绍、插件的安装方法等。
- 查看dubbo-admin的插件开发文档:可以查看dubbo-admin的插件开发文档,包括插件的开发方法、插件的接口规范等。
- 查看dubbo-admin的插件更新日志:可以查看dubbo-admin的插件更新日志,包括插件的更新时间、插件的更新内容等。
- 查看dubbo-admin的插件反馈建议:可以查看dubbo-admin的插件反馈建议,包括用户的反馈时间、用户的反馈内容等。
使用
- 在dubbo-admin的界面中,可以查看dubbo服务的状态、监控dubbo服务的性能、管理dubbo服务的配置等。
- 在dubbo-admin的监控功能中,可以监控dubbo服务的调用次数、调用耗时、调用成功率等。
- 在dubbo-admin的配置管理功能中,可以管理dubbo服务的配置、查看dubbo服务的配置历史等。
- 在dubbo-admin的日志管理功能中,可以查看dubbo服务的日志、下载dubbo服务的日志等。
- 在dubbo-admin的告警功能中,可以配置dubbo服务的告警规则、查看dubbo服务的告警历史等。
- 在dubbo-admin的权限管理功能中,可以配置dubbo-admin的访问权限、查看dubbo-admin的访问日志等。
- 在dubbo-admin的插件功能中,可以安装各种插件来扩展dubbo-admin的功能。
相关文章:
apache-dubbo
dubbo 文档地址 dubbo 官方文档地址 https://dubbo.apache.org/zh-cn/docs/user/references/api.html nacos 官方文档地址 https://nacos.io/zh-cn/docs/quick-start.html nacos下载地址 https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.…...
【JavaEE】网络(1)
🐵本篇文章开始讲解计算机网络相关的知识 一、基础概念 1.1 局域网和广域网 局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能…...
系统思考—决策
今年在为不同公司交付培训与项目时,常常听到“降本增效”的提法,但关键是:“降”的到底是什么成本?裁员无疑是最快的成本削减方式,但也可能带来人心惶惶。人力是资本,不是成本。除非企业到了生死存亡的关头…...
nVisual 前端集成SDK使用说明
目前客户需要搭建自己的可视化产品,但需要使用nVisual的可视化视图功能,根据目前项目实施需求,决定做了一款简单版的SDK视图插件,这个小插件的主要功能是嵌入到客户项目里给客户提供 ‘详细视图’‘拓扑视图’或者是‘主视图’的展示功能.目前已经开发完毕,这里做一下简单介绍.…...
上传文件时获取音视频文件时长和文本文件字数
获取音视频文件时长和文本文件字数 一、获取音视频文件时长二、计算文本文件字数 最近有个需求,要求上传文件时获取音视频文件时长和文本文件字数🐶。 发现这样的冷门资料不多,特做个记录。本文忽略文件上传功能,只封装核心的工具…...
[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners
本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...
【C++】string的主要功能模拟复现
经常调用的短小函数直接定义在头文件中,可以节省时间开销 #include<iostream> #include<assert.h> using namespace std; namespace mumu {class string{friend ostream& operator<<(ostream& _cout, const mumu::string& s);friend…...
Linux环境安装Jenkins
Linux环境安装Jenkins Jenkins和JDK的版本 Jenkins和JDK的版本需要对应,不然无法正常启动。 Jenkins稳定版下载地址 Jenkins服务 手动使用命令启动和关闭Jenkins比较麻烦,所以可以把Jenkins设置成开机启动。 创建Jenkins.sh文件 JAVA_HOME和jenk…...
Elasticsearch:ES|QL 中的全文搜索 - 8.17
细心的开发者如果已经阅读我前两天发布的文章 “Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等”,你就会发现在 8.17 的发布版中,有一个重要的功能发布。那就是 ES|QL 开始支持全文搜索了。在今天的文章中我们来尝试一下。…...
Leetcode 3387. Maximize Amount After Two Days of Conversions
Leetcode 3387. Maximize Amount After Two Days of Conversions 1. 解题思路2. 代码实现 题目链接:3387. Maximize Amount After Two Days of Conversions 1. 解题思路 这一题思路上其实就是要分别求出day 1以及day 2中原始货币与其他各个货币之间的成交价&…...
Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理
一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中,系列指的是图表中的数据集合,它通常代表着一个数据源。每个系列都可以包含多个数据点,这些数据点在图表中以特定的形式展现,如柱状图中的柱子,折线图中…...
静态路由、RIP、OSPF、BGP的区别
静态路由:是管理员手动将路由写入到路由器中,配置简单开销小,但不能适应网络变化,只用于小型的网络 RIP,路由信息协议,属于距离矢量路由协议的一种,根据跳数来判断最优路由,如果跳数…...
解决 Flutter 在 Mac 上的编译错误
解决 Flutter 在 Mac 上的编译错误 在使用 Flutter 进行项目开发并尝试在 Mac 设备上进行编译时,遇到了一系列的错误信息,这些错误信息给项目的构建与部署带来了阻碍。 一、错误详情 在编译过程中,Xcode 输出了大量的信息,其中…...
ECharts实现数据可视化入门详解
文章目录 ECharts实现数据可视化入门详解一、引言二、基础配置1.1、代码示例 三、动态数据与交互2.1、代码示例 四、高级用法1、多图表组合1.1、在同一容器中绘制多个图表1.2、创建多个容器并分别初始化 ECharts 实例1.3、实现多图联动 五、总结 ECharts实现数据可视化入门详解…...
LRM-典型 Transformer 在视觉领域的应用,单个图像生成3D图像
https://yiconghong.me/LRM. 一、Abstract 第一个大型重建模型(LRM),它可以在5秒内从单个输入图像预测物体的3D模型。LRM采用了高度可扩展的基于transformer的架构,具有5亿个可学习参数,可以直接从输入图像中预测神经…...
Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)
Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意:在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”,即数据序列不能是杂乱…...
win10系统右下角没有显示网络图标 , 打开或关闭系统图标网络灰色
win10系统右下角没有显示网络图标 / 打开或关闭系统图标网络灰色 win10系统右下角没有显示网络图标, 并且打开或关闭系统图标网络灰色 解决方案: 首先,按【Ctrl Alt Del】组合键,然后点击【任务管理器】。任务管理器窗口,找到并选择【Wind…...
Python使用Selenium库获取 网页节点元素、名称、内容的方法
我们要用到一些网页源码信息,例如获取一些节点的class内容, 除了使用Beautifulsoup来解析,还可以直接用Selenium库打印节点(元素)名称,用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…...
onnx文件转pytorch pt模型文件
onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式,官方有成熟的API;那么假如只有onnx格式的模型文件,该怎样转回pytorch格式? https://github.com/ENOT-AutoDL/onnx2torch提供了…...
计算机网络中的SIP协议是什么?
SIP(Session Initiation Protocol,会话初始化协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。以下是对SIP的详细简述: 一、SIP的基本概念 SIP是一个…...
Apache Kylin最简单的解析、了解
官网:Overview | Apache Kylin 一、Apache Kylin是什么? 由中国团队研发具有浓厚的中国韵味,使用神兽麒麟(kylin)为名 的一个OLAP多维数据分析引擎:(据官方给出的数据) 亚秒级响应ÿ…...
axfbinhexelf文件区别
0 Preface/Foreword axf,bin,hex,elf四个都能存在于嵌入式软件领域。 1 文件介绍 嵌入式软件中常见的文件包含: axf,包含调试信息,文件最大。调试信息放在机器码前面。elfhex,包含地址信息,文件内容较大。bin&#x…...
MySQL表自增id溢出的故障复盘,你是如何解决与监控的
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
03、SpirngMVC核心(下)
一、关于RESTful编程风格 什么是RESTful RESTful的英文全称是:Representational State Transfer(表述性状态转移) RESTful是Web服务接口的一种设计风格。它定了一组约束和规范,可以让Web服务接口更加简洁、易于理解、易于扩展、安全可靠。 RESTful对于请求的约束如下:…...
【游戏设计原理】10 - 科斯特的游戏理论
科斯特的游戏理论强调了游戏与学习之间的关系,认为“玩得开心”与“学习”是紧密相连的。换句话说,游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环,这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…...
【JAVA】Java项目实战—Java EE项目:客户关系管理(CRM)系统
Java EE项目:客户关系管理(CRM)系统 一、背景介绍 1.1 Java语言的重要性 Java是一种广泛使用的编程语言,因其跨平台性、面向对象特性以及丰富的生态系统而受到开发者的青睐。Java EE(Enterprise Edition)…...
JAVA 零拷贝技术和主流中间件零拷贝技术应用
目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云,测试运行代码看耗时为啥带buffer的IO比普通IO性能高?BufferedInputStream为啥性能高点…...
STM32软件IIC驱动TCA9548A多路测量AHT10
STM32软件IIC驱动TCA9548多路测量AHT10 TCA9548AAHT10代码逻辑代码展示现象总结 TCA9548A TCA9548A 有八个可通过 I2C 总线控制的双向转换开关,SCL/SDA 上行对扩展到八个下行对,或者通道,适用于系统中存在I2C目标地址冲突的情况。8路双向转换…...
博弈论3:图游戏SG函数(Graph Games)
目录 一、图游戏是什么 1.游戏特征 2.游戏实例 二、图游戏的必胜策略 1.SG 函数(Sprague-Grundy Function) 2.必胜策略(利用SG函数) 3.拿走游戏转化成图游戏(Take-away Game -> Graph Game) 一、图…...
音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现
一、引言 由《音视频入门基础:MPEG2-TS专题(16)——PMT简介》可以知道,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map sectio…...
SQL server学习05-查询数据表中的数据(上)
目录 一,基本格式 1,简单的SQL查询语句 2,关键字TOP 3,关键字DISTINCT 二,模糊查询 1,通配符 三,对结果集排序 1,不含关键字DISTINCT 2,含关键字DISTINCT 3&…...
Transformer记录Attention is all you need
视频: Transformer 原理详解_哔哩哔哩_bilibili 代码: harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper....
JAVA入门:使用IDE开发
JAVA入门:使用IDE开发 什么是IDE IDE(Integrated Development Environment,集成开发环境)是一种软件应用程序,它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程,让编程更加…...
汽车嵌入式软件构建高效技术团队的全面思考
在汽车嵌入式软件开发领域,构建一支高效的通用技术团队至关重要。这类团队负责为各种项目提供可复用、标准化的技术基石,从而提高开发效率、降低成本并确保产品质量。构建这样的团队需要从技术能力、角色分工、标准化与复用、流程管理与质量保证、工具和…...
Debezium源码分析: TopicSelector实现原理与应用
Debezium源码分析: TopicSelector实现原理与应用 Debezium源码分析: TopicSelector实现原理与应用文章目录背景介绍主要功能应用场景实现原理DataCollectionId 接口核心设计工作流程源码分析基础实现默认选择器创建应用示例1. 分库分表场景2. 多租户场景3. 业务领域分组总结设计…...
SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布
目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…...
【恶意软件检测论文】通过提取 API 语义来实现的一个新颖的安卓恶意软件检测方法
目录 摘要1. 引言2. 相关工作2.1. 基于重新训练的恶意软件检测2.2. 基于应用关系图的恶意软件检测2.3. 基于异常样本识别的恶意软件检测2.4. 基于API聚类的恶意软件检测 3. AMDASE概述4. 基于语义距离的API聚类4.1. API特征提取4.2. API句子生成4.3. API句子编码4.4.聚类中心生…...
大模型系列4--开源大模型本地部署到微调(WIP)
背景 一直想真正了解大模型对硬件资源的需求,于是准备详细看一篇视频,将核心要点总结记录下。本文内容参考视频:保姆级教程:6小时掌握开源大模型本地部署到微调,感谢up主 训练成本 训练 > 微调 > 推理训练GPT…...
Linux 磁盘满了怎么办?快速排查和清理方法
当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤: 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...
go 协程练习例题
go 协程练习例题 例1:统计 1-200000 的数字中,哪些是素数例2:使用单通道、2个协程交替读取字符串例3:使用1个管道,2个协程写数据、1个协程读例4:完成一个并发任务调度器,按照指定顺序执行一系列…...
JAVA:访问者模式(Visitor Pattern)的技术指南
1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...
如何实现邮箱+验证码登录功能(express+vue+MySQL版)
目录 1. 初始化项目2. 配置环境变量3. 更新数据库4. 编写路由函数5. 前端调用接口 1. 初始化项目 前端根目录:/web 后端根目录:/api_server 安装依赖: npm install express mysql nodemailer randomstring dotenv其中,nodemaile…...
Pycharm访问MySQL数据库·上
1.MySQL驱动模块Connector #导入数据库的驱动工具 import mysql.connector #连接数据库必备的条件 config {"host": "localhost","port": 3306,"user": "root","password": "888888","database&…...
vscode+msys2+clang+xmake c++开发环境搭建
转载请标明出处:小帆的帆的专栏 安装msys2 下载msys2安装包:清华源下载地址安装msys2:安装目录,C:\Softwares\msys64 安装cling工具链,xmake !!!在开始菜单中启动MSYS2 CLANG64,…...
Python面试常见问题及答案5
一、基础语法相关 问题1: Python的可变数据类型和不可变数据类型有哪些? 答案: 在Python中,可变数据类型有列表(list)、字典(dict)、集合(set)。这些数据类型…...
威联通docker无法拉取镜像
链接:威联通TS-464C 折腾--Container Station国内无法拉取镜像_docker_wangguanghe-开放原子开发者工作坊我这里用的是IPV6 ,没有公网资源啊。 wangguanghe...
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf
3D 生成重建034-NerfDiff借助扩散模型直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 感觉这个论文可能能shapE差不多同时期工作,但是shapE是生成任意种类。 本文提出了一种新颖的单图像视图合成方法NerfDiff,该方法利用神经辐射场 …...
ASP.net Core EntityFramework Code EF code 汇总
Entity FrameWork EF 总结 EF Core EF Core 如果实体模型很多,全部放在 上下文中的 OnModelCreating(ModelBuilder modelBuilder) 不太好维护 可以把实体模型 分离出去,每个类创建一个实体模型 public class BookConfiguration :IEntityT…...
AtCoder Beginner Contest 384 Solution
文章目录 ABCDEFG A void solve() {string s; char x, y;qr(n, x, y, s);for(auto i: s) {if(i ! x) i y;cout << i;} }B void solve() {qr(n, m);for (int i 1; i < n; i) {int x, y;qr(x, y);x--;if(1600 - x * 400 < m && m < 2799 - x * 400) m…...
c# TaskScheduler
这里记录下 TaskScheduler 的简单用法。 使用场景: 使用 Task 的时候,大家知道用 TaskFactory.StartNew 可以用来创建一个 Task 。这里如果创建了 3 个,那么这3个 Task 就各自放飞直接运行了。 class Program {private static TaskFactory…...