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

笔记整理-SpringBoot中的扩展点

SpringBoot有哪些扩展点

aware 感知类接口

aware系列的扩展接口,允许spring应用感知/获取特定的上下文环境或对象。

bean生命周期控制类接口

bean生命周期类的接口,可以控制spring容器对bean的处理。

app生命周期控制类接口

app生命周期控制类接口,可以控制spring应用启动/销毁时的逻辑

下面详细介绍各种扩展点的使用

aware 感知类接口

ApplicationContextAware

package cn.test.ext.aware;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;import java.util.Arrays;/*** ApplicationContextAware* 通过实现该接口,组件可以获取ApplicationContext对象的引用,* 从而访问应用程序上下文中的bean以及其他特定的spring功能*/
@Component
@Slf4j
public class TestAppCtxAware implements ApplicationContextAware {@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {String applicationName = applicationContext.getApplicationName();log.info("context-path:{}",applicationName);String displayName = applicationContext.getDisplayName();log.info("displayName:{}",displayName);String id = applicationContext.getId();log.info("spring-applicationName:{}",id);long startupDate = applicationContext.getStartupDate();log.info("startupDate:{}",startupDate);
//        String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
//        log.info("beanDefinitionNames:{}", Arrays.asList(beanDefinitionNames).toString());}
}

BeanFactoryAware

package cn.test.ext.aware;import cn.test.web.TestController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.stereotype.Component;/*** BeanFactoryAware* 实现该接口,可以使自定义类获取bean工厂对象的引用,* 允许你在运行时从bean工厂中获取其他bean*/
@Slf4j
@Component
public class TestBeanFactoryAware implements BeanFactoryAware {@Overridepublic void setBeanFactory(BeanFactory beanFactory) throws BeansException {boolean b = beanFactory.containsBean("testController");log.info("spring容器内是否含有 testController这个bean :{}",b);TestController testController =(TestController) beanFactory.getBean("testController");String tgwt43t = testController.t1("tgwt43t");log.info("get bean方式调用 TestController里的t1方法,返回值:{}",tgwt43t);}
}

EnvironmentAware

package cn.test.ext.aware;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.EnvironmentAware;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;import java.util.Arrays;/*** EnvironmentAware* 实现该接口,你的组件可以获取 Environment 环境对象的引用,* 从而可以访问spring应用程序的配置属性和配置文件*/
@Component
@Slf4j
public class TestEnvironmentAware implements EnvironmentAware {@Overridepublic void setEnvironment(Environment environment) {//获取当前默认的profile环境String[] defaultProfiles = environment.getDefaultProfiles();log.info("defaultProfiles:{}",Arrays.asList(defaultProfiles));//获取某个属性配置String property = environment.getProperty("spring.application.name");log.info("property->spring.application.name:{}",property);}
}

MessageSourceAware

package cn.test.ext.aware;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceAware;
import org.springframework.stereotype.Component;/*** MessageSourceAware* 实现该接口,你的组件可以获取 messageSource 消息源对象的引用,* 从而访问 国际化消息内容*/
@Component
@Slf4j
public class TestMessageSourceAware implements MessageSourceAware {@Overridepublic void setMessageSource(MessageSource messageSource) {
//        messageSource.getMessage()}
}

ResourceLoaderAware

package cn.test.ext.aware;import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Component;import java.util.Properties;/*** ResourceLoaderAware* 实现该接口,你的组件可以获取 ResourceLoader 资源加载器 对象的引用。* 从而可以加载外部资源文件*/
@Slf4j
@Component
public class TestResourceLoaderAware implements ResourceLoaderAware {@SneakyThrows@Overridepublic void setResourceLoader(ResourceLoader resourceLoader) {//ResourceLoader可以加载自定义位置的自定义的properties配置文件//这里测试加载classpath下的test.properties文件Resource resource = resourceLoader.getResource("classpath:test.properties");if (resource.isFile()) {String filename = resource.getFilename();log.info("filename:{}",filename);Properties properties = new Properties();properties.load(resource.getInputStream());properties.list(System.out);String aaa = properties.getProperty("aaa");log.info("aaa-->:{}",aaa);}}
}

ServletContextAware

package cn.test.ext.aware;import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ServletContextAware;import javax.servlet.ServletContext;/*** ServletContextAware* 实现该接口,你的组件可以获取 ServletContext Servlet上下文对象的引用,* 从而访问与web应用程序相关的功能*/
@Component
@Slf4j
public class TestServletContextAware implements ServletContextAware {@Overridepublic void setServletContext(ServletContext servletContext) {//添加java web 过滤器
//        servletContext.addFilter()//添加java web servlet
//        servletContext.addServlet()//添加java web 监听器
//        servletContext.addListener();}
}

bean生命周期控制类接口

InitializingBean

package cn.test.ext.beanlife;import cn.test.ext.ITestStrategy;
import cn.test.ext.MyStrategyFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;/*** InitializingBean* 实现该接口,你的bean可以在 spring容器初始化当前bean时 执行自定义逻辑** 必须在afterPropertiesSet方法里写你自定义的执行逻辑*/
@Slf4j
@Component
public class TestInitializingBean implements ITestStrategy, InitializingBean {private static String str ;//实现InitializingBean接口,必须重写afterPropertiesSet方法//这样当springboot启动加载TestInitializingBean时,会自动执行里边的afterPropertiesSet方法@Overridepublic void afterPropertiesSet() throws Exception {//本方法里可以做一些初始化的操作,如设置类静态变量值 / 将类注册到策略工厂/ 执行一些其他方法或动作/...//设置类静态变量值str = "qwe123!";//将k1策略 (本类) 注册到 策略工厂里MyStrategyFactory.register("k1",this);log.info("注册了策略:{}到策略工厂里",this);}@Overridepublic void execTestMethod() {log.info("start----执行k1策略...");System.err.println(str);}
}

DisposableBean

package cn.test.ext.beanlife;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.stereotype.Component;/*** DisposableBean* 实现该接口,你的bean可以在销毁阶段执行自定义逻辑。* 该接口包含一个destory(),你可以在此方法中定义销毁逻辑。*/
@Slf4j
@Component
public class TestDisposableBean implements DisposableBean {@Overridepublic void destroy() throws Exception {log.info("TestDisposableBean 这个bean销毁了...");}
}

BeanPostProcessor

package cn.test.ext.beanlife;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;/*** BeanPostProcessor* 该接口定义了在spring容器实例化bean之后和初始化之前,* 对bean进行自定义处理的方法。* 通过实现该接口,你可以插入自定义逻辑来处理bean*/
@Component
@Slf4j
public  class TestBeanPostProcessor implements BeanPostProcessor {public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if (beanName.equals("testController")){log.info("BeanPostProcessor Before 处理到了 beanName:{}",beanName);}return bean;}public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (beanName.equals("testController")){log.info("BeanPostProcessor After 处理到了 beanName:{}",beanName);}return bean;}
}

BeanFactoryPostProcessor

package cn.test.ext.beanlife;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;/*** BeanFactoryPostProcessor接口* 允许在 所有bean定义加载到容器之后,但在bean实例化之前对他们进行自定义处理。* 通过实现该接口,你可以修改或添加新的bean定义***/
@Component
@Slf4j
public class TestBeanFctoryPostProcessor implements BeanFactoryPostProcessor {@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {log.info("postProcessBeanFactory 触发了....");}
}

BeanDefinitionRegistryPostProcessor

package cn.test.ext.beanlife;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.stereotype.Component;/*** BeanDefinitionRegistryPostProcessor接口** 这个接口是BeanFactoryPostProcessor接口的扩展,* 允许在bean定义注册过程中对 bean定义进行自定义处理,* 它提供了对bean定义注册表的直接访问,可以添加,修改或删除bean定义*/
@Slf4j
@Component
public class TestBeanDefineRegistPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {log.info("postProcessBeanDefinitionRegistry 触发了...");}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {log.info("postProcessBeanFactory 触发了...");}
}

app生命周期控制类接口

SmartLifecycle

package cn.test.ext.applife;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;/*** SmartLifecycle接口 可以感知springboot应用生命周期变化,是spring的一个扩展点,可以实现随springboot启动和销毁的操作。** 自定义类实现SmartLifecycle接口后,至少要重写3个方法start(),stop(),isRunning() ,其他方法可以按需实现** springboot中的内嵌tomcat启动/关闭,就是利用SmartLifecycle实现的,* 见 org.springframework.boot.web.servlet.context.WebServerStartStopLifecycle*/
@Component
@Slf4j
public class TestSmartLifeCycle implements SmartLifecycle {//模拟一个任务 (实际开发中,可以在这里引入netty,实现netty随springboot启动和销毁)private static boolean xxxStat;/*** bean初始化完毕后,该方法会被执行*/@Overridepublic void start() {xxxStat = true;log.info("启动了 xxxStat ");}/*** 容器关闭后,spring容器发现当前对象实现了SmartLifecycle,* 就调用stop(Runnable),如果只是实现了Lifecycle,就调用stop()*/@Overridepublic void stop() {log.info("stop---容器关闭了");xxxStat = false;}/*** 当前状态* @return*/@Overridepublic boolean isRunning() {log.info("isRunning 获取当前状态:{}",xxxStat);return xxxStat;}/*** start方法被执行前,先看此方法返回值,* 返回false就不执行start方法了* @return*/@Overridepublic boolean isAutoStartup() {log.info("isAutoStartup 是否自启动");return true;}/*** 容器关闭后,spring容器发现当前对象实现了SmartLifecycle,就调用stop(Runnable),* 如果只是实现了Lifecycle,就调用stop()* @param callback*/@Overridepublic void stop(Runnable callback) {//必须调用stop方法 ,确保SmartLifecycle这个bean里的任务停止了this.stop();//必须执行callback.run方法,否则app exit时无法销毁这个SmartLifecyclecallback.run();log.info("stop Runnable---容器关闭了");}/*** 返回值决定* start方法 在众多Lifecycle实现类中的执行顺序(stop也是)* @return*/@Overridepublic int getPhase() {log.info("SmartLifecycle 当前优先级 1");return 1;}
}

CommandLineRunner

CommandLineRunner可以让springboot-jar启动时接收一些jvm参数或自定义cmd参数,然后执行一些操作

package cn.test.ext.applife;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Slf4j
@Component
public class TestCmdLineRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {log.info("CommandLineRunner 执行了...");}
}

ApplicationRunner

ApplicationRunner可以让springboot-jar启动时接收一些应用配置参数如server.port,然后执行一些操作

package cn.test.ext.applife;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;@Slf4j
@Component
public class TestApplictionRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {log.info("ApplicationRunner 执行了...");}
}

