Git分享-规范/建议/技巧
1. Git多人协作开发流程图
1.1 processOn默认的模板
1.2 改造之后
https://www.processon.com/view/link/64ccaf56a433c931b2f9428a
访问密码:512I
① 总流程图
② feat分支(功能/需求 分支)流程
③ bugfix分支(紧急补丁分支)流程
④ 回滚
上线后有严重问题,短时间内无法修复,需要回滚 – 以下解决方案是个人想法
若需要全部回滚,则直接用上一个版本的快照重新发布,后续再按照【② feat分支(功能/需求 分支)流程】的步骤将最新修改逐步合并到各个分支,再上线
若本次上线了多个功能,而需要紧急回滚其中一个功能(都在feat-xxx)上,则处理流程与【③ bugfix分支(紧急补丁分支)流程】类似,如下图
2. 简略的基础
1.管理工具sourceTree https://www.sourcetreeapp.com/ 省下了敲命令的麻烦,SourceTree本身还是通过Git命令来执行任何操作
2.设置用户名、邮箱(可以针对全局,也可以针当前工程)
3.fetch、merge、pull的含义(pull = fetch + merge)
4.【commit id 版本号】执行命令时版本号没必要写全,前几位就可以了。HEAD指向的版本就是当前版本
5.工作区和暂存区:工作区和暂存区 - 廖雪峰的官方网站。对于所有分支而言, 工作区和暂存区是公共的。
6.ReadMe文件
7.gitignore文件。把要忽略的文件名(或者路径)填进去,Git就会自动忽略这些文件。
8.Git比其他版本控制系统设计得优秀的原因:Git跟踪并管理的是修改,而非文件
3. 总结操作流程
3.1 创建项目
第一步:gitlab页面创建空项目
此步骤 由管理者建项目
第二步方式A:将项目clone到本地
开发人员加入这个项目(权限),将空项目clone到本地,在该项目的基础上直接进行开发。
git clone 项目url
无论使用ssh还是http,都要执行clone命令,IDEA中也有执行clone的界面操作
方式一:命令行
git clone http://项目克隆地址
方式二:IDEA
第二步方式B:本地根据模板创建项目,再关联远程
在本地根据模板创建项目,执行命令git init
初始化为git仓库,再与远程仓库进行关联,将模板生成的代码push到远程仓库。
本地根据模板创建项目
此处勾选了【Create Git repository】,之后就不用使用命令行【git init】来初始化了
勾选一些需要的组件,此处演示仅勾选了Lombok。
此时模板为我们生成了一些文件,但此时,本地仓库没有关联远程仓库。
但此时执行git branch -a是看不到master分支的,原因:
当 git init 初始化一个空的 Git 仓库时,它不会自动创建指向第一次提交的主分支(即 master 分支)。
因此,当你第一次执行 git commit 命令提交代码之后,master 分支才会被创建。此时再执行 git branch -a 就可以看到 master 分支了。
本地仓库关联远程仓库
建立本地仓库和远程仓库关系
git remote add origin http://xxxxxxxxx.git
拉取远程仓库代码
git pull origin master --allow-unrelated-histories
–allow-unrelated-histories,表示允许不相干的两个仓库合并,因为我们之前两个仓库是完全独立的,所以直接是没办法pull下来,需要加上该参数才行
此时能看到远程仓库初始的commit添加了README.md文件。
提交模板生成的代码
总结第二步的方式AB
以A的步骤,手动把模板生成的代码copy到当前项目路径,再进行add、commit、push操作,效果与B一样。
但B的作用主要是将已有的项目(含有一些git提交历史记录)推送到新的空仓库。
3.2 创建环境分支
现有的master对应生产环境,
若有dev环境,就创建对应的dev分支,
若有uat环境,就创建对应的uat分支。
创建分支可使用命令行、IDEA界面、远程仓库管理页面。
3.2.1方式一:在页面创建,fetch到本地
此处下拉可以选择tag(若有的话)。
使用IDEA中的fetch按钮,相当于执行命令【git fetch origin】
可以在本地看到,远程有dev分支。
3.2.2方式二:在本地创建,push到远程仓库
在最新master的位置创建分支,相当于执行命令【git checkout -b uat 版本号】
此时uat分支只在本地存在,远程仓库没有。
所以我们push到远程仓库
此push操作相当于执行命令【git push origin】
可以看到远程仓库也有uat分支了
3.3 创建功能分支
与【3.2 创建环境分支】类似,此时开发人员要开发一个【功能/需求/任务】,步骤如下:
先git pull
,更新整个项目。
基于最新master(或者说是最新发布版本的tag)创建功能分支。功能分支命名举例:feat-xxx
其中“xxx”可以是敏捷相关管理系统里的【需求编号/子需求编号/任务编号】,个人认为尽量以最小单位的任务编号命名,也可以是自定义的需求功能首字母缩写,项目内部自己规定
在此功能分支上进行开发,及时push到远程仓库。
3.4 功能分支合并到dev分支
现状:有任务编号【123】,已基于最新master(或者最新版本的tag)新建功能分支【feat-123】,并将所做修改push到【origin/feat-123】
方式一:开发者自己本地合并
每个开发者自己本地合并,在命令行、IDEA中就可以操作
① 【git pull】(此时用fetch也行)更新整个项目
【pull = fetch + merge】,git执行完fetch之后发现,当前feat-123分支,本地与远程在同一个位置,就没再进行将 origin/feat-123 merge到 本地feat-123 的操作
②切换到最新origin/dev分支,此时本地dev与远程dev在同一个位置。
git checkout -B dev origin/dev
注意此处checkout的是origin/dev,实际上执行的命令是【git checkout -B dev origin/dev】,
-B参数 (force create branch):如果已经存在一个名为new_branch的分支,则使用该参数意味着强制创建分支。例如,git checkout -B new_branch表示新建一个名为new_branch的分支,如果该分支已经存在,则强制覆盖该分支。
由于-B参数,此时我们本地dev分支会跟上最新origin/dev,与其处于同一个位置。
③将功能分支【feat-xxx】merge到dev分支
由于本次feat-123所处的commit与dev分支没有分岔,此时这样merge会使用Fast forward模式,不推荐
Fast forward模式导致:功能分支merge到dev分支时,dev分支直接跟了上来,没有产生新的merge。
此时推荐这样merge:
④将dev分支push到远程origin/dev
方式一补充:个人不建议的方式
切换到dev分支,把远程功能分支(origin/feat-xxx)pull到dev分支。Pull into ‘dev’ Using Merge
由于【pull = fetch + merge】,
此操作会先fetch,获取所有远程分支的位置,再把远程功能分支merge到dev分支。
最后push dev分支
但我个人不建议,因为会出现这个情况:
当远程dev领先于本地dev,此时将远程功能分支(origin/feat-xxx)pull到dev分支,会导致【本地dev分支】与【远程origin/dev】出现分叉,在push时会被驳回,需要多一个merge。
方式二:在页面上提交合并请求
在页面上提交merge请求,将功能分支合并到dev分支。
我们先回到【方式一】操作前的这个状态,本地与远程dev分支都处于【dc733298】这个commit节点。
下面演示如何在页面上提交合并请求
【merge】按钮需要有merge权限的账户才可以操作。
但是如果有冲突的话,还是要回到【3.4 功能分支合并到dev分支/方式一】,在开发工具中进行合并解决冲突更方便。
此时我们在本地pull(fetch也行),就能看到最新远程dev分支了。
冲突
若方式二在页面上功能分支【feat-xxx】合并到【dev】分支时提示冲突,
回到【3.4功能分支合并到dev分支/方式一】中使用本地merge(页面上也能操作解决冲突,但不方便),切换到dev,将功能分支merge到dev,直接进行冲突解决。
3.5 功能分支合并到master
与3.4操作类似,只是【target branch】由dev变为master
3.6 上线后对最新master标记tag,表明本次版本
标记tag详见【4.11 git tag】
4. Git操作
4.1 git checkout
可以切换分支。
创建分支:可以用命令git checkout -b feat-xxx
,可以在远程仓库页面上直接创建再pull到本地
关于git checkout HEAD
,等同于IDEA中直接对某文件rollback
4.2 git status
IDEA中可以直接查看
红色-未被git跟踪
绿色-新增文件
蓝色-修改
在IDEA中操作commit时会帮我们自动add
IDEA中还可以创建changelist把所做的改动加到不同的组里。
4.3 git log
① 命令行查看commit信息
git log --pretty=oneline
查看提交历史
② 命令行查看提交历史路线图
git log --graph --pretty=oneline --abbrev-commit
③ gitlab页面上查看提交历史路线图
项目/Repository/Graph
④ IDEA中查看提交历史路线图
标签颜色含义
黄-HEAD,本项目只关联一个远程仓库时,只会存在一个黄色标签,表示当前处在哪个commit
绿-本地分支
紫-远程分支,会显示【origin/分支名】,origin是默认的远程仓库的名字
⑤ 从log中查找【某文件】里关于【string】这个字符串内容的增删,可精确到具体的commit
git log -S <string> path/to/file
例:
git log -S 'xxxxxxxxx' -- src/main/java/com/xxxxxxxxx.java
4.4 git revert
1.回滚某个commit
git revert commitId
2.回滚某个merge请求,可以在页面上操作,默认会创建一个新的revert-xxx分支,再合并到指定的分支上。
4.5 git reset
回退到上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,可以写成HEAD~100
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是改变HEAD指向的commit,然后顺便把工作区的文件更新了
4种模式,我常用Mixed和Hard(但是hard慎用,会清空本地所有未提交的修改)
git reset --soft commitId
IDEA中使用undo commit也可以达到同样效果(回退到上一个commitId)
4.6 git reflog
用来记录你的每一次命令
这样就可以知道想找的版本号(commit id)
4.7 git rebase
① git rebase
命令把分叉的提交变成直线 – 不推荐使用,分支历史不清晰,且如果使用了强制推送可能会影响别人。
② 合并两个commit – 可以在自己的功能分支合并到dev分支前使用
相关命令笔记:
1.
git rebase -i HEAD~2 -- 参数-i是不需要合并的版本号(commit的hash值)
2.
进入编辑模式后将pick修改成fixup或者squash等关键字。
p,pick 不对该commit做任何处理
r,reward 保留该commit,但是修改提交信息
e,edit 保留该commit,但是rebase时会暂停,允许你修改这个commit
s,squash(保留应用,合并commit描述)保留该commit,但是会将当前commit与上一个commit合并
f,fixup(保留应用,丢弃commit描述)与squash相同,但不会保存当前commit的提交信息
x,exec 执行其他shell命令
d,drop 删除该commit
注意不能将第一条也就是最近的一条commit给pickup或者squash,这样它就找不到之前的commit进行合并,然后就会报出错误
3.
commit message的编辑界面,输入commit描述信息如果遇到错误 执行取消命令
git rebase --abort -- 取消这次rebase
③ rebase onto 最新分支-- 可以在自己的功能分支合并到dev分支前使用,效果类似于“基于最新的master分支重新做一遍已经提交的代码”
4.8 git cherry-pick
能复制一个特定的提交到当前分支
4.9 git remote
远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。
查看本地仓库与远程仓库的关联详情
git remote -v
可以同一个项目关联多个远程库
https://www.liaoxuefeng.com/wiki/896043488029600/1163625339727712
切换远程仓库步骤参考:
git remote -v // 查看本地仓库与远程仓库的关联详情
git remote rm [远程仓库名] // 解除与远程仓库的关联
git remote add [远程仓库名] "[远程仓库地址]" // 将本地仓库与远程仓库关联
4.10 git stash
可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash save 这是本地临时存放起来的未提交的修改
取出时(unstash)
git stash apply stash@{0}
相关命令笔记:
git stash save "save message" // 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
git stash list // 查看stash了哪些存储
git stash show // 显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num}
git stash show -p // 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p
git stash apply // 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},可更改num
git stash pop // 应用某个存储,把存储从存储列表中删除,默认为第一个stash,即stash@{0}可更改num
git stash drop stash@{$num} // 丢弃stash@{$num}存储,从列表中删除这个存储
git stash clear // 删除所有缓存的stash
4.11 git tag
标签
https://www.liaoxuefeng.com/wiki/896043488029600/900788941487552
IDEA中创建tag好像不支持添加说明
在页面上或者用命令行操作,可以创建带有说明的tag。git tag -a v1.4 -m 'version 1.4'
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签
标签是指向commit的死指针,分支是指向commit的活指针
5. 建议的习惯
5.1 commit信息
①commit信息是要写明白的,讲明白这次提交是做了哪些事。
之前某系统有人提交过二十几个commit全写的一样的字,合并代码遇到冲突时很难知道TA某次commit所做修改的目的。
②另外,如果改动较多,建议把不同的步骤做多个commit,不要都写在一个commit里,
不便于别人查看(抄)你修改的代码,自己回顾的时候也不方便
如果出问题,也不便于revert。虽然可以按照单个文件回退那次的修改,但若单个文件中做了多个任务的修改,还是需要查看代码逐行确认。
下图是,我某次commit的内容包含了四种不同内容,此刻我是反例。当然该项目未上线,处于快速开发的阶段,对git使用没有过多要求。
如果未来可能进行【复盘】来向别人分享写过的优秀代码,从每个commit对比文件修改前后的内容也是比较方便的。
③最后,个人习惯,建议每个commit都以【分支的尾缀】开头,比如feat-123分支,我的commit信息会写【123 修改某逻辑】。
还有的项目规定以类似这样的形式开头:feat[123]、feat-123、bugfix[123]、bugfix-123,可以自行规定。
5.2 一个分支不要被多个人使用
多个人都用同一个分支(甚至都用master)有弊端,就是没有利用好git分支管理的优势,就像SVN一样在使用。
另外,共用同一个分支容易push失败,以及pull时merge过来可能有冲突。因为该分支在远程仓库可能有别人push的内容,领先于你本地。
5.3 查看提交人
git中可以查看每一行是谁写的、
git的user.name、user.email都是自己定义的,如果项目没有明确规范要求,不建议用xxx-yyy(yyy是每个人都一样的公共后缀),会显示yyy,大家都是yyy的话,不直观,得去历史记录里看具体的提交人、
5.4 commit和push之前确认一下自己的修改
commit和push之前确认一下自己的修改,以免提交了本不改提交的(比如修改特定的本地配置,是不是导入了包后来没用到等等问题)
可以创建另一个changelist单独管理暂时不需提交的修改。
5.5 不使用Fast forward模式
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
–no-ff
5.6 下班及时push代码
每天下班push,相当于备份保护自己写的代码,没下班时也可以及时push。硬件是不完全可靠的,多个备份多个保障,不要写代码写好长时间(甚至以周以月为单位)一直留在自己本地不push。
哪怕没写完,有些地方编译都不通过,也可以push,因为在自己的分支上且没合并到其他分支,不影响别人。这种情况,第二天再打开继续工作时有两种处理方式:
-
reset(使用–soft模式,IDEA中可使用“undo commit”)回到commit前的状态,继续开发,再commit,再强制push
-
不reset,继续commit最新的开发,再使用rebase合并两个commit为一个
若在家加班换了电脑完成了一部分开发并push,第二天又用回办公室的电脑,可以按如下步骤处理:
-
删除本地功能分支feat-xxx
-
git pull
-
checkout 最新远程feat-xxx分支
补充:强制Push(git push -f
)
5.7 定期删除功能分支
有的项目要求功能分支永不删除,
但我认为上线后功能分支留着没用,若保留,日积月累,分支数量将无穷增长,翻找分支变得不方便。廖雪峰官网所介绍的流程也是要删掉功能分支的。
且如果没使用Fast forward模式,merge历史记录里也是能搜到这个分支名的,若像我的习惯在commit信息以【分支尾缀】开头,更是能搜到了,所以没必要保留已上线的功能分支。
也可以每年清理一次太旧的功能分支。
附
Git教程 - 廖雪峰的官方网站
相关文章:
Git分享-规范/建议/技巧
1. Git多人协作开发流程图 1.1 processOn默认的模板 1.2 改造之后 https://www.processon.com/view/link/64ccaf56a433c931b2f9428a 访问密码:512I ① 总流程图 ② feat分支(功能/需求 分支)流程 ③ bugfix分支(紧急补丁分支&…...
vue3文件下载功能
定义方法: utils.js /**** param url 目标下载接口* param query 查询参数* param fileName 文件名称* returns {*}*/ export function downBlobFile(url: any, query: any, fileName: string) {return request({//url: url,method: get,responseType: blob,param…...
Python调用文心一言的API
最近申请了文心一言的key,然后尝试调用了一下文心一言,这里使用一个简单的方式来调用文心一言: pip install paddle-pipelinesfrom pipelines.nodes import ErnieBotapi_key "your apply key" secret_key "your apply secr…...
【计算机网络八股】计算机网络(一)
目录 计算机网络的各层协议及作用?TCP和UDP的区别?UDP 和 TCP 对应的应用场景是什么?详细介绍一下 TCP 的三次握手机制?为什么需要三次握手,而不是两次?为什么要三次握手,而不是四次?…...
记录一次arcgis engine开发版本引入问题
之前基于arcigs 10.1vs2013开发的程序,现在拿出来要改,但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本,都报错 (具体版本对应可以看这:ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…...
2023年Java毕业设计怎样选题,有哪些注意事项,300道Java毕业设计题目
文章目录 一、确定个人兴趣和技能二、考虑实际应用价值三、注重创新和独特性四、合理规划时间和资源五、注重实践和测试Java 毕业设计题目参考第一部分第二部分 小结 随着计算机技术的不断发展,Java编程语言已经成为了众多大学计算机专业学生必修的一门课程。而Java…...
算法-滑动窗口-串联所有单词的子串
算法-滑动窗口-串联所有单词的子串 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/substring-with-concatenation-of-all-words/ 1.2 题目描述 2 滑动窗口Hash表 2.1 解题思路 构建一个大小为串联子串的总长的滑动窗口为每个words中的子串创建一个hash表, <子…...
2023年7月京东美妆护肤品小样行业数据分析(京东数据挖掘)
如今,消费者更加谨慎,消费决策也更加理性。在这一消费环境下,美妆护肤市场中,面对动辄几百上千的化妆品,小样或体验装无疑能够降低消费者的试错成本。由此,这门生意也一直备受关注。 并且,小样…...
记录Taro巨坑,找不到sass类型定义文件
问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了,没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...
CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题
CS1988|C#无法在异步方法中使用ref,in,out类型的参数 🌀|场景: BlazorServer的场景中推荐使用异步方法,使用ref,out,in为参数前缀则报错CS1988 原因如下: ref parameters are not supported in async methods because the method may not h…...
ubuntu开机失败——ACPI Error
开机循环进入GNU GRUB 或者 黑屏 1.acpioff 解决办法 1)先用下面方法进入系统 2)更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图: 解决办法 1)先用下面方法进入系统 在GUN GRUB界面,选择ubun…...
搭建开发环境-操作系统篇(一键搭建开发环境)
概述 所谓工欲善其事必先利其器,搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说,很多东西都已经习惯成自然,也就没有刻意和初学者说。但对于很多初学者,却是受益良多。 这个系列,先从操作系统开始…...
人工智能AI绘画接入使用文档
人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...
如何使用PyQt进行文件操作
PyQt是一个非常强大的Python GUI库,它可以帮助我们创建漂亮的跨平台应用程序。不过,在你开始使用PyQt进行文件操作之前,我想提醒你,这并不是在操作文件系统,而是在操作文件和文件夹。 首先,我们要导入PyQt…...
阿里云CDN加速器基本概念与购买开通
文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME? 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档:https://help.aliyun.com/product/…...
2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C
2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...
[C++ 网络协议编程] 域名及网络地址
1. DNS服务器 DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。 我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地…...
Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?
文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 …...
使用U盘重装Windows10系统详细步骤及配图【官方纯净版】
文章目录 1.制作启动盘1.1准备U盘及一台电脑1.2下载win10安装包 2.安装操作系统2.1插入系统安装盘2.2设置启动盘为第一启动项2.3开始安装操作系统 3.安装成功后进入图形界面3.1启动问题3.2驱动问题3.3调出"控制面板"3.4给磁盘分区 4.win10激活 前天下午不知道怎么想的…...
数据结构之——(手撕)顺序表
本章会介绍的知识点如下图: 1: 顺序表的概念:顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构,通常我们使用数组来表示,对数组进行增删查改。 顺序表的结构:逻辑结构与物理结构都是内存中一块…...
冠达管理:非银金融是什么?
非银金融(Non-banking Financial Institutions,简称非银)是指除了传统的银行以外的其他金融机构。与银行不同的是,非银金融机构没有颁发钱银的权利,但在金融市场中发挥着重要的效果。在全球范围内,非银金融…...
go 结构体
定义结构体 package mainimport "fmt"type Person struct {age, id intname, email string }func main() {var p Personfmt.Printf("p: %v\n", p)p.age 100p.name "jaja"fmt.Printf("p.name: %v\n", p.name)// 匿名结构体var P…...
C++学习笔记---- 引用
1、作用 给变量起别名 基本语法:数据类型 &别名 原名 示例: #include <iostream> using namespace std;int main() {int a 1;int &b a;cout << "a " << a << endl;cout << "b " <…...
2023国赛数学建模思路 - 案例:感知机原理剖析及实现
文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其…...
Cesium加载Supermap的wmts服务
最近使用cesium 加载supermap的wmts 服务,多次遇到加载异常与白页面问题,纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…...
C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线
目录 1.C/C在大数据时代的应用 1.1:C/C数据处理 1.2:C/C数据库 1.3:C/C图像处理和计算机视觉 1.3.1:导读 2.C/C程序员未来的发展路线 2.1:图导 1.C/C在大数据时代的应用 C/C在大数据时代中仍然是一种被广泛应用的编…...
linux RabbitMQ-3.8.5 安装
软件版本操作系统CentOS Linux release 7.9.2009erlangerlang-23.0.2-1.el7.x86_64rabbitMQrabbitmq-server-3.8.5-1.el7 RabbitMQ的安装首先需要安装Erlang,因为它是基于Erlang的VM运行的。 RabbitMQ安装需要依赖:socat和logrotate,logrotate操作系统已经存在了&…...
单链表Single-LinkList
0、节点结构体定义 typedef struct LNode{int data;struct LNode *next;} Lnode, *LinkList; 1、初始化 bool InitList(LinkList &L) //初始化 {L new LNode;if(!L){return false;}L->next NULL;return true; } 2、创建 (1)头插法 void Cr…...
AI嵌入式全景:各厂商、系列和开发工具的综合概览
要看几个方面 1 算力: 2 支持何种模型: 3 是否支持可视化的窗口系统: 一般而言各个平台均采用linux操作系统,官方提供对应SDK,安装好后可使用硬件加速资源。 而且如果要使用其硬件加速,一般都要完成模型转…...
mysql Left Join on条件 where条件的用法区别
数据准备 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id; 执行结果 SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id and t2.localbeijing; SELECT t1.id,t1.name,t2.local FROM t1 LEFT JOIN t2 ON t1.idt2.id where t2.localbeijing…...
html+jsp个人网站模板/地推扫码平台
没驱动。。。你的jar包没导导了啊 哭死CLASSPATH.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:/home/gongsheng/mysql.jarcom.mysql.jdbc.Driver 你在包里找这个类,找的到不?应该导在你的pro下的lib中,再引用一下拉看了 jar包 里面有…...
网站中的二维码设计/如何建一个自己的网站
Javascript是一种弱类型语言,JavaScript的变量类型由它的值来决定。与代数一样,JavaScript 变量可用于存放值(比如 x5)和表达式(比如 zxy)。JavaScript定义变量的方法:定义变量需要用关键字 var ,可以在声明变量时对其赋值&#…...
西安机械加工网站建设/厦门人才网最新招聘信息网
在Vue.js中,每一个vue文件都是一个组件,在.vue文件中可以将模板,脚本,样式写在一起,便于组织整个组件。在使用template,script时,编写css样式时,都进行的特别顺利,唯独当…...
苏州建设网站哪家好/惠州百度关键词优化
第一次在别人指导下完成STM32 MCU程序烧写,连夜记录下,以免下次忘了 1)安装Keil MDK511 2)安装ST Link下载器驱动,重启PC 3)打开Keil v5,加载工程文件 4)load pack(Keil…...
龙采哈尔滨建站公司/sem技术培训
目录在日常开发中,对数据进行序列化和反序列化,是常备的操作。而在Python标准库中提供了json模块对JSON数据的处理功能。什么是json?JSON(JavaScript Object Notation)是一种使用广泛的轻量数据格式,相对于XML而言更简单,也易于阅…...
什么软件能把做的网站上传/关键词搜索挖掘爱网站
新京报讯(记者 阎侠)3月13日,深交所对宝莱特下发关注函。事起于3月11日,宝莱特在深交所互动易平台表示,公司陆续接到来自疫情国家的订单,其中意大利一个订单就超过1000台高端监护仪。近期,宝莱特股价涨幅较大。因此&am…...