Git Flow 工作流学习要点
Git Flow 工作流学习要点
- Git Flow — 流程图
- Git Flow — 操作指令
- 优点:
- 缺点:
- Git Flow 分支类型
- Git Flow 工作流程简述
- 关于 feature 分支
- 关于 Release 分支
- 关于 hotfix 分支
- 总结
Git Flow — 流程图

图片来源:https://nvie.com/posts/a-successful-git-branching-model/
Git Flow — 操作指令
Git Flow 是一种流行的 Git 工作流模型,它通过定义严格的分支规则来帮助团队协作开发大型项目。以下是 Git Flow 的整体流程及一些基本的 Git 指令使用:
-
初始化 Git Flow:
- 首先,你需要有一个 Git 仓库。如果你还没有初始化,可以使用以下命令:
git init
- 首先,你需要有一个 Git 仓库。如果你还没有初始化,可以使用以下命令:
-
创建主分支:
- 主分支(master branch)是 Git Flow 的核心,用于存放所有发布版本的代码。
- 通常,当你初始化一个新仓库时,Git 会自动创建一个主分支。
-
创建开发分支:
- 开发分支(develop branch)用于日常的开发工作,所有的新功能和修复都应该在这个分支上进行。
- 创建开发分支的命令:
git checkout -b develop
-
创建功能分支:
- 功能分支(feature branches)用于开发新功能。每个功能都应该有自己的分支。
- 创建功能分支的命令:
git checkout -b feature/feature-name
-
开发和提交:
- 在功能分支上进行开发,使用
git add添加更改到暂存区,然后使用git commit提交更改:git add . git commit -m "Commit message"
- 在功能分支上进行开发,使用
-
合并功能分支到开发分支:
- 当一个功能开发完成并通过测试后,应该将其合并回开发分支。
- 合并的命令:
git checkout develop git merge --no-ff feature/feature-name
-
发布准备分支:
- 当开发分支上的代码准备发布时,可以创建一个发布准备分支(release branch)。
- 创建发布准备分支的命令:
git checkout -b release/release-name
-
完成发布:
- 在发布准备分支上,进行最后的测试和修改,然后合并回主分支和开发分支。
- 合并到主分支的命令:
git checkout master git merge --no-ff release/release-name - 合并回开发分支的命令:
git checkout develop git merge --no-ff release/release-name
-
创建标签:
- 在主分支上,为发布的版本创建一个标签(tag)。
- 创建标签的命令:
git tag -a v1.0.0 -m "Release version 1.0.0"
-
删除分支:
- 发布完成后,可以删除不再需要的分支。
- 删除分支的命令:
git branch -d release/release-name
-
修复错误:
- 如果在主分支上发现错误,可以创建一个修复分支(hotfix branch)。
- 创建修复分支的命令:
git checkout -b hotfix/hotfix-name - 修复完成后,合并回主分支和开发分支,然后删除修复分支。
Git Flow 是一种流行的 Git 工作流程,它为团队协作提供了一个结构化的模型。下面是 Git Flow 的一些主要优点和缺点:
优点:
-
清晰的分支结构:Git Flow 通过定义不同的分支角色,如
master、develop、feature、release和hotfix,使得项目的版本控制更加清晰和有序。 -
功能隔离:开发人员可以在
feature分支上独立工作,这有助于隔离开发中的功能,避免干扰主分支。 -
易于维护:通过将代码库的不同部分分开管理,Git Flow 使得代码维护变得更加容易。
-
支持复杂的开发流程:对于需要多个阶段和多个环境的复杂项目,Git Flow 提供了一种有效的解决方案。
-
促进代码审查:在合并到
develop或release分支之前,通常需要进行代码审查,这有助于提高代码质量。 -
支持持续集成:Git Flow 可以很好地与持续集成(CI)工具配合使用,自动化测试和构建流程。
-
版本发布控制:通过
release分支,可以控制发布过程,确保发布的版本是经过测试和审查的。
缺点:
-
学习曲线:对于新手来说,Git Flow 的复杂性可能需要一些时间来学习和适应。
-
分支管理复杂性:随着项目的增长,分支数量可能会变得难以管理,特别是如果团队成员不严格遵守流程。
-
合并冲突:频繁的分支合并可能导致合并冲突,需要额外的时间来解决。
-
分支生命周期管理:需要跟踪每个分支的生命周期,包括创建、合并和删除,这可能会增加管理负担。
-
自动化难度:虽然 Git Flow 可以与 CI 工具配合使用,但是自动化 Git Flow 的某些方面可能需要额外的工具或脚本。
-
不适合小型项目:对于小型或快速迭代的项目,Git Flow 可能过于复杂,不如更简单的工作流程如 GitHub Flow 或 GitLab Flow 那样高效。
-
可能导致瓶颈:如果团队成员必须等待特定分支的合并,可能会造成工作流程的瓶颈。
-
文档和沟通要求:为了有效使用 Git Flow,团队成员需要有良好的文档和沟通,以确保每个人都理解流程和当前的状态。
总的来说,Git Flow 是一种强大的工作流程,适用于需要严格版本控制和多阶段开发的项目。然而,它可能不适合所有团队或项目,特别是那些更倾向于快速迭代和简单流程的团队。选择哪种工作流程应根据团队的具体需求和项目特性来决定。
Git Flow 是一种流行的 Git 工作流模式,由 Vincent Driessen 提出,旨在为大型项目提供一种健壮的分支管理框架。它特别适合那些有预定发布周期的项目。以下是 Git Flow 的详细内容解析和指令详解:
Git Flow 分支类型
- 主分支(Master):存储生产就绪的代码,通常是最新的稳定版本。
- 开发分支(Develop):包含最新的开发成果,是所有新功能的集成点。
- 特性分支(Feature Branch):基于 Develop 分支创建,用于开发新功能或修复。
- 发布分支(Release Branch):从 Develop 分支创建,用于准备新版本的发布。
- 修复分支(Hotfix Branch):从 Master 分支创建,用于紧急修复生产环境中的问题。
Git Flow 工作流程简述
- 开发新功能时,从 Develop 分支创建 Feature 分支。
- 完成功能开发后,将 Feature 分支合并回 Develop 分支,并删除 Feature 分支。
- 当准备发布新版本时,从 Develop 分支创建 Release 分支。
- 在 Release 分支上进行最后的测试和调整,完成后合并回 Master 和 Develop 分支,并打上版本标签。
- 如果在 Master 分支上发现紧急问题,从 Master 分支创建 Hotfix 分支进行修复,修复完成后合并回 Master 和 Develop 分支,并打上修复标签。
关于 feature 分支
功能分支(Feature Branches):
- 从 Develop 分支拉出。
- 用于开发新功能或修复缺陷。
- 完成后,通过 Pull Request 或者 Merge Request 合并回 Develop 分支。

