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

Linux开发工具——make/makefile

📝前言:
这篇文章我们来讲讲Linux开发工具——make/makefile

🎬个人简介:努力学习ing
📋个人专栏:Linux
🎀CSDN主页 愚润求学
🌄其他专栏:C++学习笔记,C语言入门基础,python入门基础,C++刷题专栏


目录

  • 一,make/makefile基础介绍
    • make
    • Makefile
  • 二,具体示例
    • 1. 基础示例
      • 1.1 时间戳
      • 1.2 是否重新编译判断
    • 2. 进阶1——依赖链
    • 3. 进阶2——变量替换
    • 4. 进阶3——多文件
      • 4.1 获取当前目录下的所有文件
        • 执行的命令不回显
      • 4.2 %<
      • 4.3 模式规则

一,make/makefile基础介绍

make/Makefile用于自动化构建和管理项目。

make

  • 功能make是一个命令工具,它根据Makefile定义的规则来自动构建和管理项目。它可以自动检测源文件的修改情况,并仅重新编译那些需要更新的目标文件,从而大大提高了编译效率。
  • 工作原理make通过读取Makefile中的规则,分析目标文件和依赖文件之间的关系(简称依赖关系)。然后,它根据文件的时间戳modify时间)来判断哪些文件需要重新编译。如果一个依赖文件的修改时间晚于目标文件,或者目标文件不存在,make就会执行相应的命令来更新目标文件。
  • 使用方法:在项目目录中,只需在命令行中输入make命令,它就会自动查找当前目录下的Makefile,并按照其中的规则进行构建。如果Makefile中有多个目标,make默认构建第一个规则,后面的要指定要构建的特定目标,例如make target_name

Makefile

  • 作用Makefile是一个文本文件,它包含了一系列规则,用于告诉make工具如何构建项目。它定义了项目中的目标文件、依赖文件以及构建目标所需的命令(方法)。
  • 基本结构Makefile由一系列规则组成,每个规则通常包含以下部分:
    • 目标:通常是要构建的文件,如可执行文件、目标文件或库文件。也可以是一个抽象的目标,如clean用于清理生成的文件。
    • 依赖:目标所依赖的文件列表。
    • 命令:用于构建目标的命令。命令必须以Tab键开头。

