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

聊聊JetCache的缓存构建

本文主要研究一下JetCache的缓存构建

invokeWithCached

com/alicp/jetcache/anno/method/CacheHandler.java

    private static Object invokeWithCached(CacheInvokeContext context)throws Throwable {CacheInvokeConfig cic = context.getCacheInvokeConfig();CachedAnnoConfig cac = cic.getCachedAnnoConfig();Cache cache = context.getCacheFunction().apply(context, cac);if (cache == null) {logger.error("no cache with name: " + context.getMethod());return invokeOrigin(context);}Object key = ExpressionUtil.evalKey(context, cic.getCachedAnnoConfig());if (key == null) {return loadAndCount(context, cache, key);}if (!ExpressionUtil.evalCondition(context, cic.getCachedAnnoConfig())) {return loadAndCount(context, cache, key);}try {CacheLoader loader = new CacheLoader() {@Overridepublic Object load(Object k) throws Throwable {Object result = invokeOrigin(context);context.setResult(result);return result;}@Overridepublic boolean vetoCacheUpdate() {return !ExpressionUtil.evalPostCondition(context, cic.getCachedAnnoConfig());}};Object result = cache.computeIfAbsent(key, loader);return result;} catch (CacheInvokeException e) {throw e.getCause();}}

invokeWithCached先通过context.getCacheFunction().apply(context, cac)去获取缓存

setCacheFunction

com/alicp/jetcache/anno/support/CacheContext.java

    public CacheInvokeContext createCacheInvokeContext(ConfigMap configMap) {CacheInvokeContext c = newCacheInvokeContext();c.setCacheFunction((invokeContext, cacheAnnoConfig) -> {Cache cache = cacheAnnoConfig.getCache();if (cache == null) {if (cacheAnnoConfig instanceof CachedAnnoConfig) {cache = createCacheByCachedConfig((CachedAnnoConfig) cacheAnnoConfig, invokeContext);} else if ((cacheAnnoConfig instanceof CacheInvalidateAnnoConfig) || (cacheAnnoConfig instanceof CacheUpdateAnnoConfig)) {CacheInvokeConfig cacheDefineConfig = configMap.getByCacheName(cacheAnnoConfig.getArea(), cacheAnnoConfig.getName());if (cacheDefineConfig == null) {String message = "can't find @Cached definition with area=" + cacheAnnoConfig.getArea()+ " name=" + cacheAnnoConfig.getName() +", specified in " + cacheAnnoConfig.getDefineMethod();CacheConfigException e = new CacheConfigException(message);logger.error("Cache operation aborted because can't find @Cached definition", e);return null;}cache = createCacheByCachedConfig(cacheDefineConfig.getCachedAnnoConfig(), invokeContext);}cacheAnnoConfig.setCache(cache);}return cache;});return c;}

createCacheInvokeContext设置了cacheFunction,使用了双重检锁去构建cache,对于CachedAnnoConfig是走了createCacheByCachedConfig

createCacheByCachedConfig