随项目越来越大,就会有越来越多的功能在同步开发,这时候怎么办?
上图这样同时有几个feature同时在开发的场景多了去了。但是 Git Flow 告诉我们不用操心,尽管开发自己的功能便是,但是你一定要注意一点,开发测试完自己的功能就一定要赶快合并回主线,并删除这个分支。
无论何时,都要让未合并的feature分支越少越好,分支生命周期越短越好。这件事情对帮助 develop 的稳定性有莫大的好处。
注意:
feature 分支的生命周期不应过长。如果这个功能分支涵盖的业务太多太复杂导致生命周期太长。也应尽力细化,区分成更多更小的单元。试着再多拆分成几个独立的小 feature。
功能分支在 Git Flow 工作流中扮演着关键角色,它们为开发者提供了一个独立的环境来开发新功能或修复缺陷。功能分支的生命周期通常从 Develop 分支开始,开发者会基于当前的开发进度创建一个新的分支,命名通常遵循 feature-<feature-name> 的格式。在这个分支上,开发者可以自由地进行编码、提交更改,并编写必要的测试来确保功能的正确性。
开发过程中,功能分支保持与远程仓库的同步,以避免将来合并时出现冲突。当功能开发完成并通过本地测试后,开发者会发起一个 Pull Request 或 Merge Request,请求其他团队成员进行代码审查。代码审查是一个重要的环节,它有助于提高代码质量,确保新功能符合项目标准。
一旦代码审查通过,并且解决了可能出现的任何合并冲突,功能分支就可以被合并回 Develop 分支,完成功能集成。这个过程有助于将新开发的功能逐步集成到主开发线中,同时保持代码库的稳定性。合并完成后,功能分支将不再需要,可以被删除,以保持仓库的整洁。
功能分支的使用场景非常广泛,包括但不限于新功能的添加、缺陷的修复、实验性代码的尝试,以及多人协作项目中的并行开发。它们为开发者提供了灵活性,允许他们专注于特定任务,同时减少了对主开发线的干扰。然而,合理地管理功能分支的生命周期对于维护项目的健康和效率至关重要。
关于 Release 分支