(也可以认为:规则 = 依赖关系 + 依赖方法


二,具体示例

1. 基础示例

先对前面介绍到的基础的概念和用法做演示。

步骤:

  1. 现在当前目录下创建Makefile文件:touch ./Makefile
  2. 根据需求,编写Makefile
    在这里插入图片描述

解释:

  1. code.exe是目标文件,code.c是源文件(这是一组依赖关系,code.exe依赖code.c
  2. Tab开头,后面写依赖方法(构造目标用的命令)
  3. 一个抽象的目标clean,可以没有所依赖的文件列表
  4. 依赖方法

调用示例:
在这里插入图片描述

  1. make默认调用第一个规则,即code.exe:code.c这一个
  2. make clean,调用clean对应的规则
  3. 为什么连续调用make会失败呢?

因为:make根据文件modify时间戳来判断哪些文件需要重新编译。


1.1 时间戳

那什么是modify时间戳,?
stat查看文件时间属性
在这里插入图片描述

  • Access:访问时间,当文件被查看,如cat的时候会被修改(但有一些系统会优化,即:多次查看后才修改,为了减少磁盘I/O操作)
  • Modify:修改时间,代表文件最后一次被修改的时间,即内容有所改动,Modify就会改变
  • Change:变更时间,当文件属性有变化的时候会改变
  • Birth:诞生时间,创建时的时间

1.2 是否重新编译判断

当源文件的modify时间相比目标文件“旧”,代表没有源文件没有修改,则不重新编译
当源文件的modify时间相比目标文件“新”,代表源文件修改了,则重新编译

在这里插入图片描述
如图:我们在没有执行make之前,只有源文件1,执行完后,有了目标文件1,时间关系如上。此时再执行make就不会再重新编译

如果我们更改了源文件:
在这里插入图片描述
这时候,代表有新内容,目标文件就需要重新编译

那有没有办法让make无视时间戳,让依赖方法总是被执行呢?
有的兄弟,有的。那就是特殊目标声明:.PHONY,将目标标记为伪目标。
在这里插入图片描述

此时,make 不用去检查伪目标对应的文件是否存在、是否更新,而是直接执行命令
在这里插入图片描述


2. 进阶1——依赖链

在这里插入图片描述
在这里插入图片描述
依赖链的结构就像一个栈:

  1. 检查其依赖code.o,发现 code.o 不存在,则依赖方法入栈
  2. 检查 code.o 的依赖 code.s,发现 code.s 不存在,则依赖方法也入栈
  3. 检查 code.i 的依赖 code.c,发现 code.c 存在,则执行code.i的依赖方法
  4. 将栈中依赖方法依次执行

3. 进阶2——变量替换

定义变量
=:递归展开变量(不会在定义变量时立即对右侧的表达式进行求值,而是在使用该变量时才进行求值。这意味着变量的值可能会因为其他变量的改变而改变)
:=:简单展开变量(在定义变量时就对右侧的表达式进行求值,变量的值在定义时就已经确定,后续不会因为其他变量的改变而改变)

引用变量
$(变量名)

示例:
在这里插入图片描述
$@$^
$@指代目标文件,$^指代依赖文件列表
即上面的内容可以改成:
在这里插入图片描述
这里$^会自动对应这个方法的依赖关系中的$(SRC)$@对应$(BIN)


4. 进阶3——多文件

4.1 获取当前目录下的所有文件

在Makefile中执行命令:$(shell 命令)
使用函数:$(函数名 参数1,参数2…)

获取当前目录下所有.c文件后缀的方法:

  1. $(shell ls *.c),回顾:ls这个命令只列出名称
  2. $(wildcard *.c)

在这里插入图片描述输入make运行结果:
在这里插入图片描述

执行的命令不回显

在命令前加:@
在这里插入图片描述
效果:
在这里插入图片描述

4.2 %<

当有多个源文件需要编译成目标文件,且每个源文件的编译命令基本相同时,使用 $< 能避免重复书写源文件名称。

$<被自动替换为当前规则中列出的第一个依赖文件的名称。例如,对于规则 target: dep1 dep2 dep3,在其对应的命令里使用 $<,它就代表 dep1

4.3 模式规则

%:通配符,如%.c:所有以.c结尾的文件

%.o: %.c :这个规则中,%所匹配的内容在目标和依赖中是相同的。(同名)
当 make工具处理这个规则时,会针对每个 .o 文件的构建分别执行一次规则里的命令

错误写法:
在这里插入图片描述
报错:

make: *** No targets.  Stop.

因为:%.o: %.c只是一个模式规则,并没有具体构建目标。具体的构建目标是指在 Makefile 中明确指定要构建的文件,文件名需要是完整且能明确指向一个具体文件的。

正确使用示例:
在这里插入图片描述

额外语法:

  • 命令可以多行,但是也要Tab开头
  • 注释用#符号

理解执行过程:

  1. 具体构建目标:code.exe,依赖所有.o文件,没有.o文件,于是到下一个规则%.o:%.c
  2. %.o:%.c规则中,make会针对每个.o文件分别执行一次命令,此时,每个.o文件变成了这个规则里的具体构建目标

运行结果:
在这里插入图片描述


🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

相关文章:

Linux开发工具——make/makefile

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux开发工具——make/makefile&#xff1a; &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xf…...

生信分析服务MR孟德尔随机化单细胞测序转录组数据分析网络药理学

将孟德尔随机化&#xff08;MR&#xff09;、单细胞测序、转录组数据分析和网络药理学结合&#xff0c;是当前生物信息学领域的前沿方法&#xff0c;尤其在疾病机制解析、靶点发现和药物研发中展现出巨大潜力。以下从技术逻辑、应用场景和服务流程三个维度展开说明&#xff1a;…...

Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置

Spring Cloud Alibaba-Sentinel实战(五)、系统保护规则、限流后统一处理及sentinel持久化配置 一、系统保护规则一)、系统规则支持的模式二)、新增系统规则界面三)、demo测试二、限流后统一处理实操demo三、sentinel持久化配一、系统保护规则 系统保护规则是从应用级别的…...

