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

架构风格对比

架构风格深度对比:从管道-过滤器到微内核

📜 引言

在软件架构设计中,不同的架构风格适用于不同的业务场景。本文将深入解析 7种主流架构风格,包括它们的核心思想、优缺点、适用场景,并通过对比表格和示例帮助您选择最合适的架构。

🔧 1. 管道-过滤器(Pipe-Filter)

🔹 核心思想

将系统拆分为一系列独立的过滤器(Filter),数据通过管道(Pipe)流动,每个过滤器处理数据并传递给下一个组件。

  • 过滤器:独立处理单元,无状态或局部状态
  • 管道:连接过滤器,传递数据流

🔹 示例

输入 → 过滤器A(去噪) → 过滤器B(分词) → 过滤器C(统计) → 输出

(如 Unix Shell 命令:cat log.txt | grep "error" | wc -l

✅ 优点

  • 高可复用性:过滤器可独立替换
  • 易于并行化:各过滤器可并发执行
  • 松耦合:过滤器间仅通过数据流交互

❌ 缺点

  • 不适合交互式系统:数据流单向性限制
  • 全局状态难维护:过滤器间共享状态复杂

🎯 适用场景

  • 数据批处理(ETL、日志分析)
  • 编译器(词法分析 → 语法分析 → 代码生成)
  • 音视频转码

🏛 2. 面向对象(Object-Oriented)

🔹 核心思想

系统由对象组成,对象封装数据和行为,通过消息传递协作。

  • 关键概念:类、继承、多态、封装

🔹 示例

class Order {private List<Item> items;public void addItem(Item item) { ... }public double calculateTotal() { ... }
}

✅ 优点

  • 高内聚低耦合:封装减少依赖
  • 易扩展:通过继承/多态增强功能
  • 符合现实建模:直观映射业务实体

❌ 缺点

  • 对象间调用链复杂:深层次方法调用难维护
  • 分布式场景性能低:远程方法调用(RMI)开销大

🎯 适用场景

  • 业务系统(ERP、CRM)
  • GUI应用(如Java Swing)
  • 游戏引擎(角色、道具等对象建模)

⚡ 3. 事件驱动(Event-Driven)

🔹 核心思想

组件通过事件异步通信,事件生产者发布事件,消费者订阅并处理。

  • 关键角色:事件总线(Event Bus)、发布者、订阅者

🔹 示例

// Node.js EventEmitter
emitter.on("order_created", (order) => {inventoryService.reserveItems(order);paymentService.charge(order);
});

✅ 优点

  • 高响应性:异步非阻塞
  • 松耦合:发布者无需知道订阅者
  • 易扩展:新增订阅者不影响现有逻辑

❌ 缺点

  • 调试困难:事件流难以追踪
  • 可能消息堆积:消费者处理慢时需背压控制

🎯 适用场景

  • 实时系统(股票交易、IoT传感器)
  • 微服务通信(Kafka事件总线)
  • 前端框架(React/Vue状态管理)

🍰 4. 分层风格(Layered)

🔹 核心思想

系统按职责分层,每层仅依赖下一层,禁止跨层调用。

  • 典型分层:表现层 → 业务层 → 数据层

🔹 示例

用户界面 → 业务逻辑 → 数据访问 → 数据库
(如Spring MVC:Controller → Service → Repository)

✅ 优点

  • 职责清晰:每层单一职责
  • 易于维护:可逐层替换技术栈
  • 标准化:广泛使用的模式(如OSI七层模型)

❌ 缺点

  • 性能损耗:跨层调用可能冗余
  • 创新受限:严格分层可能阻碍优化

🎯 适用场景

  • 企业级应用(如银行系统)
  • Web框架(Django、Spring Boot)
  • 网络协议栈(TCP/IP模型)

🗃 5. 数据共享风格(Data-Centered)

🔹 核心思想

系统围绕中央数据存储(如数据库、内存缓存)构建,组件通过共享数据交互。

  • 变体:仓库架构(黑板系统)、微内核

🔹 示例

# 多个微服务共享Redis缓存
def get_user(id):user = redis.get(f"user:{id}")if not user:user = db.query("SELECT * FROM users WHERE id=?", id)redis.set(f"user:{id}", user)return user

✅ 优点

  • 数据一致性高:单一数据源
  • 组件解耦:通过数据而非直接调用交互

❌ 缺点

  • 单点故障风险:中央存储崩溃影响全局
  • 性能瓶颈:高并发时数据存储压力大

🎯 适用场景

  • 数据密集型应用(推荐系统)
  • 协作工具(如Google Docs)
  • 规则引擎(如Drools规则库)

📖 6. 解释器风格(Interpreter)

🔹 核心思想

通过解释执行领域特定语言(DSL)或脚本,动态控制行为。

  • 关键组件:解析器、抽象语法树(AST)、执行引擎

🔹 示例

# SQL解释器
query = "SELECT name FROM users WHERE age > 18"
parser.parse(query).execute()

✅ 优点

  • 灵活性高:运行时修改行为
  • 领域适配:可定制语法(如正则表达式)

❌ 缺点

  • 性能低:解释执行比编译慢
  • 复杂度高:需实现词法/语法分析

🎯 适用场景

  • 规则引擎(如保险理赔规则)
  • 脚本语言(Lua嵌入游戏)
  • 查询语言(SQL、GraphQL)

🔄 7. 闭环控制风格(Closed-Loop Control)

🔹 核心思想

通过反馈循环动态调整系统行为,实现自适应控制。

  • 关键步骤:传感器采集 → 控制器计算 → 执行器调整

🔹 示例

室温 → 温度传感器 → PID控制器 → 空调
(目标25°C,实际28°C → 增大制冷功率)

✅ 优点

  • 自适应性强:动态响应环境变化
  • 容错性好:持续校准减少误差

❌ 缺点

  • 设计复杂:需建模控制算法(如PID)
  • 振荡风险:参数设置不当导致不稳定

🎯 适用场景

  • 工业控制系统(机器人、数控机床)
  • 自动驾驶(车道保持)
  • 智能家居(恒温器)

🔄 8. 微内核架构(Microkernel Architecture)

🔹 核心思想

微内核架构将系统的核心功能扩展功能分离:

  • 微内核(核心):仅包含最基础的服务(如进程调度、内存管理、IPC通信)
  • 插件(扩展):其他功能以独立插件/服务形式存在,通过内核提供的IPC机制交互
示例结构:
+---------------------+
|     应用程序/插件     |
+---------------------+
|    IPC通信机制       |
+---------------------+
| 微内核(核心服务)    |
+---------------------+
|      硬件抽象        |
+---------------------+

🆚 对比其他架构

对比维度微内核分层架构事件驱动
核心目标最小化内核,功能外移职责分层异步事件响应
通信方式IPC(消息传递)层间接口调用事件发布/订阅
扩展性⭐⭐⭐⭐(动态加载插件)⭐⭐(需修改层逻辑)⭐⭐⭐(新增订阅者)
适用场景操作系统、高安全系统企业级应用实时系统、IoT

✅ 优点

  1. 高可靠性
    • 内核极小(可能仅几千行代码),故障率极低
    • 插件崩溃不会影响内核(如Chrome浏览器多进程模型)
  2. 易扩展性
    • 新增功能只需开发插件,无需修改内核(如Linux内核模块)
  3. 安全性强
    • 插件运行在用户态,权限隔离(如QNX实时操作系统)
  4. 跨平台兼容
    • 内核抽象硬件差异,插件可跨平台复用

❌ 缺点

  1. 性能损耗
    • 插件间通过IPC通信,比函数调用慢10-100倍(需上下文切换)
  2. 开发复杂度高
    • 需设计严格的IPC协议和插件生命周期管理
  3. 调试困难
    • 分布式插件间的交互难以追踪(需专用工具如DTrace)

🎯 适用场景

  1. 操作系统
    • 经典案例:GNU Hurd、QNX、MacOS Darwin内核
    • 现代混合内核(如Windows NT、Linux)也借鉴微内核思想
  2. 嵌入式系统
    • 汽车ECU(如AUTOSAR架构中的基础软件层)
    • 工业控制器(需高可靠性和热插拔)
  3. 企业级中间件
    • Eclipse插件体系
    • 数据库扩展引擎(如PostgreSQL的扩展模块)

⚡ 实战示例

Linux内核模块(微内核思想实践)

// 示例:动态加载的内核模块
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void) {printk(KERN_INFO "Plugin loaded!\\n");return 0;
}
void cleanup_module(void) {printk(KERN_INFO "Plugin unloaded!\\n");
}

