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

Linux-Git

一、总论

1.1 写在前面的话

​ 这已经是我第三遍学Git相关操作了,可以说这个玩意是真的狗,因为确实用不到,不知道下个学期会不会用到,直到现在我刚刚学完,处于知识水平的巅峰,知道Git的具体功能,我也觉得真没啥必要学。我一开始学Git,是因为以为这个跟Github有啥关系似的,其实对于个人来说,使用Github完全没有必要学习Git。

​ 这就引出了Git最重要的一个认识了,就是Git的基本上所有的功能都是为了团队协作开发的,而不是所谓的版本控制(当然也可能是,反正我理解的不是)。Github上面那些看似唬人的branch,tag,respository,ssh key,token之类的概念,其实都是为了团队协作设计的,而不是为了版本控制,或者其他啥目的,简而言之,就是与我现在的需求无关。

​ 对于Git的学习,大致分为两个部分,即版本控制团队协作。之后会详细介绍。

​ 所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。所以我当时搭博客的时候,希望能够回退到没有安装某个插件的版本,应该是不可能了,不过我应该可以控制配置文件的版本。

1.2 一个比喻

​ 为了理解三个概念,即工作目录,暂存区和版本库,我们进行一个比喻。我们在工作台上工作,当我们做出一个东西的时候,就可以考虑把他放到一辆货车上。我又做了一个东西,做完以后把他扔货车上了,但是做别的时候突然觉得不行,我得重新做,于是我就把第二个东西从货车上取下来,重新做。当我们做了一系列东西以后,我们的货车相当于就装载了我们一系列的东西,我们看了看,觉得没啥毛病,就开着货车把这一个系列的东西都放到仓库里去了。为啥要放到仓库里,是因为我们恋旧,保不齐哪天就想把之前的东西拿出来看看呢。

​ 在这个比喻里,工作台就相当于我们的工作目录,货车就相当于我们的暂存区,仓库库就相当于我们的版本库。

​ 我一开始学的时候,觉得暂存区贼没有,因为反正版本库可以记录,那么为什么还得要个中间层在这里碍事,这是因为版本是一个很大的概念,修改一份代码,一般不值当作为一个版本,就好像没人做一个东西,就风尘仆仆地让仓库里去,而是应该攒一堆东西一起放入仓库。而暂存区就是提供这样一个攒东西的容器。相当于一个小而精的版本库,虽然只能存储一个版本,但是可以一个一个文件的取回。

​ 在 git 中,有一组名词叫做检入(checkin)检出(checkout),所谓的检入,就是把工作台上的东西放到货车上,或者把货车上的的东西放到仓库中的过程,而检出与之相反,是把货车上的一个文件取到工作台上,或者把仓库里一系列东西取到工作台上的过程。

1.3 版本库管理

​ 最难理解的就是这个,我花了很久才明白这是一个什么样子的结构。我们看看我们的需求是什么,我觉得版本控制,就是在我们的工作进行到了一定程度以后(比如说实现了某个功能以后),我们存一个档(有一说一,我觉得存档这个词比快照更加方便理解),这样之后的工作的时候,哪怕搞砸了,还是能够恢复的,就跟过BOSS前存个档,这样就随便浪一样。

​ 那么其实就暴露了一个问题,就是对于存档的管理问题,我们在游戏中,一般是有存档限制的,比如只能存五个档,存多了就覆盖原来的存档了。但是想想也知道,我们当然不希望自己做版本控制的时候,也有数量限制,当然实现一个无限制的版本控制,肯定不难啊。我们假设已经实现了,那么怎么管理呢?面对很多的版本,怎么去检索出自己想要的版本呢?如果用一个数组去存版本,检索起来不会容易的,比如我们在开发的时候,希望维持一个既有的稳定版本的同时,又可以有一个分支快速开发,那么也就是说,需要标记这个稳定版本,又是如何标记的呢?这就是一个问题。还有一个问题,就是我们有的时候是不希望存档是完全覆盖的,就比如我打游戏的时候,虽然最后死在了BOSS,我前期打小怪的经验还是希望保留的,当然一般游戏如果是存档的话,那就是直接覆盖了。如果我们进行版本控制的时候,可以挑选两个存档的长处,进行融合,那么显然是很好的功能,这个功能又如何实现呢?