iPhone XR:一代神机,止步于此

什么样的 iPhone &#xff0c;才配称为一代神机&#xff1f; 我曾经用过iPhone 4S、iPhone 6S Plus、iPhone 8 Plus&#xff0c;iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷&#xff0c;不管囊中是否羞涩&#xff0c;主力机基本没考…...

[C++面试] explicit面试8问 —— 较难,可简单了解即可

Google C规范建议所有单参数构造函数必须加explicit&#xff0c;除非明确需要隐式转换&#xff08;如std::string从const char*构造&#xff09;。 1. 隐式转换的实际危害 隐式转换可能导致资源泄漏或逻辑错误&#xff08;如std::vector<int> v 10;可能被误认为初始化…...

2024-2025 CSS前沿技术全景解析:构建下一代Web界面的核心武器库

前言&#xff1a;CSS的范式革命 当WebAssembly与JavaScript持续争夺开发者注意力时&#xff0c;CSS正在经历一场静默的革命。2024年CSS工作组发布的Level 4/5草案&#xff0c;标志着样式语言正式进入「智能样式」时代。本文将从15个维度深入剖析未来两年最具变革性的CSS新特性…...

flutter row里面怎么统一高度

在 Flutter 中&#xff0c;Row 是一个水平布局的组件&#xff0c;默认情况下&#xff0c;它的子组件的高度是根据每个子组件的内容自动调整的。如果你希望 Row 中的所有子组件具有统一的高度&#xff0c;可以通过以下几种方式实现。 1. 使用 SizedBox 或 Container 设置固定高度…...

pinia-plugin-persist、vuex

pinia-plugin-persist 作用&#xff1a;为 Pinia 状态管理库实现状态持久化&#xff0c;自动将指定的 Pinia store 状态保存到本地存储&#xff08;如 localStorage 或 sessionStorage&#xff09;&#xff0c;并在应用启动时从本地存储恢复状态。效果&#xff1a;确保应用状态…...

Spring Boot整合MyBatis-Plus实现CRUD操作教程

本文将演示如何在Spring Boot项目中整合MyBatis-Plus框架&#xff0c;快速实现数据库的增删改查操作。相较于原生MyBatis&#xff0c;MyBatis-Plus提供了更简洁的API和自动化功能。 环境准备 JDK 1.8MySQL 5.7Spring Boot 2.7.xMyBatis-Plus 3.5.x 实现步骤 1. 创建项目并添加…...

Vue 3 的响应式原理

Vue 3 的响应式原理可以比喻为“智能监控系统”&#xff1a;当数据变化时&#xff0c;它能自动追踪依赖关系并触发更新。以下是通俗解释和核心机制&#xff1a; 一、核心原理&#xff1a;Proxy 代理 Vue 3 的响应式系统基于 JavaScript 的 Proxy 对象实现&#xff08;Vue 2 使…...

使用Scrapy官方开发的爬虫部署、运行、管理工具:Scrapyd

一般情况下&#xff0c;爬虫会使用云服务器来运行&#xff0c;这样可以保证爬虫24h不间断运行。但是如何把爬虫放到云服务器上面去呢&#xff1f;有人说用FTP&#xff0c;有人说用Git&#xff0c;有人说用Docker。但是它们都有很多问题。 FTP&#xff1a;使用FTP来上传…...

