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

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,第二天又用回办公室的电脑,可以按如下步骤处理:

  1. 删除本地功能分支feat-xxx

  2. git pull

  3. 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 访问密码&#xff1a;512I ① 总流程图 ② feat分支&#xff08;功能/需求 分支&#xff09;流程 ③ bugfix分支&#xff08;紧急补丁分支&…...

vue3文件下载功能

定义方法&#xff1a; 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&#xff0c;然后尝试调用了一下文心一言&#xff0c;这里使用一个简单的方式来调用文心一言&#xff1a; pip install paddle-pipelinesfrom pipelines.nodes import ErnieBotapi_key "your apply key" secret_key "your apply secr…...

【计算机网络八股】计算机网络(一)

目录 计算机网络的各层协议及作用&#xff1f;TCP和UDP的区别&#xff1f;UDP 和 TCP 对应的应用场景是什么&#xff1f;详细介绍一下 TCP 的三次握手机制&#xff1f;为什么需要三次握手&#xff0c;而不是两次&#xff1f;为什么要三次握手&#xff0c;而不是四次&#xff1f…...

记录一次arcgis engine开发版本引入问题

之前基于arcigs 10.1vs2013开发的程序&#xff0c;现在拿出来要改&#xff0c;但是目前版本是arcgis10.7vs2017/vs2019,打开后无论如何替换引用版本&#xff0c;都报错 &#xff08;具体版本对应可以看这&#xff1a;ArcGIS Engine 与 Visual Studio 版本对照表_vs2019对应啥版…...

2023年Java毕业设计怎样选题,有哪些注意事项,300道Java毕业设计题目

文章目录 一、确定个人兴趣和技能二、考虑实际应用价值三、注重创新和独特性四、合理规划时间和资源五、注重实践和测试Java 毕业设计题目参考第一部分第二部分 小结 随着计算机技术的不断发展&#xff0c;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月京东美妆护肤品小样行业数据分析(京东数据挖掘)

如今&#xff0c;消费者更加谨慎&#xff0c;消费决策也更加理性。在这一消费环境下&#xff0c;美妆护肤市场中&#xff0c;面对动辄几百上千的化妆品&#xff0c;小样或体验装无疑能够降低消费者的试错成本。由此&#xff0c;这门生意也一直备受关注。 并且&#xff0c;小样…...

记录Taro巨坑,找不到sass类型定义文件

问题 taronutuisassts项目里tsconfig.json一直报红报错。 找不到“sass”的类型定义文件。 程序包含该文件是因为: 隐式类型库 “sass” 的入口点 其实正常人想的肯定是装上 types/sass试试。开始我试过了&#xff0c;没用。删了依赖重装也没用。后面在issue中找到答案了 解决…...

CS1988|C#无法在异步方法中使用ref,in,out类型的参数的问题

CS1988|C#无法在异步方法中使用ref,in,out类型的参数 &#x1f300;|场景&#xff1a; BlazorServer的场景中推荐使用异步方法&#xff0c;使用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&#xff09;先用下面方法进入系统 2&#xff09;更改grub ref 开机循环进入GNU GRUB 或者 黑屏 有提示ACPI Error错误如图&#xff1a; 解决办法 1&#xff09;先用下面方法进入系统 在GUN GRUB界面&#xff0c;选择ubun…...

搭建开发环境-操作系统篇(一键搭建开发环境)

概述 所谓工欲善其事必先利其器&#xff0c;搭环境往往是开发过程中卡出很多初学者的拦路虎。 对于很多老鸟来说&#xff0c;很多东西都已经习惯成自然&#xff0c;也就没有刻意和初学者说。但对于很多初学者&#xff0c;却是受益良多。 这个系列&#xff0c;先从操作系统开始…...

人工智能AI绘画接入使用文档

人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…...

如何使用PyQt进行文件操作

PyQt是一个非常强大的Python GUI库&#xff0c;它可以帮助我们创建漂亮的跨平台应用程序。不过&#xff0c;在你开始使用PyQt进行文件操作之前&#xff0c;我想提醒你&#xff0c;这并不是在操作文件系统&#xff0c;而是在操作文件和文件夹。 首先&#xff0c;我们要导入PyQt…...

阿里云CDN加速器基本概念与购买开通

文章目录 1.CDN加速器的基本概念1.1.CDN加速器基本介绍1.2.网站引入CDN加速器的架构图1.3.CDN加速器的工作原理1.4.引入CDN后域名解析变成了CNAME&#xff1f; 2.开通阿里云CDN加速服务 1.CDN加速器的基本概念 CDN加速器官方文档&#xff1a;https://help.aliyun.com/product/…...

2023河南萌新联赛第(六)场:河南理工大学-F 爱睡大觉的小C

2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C https://ac.nowcoder.com/acm/contest/63602/F 文章目录 2023河南萌新联赛第&#xff08;六&#xff09;场&#xff1a;河南理工大学-F 爱睡大觉的小C题意解题思路 题意 新学期的概…...

[C++ 网络协议编程] 域名及网络地址