​ 那么针对上面的三个问题(无限存档,查找存档,融合存档),git 给出了自己的方案,他用了一个有向图结构来存储版本库,而且采用了指针来进行版本的查找,一张比较标准的版本库的数据结构就是下面这样

在这里插入图片描述

​ 里面的一个个圆圈就是一个个存档,也就是一个个版本;里面的标签,也就是指针;版本之间会用黑色的箭头相连。我们来解释一下是啥意思。无限存储面临的一个问题是显然是不能每个版本就把所有内容全都复制一遍,我做过一个项目,一个项目就 1 个G,这要是一个256G 的硬盘,顶多存档 256 次。显然是不能满足需求的。可是如果在版本之间建立逻辑关系,那么就不一样了,相当于我们记录的是版本间变化,而不是一个独立的版本。这样说其实不准确,git 采用的是,如果版本中的一个文件没变化,就记录上一个版本,如果有变化,就记录这个版本,如图

在这里插入图片描述

为了实现前一个版本的概念,我们用了黑色箭头来指明这种逻辑关系。

​ 那种标签一样的东西可以帮助我们快速查找特定版本,比如说我们想要 C3 版本了,那么只需要说检出 main 就好了。在诸多标签中,有一个标签最重要,就是我们的 HEAD ,我们可以说,我们只能操纵HEAD和HEAD指向的标签,而不能操作其他标签

​ 此外,还需要强调的是,这只是 git 的版本库的内部数据结构,而不是他给用户的抽象结构,他的抽象结构更像是这样在这里插入图片描述

分支的概念被引入,版本被串联成了不同的分支,这会使版本的管理更加容易理解,因为我们相当于对版本进行了一个在不同分支上的分类。所谓分支,就是同名可变指针的移动路径。

​ 之前我老觉得每一条分支就是一个“分支”,这句废话的意思是,就像上面的图一样,比如说 Develop 是一条分支(橙色),那么它就对应的是由橙色的版本库连接起来的东西,其实是不是的,由版本库做节点的树结构(因为合并操作的存在,其实不是严格的树结构)是存在的,但是一个分支并不代表一个路径(也就是一串相连的节点们),而只是一个指针,指向了具体的一个节点。具体图景如下:

在这里插入图片描述

​ 从图中可以看到,尽管main应该是个“分支”,但它其实就是个指针。指向了某个节点而已。

1.4 Github

​ 对于如何使用Github,其实我觉得就当成网盘那样使就可以了,可以自己将各种资料上传到网上,也可以从网上下载各种资源,可能跟网盘不太一样就是有搜索功能,还有提问功能吧,如果不涉及团队协作,那么理解到这个层次,我绝对对我自己是够用了。其唯一与网盘不同的是,对于删除操作似乎不太方便,我没有细致研究,不敢妄下断语,似乎只用网页端是没有办法完成删除操作的。


二、建库

2.1 建库方式

​ 一共有两种建库方式,一种是直接在本地建库,在所处的文件夹下输入以下代码,就可以完成建库,建立的库文件夹就是所处文件夹。

git init

​ 然后这样的仓库需要通过下面这条命令与远程仓库进行关联:

git remote add origin https://github.com/Thysrael/仓库名

​ 需要注意,origin也只是一个名字,我们用它来指代关联的远程仓库。

​ 还有一种是通过clone Github上的库进行建库,也就是在Github里面建好了库,然后在clone到本地,输入以下命令,建立的库会以文件夹的形式出现在Git bash所在的目录,换句话说,git bash所在的目录不是库,而是其中的一个子文件夹是,这是与前一种方法不同的地方。这个子文件夹的名字就是github的仓库名。

​ 此外需要强调的是,clone下来的仓库拥有所有分支,可能只是不显示,但是是可以进行切换的。

git clone url

​ 可能是我学业不精,我还是觉得第二种方法更好,是因为第一种方法建立的分支叫做master,而github默认的分支是main,按照理论来讲,可能可以由本地不同名的分支向github的分支提交,但是我捣鼓了很久,都发现只能向同名的分支提交更新,所以第一种方法就很废物,因为它会在远端产生一个新的分支master,而过去的main分支则没有更新。