基于51单片机和8X8点阵屏、独立按键的单人弹球小游戏

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、8X8点阵屏2、独立按键3、定时器04、定时器1 四、主函数总结 系列文章目录 前言 用的是普中A2开发板&#xff0c;用到板上的独立按键、8X8点阵屏。 【单片机】STC89C52RC 【频率】12T11.0592MHz 效果查看/操作…...

群体智能避障革命:RVO算法在Unity中的深度实践与优化

引言&#xff1a;游戏群体移动的挑战与进化 在《全面战争》中万人战场恢弘列阵&#xff0c;在《刺客信条》闹市里人群自然涌动&#xff0c;这些令人惊叹的场景背后&#xff0c;都离不开一个关键技术——群体动态避障。传统路径规划算法&#xff08;如A*&#xff09;虽能解决单…...

Java 实现选择排序:[通俗易懂的排序算法系列之一]

引言 大家好&#xff01;从今天开始&#xff0c;我计划写一个关于常见排序算法的系列文章&#xff0c;旨在用通俗易懂的方式&#xff0c;结合 Java 代码实现&#xff0c;帮助大家理解和掌握这些基础但非常重要的数据结构与算法知识。 排序是计算机科学中最基本的操作之一&…...

动画过渡设置

使用Animator的Trigger参数 步骤 1&#xff1a;打开 Animator 窗口 确保你的 Sprite 对象已添加 Animator 组件。 在 Unity 编辑器顶部菜单栏&#xff0c;选择 Window > Animation > Animator&#xff0c;打开 Animator 窗口。 步骤 2&#xff1a;创建 Trigger 参数 在…...

【项目管理-高项】学习方法 整体概览

相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 &#x1f4dd; 软考高项,全称 信息系统项目管理师 ,是软考高级资格项目之一。 本考试考三门科目&#xff1a;综合知识&#xff08;上午&#xff09;、案例分析&#xff08;下午…...

HarmonyOS应用开发者高级-编程题-001

题目一&#xff1a;跨设备分布式数据同步 需求描述 开发一个分布式待办事项应用&#xff0c;要求&#xff1a; 手机与平板登录同一华为账号时&#xff0c;自动同步任务列表任一设备修改任务状态&#xff08;完成/删除&#xff09;&#xff0c;另一设备实时更新任务数据在设备…...

HarmonyOS-ArkUI Ability进阶系列-UIAbility与各类Context

UIAbility及相关类关系 一个模块编译的时候会出一个HAP包&#xff0c; 每一个HAP包在运行时都对应一个AbilityStage。 AbilityStage持有一个AbilityStageContext一个APP&#xff0c; 有时候会有很多个HAP包&#xff0c; 至少一个。 一个APP运行时&#xff0c;对应的是我们的App…...

接口并行执行且流式顺序输出的解决方案

接口并行执行且流式顺序输出的解决方案: import asyncio from aiotas_agi2all_llms_utils.output_answer_from_ask_question_results import (reasoning_model_ask_question, ) import os from aiotas_agi2all_llms_utils.logging_utils import create_logger import uuid fr…...

浅谈AI - DeepSpeed - 单卡慎用!

前言 曾在游戏世界挥洒创意&#xff0c;也曾在前端和后端的浪潮间穿梭&#xff0c;如今&#xff0c;而立的我仰望AI的璀璨星空&#xff0c;心潮澎湃&#xff0c;步履不停&#xff01;愿你我皆乘风破浪&#xff0c;逐梦星辰&#xff01; 简介 Deepspeed 的 ZeRO&#xff08;Ze…...

Java Web从入门到精通:全面探索与实战(一)

目录 引言&#xff1a;开启 Java Web 之旅​ 一、Java Web 基础概念大揭秘​ 1.1 什么是 Java Web​ 1.2 Java Web 的优势剖析​ 1.3 Java Web 相关核心概念详解 二、搭建 Java Web 开发环境&#xff1a;步步为营 2.1 所需软件大盘点​ 2.2 软件安装与配置全流程​ 三…...