操作命令

# 加载插件
sudo insmod example.ko
# 查看内核日志
dmesg | tail -n 1
# 输出:Plugin loaded!

📊 微内核 vs 宏内核(Monolithic Kernel)

特性微内核宏内核
内核体积<1MB(如QNX)>10MB(如Linux)
性能低(频繁IPC)高(系统调用直接处理)
安全模型强制访问控制(MAC)自主访问控制(DAC)
代表系统QNX、FuchsiaLinux、FreeBSD

💡 设计建议

  1. 何时选择微内核?
    • 需要长期运行且不能崩溃的系统(如航天软件)
    • 需动态加载功能的场景(如IDE插件系统)
  2. 性能优化方向
    • 使用共享内存减少IPC开销
    • 插件预加载(如Android Zygote进程)

📊 架构风格对比总表

风格核心思想优点缺点典型应用
管道-过滤器数据流经独立过滤器高复用、易并行难维护全局状态日志处理、编译器
面向对象对象封装数据和行为易扩展、符合现实分布式性能差ERP系统、游戏引擎
事件驱动组件通过事件异步通信松耦合、高响应性调试困难微服务、IoT
分层严格层级隔离职责清晰、易维护可能性能损耗Web应用、网络协议
数据共享中央数据存储驱动系统一致性高、组件解耦单点故障风险推荐系统、协作工具
解释器解释执行DSL灵活性高性能低规则引擎、查询语言
闭环控制反馈循环动态调整自适应、容错性好设计复杂工业控制、自动驾驶
微内核核心功能与扩展功能分离可靠性、易扩展性能损耗、开发复杂操作系统、嵌入式系统