黄色为 develop 分支,蓝色为 master 分支
图中绿色的点代表了release分支短暂的一生。一旦开启release分支,就进入了发布前的最终测试阶段。
也有人将release分支仅视为进入master之前的缓冲区,所有的最终测试都是针对master进行的,一旦发现问题就新开分支修复。
但有一条必须严格遵守 非常重要
release 分支只能修 bug,不能添加新功能。
一旦开了release分支,就只能修复 bug,不能再加新功能。实践中,总有人喜欢在 bug 修复中夹带新功能,但要知道,此时往往缺乏全面回归测试的支持。这相当于在即将发布的版本中,悄悄植入未经充分验证的新功能,等同于埋下了随时可能爆炸的炸弹。
发布分支的生命周期开始于 Develop 分支,当开发团队认为代码库中的代码已经足够稳定,准备发布时,会从 Develop 分支创建一个新的发布分支。这个分支通常命名为 release-<version>,例如 release-1.2.0。
在发布分支的开发流程中,主要包含以下几个步骤:
-
准备发布:从 Develop 分支创建发布分支后,团队会开始准备发布所需的工作,这可能包括更新文档、调整配置文件、修改版本号等。
-
修复小问题:在准备发布的过程中,可能会发现一些小问题或需要进行的小调整。这些问题通常不会引入新功能,而是确保当前功能在生产环境中的稳定性。
-
测试:发布分支需要经过严格的测试,以确保所有功能按预期工作,没有引入新的问题。
-
合并请求:在测试通过后,团队会发起一个合并请求,将发布分支的更改合并回 Develop 分支,以确保 Develop 分支包含最新的发布内容。
-
发布:一旦合并请求完成,团队会将发布分支的代码合并到 Master 分支,并在 Master 分支上打上标签,标记具体的版本号。
-
更新 Develop 分支:发布完成后,通常还需要将 Master 分支上的更改反向合并回 Develop 分支,以确保 Develop 分支的代码是最新的。
-
删除发布分支:发布流程结束后,发布分支的使命完成,可以被删除。
使用场景包括:
- 版本发布:当项目需要发布新版本时,发布分支用于准备和测试即将发布的版本。
- 紧急修复:如果发布分支中发现了紧急问题,可以在发布分支上快速修复并重新发布。
- 稳定性保证:发布分支提供了一个稳定的环境,用于在最终发布前确保所有更改的稳定性。
- 并行开发:在准备发布的同时,其他开发者可以在 Develop 分支上继续开发新功能,不会影响发布流程。
发布分支的使用确保了软件发布的流程化和标准化,有助于减少发布过程中的风险,同时允许团队在准备发布的同时继续开发新功能。
关于 hotfix 分支
在正式环境中发现问题需要修复,这时就需要使用 hotfix 分支了。
Hotfix 分支在 Git Flow 工作流中用于快速修复生产环境中的紧急问题。
生命周期
Hotfix 分支的生命周期通常较短,并且非常目标导向:
-
创建 Hotfix 分支:从 Master 分支创建 Hotfix 分支,通常命名为
hotfix-<issue>或hotfix-<version>-<issue>。 -
快速修复:在 Hotfix 分支上迅速定位并修复问题。
-
测试:对修复进行测试,确保问题得到解决且没有引入新的问题。
-
合并更改:将 Hotfix 分支的更改合并回 Master 分支,并在 Master 分支上打上新的标签,表示修复后的版本。
-
同步 Develop 分支:将 Master 分支上的更改反向合并回 Develop 分支,确保 Develop 分支的代码包含最新的修复。
-
部署:将修复后的代码部署到生产环境。
-
删除 Hotfix 分支:一旦修复被合并并部署,删除 Hotfix 分支。
开发流程
-
问题识别:在生产环境中发现紧急问题需要立即解决。
-
创建 Hotfix 分支:基于当前 Master 分支的代码创建 Hotfix 分支。
-
开发修复:在 Hotfix 分支上开发修复代码。
-
编写测试:编写必要的测试来验证修复是否有效。
-
代码审查:进行代码审查,确保修复的质量。
-
合并和打标签:将 Hotfix 分支合并回 Master 分支,并打上相应的标签。
-
更新 Develop 分支:将 Master 分支的更改合并回 Develop 分支。
-
部署修复:将修复后的代码部署到生产环境。
-
删除 Hotfix 分支:修复部署后,删除 Hotfix 分支。
使用场景
-
生产环境问题:当生产环境中出现紧急问题,需要立即修复以避免影响用户。
-
安全漏洞:发现安全漏洞时,需要快速开发并部署修复。
-
关键缺陷:关键功能出现缺陷,影响业务运行,需要快速修复。
-
合规性问题:需要快速解决合规性问题以遵守法律法规。
-
性能问题:生产环境中出现的性能问题,需要紧急优化。
Hotfix 分支的设计目的是为了快速响应生产环境中的问题,它们允许开发团队迅速隔离问题并提供解决方案,同时保持开发流程的连续性和稳定性。通过将修复同步回 Master 和 Develop 分支,Hotfix 分支确保了所有分支的代码都是最新的,减少了代码的碎片化。