5G从专家到小白

文章目录 第五代移动通信技术&#xff08;5G&#xff09;简介应用场景 数据传输率带宽频段频段 VS 带宽中低频&#xff08;6 GHz以下&#xff09;&#xff1a;覆盖范围广、穿透力强高频&#xff08;24 GHz以上&#xff09;&#xff1a;满足在热点区域提升容量的需求毫米波热点区…...

leetcode111 二叉树的最小深度

相对于 104.二叉树的最大深度 &#xff0c;本题还也可以使用层序遍历的方式来解决&#xff0c;思路是一样的。 最小深度的定义&#xff1a;从根节点到最近叶子节点的最短路径上的节点数量。 特别注意&#xff1a; 如果一个子树不存在&#xff0c;就不能用它来计算深度&#x…...

算法设计学习10

实验目的及要求&#xff1a; 本查找实验旨在使学生深入了解不同查找算法的原理、性能特征和适用场景&#xff0c;培养其在实际问题中选择和应用查找算法的能力。通过实验&#xff0c;学生将具体实现多种查找算法&#xff0c;并通过性能测试验证其在不同数据集上的表现&#xff…...

数字统计题解

题目理解 题目要求计算所有不大于 N 的非负整数中数字 D 出现的总次数。例如&#xff0c;当 D1 且 N12 时&#xff0c;数字1出现在1、10、11&#xff08;两次&#xff09;、12中&#xff0c;共5次。 输入输出分析 输入格式&#xff1a; 两个正整数 D 和 N&#xff0c;其中1≤…...

eclipse导入工程提示Project has no explicit encoding set

eclipse导入工程提示Project has no explicit encoding set-CSDN博客...

【网络安全论文】筑牢局域网安全防线:策略、技术与实战分析

【网络安全论文】筑牢局域网安全防线:策略、技术与实战分析 简述一、引言1.1 研究背景1.2 研究目的与意义1.3 国内外研究现状1.4 研究方法与创新点二、局域网网络安全基础理论2.1 局域网概述2.1.1 局域网的定义与特点2.1.2 局域网的常见拓扑结构2.2 网络安全基本概念2.2.1 网络…...

JVM虚拟机篇(五):深入理解Java类加载器与类加载机制

深入理解Java类加载器与类加载机制 深入理解Java类加载器与类加载机制一、引言二、类加载器2.1 类加载器的定义2.2 类加载器的分类2.2.1 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;2.2.2 扩展类加载器&#xff08;Extension ClassLoader&#xff09;2.2.3 应用…...