2.2 .gitignore

​ 建完库以后第一件事情要做的就是先把 .gitignore 文件写了,这个文件的作用是当执行 git add . 操作的时候,可以把这个文件里列出的内容屏蔽掉(也就是并不追踪这些文件)。具体写法如下

### Example user template template
### Example user template# IntelliJ project files
.idea
*.iml
*.txt
out
gen

举例:

在这里插入图片描述

此时我有两个文件,然后我的 .gitignore 文件写法如下

在这里插入图片描述

也就是会忽略所有的 .zyqs 文件,我们进行一个 git add . 操作

在这里插入图片描述

可以看到,b.zyqs 文件并没有被提交到暂存区。


三、暂存区的使用

3.1 直观理解

​ 之前我一直忽略了这个方面,是因为我平时就直接

git add .

​ 类似于我先把一个版本里所有东西都做好了,然后直接进行一次装车,然后开着车就把所有东西都运仓库里去了。但是这是因为当时比较年轻啊,当我开始做学校布置的作业的时候,一个仓库里有四道题,我做完第一二三题,想着,回头一起交,就这么先撂这了,开始做第四道题,结果一不小心,把前三道题都删了,呜呜呜,麻了。但是其实有两种预防手段,一种是我交三个版本,但是这也不合逻辑啊,我的第一个版本只能获得四分之一的分数(只做了一道题),我认为每个版本都应该是具有满分的可能性的,就跟每个项目版本都具有可运行的可能性一样。所以应该选择另一个手段,也就是完成一道题,就把一道题移到暂存区,这样就可以起一个比较便捷的存档作用。

3.2 原理

只是工作原理,有下面这张图

在这里插入图片描述

所谓 stage 就是已经提交到暂存区了。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

​ 这些状态都可以用下面的命令查询

git status

​ 这种命令输出的信息太乱了,可以用下面的命令完善

git status -s

在这里插入图片描述

​ 其中 ? 表示未被追踪,M 表示被修改,A 表示是新增文件。左侧那一列是暂存区相对于版本库前一版,可以看出,a.txt 在暂存区中是相对于版本库是修改过的,b.txt 是相对于前一个版本库新增的,而 c.txt 是未被追踪的 。右侧的一列是工作目录相对于暂存区的,可以看出 a.txt 在工作目录中是与暂存区相同的,b.txt 相对于暂存区是修改过的,而 c.txt 是未被追踪的 。

3.3 命令

我们用这条命令可以把某些文件加入暂存区

git add <filename>

关于恢复,其实有两种操作

一种这样

git restore <filename>

另一种是这样

git checkout -- filename

据说 restore 可以应用的范围更广,但是我做了好多实验,没发现它俩有啥区别

如果想要将暂存区的记录撤销,也有两种方法,

第一种会让暂存区的操作回归到修改状态

git restore --staged <filename>

第二种会让暂存区的文件,直接变成未追踪状态

git rm --cached <filename>

具体效果如下图,其中对 a.txt 使用的是第一条命令,对 b.txt 使用的是第二条命令。

在这里插入图片描述

在这里插入图片描述


四、版本控制

4.1 提交版本

​ 我们一般是整个文件夹中的内容一起上传,也就是下面这条指令

git add .

​ 当我们把需要用的文件交到了暂存区,就可以用下面这条指令提交到版本库

git commit -m "注释"

​ 里面的 -m 就是为了添加注释,注释相当重要。

​ 如果写好了 .gitignore 那么,其实可以将 commitadd 命令进行一个合并

git commit -a -m "注释"

​ 那么为什么要设置一个暂存区呢?我个人理解是由本地目录向暂存区提交的时候是可以一件一件的提交的,那么就存在新版本中还有与老版本一样的文件,这时候,如果没有提交,那么就用老版本文件代替,暂存区提供了一个全是新文件的地方,让我们可以看清楚我们的修改。只不过我们习惯于全部提交,所以这个功能就很鸡肋了。

4.2 版本查看

​ 我们还可以用下面这条指令看我们的提交版本记录

git log