黄色为 develop 分支,蓝色为 master 分支
图中的红色圆圈就是hotfix,它从master分支切出,结束时同样要合并到master,并顺便同步到develop,流程和release分支类似。
实际上,我们在处理hotfix时,也要像对待release一样: 开分支的同时就要确定版本号,只能修复 bug,不能夹带新功能。 理由很简单,hotfix和release跟正式环境运行的代码版本基本是一样的,因此对它们的谨慎程度也应该相同。而且由于hotfix通常紧急,更难以进行全面的回归测试(即使有回归测试,也不能完全保证无误)。因此,为了避免更大的损失,一定要慎之又慎
测试完毕,hotfix,重新上线,同时修复了develop,世界又回到了最初简单的状态,只剩下develop和master两个分支。
总结
1.feature 分支的生命周期不宜过长,最多最多不要超过一个迭代周期。
如果一个feature 分支包含的功能太多太复杂,开发周期太长,应该拆成几个小的feature
2.发版前必须切出release分支,预上线的测试版本一定要和实际上线的版本一致,release分支上只能做 bug 修复。
3.hotfix和release分支开启时即要决定版本号,且同样只准修复 bug,不可加入新功能。
4.经常存在的分支只有两个:develop 与 master
Git Flow 是一种流行的分支管理策略,它为软件开发提供了一种结构化的方法来组织代码库。这种工作流通过定义不同的分支角色和生命周期,帮助团队更高效地协作和管理项目。以下是 Git Flow 分支管理的总结以及其使用场景:
分支管理
- Master 分支:代表生产就绪的代码,始终保持可部署状态。
- Develop 分支:日常开发的基础,从 Master 分支拉出,用于集成新功能。
- Feature 分支:从 Develop 分支拉出,用于开发新功能或修复缺陷。
- Release 分支:从 Develop 分支拉出,用于准备新版本的发布,包括修复小问题和更新文档。
- Hotfix 分支:从 Master 分支拉出,用于紧急修复生产环境中的问题。
使用场景
- 新功能开发:使用 Feature 分支来开发新功能,避免影响主开发线。
- 缺陷修复:在 Feature 分支上修复缺陷,经过测试后合并回 Develop 分支。
- 版本发布:通过 Release 分支准备新版本的发布,包括更新版本号和文档,测试通过后合并回 Master 和 Develop 分支。
- 紧急修复:当生产环境出现紧急问题时,使用 Hotfix 分支快速修复并部署到生产环境,然后同步回 Master 和 Develop 分支。
- 并行开发:多个开发者可以在不同的 Feature 分支上并行工作,提高开发效率。
- 代码审查:Pull Request 或 Merge Request 机制允许团队成员对 Feature 或 Release 分支的代码进行审查。
开发流程
- 从 Develop 分支创建 Feature 分支进行功能开发。
- 功能开发完成后,发起合并请求,合并回 Develop 分支。
- 当准备发布新版本时,从 Develop 分支创建 Release 分支,进行最后的测试和文档更新。
- 发布完成后,将 Release 分支合并回 Master 和 Develop 分支,并在 Master 分支上打标签。
- 如果生产环境需要紧急修复,从 Master 分支创建 Hotfix 分支,修复后合并回 Master 和 Develop 分支,并部署到生产环境。
Git Flow 的优势在于它提供了清晰的分支管理规则和流程,有助于团队成员理解各自的角色和责任。然而,这种工作流也可能带来一定的复杂性,特别是对于小型项目或团队,可能需要根据具体情况进行调整。总的来说,Git Flow 是一种灵活且强大的分支管理策略,适用于需要严格版本控制和频繁发布更新的软件开发项目。

