Git多人协作与企业级开发模型
目录
1.多人协作一
2.多人协作二
3.远程分⽀删除后,本地gitbranch-a依然能看到的解决办法
4.企业级开发模型
4.1.Git的重要性
4.2.系统开发环境
4.3.Git 分⽀设计规范
1.多人协作一
⽬前,我们所完成的⼯作如下:
- 基本完成Git的所有本地库的相关操作,git基本操作,分⽀理解,版本回退,冲突解决等等
- 申请码云账号,将远端信息clone到本地,以及推送和拉取。
是时候⼲最重要的⼀件事情了,实现多⼈协作开发!为了做这件事情,我们需要先做⼀些准备⼯作。
我们之前已经将项⽬clone到了指定⽬录,如:
我们在windows环境下,再clone同⼀个项⽬仓库,来模拟和你⼀起协作开发的另⼀名⼩伙伴:
我们打开电脑自带的powershell这个软件
我们切换好目录来
实际开发中,每个⽤⼾都有⾃⼰的gitee/github账号,如果要多⼈进⾏协同开发,必须要将⽤⼾添加进开发者,⽤⼾才有权限进⾏代码提交:
三种邀请用户的方式任选其一
到此,相当于有了两个⽤⼾,分别在linux和windows上针对于同项⽬进⾏协作开发,我们的准备⼯ 作到此结束。
⽬前,我们的仓库中只有⼀个master主分⽀,但在实际的项⽬开发中,在任何情况下其实都是不允许 直接在master分⽀上修改代码的,这是为了保证主分⽀的稳定。
所以在开发新功能时,常常会新建其他分⽀,供开发时进⾏迭代使⽤。
那么接下来,就让我们在gitee上新建dev远程分⽀供我们使⽤:
创建成功的远程分⽀是可以通过Git拉取到本地来,以实现完成本地开发⼯作。
接下来让我们和另⼀名开发的⼩伙伴都将远程仓库进⾏⼀次拉取操作,并观察结果:
- 对于我们要操作的是:
之前讲的 git branch 其实只能查看本地分⽀,要查看远程分⽀需要加上-r 选项。但前提是要 pull ⼀下拉取最新的远端仓库,才能看到最新的内容。
拉取后便可以看到远程的dev分⽀,接着切换到dev分⽀供我们进⾏本地开发。要说明的是,我们切 换到的是本地的dev分⽀,根据⽰例中的操作,会将本地分⽀和远程分⽀的进⾏关系链接。
- 对于⼩伙伴要操作的是:
现在,你和你的⼩伙伴就可以在 dev 上完成开发。
⾸先,让我们在 dev 分⽀上进⾏⼀次开发,并 push 到远程。例如:
让我们来看看码云上⽬前仓库的状态:
⾄此,我们已经将代码成功推送⾄码云,接下来假如你的⼩伙伴要和你协同开发,碰巧也要对file.txt ⽂件作修改,并试图推送,例如:
我们打开那个file.txt,修改成下面这样子
我们发现不能推送到远程仓库里面去
这时推送失败,因为你的小伙伴的最新提交和你推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用 git pull把最新的提交从 origin/dev 抓下来,然后,在本地进行合并,并解决冲突,再推送。
小伙伴的操作如下:
这个时候我们就发现file.txt文件里面发生冲突了,我们编辑一下这个文件
解决冲突,重新推送:
期间会出现下面这个,我们输入gitee的账号和密码就ok了
此时,我们看到远端的码云已经能看到我们的新提交了!
由此,两名开发者已经开始可以进⾏协同开发了,不断的 git pull/add/commit/push ,遇到了 冲突,就使⽤我们之前讲的冲突处理解决掉冲突。
对于你来说,要想看到⼩伙伴的代码,只需要 pull ⼀下即可,例如:
最后不要忘记,虽然我们是在分⽀上进⾏多⼈协作开发,但最终的⽬的是要将开发后的代码合并到 master上去,让我们的项⽬运⾏最新的代码。接下来我们就需要做这件事情了:
切换⾄ master 分⽀ , pull ⼀下,保证本地的 master 是最新内容。 合并前这么做是⼀个好习惯
切 换⾄ dev 分⽀ , 合并 master 分⽀,这 么做是因为如果有冲突,可以在 dev 分⽀上进⾏处理,⽽不是在在 master 上解决冲突。 这 么做是⼀个好习惯
切 换⾄ master 分⽀,合并 dev 分⽀
将 master 分⽀推送⾄远端
此时,查看远端仓库,master已经是最新代码了:
此时,dev分⽀对于我们来说就没⽤了,那么dev分⽀就可以被删除掉。
我们可以直接在远程仓库中 将dev分⽀删除掉:
总结⼀下,在同⼀分⽀下进⾏多⼈协作的⼯作模式通常是这样:
- • ⾸先,可以试图⽤git push origin branch-name推送⾃⼰的修改;
- • 如果推送失败,则因为远程分⽀⽐你的本地更新,需要先⽤git pull试图合并;
- • 如果合并有冲突,则解决冲突,并在本地提交;
- • 没有冲突或者解决掉冲突后,再⽤git push origin branch-name推送就能成功!
- • 功能开发完毕,将分⽀merge进master,最后删除分⽀。
2.多人协作二
⼀般情况下,如果有多需求需要多⼈同时进⾏开发,是不会在⼀个分⽀上进⾏多⼈开发,⽽是⼀个需 求或⼀个功能点就要创建⼀个 feature 分⽀。
现在同时有两个需求需要你和你的⼩伙伴进⾏开发,那么你们俩便可以各⾃创建⼀个分⽀来完成⾃⼰ 的⼯作。在上个部分我们已经了解了可以从码云上直接创建远程分⽀,其实在本地创建的分⽀也可以 通过推送的⽅式发送到远端。在这个部分我们就来⽤⼀下这种⽅式。
- 对于你来说,可以进⾏以下操作:
新 增本地分⽀ feature-1 并切换
新 增需求内容 创建 function1 ⽂件
将 feature-1 分⽀推送到远端
- 对于⼩伙伴来说,可以进⾏以下操作:
创建并切换到feature-2分支下
创建新文件function2
将feature-2分支推送到远程仓库
此时,在本地,你看不⻅他新建的⽂档,他看不⻅你新建的⽂档。并且推送各⾃的分⽀时,并没有任 何冲突,你俩互不影响,⽤起来很舒服!!
再来看下远端码云上此时的状态:
对于你的feature-1分⽀:
对于⼩伙伴的feature-2分⽀:
正常情况下,你俩就可以在⾃⼰的分⽀上进⾏专业的开发了!
但天有不测⻛云,你的⼩伙伴突然⽣病了,但需求还没开发完,需要你帮他继续开发,于是他便把 feature-2 分⽀名告诉你了。
这时你就需要在⾃⼰的机器上切换到feature-2分⽀帮忙继续开发,要做 的操作如下:
必须先拉取远端仓库内容
可 以看到远程已经有了 feature-2
切 换到 feature-2 分⽀上,可以和远程的 feature-2 分⽀关联起来, 否 则将来只使⽤ git push 推送内容会失败
切换成功后,便可以看⻅feature-2分⽀中的function2⽂件了,接着就可以帮⼩伙伴进⾏开发:
继续开发
推送内容
查看远程状态,推送成功了:
这时,你的⼩伙伴已经修养的差不多,可以继续进⾏⾃⼰的开发⼯作,那么他⾸先要获取到你帮他开 发的内容,然后接着你的代码继续开发。或者你已经帮他开发完了,那他也需要在⾃⼰的电脑上看看 你帮他写的代码:
我们发现代码没有pull下来
Pull ⽆效的原因是⼩伙伴没有指定本地feature-2分⽀与远程origin/feature-2分⽀的链接,根据提 ⽰,设置feature-2和origin/feature-2的链接即可:
现在总算是拉取成功了
⽬前,⼩伙伴的本地代码和远端保持严格⼀致。你和你的⼩伙伴可以继续在不同的分⽀下进⾏协同开 发了。
各⾃功能开发完毕后,不要忘记我们需要将代码合并到master中才算真正意义上的开发完毕。
由于你的⼩伙伴率先开发完毕,于是开始 merge :
1.切换master分支pull一下,保证本地master是最新内容
2.切换至feature-2分支,合并master分支
3.切换至master分支,合并feature-2分支
4.将master分支推送至远程仓库
此时远程仓库的状态:
当你的⼩伙伴将其代码 merge 到 master后,你也完成开发了,也需要进行merge到master 操作,于是你:
切 换⾄ master 分⽀ , pull ⼀下,保证本地的 master 是最新内容。 合 并前这么做是⼀个好习惯
切 换⾄ feature-1 分⽀ , 合并 master 分⽀
这 么做是因为如果有冲突,可以在 feature-1 分⽀上进⾏处理,⽽不是在 master 上解决冲突。
这么做是⼀个好习惯
期间可能会遇到下面这个,直接ctrl+o保存,输入文件名,然后ctrl+x退出
1 、由于 feature-1 分⽀已经 merge 进来了新内容,为了保证远程分⽀最新,所以最好 push ⼀下。
2 、要 push 的另⼀个原因是因为在实际的开发中, master 的 merge 操作⼀般不是由我们⾃⼰在本地进行
其 他⼈员或某些平台 merge 时,操作的肯定是远程分⽀,所以就要保证远程分⽀的最新。
3 、如果 merge 出现冲突,不要忘记需要 commit 才可以 push!!
切 换⾄ master 分⽀,合并 feature-1 分⽀
将 master 分⽀推送⾄远端
此时远程仓库的状态:
此时, feature-1 和 feature-2 分⽀对于我们来说就没⽤了,那么我们可以直接在远程仓库中 将dev分⽀删除掉:
这就是多⼈协作的⼯作模式,⼀旦熟悉了,就⾮常简单。
3.远程分⽀删除后,本地gitbranch-a依然能看到的解决办法
当前我们已经删除了远程的⼏个分⽀,使⽤ git branch -a 命令可以查看所有本地分⽀和远程分 ⽀,但发现很多在远程仓库已经删除的分⽀在本地依然可以看到。例如:
使⽤命令git remote show origin ,可以查看remote地址,远程分⽀,还有本地分⽀与之相 对应关系等信息。
此时我们可以看到那些远程仓库已经不存在的分⽀,根据提⽰,使⽤git remote prune origin 命令:
这样就删除了那些远程仓库不存在的分⽀。对于本地仓库的删除,之前的课程已经学过了,⼤家可以 ⾃⾏从操作。
4.企业级开发模型
4.1.Git的重要性
我们知道,⼀个软件从零开始到最终交付,⼤概包括以下⼏个阶段:规划、编码、构建、测试、发 布、部署和维护。
最初,程序⽐较简单,⼯作量不⼤,程序员⼀个⼈可以完成所有阶段的⼯作。但随着软件产业的⽇益 发展壮⼤,软件的规模也在逐渐变得庞⼤。软件的复杂度不断攀升,⼀个⼈已经hold不住了,就开始 出现了精细化分⼯。
但在传统的IT组织下,开发团队(Dev)和运维团队(Ops)之间诉求不同:
• 开发团队(尤其是敏捷团队)追求变化
• 运维团队追求稳定 双⽅往往存在利益的冲突。
⽐如,精益和敏捷的团队把持续交付作为⽬标,⽽运维团队则为了线上的 稳定⽽强调变更控制。部⻔墙由此建⽴起来,这当然不利于IT价值的最⼤化。
为了弥合开发和运维之间的鸿沟,需要在⽂化、⼯具和实践⽅⾯的系列变⾰⸺DevOps正式登上舞 台。
DevOps(Development和Operations的组合词)是⼀种重视“软件开发⼈员(Dev)”和“IT运维技 术⼈员(Ops)”之间沟通合作的⽂化、运动或惯例。
透过⾃动化“软件交付”和“架构变更”的流 程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。在DevOps的软件开发过程包含计 划、编码、构建、测试、预发布、发布、运维、监控,由此可⻅DevOps的强⼤。
讲了这么多,这个故事到底和我们课程的主题Git有什么关系呢?
举⼀个很简单的例⼦就能说明这个问题。⼀个软件的迭代,在我们开发⼈员看来,说⽩了就是对代码 进⾏迭代,那么就需要对代码进⾏管理。
如何管理我们的代码呢,那不就是Git(分布式版本控制系 统)!所以Git对于我们开发⼈员来说其重要性就不⾔⽽喻了。
4.2.系统开发环境
⾔归正传,对于开发⼈员来说,在系统开发过程中最常⽤的⼏个环境必须要了解⼀下:
1. 开发环境:开发环境是程序猿们专⻔⽤于⽇常开发的服务器。为了开发调试⽅便,⼀般打开全部错 误报告和测试⼯具,是最基础的环境。
2. 测试环境:⼀个程序在测试环境⼯作不正常,那么肯定不能把它发布到⽣产机上。该环境是开发环 境到⽣产环境的过渡环境。
3. 预发布环境:该环境是为避免因测试环境和线上环境的差异等带来的缺陷漏测⽽设⽴的⼀套环境。 其配置等基本和⽣产环境⼀致,⽬的是能让我们发正式环境时更有把握!所以预发布环境是你的产 品质量最后⼀道防线,因为下⼀步你的项⽬就要上线了。要注意预发布环境服务器不在线上集成服 务器范围之内,为单独的⼀些机器。
4. ⽣产环境:是指正式提供对外服务的线上环境,例如我们⽬前在移动端或PC端能访问到的APP都是 ⽣产环境。 这⼏个环境也可以说是系统开发的三个重要阶段:开发->测试->上线。
⼀张图总结:
4.3.Git 分⽀设计规范
环境有了概念后,那么对于开发⼈员来说,⼀般会针对不同的环境来设计分⽀,例如:
分支名称 | 适用环境 | 名字 |
---|---|---|
master | 生产环境 | 主分支 |
release | 预发布/测试环境 | 预发布分支 |
develop | 开发环境 | 开发主分支 |
feature | 本地(需求开发分支) | 需求开发分支 |
hotfix | 本地(紧急修复分支) | 紧急修复分支 |
注:以上表格中的分⽀和环境的搭配仅是常⽤的⼀种,可视情况⽽定不同的策略。
master 分支
- 为主分支,该分支为只读且唯一分支。
- 用于部署到正式发布环境,一般由合并 release 分支得到。
- 主分支作为稳定的唯一代码库,任何情况下不允许直接在 master 分支上修改代码。
- 产品的功能全部实现后,最终在 master 分支对外发布,另外所有在 master 分支的推送应该打标签(tag)做记录,方便追溯。
- master 分支不可删除。
release 分支
- 为预发布分支,基于本次上线所有的 feature 分支合并到 develop 分支之后,基于 develop 分支创建。
- 可以部署到测试或预发布集群。
- 命名以 release/ 开头,建议的命名规则: release/version_publishtime。
- release 分支主要用于提交给测试人员进行功能测试。发布提测阶段,会以 release 分支为基准进行提测。
- 如果在 release 分支测试出问题,需要回归验证 release 分支代码到 develop 分支看是否存在此问题。
- release 分支属于临时分支,产品上线后可选删除。
develop 分支
- 为开发分支,基于 master 分支创建的只读且唯一分支,始终保持最新完成以及 bug 修复后的代码。
- 可部署到开发环境对应集群。
- 可根据需求大小程度确定是由 feature 分支合并,还是直接在上面开发(非常不建议)。
feature 分支
- feature 分支通常为新功能或新特性开发分支。
- 命名以 develop 分支为基础创建 feature 分支,以 feature/ 开头,建议的命名规则:feature/user_createtime_feature。
- 新特性或新功能开发完成后,开发人员需合并到 develop 分支。
- 一旦该需求发布上线,便将其删除。
hotfix 分支
- hotfix 分支为线上 bug 修复分支或叫补丁分支,主要用于对线上的版本进行 bug 修复。
- 当线上出现紧急问题需要马上修复时,需要基于 master 分支创建 hotfix 分支。
- 命名以 hotfix/ 开头,建议的命名规则: hotfix/user_createtime_hotfix。
- 当问题修复完成后,需要合并到 master 分支和 develop 分支并推送远程。
- 一旦修复上线,便将其删除。
其实,以上跟⼤家讲解的是企业级常⽤的⼀种Git分⽀设计规范:GitFlow模型。
但要说的是,该模 型并不是适⽤于所有的团队、所有的环境和所有的⽂化。
如果你采⽤了持续交付,你会想要⼀些能够 尽可能简化交付过程的东西。
有些⼈喜欢基于主⼲的开发模式,喜欢使⽤特性标志。
然⽽,从测试的 ⻆度来看,这些反⽽会把他吓⼀跳。
关键在于站在你的团队或项⽬的⻆度思考:这种分⽀模型可以帮助你们解决哪些问题?它会带来哪些 问题?这种模式为哪种开发提供更好的⽀持?你们想要⿎励这种⾏为吗?你选择的分⽀模型最终都是 比特就业课 为了让⼈们更容易地进⾏软件协作开发。
因此,分⽀模型需要考虑到使⽤者的需求,⽽不是盲⽬听信 某些所谓的“成功的分⽀模型”。
所以对于不同公司,规范是会有些许差异,但万变不离其宗,是为了效率与稳定。
相关文章:
Git多人协作与企业级开发模型
目录 1.多人协作一 2.多人协作二 3.远程分⽀删除后,本地gitbranch-a依然能看到的解决办法 4.企业级开发模型 4.1.Git的重要性 4.2.系统开发环境 4.3.Git 分⽀设计规范 1.多人协作一 ⽬前,我们所完成的⼯作如下: 基本完成Git的所有本…...
Android学习总结之扩展基础篇(一)
一、IdleHandler工作原理 1. IdleHandler 接口定义 IdleHandler 是 MessageQueue 类中的一个接口,定义如下: public static interface IdleHandler {/*** 当消息队列空闲时会调用此方法。* return 如果返回 true,则该 IdleHandler 会保留在…...
C语言教程(十六): C 语言字符串详解
一、字符串的表示 在C语言中,字符串是由一系列字符组成,并且以空字符 \0 作为结束标志。字符串通常用字符数组来表示。例如: char str[] {H, e, l, l, o, \0};也可以使用字符串字面量来初始化字符数组:char str[] "Hello&…...
Redis LFU 策略参数配置指南
一、基础配置步骤 设置内存上限 在 redis.conf 配置文件中添加以下指令,限制 Redis 最大内存使用量(例如设置为 4GB): maxmemory 4gb选择 LFU 淘汰策略 根据键的作用域选择策略: # 所有键参与淘汰 maxmemory-…...
Pikachu靶场-unsafe upfileupload
不安全的文件上传漏洞防御与对抗方式对照表 防御方式 防御实现 攻击者对抗方式 对抗原理 文件类型白名单验证 仅允许指定扩展名(如 .jpg, .png) if (!in_array($ext, [jpg, png])) { die(); } 伪造文件类型: 1. 修改文件头(…...
Python基础语法:查看数据的类型type(),数据类型转换,可变和不可变类型
目录 查看数据类型type() 使用type()语句查看数据的类型 变量无类型而数据有类型 数据类型转换 在字符串,整型,浮点数之间相互转换 可变类型和不可变类型 查看数据类型type() 使用type()语句查看数据的类型 Python中使用type(被查看数据的类型)语…...
高防IP是如何防护DDoS攻击和CC攻击的
高防IP是一种针对网络攻击(如DDoS和CC攻击)设计的防护服务,其核心原理是通过流量调度、智能清洗和分布式防护节点等技术,将恶意流量拦截在目标服务器之外。以下是其防护DDoS和CC攻击的具体机制: 一、防御DDoS攻击的机制…...
从认证到透传:用 Nginx 为 EasySearch 构建一体化认证网关
在构建本地或云端搜索引擎系统时,EasySearch 凭借其轻量、高性能、易部署等优势,逐渐成为众多开发者和技术爱好者的首选。但在实际部署过程中,如何借助 Nginx 为 EasySearch 提供高效、稳定且安全的访问入口,尤其是在身份认证方面…...
利用deepseek快速生成甘特图
一、什么是甘特图 甘特图(Gantt Chart)是一种直观的项目管理工具,广泛应用于多个领域,主要用于时间规划、任务分配和进度跟踪。 直观性:时间轴清晰展示任务重叠或延迟。 灵活性:支持…...
突破厚铜PCB阻抗控制难题:多级阻抗实现方法
随着电子技术的发展,电子设备对电路板的性能要求越来越高。其中,阻抗控制是电路板设计中的一个重要环节,尤其是对于高频、高速的电子设备。厚铜电路板由于其优良的导电性能和机械强度,被广泛应用于各种高端电子设备中。然而&#…...
JCP官方定义的Java技术体系组成部分详解
JCP官方定义的Java技术体系组成部分详解 1. Java平台规范(Java Platform Specifications) 定义:由JCP制定的Java平台核心规范,包括Java SE(标准版)、Java EE(企业版,现为Jakarta EE…...
如何在 Windows上安装 Python 3.6.5?
Windows 系统安装步骤 下载安装包 安装包下载链接:https://pan.quark.cn/s/9294ca0fd46a 运行安装程序 双击下载的 .exe 文件(如 python-3.6.5.exe)。 勾选 Add Python 3.6 to PATH(重要!这将自动配置环境变量&…...
OpenHarmony 开源鸿蒙北向开发——hdc工具使用及常用命令(持续更新)
hdc(OpenHarmony Device Connector)是为开发人员提供的用于设备连接调试的命令行工具,该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备(或模拟器)进行连接调试通信。简单来讲,hdc 是 Op…...
【C语言】C语言动态内存管理
前言 在C语言编程中,内存管理一直是程序员需要重点关注的领域。动态内存管理更是如此,它不仅涉及到内存的灵活分配和释放,还隐藏着许多潜在的陷阱。本文将从动态内存分配的基础讲起,逐步深入到常见的错误、经典笔试题分析&#x…...
Java 运算符:深度解析
前言 作为Java开发者,运算符是我们每天都会接触的基础元素。然而,很多开发者对运算符的理解仅停留在表面层次。本文将全面深入地剖析Java中的各类运算符,揭示其底层原理、使用技巧和最佳实践,帮助您成为真正的Java运算符专家。 …...
健康养生小窍门
健康养生是我们对美好生活的追求,掌握一些实用的小窍门,能让我们轻松拥抱健康。 在生活起居方面,要注重环境的营造。卧室的窗帘选择遮光性好的材质,保证睡眠时的黑暗环境,有助于提高睡眠质量。在室内放置一些绿植&…...
4月24号
网络编程: //IP的对象一台电脑的对象 InetAddress address InetAddress.getByName("DESKTOP-5OJJSAM"); System.out.println(address); String name address.getHostName(); System.out.println(name);//DESKTOP-5OJJSAM String ip address.getHostAddress(); Sys…...
【RocketMq源码篇-01】环境搭建、基本使用、可视化界面
RocketMq源码核心篇整体栏目 内容链接地址【一】环境搭建、基本使用、可视化界面https://zhenghuisheng.blog.csdn.net/article/details/147481401 环境搭建、基本使用、可视化界面 一,RocketMq源码分析1. docker安装rocketMq2. rocketMq基本使用2.1,创建…...
Mysql的深度分页查询优化
一、深度分页为什么慢? 当执行 SELECT * FROM orders ORDER BY id LIMIT 1000000, 10 时: MySQL 会扫描前 1,000,010 行,丢弃前 100 万行,仅返回 10 行。偏移量(offset)越大,扫描行数越多&…...
OpenCv高阶(十一)——物体跟踪
文章目录 前言一、OpenCV 中的物体跟踪算法1、均值漂移(Mean Shift):2、CamShift:3、KCF(Kernelized Correlation Filters):4、MIL(Multiple Instance Learning)…...
第一章:Model Context Protocol (MCP)
Chapter 1: Model Context Protocol (MCP) 🌟 为什么需要MCP? 想象你正在训练一只小狗,希望它能听懂你的指令并执行任务。但如果你和小狗用不同语言交流,它可能完全不知道你的意思。类似地,大型语言模型(L…...
【SAP PP】COOIS报表分析
本文目录 一、基本查询操作 二、订单参数文件 三、COOIS报表增强BADI COOIS报表是PP模块核心报表,是系统中一个功能强大的标准报表,COOIS可查询查询生产订单的状态、进度、组件、工序、报工等信息的综合型报表,,关联了生产订单…...
2025上海车展|紫光展锐发布新一代旗舰级智能座舱芯片平台A888
4月24日,在第二十一届上海国际汽车工业展览会(以下简称“上海车展”)期间,紫光展锐重磅推出新一代旗舰级智能座舱芯片平台A8880,以强劲实力全面助力汽车座舱智能化迈向新征程。 三大核心能力,紧抓市场机遇 …...
蓝牙4.0与蓝牙5.0的区别
蓝牙4.0与蓝牙5.0的主要区别: 传输速度:蓝牙5.0的传输速度是蓝牙4.0的两倍,理论速率可达2Mbps,而蓝牙4.0为1Mbps。 传输距离:蓝牙5.0的传输距离是蓝牙4.0的四倍,在开放空间可达300米,而蓝牙4.0…...
Vue 的单文件组件(.vue 文件)script 标签的使用说明
在 Vue 的单文件组件(.vue 文件)中,最多可以编写 2 个 <script> 标签,但需要满足特定条件: 1. Vue 3 的情况(主流用法) 从 Vue 3.2 开始,官方支持以下两种形式共存࿱…...
TIM输入捕获知识部分
越往左,频率越高;越往右,频率越低。【越紧凑,相同时间,次数越多】 计算频率的方法:测评法、测周法、中界频率。 频率的定义:1s内出现了多少个重复的周期 测评法就是从频率的定义出发的&#…...
【数据可视化-30】Netflix电影和电视节目数据集可视化分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
多线程事务?拿捏!
场景:有一批1万或者10万数据,插入数据库,怎么做 事务中进行批量提交 publList<List<OrderPo>> partition Lists.partition(list, 450);StopWatch stopWatch new StopWatch();stopWatch.start();// 顺序插入for (List<OrderPo> sub…...
Spring Boot 自动配置深度解析:从源码结构到设计哲学
Spring Boot 自动配置深度解析:从源码结构到设计哲学 为什么自动配置如此重要? 在传统 Spring 开发中,开发者要手动配置大量 XML 或 JavaConfig,过程繁琐、重复且容易出错。Spring Boot 引入自动配置机制,极大地简化…...
Linux下载与安装——笔记
Linux 是一种自由和开放源代码的 操作系统(OS),其核心(Kernel)由 Linus Torvalds 于 1991 年首次发布。 1、选择适合的 Linux 发行版 根据使用场景和技术水平选择: 新手入门:Ubuntu(…...
09前端项目----分页功能
分页功能 分页器的优点实现分页功能自定义分页器先实现静态分页器调试分页器动态数据/交互 Element UI组件 分页器的优点 电商平台同时展示的数据很多,所以采用分页功能实现分页功能 Element UI已经有封装好的组件,但是也要掌握原理,以及自定…...
头歌之动手学人工智能-机器学习 --- PCA
目录 第1关:维数灾难与降维 第2关:PCA算法流程 任务描述 编程要求 测试说明 第3关:sklearn中的PCA 任务描述 编程要求 测试说明 第1关:维数灾难与降维 第2关:PCA算法流程 任务描述 本关任务:补充…...
Spring 中的循环引用问题
本章来聊聊Spring 中的循环引用问题该如何解决。这里聊的很粗糙,并没有那么细节,只是大概了解了一点。 什么是循环引用? 如下图所示: 图中有两个类,一个 Class A ,A 中又引用了 B,Class B 中又…...
SIGGRAPH投稿相关官方指导
author instruction https://www.siggraph.org/preparing-your-content/author-instructions/ 使用latex模板 https://research.siggraph.org/blog/guides/how-to-use-the-acm-siggraph-tog-latex-template/ 格式要求(字体、页面大小等) https://sa202…...
Python学习笔记(三)(程序流程控制)
文章目录 一、条件语句(if/elif/else)语法:示例: 二、循环语句1. for 循环语法:示例: 2. while 循环语法:示例: 三、循环控制语句1. break:立即终止循环2. continue&…...
onnx注册cpu版flashattention
摘要 本教程展示了如何在 ONNX Runtime 中注册一个 CPU 可执行的 FlashAttention 算子。首先,可以直接升级到 ONNX Runtime v1.16 及以上,以获得内置的 FlashAttention CPU 实现citeturn0search2;其次,演示了如何通过 ONNX Runtime 的 Custom Op 接口自定义实现并注…...
WebAssembly:开启高性能Web应用新时代
一、引言 随着互联网技术的飞速发展,Web应用的复杂度和性能要求越来越高。传统的Web开发技术,如JavaScript,虽然功能强大,但在处理复杂计算和高性能需求时仍存在一些局限性。WebAssembly(简称Wasm)作为一种…...
【前端】手写代码输出题易错点汇总
不定期补充。 目录 异步事件循环this作用域/变量提升/闭包原型/继承 异步事件循环 const promise new Promise((resolve, reject) > {console.log(1);console.log(2); }); promise.then(() > {console.log(3); }); console.log(4); //1 //2 //4promise.then 是微任务&…...
STM32F103_HAL库+寄存器学习笔记20 - CAN发送中断+ringbuffer + CAN空闲接收中断+接收所有CAN报文+ringbuffer
导言 如上所示,在[[STM32F103_HAL库寄存器学习笔记19 - CAN发送中断CAN接收中断接收所有CAN报文ringbuffer数据结构]]的基础上,为CAN发送端也引入了ringbuffer(环形缓冲区)机制。CAN发送有三个发送邮箱,为什么还另外需…...
小白自学python第二天
学习python的第二天 一、判断语句 1、布尔类型和比较运算符 1、布尔类型 表示现实生活中的逻辑,真(True,用数字1表示)和假(False,用数字0表示) 2、布尔类型变量的定义 变量的名称 布尔类…...
JavaScript 异步编程与请求取消全指南
JavaScript 异步编程与请求取消全指南 涵盖:同步/异步、Promise、async/await、AbortController、前后端协作 一、同步与异步 1. 同步(Synchronous) 定义:代码按顺序执行,前一步完成才能执行下一步。特点࿱…...
Redis 核心应用场景
高性能缓存 Redis 作为内存数据库,读写性能可达10万 QPS,适合缓存热点数据(如商品详情、用户会话),显著降低数据库压力。通过设置过期时间(TTL)自动清理非热点数据,推荐结合allkeys-…...
KMS工作原理及其安全性分析
在当今数字化时代,数据安全已经成为企业和个人最为关注的话题之一。随着云计算和大数据的快速发展,如何安全地管理密钥成为了一个重要的挑战。KMS(Key Management Service,密钥管理服务)作为一种专业的密钥管理解决方案…...
施磊老师基于muduo网络库的集群聊天服务器(六)
文章目录 客户端开发开始客户端首页面功能为何不逐行开发?客户端CMake代码搭配知识补充--有很多漏的客户端main-登录,注册,退出群组有问题测试 客户端好友添加与聊天功能表驱动设计:commandMapcommandHandlerMap为什么都是int, string添加好友和聊天功能…...
有关字体,语言,字符编码相关的基础知识,询问chatgpt所得
学习这个知识点的背景是,我需要做一个 在canvas 上书写矢量文本的功能, 使用opentype来加载字体文件,并将内容转换为 svg,导入画布。 但是有些字体文件 是不包含 一些其他语言的字符的。就可能出现 “无效字符”。 花了点时间研究…...
Obsidian和Ollama大语言模型的交互过程
之前的文章中介绍了Obsidian配合Ollama的使用案例,那么它们是如何配合起来的呢?其实这个问题并不准确,问题的准确描述应该是Obsidian的Copilot插件是如何与Ollama大语言模型交互的。因为Obsidian在这里只是一个载体,核心功能还是C…...
架构-数据库系统
数据库系统 一、数据库系统概述 (一)课程核心模块 覆盖数据库设计、关系代数、规范化理论、数据控制四大核心模块,旨在构建从理论到实践的完整知识体系至。 (二)典型应用场景 数据管理:学生信息管理&a…...
【C到Java的深度跃迁:从指针到对象,从过程到生态】第三模块·面向对象深度进化 —— 第十二章 接口:比C函数指针更强大的契约
一、从函数指针到接口契约 1.1 C函数指针的本质限制 C语言通过函数指针实现回调机制,但存在根本性缺陷: 回调函数示例: typedef void (*Logger)(const char*); void process_data(int data, Logger logger) { // ... logger("Pro…...
【HFP】蓝牙语音通话控制深度解析:来电拒接与通话终止协议
目录 一、来电拒接的核心流程与信令交互 1.1 拒接场景的分类与触发条件 1.2 HF 端拒接流程 1.3 AG 端拒接流程 二、通话终止流程:主动断开与异常中断 2.1 终止场景的界定 2.2 HF 端终止流程 2.3 AG 端终止流程 三、信令协议的核心要素:AT 命令与…...
linux 中断子系统 层级中断编程
虚拟中断控制器代码: #include<linux/kernel.h> #include<linux/module.h> #include<linux/clk.h> #include<linux/err.h> #include<linux/init.h> #include<linux/interrupt.h> #include<linux/io.h> #include<linu…...