ApplicationListener

要通过spring内置的ApplicationListener监听ContextRefreshedEvent
上下文刷新事件,springboot启动时会触发一次,
一般常用来做业务缓存预热,如在springboot启动时把系统字典数据/系统配置项数据加到缓存中,方便后续调用。

package cn.test.ext.applife;import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class AppCtxRefreshListener implements ApplicationListener<ContextRefreshedEvent> {/*** 监听到上下文刷新事件时,* 执行相应的操作* @param contextRefreshedEvent 上下文刷新事件*/@Overridepublic void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {log.info("监听到了spring应用 上下文刷新事件...");}
}

相关文章:

笔记整理-SpringBoot中的扩展点

SpringBoot有哪些扩展点 aware 感知类接口 aware系列的扩展接口&#xff0c;允许spring应用感知/获取特定的上下文环境或对象。bean生命周期控制类接口 bean生命周期类的接口&#xff0c;可以控制spring容器对bean的处理。app生命周期控制类接口 app生命周期控制类接口&#xf…...

各系统的目录信息路径

Windows系统: 查看系统版本——C:\boot.ini IIS配置文件——C:\windows\system32\inetsrv\MetaBase.xml 存储Windows系统初次安装的密码——C:\windows\repair\sam Mysql配置——C:\ProgramFiles\mysql\my.ini MySQL root密码——C:\P…...