​ 但是只有 git log 会显得比较单调乏味,但是如果用的是这条命令,会显得好看很多(只是好看)

git log --graph

在这里插入图片描述

git log 只能看当前版本所在分支,并且位于当前版本之前的版本记录,所以我更习惯下面这条指令,提供的信息更多

git reflog

4.3 版本控制

​ 有了 1.3 的讲解,其实对于分支的理解可以更深一些,其实分支名不过是一个指针,指向了具体的版本库。当然,众多指针中有一个比较特殊的,就是 HEAD 指针。我现在对它的理解是,我们大部分的操作都是针对与 HEAD 指针而言的。HEAD就是当前的意思。

​ 所谓的 checkout 其实就是改变 HEAD 的指向,使工作目录变成 HEAD 指向的版本。那么其实 HEAD 有两种指向,一种是指向具体的版本库,一种是指向分支(也就是 HEAD 指针指向了一个分支指针)。当指向分支的时候,呈现这种形式

在这里插入图片描述

​ 当指向具体的版本库的时候,呈现这种形式:

在这里插入图片描述
此时 HEAD 指向C1版本库(也被称为 HEAD 分离状态)。

​ 如果想要 HEAD 重新指向一个分支,可以使用命令

git checkout <branch-name>

​ 如果想让某个分支强制指向 HEAD 所指向的目录,可以用命令(平时分支指针的移动需要 HEAD 指在其上面,一般只能前进和后退,不能跳转):

git branch -f <branch-name> HEAD

​ 其实,只要熟悉了上边的操作,我们就可以在任何版本之间进退自如了。当然,如果利用上git的树结构节点是有父节点信息的(与之相对,没有子节点信息,所以回退的时候会发生版本丢失)。可以用 reset 命令(其实就是顺着数向上回溯)。

如果想要实现版本回退,可以使用如下命令,其中 n 是

git reset --hard HEAD~n

​ 然后如果只是一个版本的回退(两个版本就是两个^),可以用下面的指令来实现。从上面这两条指令可以看出,HEAD其实是一个指向不同版本的指针,指向谁,就显示哪个版本。

git reset --hard HEAD^

​ 如果想实现版本的跳转,那么可以用下面的指令

git reset --hard 版本号

​ 版本号的查询可以用这条指令

git reflog

4.3 分支操作

​ 当我们想要查看分支的时候,可以用如下命令

git branch

​ 如果想要创建一个分支,可以用如下命令

git branch 分支名

​ 如果想要删除一个分支,可以用如下命令

git branch -d 分支名

​ 如果想要跳转到某个分支,可以用如下命令

git checkout 分支名

​ 如果想要创建并跳转到这个分支,可以用如下命令

git checkout -b 分支名

​ 关于分支的合并,其实应当这样理解,两个版本之间存在差距,执行如下命令可以让其合并,即在当前分支融合某一分支

git merge 分支名

​ 当然经常融合不了,这个时候需要重新提交,然后仔细修改,然后提交版本,就没有问题了,有问题的时候控制台会在分支名后跟一个“merging”。

​ 还有一种操作叫做变基,其实也很与merge很类似,如下命令

git rebase <branch-name>

在这里插入图片描述

执行

git rebase main

在这里插入图片描述


五、远程仓库

5.1 分布式管理

​ 对远程仓库的处理其实可以引出 git 的另一个重要特性,那就是分布式管理,他的意思是说,任何一台电脑上的版本库都存着这个版本库的全部版本信息,也就是保存着那个树结构。这样相对于集中式管理,丢失全部版本数据的概率小多了。但是同样的,每台机子上的版本库都必须与中心库保持一致,这无疑增加了学习的难度。

​ 其中最重要的一个思想是,有一组远程分支指针出现在本地版本库中,来记录本地版本库与远程库的差距,我们一般的移动分支指针的操作是没有办法对远程分支指针使用的。换句话说,远程分支指针的移动条件更为苛刻,大概就像这样:

在这里插入图片描述

5.2 命令

​ 远程仓库的命令呈现就是基础的命令没人用,常用的命令都是由几条命令复合而来的。