1. DNS服务器 DNS&#xff08;Domain Name System&#xff09;&#xff1a;是对IP地址和域名&#xff08;如:www.baidu.com等&#xff09;进行相互转换的系统&#xff0c;其核心是DNS服务器。 我们输入的www.baidu.com是域名&#xff0c;是一种虚拟地址&#xff0c;而非实际地…...

Java【HTTP】什么是 Cookie 和 Session? 如何理解这两种机制的区别和作用?

文章目录 前言一、Cookie1, 什么是 Cookie2, Cookie 从哪里来3, Cookie 到哪里去4, Cookie 有什么用 二、Session1, 什么是 Session2, 理解 Session 三、Cookie 和 Session 的区别总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: &#x1f4d5; …...

使用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激活 前天下午不知道怎么想的…...

数据结构之——(手撕)顺序表

本章会介绍的知识点如下图&#xff1a; 1&#xff1a; 顺序表的概念&#xff1a;顺序表是用一段物理地址连续的存储单元依次存储数据的线性结构&#xff0c;通常我们使用数组来表示&#xff0c;对数组进行增删查改。 顺序表的结构&#xff1a;逻辑结构与物理结构都是内存中一块…...

冠达管理:非银金融是什么?

非银金融&#xff08;Non-banking Financial Institutions&#xff0c;简称非银&#xff09;是指除了传统的银行以外的其他金融机构。与银行不同的是&#xff0c;非银金融机构没有颁发钱银的权利&#xff0c;但在金融市场中发挥着重要的效果。在全球范围内&#xff0c;非银金融…...

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、作用 给变量起别名 基本语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; #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 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…...

Cesium加载Supermap的wmts服务

最近使用cesium 加载supermap的wmts 服务&#xff0c;多次遇到加载异常与白页面问题&#xff0c;纠结好久最后才搞定[特此记录] 1、首先找到方法加载wmts 的api 文档 官方提示使用WebMapTileServiceImageryProvider加载wmts 2、然后编辑加载代码 //1.新建ImageryProviderlet…...

C/C++:C/C++在大数据时代的应用,以及C/C++程序员未来的发展路线

目录 1.C/C在大数据时代的应用 1.1&#xff1a;C/C数据处理 1.2&#xff1a;C/C数据库 1.3&#xff1a;C/C图像处理和计算机视觉 1.3.1&#xff1a;导读 2.C/C程序员未来的发展路线 2.1&#xff1a;图导 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&#xff0c;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、创建 &#xff08;1&#xff09;头插法 void Cr…...

AI嵌入式全景:各厂商、系列和开发工具的综合概览

要看几个方面 1 算力&#xff1a; 2 支持何种模型&#xff1a; 3 是否支持可视化的窗口系统&#xff1a; 一般而言各个平台均采用linux操作系统&#xff0c;官方提供对应SDK&#xff0c;安装好后可使用硬件加速资源。 而且如果要使用其硬件加速&#xff0c;一般都要完成模型转…...

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…...

Redis中的淘汰策略

前言 本文主要说明在Redis面临key过期和内存不足的情况时&#xff0c;可以采用什么策略进行解决问题。 Redis中是如何应对过期数据的 正如我们知道的Redis是基于内存的、单线程的一个中间件&#xff0c;在面对过期数据的时候&#xff0c;Redis并不会去直接把它从内存中进行剔…...

MyBatis进阶:掌握MyBatis动态SQL与模糊查询、结果映射,让你在面试中脱颖而出!!

目录 一、引言 二、MyBatis动态SQL 2.1.if元素使用 2.2.foreach元素使用 三、MyBatis模糊查询 ①使用#{字段名} ②使用${字段名} ③使用concat{%,#{字段名},%} 总结 四、MyBatis结果映射 4.1.案例演示 4.1.1.resultType进行结果映射 4.1.2.resultMap进行结果映射 …...

C++ 写入txt文件内容并追加内容

咨询通义千问的“C 写入txt文件内容并追加内容”&#xff1a; 可以使用ofstream类来写入txt文件内容。若想追加内容&#xff0c;可以使用ios::app标志来创建输出流对象&#xff0c;然后在写入时将其设置为ios::app。以下是一个示例代码&#xff1a; #include <iostream>…...

Leetcode---359周赛

题目列表 2828. 判别首字母缩略词 2829. k-avoiding 数组的最小总和 2830. 销售利润最大化 2831. 找出最长等值子数组 一、判断首字母缩略词 纯模拟&#xff0c;代码如下 class Solution { public:bool isAcronym(vector<string>& words, string s) {string tmp…...

Keras三种主流模型构建方式:序列模型、函数模型、子类模型开发实践,以真实烟雾识别场景数据为例

Keras和PyTorch是两个常用的深度学习框架&#xff0c;它们都提供了用于构建和训练神经网络的高级API。 Keras: Keras是一个高级神经网络API&#xff0c;可以在多个底层深度学习框架上运行&#xff0c;如TensorFlow和CNTK。以下是Keras的特点和优点&#xff1a; 优点&#xf…...