Asp.Net 使用Log4Net (封装帮助类)

Asp.Net 使用Log4Net (封装帮助类) 1. 创建Log4Net帮助类 首先&#xff0c;在你的项目中创建一个Log4Net帮助类&#xff0c;用于封装Log4Net的配置和日志记录逻辑。 using log4net; using log4net.Config;public class LogHelper {private static readonly ILog log LogMan…...

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信…...

dubbo原理框架设计

dubbo原理框架设计 &#xff08;1&#xff09;config 配置层&#xff1a;对外配置接口&#xff0c;以 ServiceConfig, ReferenceConfig 为中心&#xff0c;可以直接初始化配置类&#xff0c;也可以通过 spring 解析配置生成配置类。 &#xff08;2&#xff09;proxy 服务代理…...

【数据挖掘】使用 LSTM 进行时间和序列预测

一、说明 每天&#xff0c;人类在执行诸如过马路之类的任务时都会做出被动预测&#xff0c;他们估计汽车的速度和与汽车的距离&#xff0c;或者通过猜测球的速度并相应地定位手来接球。这些技能是通过经验和实践获得的。然而&#xff0c;由于涉及众多变量&#xff0c;预测天气或…...

Typescript第四章 函数(声明和调用,注解参数类型,多态,类型别名,泛型)

第四章 函数 ts中声明和调用函数的不同方式签名重载多态函数多态类型声明 4.1 声明和调用函数 在js中函数是一等对象&#xff0c;我们可以像对象那样使用函数&#xff0c;可以复制给变量&#xff0c;可以作为参数传递&#xff0c;返回值&#xff0c;赋值给对象的原型&#x…...

大数据-Spark批处理实用广播Broadcast构建一个全局缓存Cache

1、broadcast广播 在Spark中&#xff0c;broadcast是一种优化技术&#xff0c;它可以将一个只读变量缓存到每个节点上&#xff0c;以便在执行任务时使用。这样可以避免在每个任务中重复传输数据。 2、构建缓存 import org.apache.spark.sql.SparkSession import org.apache.s…...