纯个人整理,蓝桥杯使用的算法模板day4(图论 最小生成树问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个

目录 最小生成树Prim代码模拟流程图 kruskal代码 代码对应实现案例 最小生成树 最小生成树&#xff1a;在无向图中求一棵树&#xff08;n-1条边&#xff0c;无环&#xff0c;连通所有点&#xff09;&#xff0c;而且这棵树的边权和最小 &#xff08;ps&#xff1a;可能结果不止…...

学习笔记,DbContext context 对象是保存了所有用户对象吗

DbContext 并不会将所有用户对象保存在内存中&#xff1a; DbContext 是 Entity Framework Core (EF Core) 的数据库上下文&#xff0c;它是一个数据库访问的抽象层它实际上是与数据库的一个连接会话&#xff0c;而不是数据的内存缓存当您通过 _context.Users 查询数据时&…...

Kafka 和 Flink的讲解

一、Kafka&#xff1a;分布式消息队列 1. 核心概念 ​​角色​​&#xff1a;Kafka 是一个分布式、高吞吐量的​​消息队列​​&#xff08;Pub-Sub 模型&#xff09;&#xff0c;用于实时传输数据流。​​关键术语​​&#xff1a; ​​Producer​​&#xff08;生产者&…...

Kafka 高吞吐量的原因是什么?

Kafka 的高吞吐量是它成为“数据中枢”的关键特性之一&#xff0c;这背后是多个技术设计的巧妙配合。下面我给你整理一下 Kafka 高吞吐量的主要原因&#xff0c;通俗又系统。 ✅ 1. 顺序写磁盘&#xff08;磁盘也能飞&#xff09; Kafka 的消息写入是追加到日志末尾&#xff…...

基于Python+Flask的服装零售商城APP方案,用到了DeepSeek AI、个性化推荐和AR虚拟试衣功能

首先创建项目结构&#xff1a; fashion_store/ ├── backend/ │ ├── app/ │ │ ├── __init__.py │ │ ├── models/ │ │ ├── routes/ │ │ ├── services/ │ │ └── utils/ │ ├── config.py │ ├── requirements.t…...

26.[MRCTF2020]Transform 1

打开文件是可执行程序.exe&#xff0c;打开看一下&#xff0c;顺便拖入ExeinfoPE 查询一下基本信息。如图。 无壳&#xff0c;且是64-bit&#xff0c;打开执行文件也没有什么特别的信息。那就 IDA-x64 分析吧。 &#x1f197;&#xff0c;简单的一个加密&#xff0c;我们直接逆…...

LeetCode-98. 验证二叉搜索树

一、题目 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征&#xff1a; 若它的左子树不空&#xff0c;则左子树上所有结点的值均小于它的根结点的值&#xff1b; 若它的右子树不空&#xff0c;则右子树上所有结点的值均大于它的…...

【LeetCode Solutions】LeetCode 146 ~ 150 题解

CONTENTS LeetCode 146. LRU 缓存&#xff08;中等&#xff09;LeetCode 147. 对链表进行插入排序&#xff08;中等&#xff09;LeetCode 148. 排序链表&#xff08;中等&#xff09;LeetCode 149. 直线上最多的点数&#xff08;困难&#xff09;LeetCode 150. 逆波兰表达式求值…...

leetcode二叉树刷题调试不方便的解决办法

1. 二叉树不易构建 在leetcode中刷题时&#xff0c;如果没有会员就需要将代码拷贝到本地的编译器进行调试。但是leetcode中有一类题可谓是毒瘤&#xff0c;那就是二叉树的题。 要调试二叉树有关的题需要根据测试用例给出的前序遍历&#xff0c;自己构建一个二叉树&#xff0c;…...

【家政平台开发(16)】消息通知系统设计:搭建高效沟通桥梁

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析&#xff0c;剖析家政行业现状、挖掘用户需求与梳理功能要点&#xff0c;到系统设计阶段的架构选型、数据库构建&#xff0c;再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化…...

AI比人脑更强,因为被植入思维模型【44】成长破圈思维

giszz的理解&#xff1a;芒格说&#xff0c;不懂不投。我们一生都在追求破圈&#xff0c;突破本我&#xff0c;突破舒适圈、恐惧圈、学习圈、成长圈、自在圈&#xff0c;可是我们真正能懂的知识有实际真的太少了。这个思维模型给我的启迪&#xff0c;一是要破圈&#xff0c;二是…...

【JavaWeb-Spring boot】学习笔记

目录 <<回到导览Spring boot1. http协议1.1.请求协议1.2.响应协议 2.Tomcat2.1.请求2.1.1.apifox2.1.2.简单参数2.1.3.实体参数2.1.4.数组集合参数2.1.5.日期参数2.1.6.(重点)JSON参数2.1.7.路径参数 2.2.响应2.3.综合练习 3.三层架构3.1.三层拆分3.2.分层解耦3.3.补充 &…...

基于GitLab+Jenkins的持续集成实践指南

架构设计原则 分层自动化策略 基础层: 代码提交触发自动构建(100%自动化)中间层: 制品生成与验证(自动化+人工审核)发布层: 环境部署(受控手动触发)工具定位矩阵 工具核心职责关键优势GitLab源码管理+MR流程精细的权限控制Jenkins流水线编排+任务调度插件生态丰富Nexus制…...

用HTML.CSS.JavaScript实现一个贪吃蛇小游戏

目录 一、引言二、实现思路1. HTML 结构2. CSS 样式3. JavaScript 逻辑 三、代码实现四、效果展示 一、引言 贪吃蛇是一款经典的小游戏&#xff0c;曾经风靡一时。今天&#xff0c;我们将使用 HTML、CSS 和 JavaScript 来实现一个简单的贪吃蛇小游戏。通过这个项目&#xff0c…...

医疗思维图与数智云融合:从私有云到思维图的AI架构迭代(代码版)

医疗思维图作为AI架构演进的重要方向,其发展路径从传统云计算向融合时空智能、大模型及生态开放的“思维图”架构迭代,体现了技术与场景深度融合的趋势。 以下是其架构迭代的核心路径与关键特征分析: 一、从“智慧云”到“思维图”的架构演进逻辑 以下是针对医疗信息化领域…...

Kafka 中,为什么同一个分区只能由消费者组中的一个消费者消费?

在 Kafka 中&#xff0c;同一个分区只能由消费者组中的一个消费者消费&#xff0c;这是 Kafka 的设计决策之一&#xff0c;目的是保证消息的顺序性和避免重复消费。这背后有几个关键的原因&#xff1a; 1. 保证消息顺序性 Kafka 中的每个 分区&#xff08;Partition&#xff…...

Kafka 中的批次

在 Kafka 中&#xff0c;批次&#xff08;Batch&#xff09; 是生产者发送消息的一个重要概念。它对 Kafka 的性能、吞吐量、延迟等有很大影响。批量处理可以使消息发送更高效&#xff0c;减少网络往返和磁盘写入的开销。 下面我将详细解释 Kafka 中的批次机制&#xff0c;包括…...

《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析

《UNIX网络编程卷1&#xff1a;套接字联网API》第7章&#xff1a;套接字选项深度解析 一、套接字选项核心原理 1.1 选项层级体系 套接字选项按协议层级划分&#xff08;图1&#xff09;&#xff1a; SOL_SOCKET&#xff1a;通用套接字层选项IPPROTO_IP&#xff1a;IPv4协议层…...

使用 pytest-xdist 进行高效并行自化测试

pytest-xdist 是 pytest 的一个扩展插件&#xff0c;主要用于实现测试用例的并行执行和分布式测试。通过利用多进程或者多机分布式的方式&#xff0c;pytest-xdist 能够显著缩短测试执行时间&#xff0c;提升持续集成&#xff08;CI&#xff09;流程的效率。 在自动化测试中&a…...

谈谈策略模式,策略模式的适用场景是什么?

一、什么是策略模式&#xff1f;​​ 策略模式&#xff08;Strategy Pattern&#xff09;属于​​行为型设计模式​​。核心思路是将一组​​可替换的算法​​封装在独立的类中&#xff0c;使它们可以在运行时动态切换&#xff0c;同时使客户端代码与具体算法解耦。它包含三个…...

网络安全防御核心原则与实践指南

一、四大核心防御原则 A. 纵深防御原则&#xff08;Defense in Depth&#xff09; 定义&#xff1a;通过在多个层次&#xff08;如网络、系统、应用、数据&#xff09;设置互补的安全措施&#xff0c;形成多层次防护体系。 目的&#xff1a;防止单一漏洞导致整体安全失效&…...

动态规划2——斐波那契数列模型——三步问题

1.题目 三步问题。有个小孩正在上楼梯&#xff0c;楼梯有 n 阶台阶&#xff0c;小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法&#xff0c;计算小孩有多少种上楼梯的方式。结果可能很大&#xff0c;你需要对结果模 1000000007。 示例 1&#xff1a; 输入&#xff1a;n 3 …...