objective-v 获取iPhone系统当前时间字符串适配12小时制和24小时制

我们最开始获取系统当前时间&#xff0c;如下&#xff0c;这种方式存在一个问题&#xff0c;当iPhone关闭了24小时制时&#xff0c;获取的时间格式是&#xff1a;iPhone11上&#xff1a;20230822下午210568760&#xff1b;iPhone7 plus上&#xff1a;2023082240043851 PM&#…...

并查集及其简单应用

文章目录 一.并查集二.并查集的实现三.并查集的基本应用 一.并查集 并查集的逻辑结构:由多颗不相连通的多叉树构成的森林(一个这样的多叉树就是森林的一个连通分量) 并查集的元素(树节点)用0~9的整数表示,并查集可以表示如下: 并查集的物理存储结构:并查集一般采用顺序结构实…...

基于web的服装商城系统java网上购物商店jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于web的服装商城系统 系统有1权限&#xff1a;前台…...

.NET Core发布到IIS

项目介绍 1、开发工具Visual Studio 2017&#xff0c;语言C#&#xff0c;SQL SERVER&#xff0c;WIN10 2、本地IIS&#xff0c;手机上或其他用户在和本地在同一个局域网内访问,同时要把防火墙关掉 3、IIS全名Internet Information Services&#xff0c;用来发布网站 先决条件 安…...

Spring的基本概念

前言 Spring 究竟是什么&#xff1f;其实Spring简单来说就是一个包含众多工具方法的IOC容器。 那么什么是IOC呢&#xff1f; IoC Inversion of Control 翻译成中⽂是“控制反转”的意思. 既然Spring 是⼀个IoC&#xff08;控制反转&#xff09;容器&#xff0c;重点还在“容…...

设计模式之原型模式

文章目录 一、介绍二、实现步骤三、案例四、应用五、细胞分裂六、改造细胞分裂逻辑七、总结 一、介绍 原型模式属于创建型设计模式&#xff0c;用于创建重复的对象&#xff0c;且同时又保证了性能。 该设计模式的好处是将对象的创建与调用方分离。 其目的就是**根据一个对象…...

正则表达式在网页处理中的应用四则

正则表达式在网页处理中的应用四则 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的方法。几乎所有高级语言都提供了对正则表达式的支持,或者提供了现成的代码库供调用。本文以ASP环境中常见的处理任务为例,介绍正则表达式的应用技巧。 一、检验密…...

ping使用方法

文章目录 1、Ping的基础知识2、Ping命令详解3、怎样使用Ping这命令来测试网络连通&#xff1f;4、如何用Ping命令来判断一条链路好坏&#xff1f;5、对Ping后返回信息的分析1.Request timed out2.Destination host Unreachable 1、Ping的基础知识 ping命令相信大家已经再熟悉不…...

“心理健康人工智能产学研创新联盟”揭牌成立|深兰科技

8月14日上午&#xff0c;“2023树洞救援年会”在上海举行&#xff0c;会上举行了“心理健康人工智能产学研创新联盟”的签约和揭牌仪式。“树洞行动救援团”创始人深兰科技科学院智能科学首席科学家、荷兰阿姆斯特丹自由大学人工智能系终身教授黄智生&#xff0c;深兰科技集团创…...

FastDFS+Nginx - 本地搭建文件服务器同时实现在外远程访问「端口映射」

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…...

Mybatis-动态sql和分页

目录 一.什么是Mybatis动态分页 二.mybatis中的动态SQL 在BookMaaper.xml中写sql BookMapper BookBiz接口类 BookBizImpl实现接口类 demo测试类 ​编辑 测试结果 三.mybatis中的模糊查询 mybatis中的#与$有是什么区别 在BookMapper.xml里面建立三个模糊查询 ​编辑 …...

基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数…...

数学建模及数据分析 || 4. 深度学习应用案例分享

PyTorch 深度学习全连接网络分类 文章目录 PyTorch 深度学习全连接网络分类1. 非线性二分类2. 泰坦尼克号数据分类2.1 数据的准备工作2.2 全连接网络的搭建2.3 结果的可视化 1. 非线性二分类 import sklearn.datasets #数据集 import numpy as np import matplotlib.pyplot as…...

数据分析15——office中的Excel基础技术汇总

0、前言&#xff1a; 这部分总结就是总结每个基础技术的定义&#xff0c;在了解基础技术名称和定义后&#xff0c;方便对相关技术进行检索学习。笔记不会详细到所有操作都说明&#xff0c;但会把基础操作的名称及作用说明&#xff0c;可自行检索。本文对于大部分读者有以下作用…...

C语言好题解析(四)

目录 选择题一选择题二选择题三选择题四选择题五编程题一 选择题一 已知函数的原型是&#xff1a; int fun(char b[10], int *a); 设定义&#xff1a; char c[10];int d; &#xff0c;正确的调用语句是&#xff08; &#xff09; A: fun(c,&d); B: fun(c,d); C: fun(&…...