Android Service的生命周期,两种启动方法,有什么区别

Android Service的生命周期&#xff0c;两种启动方法&#xff0c;有什么区别 Android Service是一种后台组件&#xff0c;用于在后台执行长时间运行的任务&#xff0c;而无需与用户界面进行交互。Service具有自己的生命周期&#xff0c;其主要包含以下几个状态&#xff1a;创建…...

测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

ViewFaceCore模块中的FaceQuality支持预测人脸质量&#xff0c;最初以为是预测人体体重&#xff0c;实际测试过程中才发现是评估人脸图片质量&#xff0c;主要调用Detect函数执行图片质量检测操作&#xff0c;其函数原型如下所示&#xff1a; //// 摘要:// 人脸质量评估///…...

Go语言网络库net/http

Go语言网络库net/http Http 协议(Hyper Text Transfer Protocol&#xff0c;超文本传输协议)是一个简单的请求-响应协议&#xff0c;它通常运行在 TCP 之 上。超文本传输协议是互联网上应用最为广泛的一种网络传输协议&#xff0c;所有的WWW文件都必须遵守这个标准。 Http 协…...

Acwing.91 最短Hamilton路径(动态规划)

题目 给定一张n个点的带权无向图&#xff0c;点从0~n-1标号&#xff0c;求起点0到终点n-1的最短Hamilton路径。Hamilton路径的定义是从0到n-1不重不漏地经过每个点恰好一次。 输入格式 第—行输入整数n。 接下来n行每行n个整数&#xff0c;其中第i行第j个整数表示点i到j的距…...

[hfut] [important] v4l2 vedio使用总结/opevx/ffpeg/v4l2/opencv/cuda

(158条消息) linux驱动camera//test ok_感知算法工程师的博客-CSDN博客 (158条消息) linux V4L2子系统——v4l2架构&#xff08;1&#xff09;之整体架构_感知算法工程师的博客-CSDN博客 (158条消息) linux V4L2子系统——v4l2的结构体&#xff08;2&#xff09;之video_devi…...

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现&#xff1a; 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…...

指令调度(Instruction Scheduling)

指令调度&#xff08;Instruction Scheduling&#xff09; 指令调度的约束基本机器模型基本块调度全局调度 指令调度是为了提高指令级并行&#xff08;ILP&#xff09;&#xff0c;对于超长指令字&#xff08;VLIW, Very Long Instruction Word&#xff09;和多发射系统&#x…...

【运维】Linux 跨服务器复制文件文件夹

【运维】Linux 跨服务器复制文件文件夹 如果是云服务 建议用内网ip scp是secure copy的简写&#xff0c;用于在Linux下进行远程拷贝文件的命令&#xff0c;和它类似的命令有cp&#xff0c;不过cp只是在本机进行拷贝不能跨服务器&#xff0c;而且scp传输是加密的。可能会稍微影…...

k8s apiserver如何支持http访问?

原本是可以通过设置api-server的--insecure-port来实现&#xff0c;但是这个参数已经被废弃了&#xff0c;更好的方法则是使用proxy来实现&#xff1a; 在集群任意一个节点上起一个proxy服务&#xff0c;并设置允许所有host访问&#xff1a; kubectl proxy --address0.0.0.0 …...

Safetensors,高效安全易用的深度学习新工具

大家好&#xff0c;本文将介绍一种为深度学习应用提供速度、效率、跨平台兼容性、用户友好性和安全性的新工具。 Safetensors简介 Hugging Face开发了一种名为Safetensors的新序列化格式&#xff0c;旨在简化和精简大型复杂张量的存储和加载。张量是深度学习中使用的主要数据…...

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用

Unity 工具之 NuGetForUnity 包管理器&#xff0c;方便在 Unity 中的进行包管理的简单使用 目录 Unity 工具之 NuGetForUnity 包管理器&#xff0c;方便在 Unity 中的进行包管理的简单使用 一、简单介绍 二、NuGetForUnity 的下载导入 Unity 三、NuGetForUnity 在 Unity 的…...

运算放大器(二):恒流源

一、实现原理 恒流源的输出电流能够在一定范围内保持稳定&#xff0c;不会随负载的变化而变化。 通过运放&#xff0c;将输入的电压信号转换成满足一定关系的电流信号&#xff0c;转换后的电流相当一个输出可调的简易恒流源。 二、电路结构 常用的恒流源电路如…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道

文/法律实务观察组 在债务重组领域&#xff0c;专业机构的核心价值不仅在于减轻债务数字&#xff0c;更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明&#xff0c;合法债务优化需同步实现三重平衡&#xff1a; 法律刚性&#xff08;债…...