​ 比较基础的 fetch ,他可以把远端仓库的版本全都拷贝下来,而且还会移动远端指针到相应位置,示例如下

在这里插入图片描述

git fetch

在这里插入图片描述

​ 但是 fetch 并不会移动本地的指针。所以我们为了比较自然的操作,其实是需要把本地指针更新一下的,那么更新就一般会涉及 merge 操作(因为版本分支问题,如果不 merge,没法移动指针),这是没有操作的时候

在这里插入图片描述

进行如下命令

git fetch && git merge o/main

在这里插入图片描述

上面两条指令可以合成一条,就是我们熟悉的

git pull

push 是另一个可以更新远端分支指针的操作,未使用命令前

在这里插入图片描述

git push

在这里插入图片描述

​ 如果提交不成功,那么就是因为本地的版本落后与远端版本了(别人也在修改这个分支),所以需要先把远端的版本从新拉取过来,在拉取的过程中可能会需要解决冲突,解决完应该就可以提交了。

git pull && git push

相关文章:

Linux-Git

一、总论 1.1 写在前面的话 ​ 这已经是我第三遍学Git相关操作了&#xff0c;可以说这个玩意是真的狗&#xff0c;因为确实用不到&#xff0c;不知道下个学期会不会用到&#xff0c;直到现在我刚刚学完&#xff0c;处于知识水平的巅峰&#xff0c;知道Git的具体功能&#xff…...

leetcode:2273. 移除字母异位词后的结果数组(python3解法)

难度&#xff1a;简单 给你一个下标从 0 开始的字符串 words &#xff0c;其中 words[i] 由小写英文字符组成。 在一步操作中&#xff0c;需要选出任一下标 i &#xff0c;从 words 中 删除 words[i] 。其中下标 i 需要同时满足下述两个条件&#xff1a; 0 < i < words.l…...

基于Python长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的应用

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…...

4.4---Spring框架之Spring事务(复习版本)

Spring事务的本质其实就是数据库对事务的支持&#xff0c;没有数据库的事务支持&#xff0c;spring是无法提供事务功能的。 Spring只提供统一事务管理接口&#xff0c;具体实现都是由各数据库自己实现&#xff0c;数据库事务的提交和回滚是通过 redo log 和 undo log实现的。 S…...

IP-Guard是否支持禁止客户端电脑卸载指定软件?