🎯 如何选择架构风格?

  1. 数据流主导 → 管道-过滤器
  2. 业务实体明确 → 面向对象
  3. 实时事件响应 → 事件驱动
  4. 需严格分层 → 分层风格
  5. 数据一致性优先 → 数据共享
  6. 需动态规则 → 解释器
  7. 环境自适应需求 → 闭环控制
  8. 高可靠性与可扩展性 → 微内核

💡 结语

没有“最佳架构”,只有“最适合的架构”。实际系统中常混合使用多种风格(如分层+事件驱动)。理解每种风格的本质,才能灵活应对复杂业务需求。

讨论问题:你在项目中用过哪些架构风格?遇到了哪些挑战?欢迎评论区分享!

相关文章:

架构风格对比

架构风格深度对比&#xff1a;从管道-过滤器到微内核 &#x1f4dc; 引言 在软件架构设计中&#xff0c;不同的架构风格适用于不同的业务场景。本文将深入解析 7种主流架构风格&#xff0c;包括它们的核心思想、优缺点、适用场景&#xff0c;并通过对比表格和示例帮助您选择最…...

V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows SteamOS]

V Rising 夜族崛起 [DLC 解锁] [Steam] [Windows & SteamOS] 注意 这个符号表示 可打开折叠内容 需要有游戏正版基础本体&#xff0c;安装路径不能带有中文&#xff0c;或其它非常规拉丁字符&#xff1b;仅限用于自建服务器&#xff0c;并禁用 VAC &#xff01;&#xff0…...