相关文章:
Git Flow 工作流学习要点
Git Flow 工作流学习要点 Git Flow — 流程图Git Flow — 操作指令优点:缺点:Git Flow 分支类型Git Flow 工作流程简述关于 feature 分支关于 Release 分支关于 hotfix 分支 总结 Git Flow — 流程图 图片来源:https://nvie.com/posts/a-succ…...
blender 快捷键 常见问题
一、快捷键 平移视图:Shift 鼠标中键旋转视图:鼠标中键缩放视图:鼠标滚动框选放大模型:Shift B线框预览和材质预览切换:Shift Z 二、常见问题 问题:导入模型成功,但是场景中看不到。 解…...
HTTP详解:TCP三次握手和四次挥手
一、TCP协议概述 TCP协议是互联网协议栈中传输层的核心协议之一,它提供了一种可靠的数据传输方式,确保数据包按顺序到达,并且没有丢失或重复。TCP的主要特点包括: 面向连接:TCP在传输数据之前需要建立连接。可靠传输&…...
详解HTTP:有了HTTP,为何需要WebSocket?
在日常生活中,HTTP 常用于请求数据。例如,当你打开一个天气预报网站时,浏览器会发送一个 HTTP 请求到服务器,请求当前的天气数据,服务器返回响应,浏览器解析并显示这些数据。 但是,当涉及到需要…...
Spring Boot 启动流程是怎么样的
引言 SpringBoot是一个广泛使用的Java框架,旨在简化基于Spring框架的应用程序的开发过程。在这篇文章中,我们将深入探讨SpringBoot应用程序的启动流程,了解其背后的机制。 Spring Boot 启动概览 SpringBoot应用程序的启动通常从一个包含 m…...
【学习笔记】数据结构(三)
栈和队列 文章目录 栈和队列3.1 栈 - Stack3.1.1 抽象数据类型栈的定义3.1.2 栈的表示和实现 3.2 栈的应用举例3.2.1 数制转换3.2.2 括号匹配的检验3.2.3 迷宫求解3.2.4 表达式求值 - 波兰、逆波兰3.2.5 反转一个字符串或者反转一个链表 3.3 栈与递归的实现3.4 队列 - Queue3.4…...
学习python笔记:10,requests,enumerate,numpy.array
requests库,用于发送 HTTP 请求的 Python 库。 requests 是一个用于发送 HTTP 请求的 Python 库。它使得发送 HTTP 请求变得简单且人性化。以下是一些基本的 requests 函数及其用途: requests.get(url, **kwargs) 发送一个 GET 请求到指定的 URL。 i…...
经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)
经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2) 2022 年 11 月,ChatGPT 成功面世,成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同,OpenAI 从初代模型 GPT-1 开始,始终贯彻只有解码器࿰…...
MySQL库与表的操作
目录 一、登录并进入数据库 1、登录 2、USE 命令 检查当前数据库 二、库的操作 1、创建数据库语法 2、举例演示 3、退出 三、字符集和校对规则 1、字符集(Character Set) 2、校对集(Collation) 总结 3、操作命令 …...
TTS 语音合成技术学习
TTS 语音合成技术 TTS(Text-to-Speech,文字转语音)技术是一种能够将文字内容转换为自然语音的技术。通过 TTS,机器可以“说话”,这大大增强了人与机器之间的互动能力。无论是在语音助手、导航系统还是电子书朗读器中&…...
小公司做自动化的困境
1. 人员数量不够 非常常见的场景, 开发没几个, 凭什么测试要那么多, 假设这里面有3个测试, 是不是得有1个人会搞框架? 是不是得有2人搞功能测试, 一个人又搞框架, 有些脚本, 真来得及吗? 2. 人员基础不够 现在有的大公司, 是这样子协作的, 也就是某模块需求谁谁测试的, 那么…...
基于pytorch框架的手写数字识别(保姆级教学)
1、前言 本文基于PyTorch框架,采用CNN卷积神经网络实现MNIST手写数字识别,不仅可以在GPU上,同时也可以在CPU上运行。方便即使只有CPU的小伙伴也可以运行该模型。本博客手把手教学,如何手写网络层(3层),以及模型训练,详细介绍各参数含义与用途。 2、模型源码解读 该模型…...
注意力机制在大语言模型中的应用
在大语言模型中,注意力机制(Attention Mechanism)用于捕获输入序列中不同标记(token)之间的关系和依赖性。这种机制可以动态地调整每个标记对当前处理任务的重要性,从而提高模型的性能。具体来说࿰…...
qt 实现对字体高亮处理原理
在Qt中实现对文本的字体高亮处理,通常涉及到使用QTextDocument、QTextCharFormat和QSyntaxHighlighter。下面是一个简单的例子,演示如何为一个文本编辑器(假设是QTextEdit)添加简单的关键词高亮功能: 步骤 1: 定义关键…...
SAP中通过财务科目确定分析功能来定位解决BILLING问题实例
接用户反馈,一笔销售订单做发货后做销售发票时,没有成功过账到财务,提示财户确定错误。 这个之前可以通过VF02中点击小绿旗来重新执行过财动作,看看有没有相应日志来定位问题。本次尝试用此方法,也没有找到相关线索。 …...
充电站,正在杀死加油站
最近,深圳公布了一组数据,深圳的超级充电站数量已超过传统加油站数量,充电枪数量也已超过加油枪数量。 从全国范围看,加油站关停的速度在加快。 充电站正在杀死加油站。 加油站,未来何去何从? 01. 减少 我…...
哪个牌子的超声波清洗机好?四样超卓超声波清洗机独具特色!
眼镜是许多人日常生活中必不可少的工具,然而,相信很多人都有过清洗眼镜的烦恼。传统的清洗眼镜的方法往往不够彻底,容易留下污渍或者划伤镜片。因此,超声波洗眼镜机成为了现代人清洗眼镜的新选择。超声波洗眼镜机通过利用超声波震…...
vue3中若v-model绑定的响应字段出现三级,该如何实现rules验证规则
比如以下内容: 配置的rules内容 const rulesref({title:[{required:true,message:"请输入标题",trigger:"blur"},{max:50,message:"最大不能超过256个字",trigger:"blur"}],Category:[{required:true,message:"请选择…...
Docker-Compose一键部署项目
Docker-Compose一键部署项目 目录 Docker-Compose一键部署项目介绍部署Django项目项目目录结构 docker-compose.ymlnginx的default.conf文件后端Dockerfile文件mysql.env一键部署DNS域名解析引起的跨域问题 介绍 Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的…...
【C++】相机标定源码笔记-线激光点云处理工具类
一个线激光点云处理工具类,它包含了一系列的方法用于处理和分析线激光扫描得到的点云数据。提供的功能包括: 通过文件或直接数据设置点云。计算线激光在机器人坐标系下的精度,输出内点的平均距离、最大距离、最小距离、总点数和内点数。提供了…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