哪些浏览器支持设置窗口水印? 支持的浏览器有:搜狗浏览器、360安全浏览器、360极速浏览器、qq浏览器、谷歌浏览器、ie浏览器、edge浏览器 注意: 1.目标URL窗口水印不支持Firefox浏览器和猎豹浏览器 2.搜狗浏览器在兼容模式下,目标URL窗口水印不生效 3.部分浏览器(360安全…...

系统图标形状overlayapk

时间&#xff1a;2020/10/10 之前公司不允许csdn&#xff0c;笔记写在其它地方。最近整理过来 1、图标形状的overlay frameworks\base\packages\overlays目录 2、某一种形状的源码 默认配置在framework/base/core/res/res res下面放着图标形状的mask路径,这个值是一个矢量图…...

辅助编程coding的两种工具:Github Copilot、Cursor

目录Cursor简介下载地址&#xff1a;使用技巧&#xff1a;CHAT:example 1&#xff1a;注意&#xff1a;example 2&#xff1a;Github Copilot官网简介以插件方式安装pycharm自动写代码example 1&#xff1a;写一个mysql取数据的类example 2&#xff1a;写一个多重共线性检测的类…...

MySQL5.7安装教程

1.鼠标右击【MySQL5.7】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 MySQL5.7】 2.打开解压后的文件夹&#xff0c;双击运行【mysql-installer-community-5.7.27.0】 3.勾选【I accept the license terms】&#xff0c;点击【Next】 4…...

ML@sklearn@ML流程Part3@AutomaticParameterSearches

文章目录Automatic parameter searchesdemomodel_selection::Hyper-parameter optimizersGridSearchCVegRandomizedSearchCVegNoteRandomForestRegressorMSEpipeline交叉验证&#x1f388;egL1L2正则Next stepsUser Guide vs TutorialAutomatic parameter searches Automatic p…...

Ubuntu22安装OpenJDK

目录 一、是否自带JDK 二、 删除旧JDK&#xff08;如果自带JDK满足需求就直接使用了&#xff09; 三、下载OpenJDK 四、新建/home/user/java/文件夹 五、 设置环境变量 六、查看完成 附&#xff1a;完整版连接&#xff1a; 一、是否自带JDK java -version 二、 删除旧…...

【数据库管理】②实例管理及数据库启动关闭

1. 实例和参数文件 1.1 instance 用于管理和访问 database. instance 在启动阶段读取初始化参数文件(init parameter files). 1.2 init parameter files [rootoracle-db-19c ~]# su - oracle [oracleoracle-db-19c ~]$ [oracleoracle-db-19c ~]$ cd $ORACLE_HOME/dbs [oracl…...

【2023】Kubernetes之Pod与容器状态关系

目录简单创建一个podPod运行阶段&#xff1a;容器运行阶段简单创建一个pod apiVersion: v1 kind: pod metadata: name: nginx-pod spec:containers:- name: nginximages: nginx:1.20以上代码表示创建一个名为nginx-pod的pod资源对象。 Pod运行阶段&#xff1a; Pod创建后&am…...

LabVIEW阿尔泰PCIE 5654 例程与相关资料

LabVIEW阿尔泰PCIE 5654 例程与相关资料 阿尔泰PCIE 5654多功能采集卡&#xff0c;具有500/250Ksps、32/16路模拟量输入&#xff1b;100Ksps&#xff0c;16位&#xff0c;4/2/0路同步电压模拟量输出&#xff1b;8路DIO &#xff1b;8路PFI&#xff1b;1路32位多功能计数器。PC…...

spark2.4.4有哪些主要的bug

Issue Navigator - ASF JIRA -...

信息学奥赛一本通 1347:【例4-8】格子游戏

【题目链接】 ybt 1347&#xff1a;【例4-8】格子游戏 【题目考点】 1. 并查集&#xff1a;判断无向图是否有环 【解题思路】 该题为判断无向图是否有环。可以使用并查集来完成。 学习并查集时&#xff0c;每个元素都由一个整数来表示。而该问题中每个元素是一个坐标点&a…...

acwing3417. 砝码称重

acwing3417. 砝码称重算法 1: DFS算法2 : DP算法 1: DFS /*** 数据范围 对于 50%的评测用例&#xff0c;1≤N≤15. 对于所有评测用例&#xff0c;1≤N≤100&#xff0c;N 个砝码总重不超过 1e5. */ /* 算法 1: DFS 思路 : 对于每个砝码,有放在左边,放在右边,和不放三种选择,使…...

生成式 AI:百度“文心一言”对标 ChatGPT?什么技术趋势促使 ChatGPT 火爆全网?

文章目录前言一、生成式 AI 的发展和现状1.1、什么是生成式 AI&#xff1f;1.2、生成式 AI 的发展趋势1.3、AI 生成内容的业务场景和分类二、生成式 AI 从分析领域到创作领域2.1、 降低内容创作门槛&#xff0c;增加 UGC 用户群体2.2、提升创作及反馈效率&#xff0c;铺垫线上实…...

PCL 非线性最小二乘法拟合圆柱

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里通过非线性最小二乘的方法来实现圆柱体的拟合,具体的计算过程如下所述: 图中, p p p为输入数据的点位置,求解的参数为柱体的轴向向量 a...

【设计模式】迪米特法则

文章目录一、迪米特法则定义二、迪米特法则分析三、迪米特法则实例一、迪米特法则定义 迪米特法则(Law of Demeter, LoD)&#xff1a;一个软件实体应当尽可能少地与其他实体发生相互作用。 二、迪米特法则分析 如果一个系统符合迪米特法则&#xff0c;那么当其中某一个模块发…...

CSS3笔试题精讲1

Q1 BFC专题 防止父元素高度坍塌 4种方案 父元素的高度都是由内部未浮动子元素的高度撑起的。 如果子元素浮动起来,就不占用普通文档流的位置。父元素高度就会失去支撑,也称为高度坍塌。 即使有部分元素留在普通文档流布局中支撑着父元素,如果浮动 起来的元素高度高于留下的…...

交叉编译用于移植的Qt库

前言 如果在Ubuntu上使用qt开发可移植到周立功开发板的应用程序,需要在Ubuntu上交叉编译用于移植的Qt库,具体做法如下: 1、下载源码 源码qt-everywhere-opensource-src-5.9.6.tar.xz拷贝到ubuntu自建的software文件下 2、解压 点击提取到此处 3、安装配置 运行脚本文…...

泰凌微TLSR8258 zigbee开发环境搭建

目录必备软件工具抓包分析辅助工具软件开发包PC 辅助控制软件 (ZGC)必备软件工具 下载地址&#xff1a;http://wiki.telink-semi.cn/ • 集成开发环境: TLSR8 Chips: Telink IDE for TC32 TLSR9 Chips: Telink RDS IDE for RISC-V • 下载调试工具: Telink Burning and Debugg…...

C#实现商品信息的显示异常处理

实验四&#xff1a;C#实现商品信息的显示异常处理 任务要求&#xff1a; 在进销存管理系统中&#xff0c;商品的库存信息有很多种类&#xff0c;比如商品型号、商品名称、商品库存量等。在面向对象编程中&#xff0c;这些商品的信息可以存储到属性中&#xff0c;然后当需要使…...

细数N个获取天气信息的免费 API ,附超多免费可用API 推荐(三)

前言 市面上有 N 多个查询天气信息的软件、小程序以及网页入口&#xff0c;基本都是通过调用天气查询 API 去实现的。 今天整理了一下多种场景的天气预报API 接口分享给大家&#xff0c;有需要赶紧收藏起来。 天气预报查询 天气预报查询支持全国以及全球多个城市的天气查询…...

20230404英语学习

今日单词 decade n.十年 allocate vt.分配&#xff0c;分派&#xff0c;把…拨给 compress v.压缩&#xff1b;缩短&#xff1b;浓缩 regenerate v.&#xff08;使&#xff09;复兴&#xff0c;&#xff08;使&#xff09;振兴&#xff1b;&#xff08;使&#xff09;再生 …...

冒泡排序 快排(hoare递归)

今天要讲一个是冒泡排序&#xff0c;进一个是快排&#xff0c;首先是冒泡排序&#xff0c;我相信大家接触的第一个排序并且比较有用的算法就是冒泡排序了&#xff0c;冒泡排序是算法里面比较简单的一种&#xff0c;所以我们先看看一下冒泡排序 还是个前面一样&#xff0c;我们…...

49天精通Java,第24天,Java链表、散列表、HashSet、TreeSet

目录一、链表二、散列表三、HashSet四、TreeSet五、TreeSet常用方法大家好&#xff0c;我是哪吒。 一、链表 从数组中间删除一个元素开销很大&#xff0c;其原因是向数组中插入元素时&#xff0c;此元素之后的所有元素都要向后端移动&#xff0c;删除时也是&#xff0c;数组中…...

HashMap源码分析小结

HashMap相关问题 HashMap实现原理 HashMap是以键值对的形式存储数据&#xff0c;内部是通过数组链表结构实现&#xff0c;在1.7之后的版本&#xff0c;链表结构可以升级为红黑树&#xff0c;提高查询效率 key和value都支持为null&#xff1b;key为null时hash值是0&#xff0…...

太奇怪了!小公司面试全挂,大厂面试全过,为什么小公司要求比大厂还高?...

大厂的人才去小公司面试&#xff0c;一定是降维打击吗&#xff1f;还真未必。一位网友很困惑&#xff1a;真的奇怪&#xff0c;小公司面试全挂&#xff0c;大厂面试10个过了9个&#xff0c;感觉小公司要求比大厂还高&#xff0c;这是怎么了&#xff1f;来看看网友们的看法。有人…...

Java开发环境配置

Java开发环境配置 Java是目前世界上最流行的编程语言之一&#xff0c;它的使用范围广泛&#xff0c;从Web应用程序到桌面应用程序再到移动应用程序&#xff0c;Java都是一种非常有用的语言。想要进行Java开发&#xff0c;首先需要在计算机上配置Java开发环境。 在本文中&…...