HTML标记语言_@拉钩教育

目录 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个页面) 8.多媒体标签(音/视频) 1.文本标签 2.格式化标签 3.图片标签 4.超链接标签 5.表格标签 6表单标签 6.1 6.2 6.3 7.行内框架(超链接内套一个…...

云原生开发革命:iVX 如何实现 “资源即插即用” 的弹性架构?

云原生技术正以惊人的速度重塑软件开发的版图。短短几年间&#xff0c;它从少数技术先驱的实验性方案&#xff0c;迅速崛起为全球企业数字化转型的核心驱动力。Gartner 预测&#xff0c;到 2026 年&#xff0c;全球 85% 的企业将全面采用云原生技术进行应用开发与部署。云原生架…...

whois为什么有时会返回两个不同的域名状态

前阵子发现一直想注册但被别人注册了的一个域名快要过期了&#xff0c;就想着写个脚本跑在电脑上&#xff0c;每分钟检查一次域名状态&#xff0c;一旦域名被正式删除&#xff0c;就发封邮件通知我&#xff0c;这样就不用频繁手动检查域名状态了。 写脚本时发现一个有趣的现象…...

跨境电商店铺矩阵布局:多账号运营理论到实操全解析

在当今竞争激烈的全球电商市场中&#xff0c;跨境电商店铺矩阵布局已成为卖家脱颖而出的关键策略。本文将深入剖析跨境电商店铺矩阵布局的本质、优势&#xff0c;并提供从理论到实操的全方位指导&#xff0c;助力您在全球市场中开启属于自己的销售新篇章。 一、是什么&#xff…...

安卓基础(强制转换)

​​一、强制转换&#xff08;Type Casting&#xff09;​​ ​​1. 什么是强制转换&#xff1f;​​ 当你想将一个类型的对象转换为另一个类型时&#xff0c;如果它们之间存在继承关系&#xff0c;就需要​​强制转换​​。 ​​注意​​&#xff1a;只有存在继承关系的类型…...

VS2022+OpenCasCade配置编译

一、Open CASCADE Technology介绍及安装&#xff08;windows10&#xff09; Open CASCADE Technology&#xff08;简称OCCT&#xff09;是一款开源的 3D CAD/CAM/CAE 软件开发平台&#xff0c;广泛应用于工业设计、工程仿真、制造等领域。开源OCC对象库是一个面向对象C类库&…...

AIGC重构元宇宙:从内容生成到沉浸式体验的技术革命

1. 引言 当数字技术掀开人类交互的新篇章&#xff0c;元宇宙正从科幻构想蜕变为现实——这个由虚拟与现实交织的数字宇宙&#xff0c;承载着未来社会的娱乐、工作与社交形态。作为核心赋能技术&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;正以惊人的创造力&…...

当所有人都用上先进ai,如何保持你的优势?

这不再是你能用上openai模型别人只能用文心一言的时候&#xff0c;而是每个人都可以免费用deepseek r1的时代。如今&#xff0c;办公室里每个人都能随时调用deepseek模型&#xff0c;喊一声“帮我写段代码”便轻松解决问题。在这种情况下&#xff0c;单纯“会用AI”已经很难再形…...

【浙江大学DeepSeek公开课】人类经验与AI算法的镜像之旅

人类经验与AI算法的镜像之旅 人类经验与 AI 算法的镜像之旅一、语言的奥秘&#xff1a;人类如何解码世界二、从符号到智能&#xff1a;AI 的语言理解之路三、DeepSeek - V3&#xff1a;大语言模型的构建与进化四、DeepSeek - R1&#xff1a;推理模型的诞生与突破五、智能体时代…...

【前端】从零开始的搭建顺序指南(技术栈:Node.js + Express + MongoDB + React)book-management

项目路径总结 后端结构 server/ ├── controllers/ # 业务逻辑 │ ├── authController.js │ ├── bookController.js │ ├── genreController.js │ └── userController.js ├── middleware/ # 中间件 │ ├── authMiddleware…...

探针台维护方法

探针台的维护直接影响其测试精度与使用寿命&#xff0c;需结合日常清洁、环境控制、定期校准等多维度操作&#xff0c;具体方法如下&#xff1a; 一、日常清洁与保养 1.‌表面清洁‌ 使用无尘布或软布擦拭探针台表面&#xff0c;避免残留清洁剂或硬物划伤精密部件。探针头清…...

js day8

事件绑定 事件&#xff1a;发生在html元素上的特定动作&#xff0c;鼠标点击&#xff0c;键盘按下&#xff0c;鼠标移入 事件三要素&#xff1a;事件源&#xff08;触发事件的元素&#xff09; 事件类型&#xff0c;事件触发后执行的函数 通过html触发事件&#xff08;不建议…...

大模型训练平台:重构 AI 研发范式的智慧基建

当 AI 研发陷入“高耗低效”困局&#xff0c;如何破局&#xff1f; 在大模型技术爆发的今天&#xff0c;企业 AI 研发正面临前所未有的挑战&#xff1a;某金融机构为训练风控模型投入大量算力&#xff0c;却因数据标注耗时半年延误项目&#xff1b;某制造企业搭建的训练集群利…...

vuex刷新数据丢失解决方案-vuex-persist

安装 npm install -S vuex-persist&#xff08;yarn add vuex-persist&#xff09; 使用&#xff1a; /store/index.js引入vuex-persist配置&#xff1a; import Vue from vue import Vuex from vuex import VuexPersistence from vuex-persist import user from ./modules/use…...

多模态革命!拆解夸克AI相机技术架构:如何用视觉搜索重构信息交互?(附开源方案对比)

一、技术人必看&#xff1a;视觉搜索背后的多模态架构设计 夸克「拍照问夸克」功能绝非简单的OCRQA拼接&#xff0c;而是一套多模态感知-推理-生成全链路系统&#xff0c;其技术栈值得开发者深挖&#xff1a; 视觉编码器&#xff1a;基于Swin Transformer V2&#xff0c;支持4…...

Python依据卫星TLE轨道根数,计算可见时间窗口

1.卫星TLE数据 概括&#xff1a;两行字符串表示的卫星参数 字段 字符串位置&#xff08;以0为起点&#xff09; 描述内容注释1 01–01卫星编号203-07卫星类别卫星类别&#xff08;U表示不保密&#xff0c;可供公众使用的&#xff1b;C 表示保密&#xff0c;仅限NORAD使用&…...

C++?模板!!!

一、引言 在之前我们一起学习了C中类和对象、动态内存管理等相关知识&#xff0c;今天我们将一起学习C中有关模板的相关知识&#xff0c;学完模板之后我们就可以进入C中非常重要的库---STL了&#xff0c;那么模板究竟有什么奥秘呢&#xff1f;让我们一起来看看吧&#xff01; …...

web技术与nginx网站服务

一、Web服务基础概念 Web服务器核心功能 通过HTTP/HTTPS协议提供网页内容&#xff0c;支持HTML、CSS、JavaScript等静态资源&#xff0c;动态内容需结合后端语言&#xff08;如PHP、Python&#xff09;处理36。常用软件&#xff1a;Nginx、Apache、Lighttpd。Nginx以高并发、低…...

关系数据的可视化

目录 【实验目的】 【实验原理】 【实验环境】 【实验步骤】 一、安装Python所需要的第三方模块 二、实验 【实验总结】 【实验目的】 1.掌握关系数据在大数据中的应用 2.掌握关系数据可视化方法 3. python 程序实现图表 【实验原理】 在传统的观念里面&#xff0…...

MATLAB小试牛刀系列(1)

问题描述 某机床厂生产甲、乙两种机床&#xff0c;每台机床销售后的利润分别为 4 千元与 3 千元。生产甲机床需用 A、B 机器加工&#xff0c;加工时间分别为每台 2h 和每台 1h&#xff1b;生产乙机床需用 A、B、C 三种机器加工&#xff0c;加工时间均为每台 1h。若每天可用于加…...

CUDA、pytorch、配置环境教程合集

1.CUDA卸载 参考&#xff1a; 【环境搭建】卸载&重新安装cudacudnnanacondagpu版pytorch_卸载cuda-CSDN博客 【cuda】cuda安装与卸载升级_升级cuda-CSDN博客 检测代码&#xff1a; https://www.zhihu.com/question/482335084 import torch print(CUDA版本:,torch.vers…...

代码随想录打卡|Day29 动态规划Part02(不同路径、不同路径2、整数拆分、不同的二叉树搜索)

动态规划Part02 不同路径 力扣题目链接 代码随想录链接 视频讲解链接 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xf…...

Leetcode刷题 | Day49_图论01

一、学习任务 深度优先搜索理论基础深度优先搜索理论基础 | 代码随想录98. 所有可达路径(ACM)797. 所有可能的路径(Leetcode)广度优先搜索理论基础 二、具体题目 1.深度优先搜索理论基础 类似回溯算法&#xff0c;二叉树的前中后序遍历是其在二叉树领域的应用。 代码框架&am…...

if consteval

if consteval 是 C23 引入的新特性&#xff0c;该特性是关于immediate function 的&#xff0c;即consteval function。用于在编译时检查当前是否处于 立即函数上下文&#xff08;即常量求值环境&#xff09;&#xff0c;并根据结果选择执行不同的代码路径。它是对 std::is_con…...

【iOS】OC源码阅读——alloc源码分析

文章目录 前言基本调试方法allocalloc函数逐步调试空类检查快速路径&#xff1a;默认内存分配慢速路径&#xff1a;自定义内存分配slowpath和fastpath alloc核心操作cls->instanceSize&#xff1a;计算所需内存大小内存字节对齐原则为什么要16字节对齐内存字节对齐总结 其他…...

[JavaScript]对象关联风格与行为委托模式

对象关联. “[[prototype)]的机制就是存在于对象中的一个内部链接,它会引用其它对象” 为何创建原型链(关联)? Object.create()会创建一个新对象,参数对象会作为新对象的__proto__. “我们并不需要类来创建两个对象之间的关系,只需要通过委托来关联对象就足够了.而Object.c…...

在 Ubuntu 24.04 LTS 一台机子上同时部署Dify 1.3.1 和 RAGflow 0.18.0

一、RAGflow 0.18.0 简介 有关 Dify 的简介&#xff0c;可以查看我之前分享的 《在 Ubuntu24.04 LTS 上 Docker Compose 部署 Dify 社区版 1.0.1》文章。RAGFlow是一款基于深度文档理解&#xff08;deepdoc&#xff09;构建的开源 RAG引擎。其中&#xff0c;深度文档理解&#…...

小熊派BearPi-Pico H3863(二)环境配置 Ubuntu编译源码与VSCode远程开发指南

BearPi-H3863 Ubuntu编译源码与VSCode远程开发指南 摘要开发环境配置方案选型环境部署实战手册一、基础环境配置1. 镜像准备2. 虚拟机初始化3. 网络异常处理 二、VSCode远程开发配置1. SSH服务验证2. VSCode插件安装3. 远程连接实战4. 项目管理 关键要点总结 摘要 本文针对Bea…...

组装 (DIY) 一台显示器 (4K 屏支持 4 画面分屏 PBP 1080p x4)

首发日期 2025-04-26, 以下为原文内容: 家里的 PC 主机比较多, 如果同时开机, 显示器就不够用了. 因为穷, 窝租住的房间又很小, 放不下很多显示器. 所以, 窝希望买一台支持 分屏 功能的显示器. 最好是 4K 分辨率 (3840x2160) 的屏幕, 然后 4 分屏 (有 4 个 DP 或 HDMI 输入接口…...

SwiftUI 8.List介绍和使用

SwiftUI 的 List 组件用于展示可滚动的内容集合&#xff0c;支持静态或动态数据、交互操作&#xff08;如点击、滑动删除&#xff09;、分组、自定义样式等。以下是其详细介绍及使用方法&#xff1a; 一、基本用法 1. 静态列表 直接声明固定内容&#xff1a; struct Content…...

Android Kotlin ViewModel 错误处理:最佳 Toast 提示方案详解

在 Android Kotlin 的 ViewModel 中显示 Toast 提示需要特殊处理&#xff0c;因为 ViewModel 不应该直接持有 Context&#xff08;避免内存泄漏&#xff09;&#xff0c;且 UI 操作&#xff08;如 Toast&#xff09;必须在主线程执行。以下是几种标准解决方案&#xff1a; 方案…...

Vue 集成 wangEditor5 公式编辑器的实现步骤‌

Vue 集成 wangEditor5 公式编辑器的实现步骤‌ 1. 安装公式依赖库‌2. 配置公式编辑器插件‌3. 启用工具栏公式按钮‌4. 组件模板与事件绑定‌功能验证与调试‌注意事项‌版本兼容性‌&#xff1a; 1. 安装公式依赖库‌ 安装 KaTeX 或 kityformula‌&#xff1a;根据项目需求选…...

go语言八股文(五)

1.go的局部变量是分配在栈上还是在堆上 在Go语言中&#xff0c;局部变量的内存分配&#xff08;栈或堆&#xff09;由编译器基于逃逸分析&#xff08;escape analysis&#xff09;来决定。以下是总结和具体示例&#xff1a; 栈上分配 当局部变量的生命周期严格限定在函数作用…...

C++ 解决一个简单的图论问题 —— 最小生成树(以 Prim 算法为例)

使用 C 解决一个简单的图论问题 —— 最小生成树&#xff08;以 Prim 算法为例&#xff09;&#xff0c;并且使用 Graphviz 库来生成结果图。 在图论中&#xff0c;“边权之和最小” 是最小生成树&#xff08;MST&#xff09;的核心目标&#xff0c;其含义和背景可以从以下几个…...

OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介

OpenCV计算机视觉实战&#xff08;2&#xff09;——环境搭建与OpenCV简介 0. 前言1. OpenCV 安装与配置1.1 安装 Python-OpenCV1.2 配置开发环境 2. OpenCV 基础2.1 图像读取与显示2.2 图像保存 3. 摄像头实时捕获小结系列链接 0. 前言 OpenCV (Open Source Computer Vision …...

pgrep和pkill命令详解

pgrep 与 pkill 命令详解‌ ‌一、基础功能‌ 命令作用核心机制pgrep根据条件查找进程ID (PID)通过进程名、用户、终端等属性筛选进程&#xff0c;输出匹配的PID列表pkill根据条件终止进程向符合条件的进程发送信号&#xff08;默认发送SIGTERM&#xff0c;可指定其他信号&am…...

Python----卷积神经网络(卷积为什么能识别图像)

一、卷积的概念 卷积是一种数学运算&#xff0c;通常用于信号处理和图像分析。在卷积神经网络中&#xff0c;卷积操作用于提取输入数据&#xff08;如图像&#xff09;中的特征。通过将输入数据与卷积核&#xff08;滤波器&#xff09;进行卷积运算&#xff0c;CNN能够识别图像…...

web3.js 和 ethers.js 的核心区别

1. 核心设计理念 ---------web3.jsethers.js开发背景以太坊基金会官方维护独立开发者创建&#xff0c;社区驱动架构风格集中式对象 (web3 为核心)模块化设计&#xff08;分离 Wallet/Provider/Contract&#xff09;包体积较大&#xff08;1MB&#xff09;更轻量&#xff08;压…...

Atcoder Help 有关Atcoder 的介绍-1 涨分规则

AtCoder 的 Rating 计算系统基于改进的 Elo 算法&#xff0c;主要包含以下核心机制&#xff1a; 一、基础计算公式 Rating 是「表现分(Performance)」的加权平均值减去衰减函数 f ( n ) f(n) f(n)&#xff0c;其中&#xff1a; 新用户初始 f ( 1 ) 1200 f(1)1200 f(1)120…...

Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)

文章目录 1. 项目准备1.1 创建新项目1.2 添加必要依赖 2. 数据库设计3. 实现数据库3.1 创建实体类 (Entity)3.2 创建数据访问对象 (DAO)3.3 创建数据库类 4. 创建 Repository5. 创建 ViewModel6. 实现 UI 层6.1 创建笔记列表 Activityactivity_notes_list.xmlNotesListActivity…...

K8S学习笔记01

是什么 高可用&#xff0c;可扩展&#xff0c;自动化&#xff0c;容器化&#xff0c;管理多容器 组件 master API server controller manager scheduler etcd node 对应一台机器 负责运行和托管容器化 kubelet container runtime kube-proxy pod 同一个pod内的容器…...

奥威BI+AI数据分析解决方案

在数字化时代&#xff0c;数据已成为企业决策的核心驱动力。随着大数据、云计算、人工智能等技术的快速发展&#xff0c;企业对数据分析的需求日益迫切。奥威BI&#xff08;Business Intelligence&#xff09;与AI&#xff08;Artificial Intelligence&#xff09;的结合&#…...

第36课 常用快捷操作——用“鼠标右键”退出当前命令

概述 在AD 20软件中&#xff0c;很多的命令都是可以一直连续下去的&#xff0c;比方说放置一个元器件符号&#xff0c;如果你当中不取消的话&#xff0c;那就可以一直执行下去&#xff0c;放完一个接着放下一个&#xff0c;放完一个接着放下一个…… 想要退出这种连续进行的命…...

用Java模拟打字:深入解析 java.awt.Robot 的键盘控制艺术

作为开发者&#xff0c;我们有时会遇到需要自动化用户界面交互的场景&#xff0c;比如自动化测试、脚本编写、或者制作一些辅助工具。而模拟键盘输入&#xff0c;尤其是“打字”&#xff0c;是这类自动化任务中非常基础且常见的一环。 在 Java 中&#xff0c;实现这一目标的利…...

基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计

一、简介&#xff1a; ATSHA204A是Microchip公司生产的一款高性能加密认证芯片&#xff0c;主要特性包括&#xff1a; 基于SHA-256哈希算法的安全认证 4.5KB EEPROM存储空间&#xff08;可配置为密钥存储、OTP区域等&#xff09; 唯一的72位序列号 支持I2C和单线接口 工作…...

2.2.1goweb内置的 HTTP 处理程序

net/http 使用源码分析 在 Go 语言的 HTTP 服务器里&#xff0c;HTTP handler 是实现了http.Handler接口的对象。该接口定义如下&#xff1a; type Handler interface {ServeHTTP(ResponseWriter, *Request) }ServeHTTP方法接收两个参数&#xff1a; http.ResponseWriter&am…...

vscode以管理员身份运行报错

1. 问题现象 对vscode设置了管理员权限&#xff0c;但是打开文件时报错或闪退。 2. 解决方法 可以看一下官方网址&#xff1a;[Visual Studio Code on Windows](https://code.visualstudio.com/docs/setup/windows#_unable-to-run-as-admin-when-applocker-is-enabled) 2.1 …...

【Unity】 Dropdown默认选择不选择任何选项

你需要新建一个text文本并将其拖入Placeholder里面&#xff0c;这样你就可以在代码里面设置value-1了&#xff0c;从而实现默认为空...