com/alicp/jetcache/anno/support/CacheContext.java

    private Cache createCacheByCachedConfig(CachedAnnoConfig ac, CacheInvokeContext invokeContext) {String area = ac.getArea();String cacheName = ac.getName();if (CacheConsts.isUndefined(cacheName)) {cacheName = configProvider.createCacheNameGenerator(invokeContext.getHiddenPackages()).generateCacheName(invokeContext.getMethod(), invokeContext.getTargetObject());}Cache cache = __createOrGetCache(ac, area, cacheName);return cache;}public Cache __createOrGetCache(CachedAnnoConfig cachedAnnoConfig, String area, String cacheName) {String fullCacheName = area + "_" + cacheName;Cache cache = cacheManager.getCacheWithoutCreate(area, cacheName);if (cache == null) {synchronized (this) {cache = cacheManager.getCacheWithoutCreate(area, cacheName);if (cache == null) {if (globalCacheConfig.isAreaInCacheName()) {// for compatible reason, if we use default configuration, the prefix should same to that version <=2.4.3cache = buildCache(cachedAnnoConfig, area, fullCacheName);} else {cache = buildCache(cachedAnnoConfig, area, cacheName);}cacheManager.putCache(area, cacheName, cache);}}}return cache;}    

__createOrGetCache再次使用双重检锁通过buildCache去构建Cache,默认globalCacheConfig.isAreaInCacheName()为false,构建完放入cacheManager

buildCache

com/alicp/jetcache/anno/support/CacheContext.java

    protected Cache buildCache(CachedAnnoConfig cachedAnnoConfig, String area, String cacheName) {Cache cache;if (cachedAnnoConfig.getCacheType() == CacheType.LOCAL) {cache = buildLocal(cachedAnnoConfig, area);} else if (cachedAnnoConfig.getCacheType() == CacheType.REMOTE) {cache = buildRemote(cachedAnnoConfig, area, cacheName);} else {Cache local = buildLocal(cachedAnnoConfig, area);Cache remote = buildRemote(cachedAnnoConfig, area, cacheName);boolean useExpireOfSubCache = cachedAnnoConfig.getLocalExpire() > 0;cache = MultiLevelCacheBuilder.createMultiLevelCacheBuilder().expireAfterWrite(remote.config().getExpireAfterWriteInMillis(), TimeUnit.MILLISECONDS).addCache(local, remote).useExpireOfSubCache(useExpireOfSubCache).cacheNullValue(cachedAnnoConfig.isCacheNullValue()).buildCache();}cache.config().setRefreshPolicy(cachedAnnoConfig.getRefreshPolicy());cache = new CacheHandler.CacheHandlerRefreshCache(cache);cache.config().setCachePenetrationProtect(globalCacheConfig.isPenetrationProtect());PenetrationProtectConfig protectConfig = cachedAnnoConfig.getPenetrationProtectConfig();if (protectConfig != null) {cache.config().setCachePenetrationProtect(protectConfig.isPenetrationProtect());cache.config().setPenetrationProtectTimeout(protectConfig.getPenetrationProtectTimeout());}if (configProvider.getCacheMonitorManager() != null) {configProvider.getCacheMonitorManager().addMonitors(area, cacheName, cache);}return cache;}

buildCache根据CacheType去构建,对于REMOTE是执行buildRemote

buildRemote

    protected Cache buildRemote(CachedAnnoConfig cachedAnnoConfig, String area, String cacheName) {ExternalCacheBuilder cacheBuilder = (ExternalCacheBuilder) globalCacheConfig.getRemoteCacheBuilders().get(area);if (cacheBuilder == null) {throw new CacheConfigException("no remote cache builder: " + area);}cacheBuilder = (ExternalCacheBuilder) cacheBuilder.clone();if (cachedAnnoConfig.getExpire() > 0 ) {cacheBuilder.expireAfterWrite(cachedAnnoConfig.getExpire(), cachedAnnoConfig.getTimeUnit());}if (cacheBuilder.getConfig().getKeyPrefix() != null) {cacheBuilder.setKeyPrefix(cacheBuilder.getConfig().getKeyPrefix() + cacheName);} else {cacheBuilder.setKeyPrefix(cacheName);}if (!CacheConsts.isUndefined(cachedAnnoConfig.getKeyConvertor())) {cacheBuilder.setKeyConvertor(configProvider.parseKeyConvertor(cachedAnnoConfig.getKeyConvertor()));}if (!CacheConsts.isUndefined(cachedAnnoConfig.getSerialPolicy())) {cacheBuilder.setValueEncoder(configProvider.parseValueEncoder(cachedAnnoConfig.getSerialPolicy()));cacheBuilder.setValueDecoder(configProvider.parseValueDecoder(cachedAnnoConfig.getSerialPolicy()));}cacheBuilder.setCacheNullValue(cachedAnnoConfig.isCacheNullValue());return cacheBuilder.buildCache();}

这里获取remote的cacheBuilder,进行clone,然后根据cachedAnnoConfig进行属性覆盖,然后执行cacheBuilder.buildCache()构建;这里keyPrefix默认为null,所以这里的keyPrefix为不带aera的cacheName;ExternalCacheBuilder有MockRemoteCacheBuilder、RedisLettuceCacheBuilder两个子类。

小结

JetCache延迟构建Cache,通过CacheContext.buildCache根据cacheType进行构建。

doc

  • Builder

相关文章:

聊聊JetCache的缓存构建

序 本文主要研究一下JetCache的缓存构建 invokeWithCached com/alicp/jetcache/anno/method/CacheHandler.java private static Object invokeWithCached(CacheInvokeContext context)throws Throwable {CacheInvokeConfig cic context.getCacheInvokeConfig();CachedAnnoC…...

【ios越狱包安装失败?uniapp导出ipa文件如何安装到苹果手机】苹果IOS直接安装IPA文件

问题场景&#xff1a; 提示&#xff1a;ipa是用于苹果设备安装的软件包资源 设备&#xff1a;iphone 13(未越狱) 安装包类型&#xff1a;ipa包 调试工具&#xff1a;hbuilderx 问题描述 提要&#xff1a;ios包无法安装 uniapp导出ios包无法安装 相信有小伙伴跟我一样&…...

浅析 Golang 内存管理

文章目录 浅析 Golang 内存管理栈&#xff08;Stack&#xff09;堆&#xff08;Heap&#xff09;堆 vs. 栈内存逃逸分析内存逃逸产生的原因避免内存逃逸的手段 内存泄露常见的内存泄露场景如何避免内存泄露&#xff1f;总结 浅析 Golang 内存管理 在 Golang 当中&#xff0c;堆…...

仿射变换 与 透视变换

仿射变换 与 透视变换 几种变换之间的关系 1、缩放 Rescale 1&#xff09;变换矩阵 缩放变换矩阵&#xff0c;形为 &#xff1a; &#xff0c; 其中&#xff1a; 、 为 x轴 和 y轴的缩放因子&#xff0c;即 宽高的缩放因子 图像中的每一个像素点 (x, y)&#xff0c;经过矩阵…...

Vue.js---嵌套的effect与effect栈

4.3嵌套的effect与effect栈 1、嵌套的effect effect是可以发生嵌套的 01 effect(function effectFn1() { 02 effect(function effectFn2() { /* ... */ }) 03 /* ... */ 04 })有这么一段代码&#xff1a; 01 // 原始数据 02 const data { foo: true, bar: true } 03 /…...

jQuery知识框架

一、jQuery 基础 核心概念 $ 或 jQuery&#xff1a;全局函数&#xff0c;用于选择元素或创建DOM对象。 链式调用&#xff1a;多数方法返回jQuery对象&#xff0c;支持连续操作。 文档就绪事件&#xff1a; $(document).ready(function() { /* 代码 */ }); // 简写 $(function…...

【Java学习笔记】hashCode方法

hashCode方法 注意&#xff1a;C要大写 作用&#xff1a;返回对象的哈希码值&#xff08;可以当作是地址&#xff0c;真实的地址在 Java 虚拟机上&#xff09;&#xff0c;支持此方法是为了提高哈希表的性能 底层实现&#xff1a;实际上&#xff0c;由Object类定义的hashCod…...

[思维模式-37]:什么是事?什么是物?什么事物?如何通过数学的方法阐述事物?

一、基本概念 1、事&#xff08;Event) “事”通常指的是人类在社会生活中的各种活动、行为、事件或情况&#xff0c;具有动态性和过程性&#xff0c;强调的是一种变化、发展或相互作用的流程。 特点 动态性&#xff1a;“事”往往涉及一系列的动作、变化和发展过程。例如&a…...

STM32-USART串口通信(9)

一、通信接口介绍 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统。 当STM32想要实现一些功能&#xff0c;但是需要外挂一些其他模块才能实现&#xff0c;这就需要在两个设备之间连接上一根或多跟通信线&#xff0c;通过通信线路发送或者接…...

【内网渗透】——NTML以及Hash Relay

【内网渗透】——NTLM以及Hash Relay 文章目录 【内网渗透】——NTLM以及Hash Relay[toc]前情提要1.NTML网络认证机制1.1NTML协议1.2NET NTMLv21.3NTML的认证方式1.4NTLM hash的生成方法&#xff1a; 2.PTH&#xff08;pass the hash)2.1原理2.2漏洞原理2.3实验环境2.4攻击过程…...

速查 Linux 常用指令 II

目录 一、网络管理命令1. 查看和配置网络设备&#xff1a;ifconfig1&#xff09;重启网络命令2&#xff09;重启网卡命令 2. 查看与设置路由&#xff1a;route3. 追踪网络路由&#xff1a;traceroute4. 查看端口信息和使用情况1&#xff09;netstat 命令2&#xff09;lsof 命令…...

基于 GPUGEEK平台进行vLLM环境部署DeepSeek-R1-70B

选择 GPUGEEK 平台的原因 算力资源丰富&#xff1a;GPUGEEK 提供多样且高性能的 GPU 资源&#xff0c;像英伟达高端 GPU 。DeepSeek - R1 - 70B 模型推理计算量巨大&#xff0c;需要强大算力支持&#xff0c;该平台能满足其对计算资源的高要求&#xff0c;保障推理高效运行。便…...

深入理解ThingsBoard的Actor模型

1、ThingsBoard系统中定义了哪些Actor ✅ ThingsBoard Actor 创建机制与作用对照表: Actor 类型 何时创建 由谁创建 是否缓存 作用描述 SystemActor 系统启动时 DefaultActorService / ActorSystem ✅ 是 ★ ThingsBoard 平台服务级别管理器:负责创建所有的Actor AppActor...

虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property

虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property code review! 文章目录 虚幻引擎5-Unreal Engine笔记之Qt与UE中的Meta和Property1.Qt 中的 Meta&#xff08;元对象系统&#xff09;1.1 主要功能1.2 如何实现1.2.1 例子1.2.2 访问 meta 信息 2.UE5 中的 Meta&#xff…...

技术中台-核心技术介绍(微服务、云原生、DevOps等)

在企业数字化中台建设中&#xff0c;技术中台是支撑业务中台、数据中台及其他上层应用的底层技术基础设施&#xff0c;其核心目标是提供标准化、可复用的技术能力&#xff0c;降低业务开发门槛&#xff0c;提升系统稳定性与扩展性。技术中台的技术栈需覆盖从开发、运维到治理的…...

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第二维度,第三维度

attention_weights = torch.ones_like(prompt_embedding[:, :, 0]):切片操作获取第1 维度,第二维度 attention_weights = torch.ones_like(prompt_embedding[:, :, 0]) 这行代码的作用是创建一个与 prompt_embedding[:, :, 0] 形状相同且所有元素都为 1 的张量,它用于初始化…...

2025年中国DevOps工具选型指南:主流平台能力横向对比

在数字化转型纵深发展的2025年&#xff0c;中国企业的DevOps工具选型呈现多元化态势。本文从技术架构、合规适配、生态整合三个维度&#xff0c;对Gitee、阿里云效&#xff08;云效DevOps&#xff09;、GitLab CE&#xff08;中国版&#xff09;三大主流平台进行客观对比分析&a…...

国产ETL数据集成软件和Informatica 相比如何

数据集成领域Informatica名号可谓无人不知无人不晓。作为国际知名的ETL工具&#xff0c;凭借其强大的功能和多年的市场积累&#xff0c;赢得了众多企业的信赖。然而&#xff0c;随着国内企业数字化转型的加速以及对数据安全、成本控制和本地化服务的需求日益增长&#xff0c;国…...

FFMPEG 与 mp4

1. FFmpeg 中的 start_time 与 time_base start_time 流的起始时间戳&#xff08;单位&#xff1a;time_base&#xff09;&#xff0c;表示第一帧的呈现时间&#xff08;Presentation Time&#xff09;。通常用于同步多个流&#xff08;如音频和视频&#xff09;。 time_base …...

在RAG中 如何提高向量搜索的准确性?

在RAG(Retrieval-Augmented Generation)系统中,提高向量搜索的准确性需要从数据预处理、模型选择、算法优化和后处理等多个维度进行综合改进。以下是具体策略的详细分析: 一、优化数据质量与预处理 1. 数据清洗与结构化 去噪与规范化:去除停用词、拼写纠错、统一大小写和…...

Python调用SQLite及pandas相关API详解

前言 SQLite是一个轻量级的嵌入式关系数据库&#xff0c;它不需要独立的服务器进程&#xff0c;将数据存储在单一的磁盘文件中。Python内置了sqlite3模块&#xff0c;使得我们可以非常方便地操作SQLite数据库。同时&#xff0c;pandas作为Python数据分析的重要工具&#xff0c…...

【Java学习笔记】finalize方法

finalize 方法 说明&#xff1a;实际开发中很少或者几乎不会重写finalize方法&#xff0c;更多的是应对面试考点 说明 &#xff08;1&#xff09;当对象被回收时&#xff0c;系统会自动调用该对象的 finalize 方法。子类可以重写该方法&#xff0c;做一些额外的资源释放操作&…...

MySQL之基础索引

目录 引言 1、创建索引 2、索引的原理 2、索引的类型 3、索引的使用 1.添加索引 2.删除索引 3.删除主键索引 4.修改索引 5.查询索引 引言 当一个数据库里面的数据特别多&#xff0c;比如800万&#xff0c;光是创建插入数据就要十几分钟&#xff0c;我们查询一条信息也…...

MCU程序加密保护(二)ID 验证法 加密与解密

STM32 微控制器内部具有一个 96 位全球唯一的 CPU ID&#xff0c;不可更改。开发者可利用此 ID 实现芯片绑定和程序加密&#xff0c;增强软件安全性。 ID 验证法就是利用这个 UID&#xff0c;对每颗芯片的身份进行识别和绑定&#xff0c;从而防止程序被复制。 实现方式&#xf…...

SparkSQL的基本使用

SparkSQL 是 Apache Spark 的一个模块&#xff0c;用于处理结构化数据。它提供了一个高性能、分布式的 SQL 查询引擎&#xff0c;可以轻松处理各种数据源&#xff0c;包括结构化数据、半结构化数据和非结构化数据12。 SparkSQL 的特点 易整合&#xff1a;SparkSQL 无缝整合了…...

QListWedget控件使用指南

QListWedget公共函数 函数签名功能描述QListWidget(QWidget *parent nullptr)构造函数&#xff0c;创建一个QListWidget对象&#xff0c;可指定父部件&#xff08;默认为nullptr&#xff09;。virtual ~QListWidget()虚析构函数&#xff0c;释放QListWidget对象及其资源。voi…...

primitive创建图像物体

本节我们学习使用entity来创建物体 我们以矩形为例,在输入矩形的四个点后运行程序 //使用entity创建矩形var rectangle viewer.entities.add({rectangle: {coordinates:Cesium.Rectangle.fromDegrees(//西边的经度90,//南边维度20,//东边经度110,//北边维度30 ),material:Ces…...

MySQL 服务器配置和管理(上)

MySQL 服务器简介 通常所说的 MySQL 服务器指的是mysqld(daemon 守护进程)程序&#xff0c;当运⾏mysqld后对外提供MySQL 服务&#xff0c;这个专题的内容涵盖了以下关于MySQL 服务器以及相关配置的内容&#xff0c;包括&#xff1a; • 服务器⽀持的启动选项。可以在命令⾏和…...

跨区域智能电网负荷预测:基于 PaddleFL 的创新探索

跨区域智能电网负荷预测:基于 PaddleFL 的创新探索 摘要: 本文聚焦跨区域智能电网负荷预测,提出基于 PaddleFL 框架的联邦学习方法,整合多地区智能电网数据,实现数据隐私保护下的高精度预测,为电网调度优化提供依据,推动智能电网发展。 一、引言 在当今社会,电力作为经…...

Java 重试机制详解

文章目录 1. 重试机制基础1.1 什么是重试机制1.2 重试机制的关键要素1.3 适合重试的场景2. 基础重试实现2.1 简单循环重试2.2 带延迟的重试2.3 指数退避策略2.4 添加随机抖动2.5 使用递归实现重试2.6 可重试异常过滤3. 常用重试库介绍3.1 Spring Retry3.1.1 依赖配置3.1.2 编程…...

Spark缓存---cache方法

在Spark 中&#xff0c;cache() 是用于优化计算性能的核心方法之一&#xff0c;但它有许多细节需要深入理解。以下是关于 cache() 的详细技术解析&#xff1a; 1. cache() 的本质 简化的 persist()&#xff1a;cache() 是 persist(StorageLevel.MEMORY_ONLY) 的快捷方式&#…...

一分钟了解大语言模型(LLMs)

一分钟了解大语言模型&#xff08;LLMs&#xff09; A Minute to Know about Large Language Models (LLMs) By JacksonML 自从ChatGPT上线发布以来&#xff0c;在短短的两年多时间里&#xff0c;全球ChatBot&#xff08;聊天机器人&#xff09;发展异常迅猛&#xff0c;更为…...

当数控编程“联姻”AI:制造工厂的“智能大脑”如何炼成?

随着DeepSeek乃至AI人工智能技术在企业中得到了广泛的关注和使用&#xff0c;多数企业开始了AI探索之旅&#xff0c;迅易科技也不例外&#xff0c;且在不断地实践中强化了AI智能应用创新的强大能力。许多制造企业面临着工艺知识传承困难、编程效率低下等诸多挑战&#xff0c; 今…...

鸿蒙OSUniApp 实现的二维码扫描与生成组件#三方框架 #Uniapp

UniApp 实现的二维码扫描与生成组件 前言 最近在做一个电商小程序时&#xff0c;遇到了需要扫描和生成二维码的需求。在移动应用开发中&#xff0c;二维码功能已经成为标配&#xff0c;特别是在电商、社交和支付等场景下。UniApp作为一个跨平台开发框架&#xff0c;为我们提供…...

【Python 内置函数】

Python 内置函数是语言核心功能的直接体现&#xff0c;无需导入即可使用。以下是精选的 10 大类、50 核心内置函数详解&#xff0c;涵盖日常开发高频场景&#xff1a; 一、数据类型转换 函数示例说明int()int("123") → 123字符串/浮点数转整数float()float("3…...

鸿蒙OSUniApp开发支持多语言的国际化组件#三方框架 #Uniapp

使用UniApp开发支持多语言的国际化组件 在全球化的今天&#xff0c;一个优秀的应用往往需要支持多种语言以满足不同地区用户的需求。本文将详细讲解如何在UniApp框架中实现一套完整的国际化解决方案&#xff0c;从而轻松实现多语言切换功能。 前言 去年接手了一个面向国际市场…...

MySQL之基础事务

目录 引言&#xff1a; 什么是事务&#xff1f; 事务和锁 mysql数据库控制台事务的几个重要操作指令&#xff08;transaction.sql&#xff09; 1、事物操作示意图&#xff1a; 2.事务的隔离级别 四种隔离级别&#xff1a; 总结一下隔离指令 1. 查看当前隔离级别​​ …...

OpenHarmony系统HDF驱动开发介绍(补充)

一、HDF驱动简介 HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架&#xff0c;为驱动开发者提供驱动框架能力&#xff0c;包括驱动加载、驱动服务管理、驱动消息机制和配置管理。 简单来说&#xff1a;HDF框架的驱动和Linux的驱动比较相似都是由配置文件和驱动…...

深度学习中的查全率与查准率:如何实现有效权衡

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4-turbo模型辅助生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认…...

文件名是 ‪E:\20250512_191204.mp4, EV软件录屏,未保存直接关机损坏, 如何修复?

去github上下载untrunc 工具就能修复 https://github.com/anthwlock/untrunc/releases 如果访问不了 本机的 hosts文件设置 140.82.112.3 github.com 199.232.69.194 github.global.ssl.fastly.net 就能访问了 实在不行&#xff0c;从这里下载&#xff0c;传上去了 https://do…...

界面控件DevExpress WinForms v24.2 - 数据处理功能增强

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…...

Web UI测试效率低?来试Parasoft Selenic的智能修复与分析!

如果你正在使用Selenium进行Web UI测试&#xff0c;但被测试维护的繁琐、测试不稳定以及测试执行缓慢等问题困扰&#xff0c;不妨试试Parasoft Selenic&#xff01; Parasoft Selenic能够通过智能修复与分析功能&#xff0c;帮你自动检测并修复测试中的不稳定因素&#xff0c;…...

计算机视觉最不卷的方向:三维重建学习路线梳理

提到计算机视觉&#xff08;CV&#xff09;&#xff0c;大多数人脑海中会立马浮现出一个字&#xff1a;“卷”。卷到什么程度呢&#xff1f;2022年秋招CV工程师岗位数下降了16%&#xff0c;但求职人数增加了23%&#xff0c;求职人数与招聘岗位的比例达到了恐怖的15:1&#xff0…...

国产 ETL 数据集成厂商推荐—谷云科技 RestCloud

数字化转型加速推进的商业环境中&#xff0c;数据已成为企业最为关键的资产之一。然而&#xff0c;随着企业信息化的建设不断深入&#xff0c;各个业务系统之间数据分散、格式不一、难以互通等问题日益凸显&#xff0c;严重制约了企业对数据价值的深度挖掘与高效利用。在此背景…...

vscode extention踩坑记

# npx vsce package --allow-missing-repository --no-dependencies #耗时且不稳定 npx vsce package --allow-missing-repository #用这行 code --install-extension $vsixFileName --force我问ai&#xff1a;为什么我的.vsix文件大了那么多 ai答&#xff1a;因为你没有用 --n…...

AI时代的弯道超车之第十二章:英语和编程重要性?

在这个AI重塑世界的时代,你还在原地观望吗?是时候弯道超车,抢占先机了! 李尚龙倾力打造——《AI时代的弯道超车:用人工智能逆袭人生》专栏,带你系统掌握AI知识,从入门到实战,全方位提升认知与竞争力! 内容亮点: AI基础 + 核心技术讲解 职场赋能 + 创业路径揭秘 打破…...

关于数据湖和数据仓的一些概念

一、前言 随着各行业数字化发展的深化,数据资产和数据价值已越来越被深入企业重要发展的战略重心,海量数据已成为多数企业生产实际面临的重要问题,无论存储容量还是成本,可靠性都成为考验企业数据治理的考验。本文来看下海量数据存储的数据湖和数据仓,数据仓库和数据湖,…...

hbase shell的常用命令

一、hbase shell的基础命令 # 客户端登录 [rootCloud-Hadoop-NN-02 hbase]$ ./bin/hbase shell# 查看所有表 hbase> list### 创建数据表student&#xff0c;包含Sname、Ssex、Sage、Sdept、course列族/列 ### 说明&#xff1a;列族不指定列名时&#xff0c;列族可以直接成为…...

高并发内存池(四):Page Cache结构设计

目录 一&#xff0c;项目整体框架回顾 Thread Cache结构 Central Cache结构 二&#xff0c;Page Cache大致框架 三&#xff0c;Page Cache申请内存实现 Central Cache向Page Cache申请内存接口 从Page Cache中获取span接口 Page Cache加锁问题 申请内存完整过程 源码&a…...

易学探索助手-项目记录(九)

本文介绍本地大模型推理数据集构成 &#xff08;一&#xff09;古籍数据获取 以44种竖向从右至左排列的繁体古文为研究对象&#xff0c;通过OCR识别、XML结构化处理&#xff0c;最终生成符合大模型训练要求的数据集。 1.技术路线设计 图像处理层&#xff1a;PaddleOCR识别竖…...