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

Java设计模式之抽象工厂模式:从入门到架构级实践

设计模式是构建高质量软件的基石,而抽象工厂模式作为创建型模式的代表,不仅解决了对象创建的问题,更在架构设计中扮演着关键角色。本文将从基础到高阶、从单机到分布式,全面剖析抽象工厂模式的应用场景与实战技巧。


一、从问题出发:抽象工厂模式的本质

场景痛点
假设需要开发一个支持多数据库(MySQL、Oracle)的订单系统,包含以下操作:

  • 创建数据库连接(Connection

  • 生成SQL执行器(Executor

  • 管理事务(Transaction

若直接硬编码具体类,代码将充满if-else分支,且新增数据库类型时需修改所有代码。抽象工厂模式通过垂直拆分产品族水平扩展产品等级,实现松耦合架构。

本质目标

  • 隔离性:客户端无需感知具体产品类

  • 一致性:确保同一族产品兼容(如只用MySQL组件)

  • 动态性:运行时切换产品族(如通过配置切换数据库)


二、进阶设计:抽象工厂的变体与扩展
1. 多维度产品族(交叉组合)

假设需要支持不同数据库(MySQL、Oracle)和不同环境(生产环境、测试环境),可通过工厂嵌套实现:

interface EnvConfig {String getConfig();
}// 抽象工厂扩展环境维度
interface DBFactory {Connection createConnection();Executor createExecutor();EnvConfig createEnvConfig();
}// 生产环境MySQL工厂
class ProdMySQLFactory implements DBFactory {public Connection createConnection() { /*...*/ }public Executor createExecutor() { /*...*/ }public EnvConfig createEnvConfig() { return new ProdEnvConfig(); // 生产配置}
}
2. 延迟初始化与缓存

通过享元模式优化高频创建的对象:

class OracleFactory implements DBFactory {private Connection connCache;public Connection createConnection() {if (connCache == null) {connCache = new OracleConnection();}return connCache;}
}
3. 动态代理增强

使用JDK动态代理实现工厂的AOP扩展(如监控创建耗时):

class FactoryProxy implements InvocationHandler {private Object target;public static DBFactory createProxy(DBFactory factory) {return (DBFactory) Proxy.newProxyInstance(factory.getClass().getClassLoader(),new Class[]{DBFactory.class},new FactoryProxy(factory));}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) {long start = System.currentTimeMillis();Object result = method.invoke(target, args);System.out.println("创建耗时:" + (System.currentTimeMillis()-start));return result;}
}

三、架构级实践:微服务中的抽象工厂
1. 多厂商支付网关集成

在支付系统中对接支付宝、微信支付时:

// 抽象产品
interface PaymentService {void pay(BigDecimal amount);
}interface RefundService {void refund(String orderId);
}// 抽象工厂
interface PaymentFactory {PaymentService createPayment();RefundService createRefund();
}// 支付宝实现
class AlipayFactory implements PaymentFactory {public PaymentService createPayment() {return new AlipayPayment();}public RefundService createRefund() {return new AlipayRefund();}
}

通过Spring Cloud Config动态注入工厂实现:

# application.yml
payment:provider: alipay # 可切换为wechat
2. 服务发现中的工厂模式

在Kubernetes多集群环境中,通过抽象工厂生成不同区域的客户端:

interface K8SClientFactory {PodClient createPodClient();ConfigMapClient createConfigMapClient();
}// AWS集群工厂
class AwsK8SFactory implements K8SClientFactory {public PodClient createPodClient() {return new AwsPodClient();}// ...
}

四、模式对比:何时选择抽象工厂?
模式核心目标适用场景扩展方向
简单工厂集中管理对象创建产品类型固定且较少不符合开闭原则
抽象工厂创建产品族多系列、多维度产品组合新增产品族容易
工厂方法延迟子类决定对象类型单一产品的多实现新增产品等级容易
建造者模式分步构建复杂对象对象构造过程复杂控制构造流程

决策树
需要创建多个相关对象? → 是 → 抽象工厂
需要灵活扩展产品类型? → 是 → 工厂方法
对象构造过程复杂? → 是 → 建造者模式


五、性能优化与陷阱规避
1. 工厂对象复用策略
  • 无状态工厂:可设计为单例

    @Component
    @Scope("singleton")
    public class MySQLFactory implements DBFactory { ... }

  • 有状态工厂:使用ThreadLocal避免并发问题

    private ThreadLocal<Connection> connHolder = new ThreadLocal<>();

2. 循环依赖预防

当产品间相互依赖时,采用依赖注入而非工厂内部创建:

class OrderServiceFactory implements DBFactory {private final Connection conn;private final Executor executor;@Autowiredpublic OrderServiceFactory(Connection conn, Executor executor) {this.conn = conn;this.executor = executor;}
}
3. 空对象模式(Null Object)

避免返回null导致NPE:

class NullPaymentFactory implements PaymentFactory {public PaymentService createPayment() {return new NullPaymentService(); // 实现空操作}
}

六、测试策略:确保工厂可靠性
1. 单元测试:验证产品兼容性
@Test
void testMySQLProductCompatibility() {DBFactory factory = new MySQLFactory();Connection conn = factory.createConnection();Executor executor = factory.createExecutor();assertTrue(conn instanceof MySQLConnection);assertTrue(executor.isCompatible(conn)); // 验证兼容性
}
2. 集成测试:动态切换工厂

使用Spring Profile实现多环境测试:

@ActiveProfiles("test-oracle")
@SpringBootTest
class OracleIntegrationTest {@Autowiredprivate DBFactory dbFactory;@Testvoid testOracleConnection() {Connection conn = dbFactory.createConnection();assertThat(conn.connect()).isEqualTo(Status.OK);}
}
3. Mock测试:隔离外部依赖
@Mock
private PaymentService paymentService;@Test
void testPaymentFlow() {PaymentFactory mockFactory = mock(PaymentFactory.class);when(mockFactory.createPayment()).thenReturn(paymentService);OrderService orderService = new OrderService(mockFactory);orderService.processPayment();verify(paymentService).pay(any());
}

七、未来演进:云原生时代的抽象工厂
1. Serverless中的冷启动优化

通过预初始化工厂减少冷启动时间:

public class FunctionInitializer {private static DBFactory factory;static {factory = new MySQLFactory(); // 提前初始化factory.createConnection().warmUp(); // 预热连接池}
}
2. 容器化环境下的工厂注入

在Kubernetes中使用ConfigMap动态配置工厂:

apiVersion: v1
kind: ConfigMap
metadata:name: db-config
data:factory.class: "com.example.PostgresFactory"

通过Java SPI机制加载实现类:

ServiceLoader<DBFactory> factories = ServiceLoader.load(DBFactory.class);
DBFactory factory = factories.stream().filter(p -> p.type().equals(config.getFactoryClass())).findFirst().get();
3. 混合云多活架构

根据流量来源选择地域工厂:

public class RegionalDBFactory {private Map<Region, DBFactory> factoryMap;public Connection getConnection() {Region region = RequestContext.getCurrentRegion();return factoryMap.get(region).createConnection();}
}

八、终极实践:设计模式融合之道

案例:电商平台商品系统

  • 抽象工厂:生成不同类目(数码、服饰)的详情页组件

  • 策略模式:根据用户等级展示不同价格策略

  • 装饰器模式:为商品描述添加缓存层

  • 观察者模式:库存变动时通知关联系统

// 融合示例
public class ElectronicsFactory implements ProductFactory {public DetailComponent createDetail() {return new CacheDecorator(new ElectronicsDetail()); // 装饰器}public PriceStrategy createPriceStrategy(User user) {if (user.isVIP()) {return new VIPPriceStrategy(); // 策略模式}return new DefaultPriceStrategy();}
}

九、总结与展望

抽象工厂模式在复杂系统架构中展现出了强大的生命力,其核心价值在于:

  • 架构清晰化:通过垂直分层管理依赖

  • 扩展可控化:新产品族的加入无需修改已有代码

  • 协作标准化:统一的对象创建契约

随着云原生与AI技术的演进,抽象工厂模式正在与以下趋势深度融合:

  1. 智能化工厂:通过机器学习自动选择最优产品实现

  2. 边缘计算:动态生成适应边缘节点的轻量级产品

  3. 区块链:确保工厂生成对象的不可篡改性

相关文章:

Java设计模式之抽象工厂模式:从入门到架构级实践

设计模式是构建高质量软件的基石&#xff0c;而抽象工厂模式作为创建型模式的代表&#xff0c;不仅解决了对象创建的问题&#xff0c;更在架构设计中扮演着关键角色。本文将从基础到高阶、从单机到分布式&#xff0c;全面剖析抽象工厂模式的应用场景与实战技巧。 一、从问题出发…...

摄像头模块对焦方式的类型

摄像头模块的对焦方式直接影响成像清晰度和使用场景适应性&#xff0c;不同技术各有其优缺点。以下是常见对焦方式及其原理、特点和应用场景的详细说明&#xff1a; ‌1. 固定对焦&#xff08;Fixed Focus&#xff09;‌ ‌原理‌&#xff1a;镜头固定在特定距离&#xff08;…...

九屏图分析法以手机为例

九屏图的两种视角​​ ​​时间九屏图​​&#xff1a;关注系统的​​时间演化​​&#xff08;过去、现在、未来&#xff09;&#xff0c;强调技术或产品的生命周期。​​空间九屏图​​&#xff1a;关注系统的​​层次结构​​&#xff08;子系统、本系统、超系统&#xff0…...

【模板】前缀和

链接&#xff1a;【模板】前缀和 题目描述 给定一个长度为n的数组a1,a2,....ana_1, a_2,....a_na1​,a2​,....an​. 接下来有q次查询, 每次查询有两个参数l, r. 对于每个询问, 请输出alal1....ara_la_{l1}....a_ral​al1​....ar​ 输入描述: 第一行包含两个整数n和q. 第…...

微信小程序多线程的使用

微信小程序的多线程主要通过 Worker 实现&#xff0c;用于处理复杂计算任务以避免阻塞主线程。以下是完整的使用指南和最佳实践&#xff1a; 一、Worker 核心机制 运行环境隔离 主线程与 Worker 线程内存不共享通信通过 postMessage 完成&#xff08;数据拷贝而非共享&#xff…...

FPGA设计职位介绍|如何成为一名合格的数字前端设计工程师?

近年来FPGA行业持续升温&#xff0c;随着国产替代浪潮的加快推进&#xff0c;国家对可重构计算、边缘计算、自主可控等领域的扶持力度不断加大&#xff0c;FPGA作为灵活性高、可编程性强的重要芯片种类&#xff0c;在人工智能、通信、工业控制等应用中广受青睐。FPGA人才长期紧…...

Shell 基础

刷题&#xff1a; 思维导图&#xff1a; #include <stdio.h> // 手动定义32位有符号整数的范围 #define INT_MAX 2147483647 #define INT_MIN (-2147483647 - 1) int reverse(int x) { int rev 0; // 初始化反转后的数字为0 while (x ! 0) { // 当x不为0时&#xff…...

软件信息安全性测试如何进行?有哪些注意事项?

随着信息技术的高速发展&#xff0c;软件已经成为我们生活和工作中不可或缺的一部分。然而&#xff0c;随着软件产品的广泛普及&#xff0c;软件信息安全性问题也日益凸显&#xff0c;因此软件信息安全性测试必不可少。那么软件信息安全性测试应如何进行呢?在进行过程中又有哪…...

ragflow开启https访问:浏览器将自签证书添加到受信任的根证书颁发机构 ,当证书过期,还需要添加吗?

核心机制解析 信任链原理: 当您将自签名证书添加到"受信任的根证书颁发机构"后,系统会永久信任该证书的颁发者身份但证书本身的有效期和密钥匹配仍需验证证书更新的两种情况: 相同密钥续期:如果新证书使用相同的密钥对,浏览器通常会保持信任重新生成密钥:如果执…...

ragflow开启https访问:自签证书到期了,如何自动生成新证书

自动生成和更新自签名证书的方案 对于使用公网IP和自签名证书的RagFlow服务,要实现证书的自动生成和更新,可以采用以下方案: 方案一:使用脚本自动更新(推荐) 1. 创建自动更新脚本 在服务器上创建 ./docker/nginx/auto_renew_cert.sh 文件: #!/bin/bash# 证书路径 C…...

LLM面试题八

推荐算法工程师面试题 二分类的分类损失函数&#xff1f; 二分类的分类损失函数一般采用交叉熵(Cross Entropy)损失函数&#xff0c;即CE损失函数。二分类问题的CE损失函数可以写成&#xff1a;其中&#xff0c;y是真实标签&#xff0c;p是预测标签&#xff0c;取值为0或1。 …...

小行星轨道预测是怎么做的?从天文观测到 AI 模型的完整路径

目录 ☄️ 小行星轨道预测是怎么做的&#xff1f;从天文观测到 AI 模型的完整路径 &#x1f30c; 一、什么是小行星轨道预测&#xff1f; &#x1f52d; 二、观测数据从哪里来&#xff1f; &#x1f9ee; 三、经典动力学方法&#xff1a;数值积分 &#x1f916; 四、现代方…...

华为OD机试2025A卷 - 正整数到excel编号之间的转换(Java Python JS C++ C )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 用过 excel 的都知道excel的列编号是这样的: a b c … z aa ab ac … az ba bb bc … yz za zb zc … zz aaa aab aac … 分别代表以下编号: 1 2 3 … 26 27 28 29 … 52 53 54 55…...

2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2024年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛&#xff08;China Undergraduate Mathematical Contest in Modeling&#xff09;是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动&#xff0c;目的在于激…...

Vue3 实现进度条组件

样式如下&#xff0c;代码如下 <script setup> import { computed, defineEmits, defineProps, onMounted, ref, watch } from vue// 定义 props const props defineProps({// 初始百分比initialPercentage: {type: Number,default: 0,}, })// 定义 emits const emits…...

I²S协议概述与信号线说明

IIS协议概述 ​ IS&#xff08;Inter-IC Sound&#xff09;协议&#xff0c;又称 IIS&#xff08;Inter-IC Sound&#xff09;&#xff0c;是一种专门用于数字音频数据传输的串行总线标准&#xff0c;由飞利浦&#xff08;Philips&#xff09;公司提出。该协议通常用于微控制器…...

Redis 面经

1、说说什么是 Redis? Redis 是 Remote Dictionary Service 三个单词中加粗字母的组合&#xff0c;是一种基于键值对的 NoSQL 数据库。但比一般的键值对&#xff0c;比如 HashMap 强大的多&#xff0c;Redis 中的 value 支持 string、hash、 list、set、zset、Bitmaps、Hyper…...

设计模式 四、行为设计模式(1)

在设计模式的世界里&#xff0c;23种经典设计模式通常被分为三大类&#xff1a;创建型、结构型和行为型。创建型设计模式关注对象创建的问题&#xff0c;结构性设计模式关注于类或对象的组合和组装的问题&#xff0c;行为型设计模式则主要关注于类或对象之间的交互问题。 行为设…...

Python错误分析与调试

在Python编程的过程中&#xff0c;我们难免会遇到各种各样的错误&#xff0c;而有效地分析和调试这些错误&#xff0c;能让我们的代码快速恢复正常运行&#xff0c;今天就来和大家聊聊Python中错误分析与调试的相关内容。 错误分析 Python中的错误大致可以分为语法错误和逻…...

vue实现大转盘抽奖

用vue实现一个简单的大转盘抽奖案例 大转盘 一 转盘布局 <div class"lucky-wheel-content"><div class"lucky-wheel-prize" :style"wheelStyle" :class"isStart ? animated-icon : "transitionend"onWheelTransitionE…...

《从零搭建Vue3项目实战》(AI辅助搭建Vue3+ElemntPlus后台管理项目)零基础入门系列第二篇:项目创建和初始化

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 《从零搭建Vue3项目实战》&#xff08;AI辅助…...

yum拒绝连接

YUM 拒绝连接的解决方案 当遇到 yum 无法连接的问题时&#xff0c;通常可以通过更换为更稳定的镜像源来解决问题。以下是具体的解决方法&#xff1a; 更换为阿里云源 如果当前的 yum 配置文件存在问题或网络不稳定&#xff0c;可以尝试将其替换为阿里云的镜像源。 备份原始配…...

信息学奥赛一本通 1861:【10NOIP提高组】关押罪犯 | 洛谷 P1525 [NOIP 2010 提高组] 关押罪犯

【题目链接】 ybt 1861&#xff1a;【10NOIP提高组】关押罪犯 洛谷 P1525 [NOIP 2010 提高组] 关押罪犯 【题目考点】 1. 图论&#xff1a;二分图 2. 二分答案 3. 种类并查集 【解题思路】 解法1&#xff1a;种类并查集 一个囚犯是一个顶点&#xff0c;一个囚犯对可以看…...

代码随想录算法训练营第十一天

LeetCode/卡码网题目: 144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102. 二叉树的层序遍历107.二叉树的层次遍历II199. 二叉树的右视图637. 二叉树的层平均值429. N 叉树的层序遍历515. 在每个树行中找最大值116. 填充每个节点的下一个右侧节点指针117. 填…...

浅谈进程的就绪状态与挂起状态

就绪状态 进程获得除 CPU 之外的所需资源&#xff0c;一旦得到 CPU 就可以立即运行&#xff0c;不能运行的原因是还是因为 CPU 的资源太少&#xff0c;只能等待分配 CPU 资源。在系统中&#xff0c;处于就绪状态的进程可能有多个&#xff0c;通常是将它们组成一个进程就绪队列…...

37、web前端开发之Vue3保姆教程(一)

一、课程简介 本课程旨在帮助学员从零基础逐步掌握Web前端开发的核心技术,涵盖当前前端开发中的关键工具和框架。课程内容包括: Vue 3:主流前端框架,支持组件化开发和响应式数据管理,帮助学员高效构建现代Web应用。TypeScript:增强版JavaScript,提供静态类型支持,提高…...

cenos7升级gcc 9.3和Qt5.15版本教程

cenos7升级gcc 9.3和Qt5.15版本教程 文章目录 cenos7升级gcc 9.3和Qt5.15版本教程0、背景1、现状2、目标和思路3、升级前环境准备3.1 虚拟机联网配置3.2 镜像设置 4、升级gcc 9.35 升级Qt6 测试验证7 总结 0、背景 之前编码的环境一直是“拿来主义”&#xff0c;拷贝现成的虚拟…...

Scala总结(七)

集合&#xff08;二&#xff09; 数组 不可变数组与可变数组的转换 arr1.toBuffer //不可变数组转可变数组 arr2.toArray //可变数组转不可变数组 arr2.toArray 返回结果才是一个不可变数组&#xff0c;arr2 本身没有变化arr1.toBuffer 返回结果才是一个可变数组&#xff…...

linux 使用 usermod 授权 普通用户 属组权限

之前写过这篇文章 linux 普通用户 使用 docker 只不过是使用 root 用户编辑 /etc/group用户所属组文件的方式 今天带来一种 usermod 命令行方式 以下3步&#xff0c;在root用户下操作 第一步&#xff0c;先创建一个普通用户测试使用 useradd miniuser第二步&#xff0c;授权到…...

Redis持久化

Redis持久化 一.认识持久化1.简单介绍2.持久化策略 二.RDB1.快照2."定期"fork 3.RDB演示(1)手动执行save&bgsave触发一次生成快照(2)插入key&#xff0c;不手动执行bgsave(3)执行bgsave后&#xff0c;新旧文件的替换(4)通过配置自动生成rdb快照(5)rdb文件内容被故…...

什么是 k8s 的 Taints(污点) 和 Tolerations(容忍度)

什么是 k8s 的 Taints&#xff08;污点&#xff09; 和 Tolerations&#xff08;容忍度&#xff09; 在 Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Taints&#xff08;污点&#xff09;和 Tolerations&#xff08;容忍度&#xff09;用于影响 Pod 调度到节点的行为…...

是德科技KEYSIGHT校准件85039B

是德科技KEYSIGHT校准件85039B 是德科技KEYSIGHT校准件85039B 85039B Agilent | 85039B|校准件|网络分析仪校准件|3GHz|75欧|N型 品牌&#xff1a; 安捷伦 | Agilent | 惠普 | HP 主要技术指标 DC to 3GHz frequency range 主要描述 常用型号&#xff1a; 一、频谱分析仪或…...

以UE5第三方插件库为基础,编写自己的第三方库插件,并且能够在运行时复制.dll

首先&#xff0c;创建一个空白的C 项目&#xff0c;创建第三方插件库。如下图所示 编译自己的.Dll 和.lib 库&#xff0c;打开.sln 如下图 ExampleLibrary.h 的代码如下 #if defined _WIN32 || defined _WIN64 #define EXAMPLELIBRARY_IMPORT __declspec(dllimport) #elif d…...

StarRocks执行原理与SQL性能优化策略探索

https://zhuanlan.zhihu.com/p/15707561363 聚合优化实践 -- 通过count group by 优化 count distinct数据倾斜问题 除了前面所说的聚合度会对分组聚合造成比较大的影响外&#xff0c;我们还要考虑一个点&#xff0c;即数据倾斜问题。 背景: 如下为最初的用户计算uv的SQL SE…...

Java全栈面试宝典:JMM内存模型与Spring自动装配深度解析

目录 一、Java内存模型&#xff08;JMM&#xff09;核心原理 &#x1f525; 问题8&#xff1a;happens-before原则全景解析 JMM内存架构图 happens-before八大规则 线程安全验证案例 &#x1f525; 问题9&#xff1a;JMM解决可见性的三大武器 可见性保障机制 volatile双…...

拉普拉斯变换

【硬核】工科生都逃不掉的拉氏变换&#xff0c;居然又炫酷又实用|拉普拉斯变换原理、图解与应用&#xff0c;傅里叶变换进阶&#xff0c;控制理论必修课【喵星考拉】...

JavaScript之Json数据格式

介绍 JavaScript Object Notation&#xff0c; js对象标注法&#xff0c;是轻量级的数据交换格式完全独立于编程语言文本字符集必须用UTF-8格式&#xff0c;必须用“”任何支持的数据类型都可以用JSON表示JS内内置JSON解析JSON本质就是字符串 Json对象和JS对象互相转化 前端…...

Android WiFi协议之P2P介绍与实践

Android WiFi P2P WiFi P2P (Peer-to-Peer) 是 Android 提供的一种允许设备之间直接通过 WiFi 进行通信的技术&#xff0c;无需接入传统的 WiFi 网络或互联网。这种技术也被称为 WiFi Direct。 一、WiFi P2P 基本概念 1. 核心组件 P2P 设备&#xff1a;支持 WiFi P2P 的 And…...

android TabLayout中tabBackground和background的区别

在这段代码中&#xff0c;android:background"color/white" 和 app:tabBackground"android:color/transparent" 是两个不同的属性&#xff0c;它们的作用范围和用途完全不同。以下是它们的区别&#xff1a; 1. android:background 作用&#xff1a; 设置整…...

使用 `keytool` 生成 SSL 证书密钥库

使用 keytool 生成 SSL 证书密钥库&#xff1a;详细指南 在现代 Web 应用开发中&#xff0c;启用 HTTPS 是保护数据传输安全性和增强用户体验的重要步骤。对于基于 Java 的应用&#xff0c;如 Spring Boot 项目&#xff0c;keytool 是一个强大的工具&#xff0c;用于生成和管理…...

DC-DC电路和LDO电路

一、DC-DC电路 在电子电路中&#xff0c;将输入的直流电压转换为电路中所需要的直流电压的电路被称为DC-DC电源电路。 1、buck电路&#xff08;降压电路&#xff09; 功能&#xff1a;把12V输入电压转化为5V的输出电压。 上图中电池为12V供电&#xff0c;需要给负载输出5V电…...

智谛达科技引领AI人形机器人新时代

在这个科技日新月异的时代,人工智能(AI)如同一股不可阻挡的洪流,以前所未有的速度改变着我们的生活方式、工作模式乃至整个社会的运行逻辑。而在这场波澜壮阔的科技革命中,智谛达科技集团凭借其深厚的技术底蕴、前瞻性的战略眼光以及在AI人形机器人领域的深厚积累,正引领着整个…...

在ubuntu24上装ubuntu22

实验室上有一台只装了ubuntu24的电脑&#xff0c;但是项目要求在22上进行 搞两个ubuntu系统&#xff01; 步骤一&#xff1a;制作22的启动盘 步骤二&#xff1a;进入bios安装界面 步骤三&#xff1a;选择try or install ubuntu 步骤四&#xff1a;选择try ubuntu 步骤五&…...

高精度算法

高精度加法 输入两个数&#xff0c;输出他们的和&#xff08;高精度&#xff09; 输入样例 111111111111111111111111111111 222222222222222222222222222222 输出样例 333333333333333333333333333333 #include <bits/stdc.h> using namespace std;string a,b; in…...

2019年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2019年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

UIMeter-UI自动化软件(产品级)

前言&#xff1a;作为一个资深测试工程师&#xff0c;UI测试&#xff0c;webUI自动化测试是我们必备的技能&#xff0c;我们都知道常用的框架比如selenium、playwright、rebootframwork等等&#xff0c;但是无论哪一种框架&#xff0c;都需要测试人员去编写代码&#xff0c;进行…...

Porting Layer - 跨平台函数接口封装(RTOS/Windows)- C语言

目录 概述具体实现使用说明 概述 在嵌入式开发中&#xff0c;一般会在某个开发板上某个系统上实现某个功能&#xff0c;为了开发模块的移植性更好&#xff0c;因此需要对不同的操作系统有一层封装层。当换一个操作系统时&#xff0c;模块中的code不用修改&#xff0c;只需要根…...

Kafka负载均衡挑战解决

本文为 How We Solve Load Balancing Challenges in Apache Kafka 阅读笔记 kafka通过利用分区来在多个队列中分配消息来实现并行性。然而每条消息都有不同的处理负载&#xff0c;也具有不同的消费速率&#xff0c;这样就有可能负载不均衡&#xff0c;从而使得瓶颈、延迟问题和…...

Docker Compose 常用命令 运行 docker-compose.yaml

Docker Compose 中有两个重要的概念 服务 (service)&#xff1a;一个应用的容器&#xff0c;实际上可以包括若干运行相同镜像的容器实例。 项目 (project)&#xff1a;由一组关联的应用容器组成的一个完整业务单元&#xff0c;在 docker-compose.yml 文件中定义。 为了更方便…...

Kafka的索引设计有什么亮点

想获取更多高质量的Java技术文章&#xff1f;欢迎访问Java技术小馆官网&#xff0c;持续更新优质内容&#xff0c;助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring Kafka的索引设计有什么亮点&#xff1f; Kafka 之所以能在海量数据的传输和处理过程中保持高…...