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

Git和GitHub基础教学

文章目录

  • 1. 前言
  • 2. 历史
  • 3. 下载安装Git
    • 3.1 下载Git
    • 3.2 安装Git
    • 3.3 验证安装是否成功
  • 4. 配置Git
  • 5. Git基础使用
    • 5.1 通过Git Bash使用
      • 5.1.1 创建一个新的仓库。
        • 5.1.1.1 克隆别人的仓库
        • 5.1.1.2 自己创建一个本地仓库
      • 5.1.2 管理存档
    • 5.2 通过Visual Studio Code使用
  • 6. Git完成远程提交
    • 6.1 Git Bash版本
    • 6.2 Visual Studio Code版本

1. 前言

当你写代码的时候一定遇到过自己需要对代码进行很多改动,结果改动完发现有很多报错,于是我们想回到之前的某个状态的代码的情况。如果是本地的一些项目我会对代码进行一个“存档”的操作(很多游戏会提供存档的选项从而保存玩家的进度,玩家可以“读档”从而恢复到该存档所保存的进度),我会将我的代码ctrl+a然后ctrl+c,打开我的记事本ctrl+v,完成了一遍存档,如果我需要保存新的我只需要再打开一个新的。如果我想要读取某个存档,我只需要将记事本的代码放到我的ide中。
这就是一个简单的代码存档管理,我们可以将我们的代码的一些“关键点”进行保存,然后当我们的代码出现一些问题的时候,我们可以读取这些“关键点”,返回到之前的进度重新进行改动。
但是这是我们一个人写我们自己的代码,万一是一群人在一起进行一个合作,我们该怎么做呢?我们使用u盘互相传一下我们的代码吗?这个方案当然是可以的,但很明显有问题,效率比较低,你的团队人越多,进行u盘同步进度的效率就会很慢。那我们就将各自的存档都上传到一个大家共享的网盘上吧。很快就会出现第一个问题:你们写的是一个python代码,这些网盘里的存档都叫import numpy…你自己只能在本地找到自己的代码,上面的很多存档你看着会一头雾水。还会有其他问题:这么多存档,到底哪个是正式的最后的代码?这里有的模块可能代码没有添加,或者有些需要添加进去的但是和其他代码有些冲突,一个代码和另一个代码到底有什么区别,这些都是可能出现的问题。
对于第一个问题,问题主要是没有统一的规则,万一代码出现问题我们可能都不知道这个代码是谁写的,谁上传的。所以最好这里存档能有时间和上传者的记录,甚至为了解决后面说的代码之间的改动,这个上传者最好自己稍微阐述一下我做了什么。
第二个问题,这里有很多代码,一般来说每个人会做一个模块,然后我们最后讲这些模块放到一起形成最后的代码,因此最后应该有一个人将这些模块的代码进行一个检查。检查没有问题就放进最后的代码之中,如果放进去后有问题也没有关系,因为之前的代码有存档。所有的代码都加进来之后,那我们的最后这个版本就确定了。
第三个问题,如果合作之中的代码之间有一些冲突,最好这些冲突能被标记出来。就像游戏里两个存档可能有不同的道具,有一种同步方案那便是两边的东西都保存,也可能是最后是保存某一种存档。
那这些功能都是可以被Git实现的,这篇文章就将以游戏存档的例子给大家介绍Git的使用。

2. 历史

Git的历史要从Linux之父Linus Torvalds说起。
Linus Torvalds作为Linux之父,当然生完孩子Linux后就不能放任不管了,所以在 2002 年之前,Linux内核的维护工作主要依靠Linus Torvald等人手工检查全球各地热心开发者们提交的补丁,审核通过后就会将其手动加到Linux代码之中,这种方式效率低下且容易出错。因此Linus Torvalds等人需要找到一个解决方案。
下图是Linux之父Linus Torvalds。
Linux之父
这个解决方案便是版本控制系统软件,也就是前文中我们说的那种解决方案。当时Linus Torvalds选择了BitKeeper来解决问题,但是这款软件是一个商业收费软件,2005年后该公司BitMover决定收回Linux内核社区的免费使用权。
数次磋商无果后,Linus Torvalds作为暴躁老哥就表示,不能办就别办了。二话不说撸起袖子就干,花了10天时间,开发了一个开源免费的版本控制系统软件——Git,意思为“不愉快的人”,直接取代了BitKeeper,成为了当今世界上最为流行的版本控制工具。
在这里插入图片描述

3. 下载安装Git

3.1 下载Git

首先打开Git官网:Git官网
点击这里的Download for Windows,这里的教学以默认的命令行界面git为例,下面的GUI版本提供了一个图形用户界面,使得用户可以通过点击和选择来管理Git仓库,而不需要手动输入命令行指令,该教程不会聚焦于GUI版本。
在这里插入图片描述
点击后,会有多个版本进行安装,上面的Standalone Installer是独立安装程序,通过运行安装程序来安装Git,它会在系统中创建相应的程序和环境变量,因此适合我们现在的需求。
而下面的Portable是便携版,一般是如果我们需要放在一些移动介质所需要的版本,它的安装过程不会将Git添加到系统目录中,而是将所有文件都放在安装目录中。便携版可以在没有安装过程的情况下直接运行,因此适合携带在便携式存储设备(如USB闪存驱动器)中使用,方便在不同计算机之间使用Git。
所以这里我们点击64-bit Git for Windows Setup就好了。
在这里插入图片描述
但是这里的下载速度会比较慢,可以科学上网解决。

3.2 安装Git

下载完后,我们点开对应的安装包,点击Next。
在这里插入图片描述
然后是选择安装目录,这里需要注意安装目录里不能有中文。
然后点击Next进入下一步。
在这里插入图片描述
这一步可以不修改上面的选项,直接点击Next下一步。
1.Additional icons(附加图标):是否在桌面上创建 Git 的快捷方式图标。
2.Windows Explorer integration(Windows 资源管理器集成):
Open Git Bash here(在此处打开 Git Bash): 是否在右键菜单中添加“在此处打开 Git Bash”选项。
Open Git GUI here(在此处打开 Git GUI): 是否在右键菜单中添加“在此处打开 Git GUI”选项。
3.Git LFS (Large File Support)(Git 大文件支持):
是否安装 Git LFS 插件,用于支持大文件的版本控制。
4.Associate .git configuration files with the default text editor(将 .git 配置文件与默认文本编辑器关联)**:
是否将 .git 配置文件与系统的默认文本编辑器关联。
5.Associate .sh files to be run with Bash(将 .sh 文件与 Bash 关联):
是否将 .sh 脚本文件与 Git Bash 关联,以便可以直接运行。
6.Check daily for Git for Windows updates(每天检查 Git for Windows 更新):
是否每天检查 Git for Windows 的更新。
7.(NEW!) Add a Git Bash Profile to Windows Terminal(将 Git Bash 配置文件添加到 Windows 终端):
是否在 Windows 终端中添加 Git Bash 配置文件。
在这里插入图片描述
这一步是创建开始菜单文件夹,也是直接点击Next就好。
在这里插入图片描述
这一步是选择Git的默认编辑器,这里建议修改成Visual Studio Code,后文也将会以Visual Studio Code为例,选择自己常用的ide即可,然后点击Next。
在这里插入图片描述
这一步是设置新仓库中初始分支的名称,上面是Git默认的master分支,下面可以是你自己选择的分支名,一般是main,这里现在推荐你直接选择下面的这一个就好,后面环节会对这里再进行详细解释。
在这里插入图片描述
后面的设置几乎不变,一直点击Next就好。
这一步是对PATH环境的调整。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里点击Install即可。
在这里插入图片描述
点击完后等待其安装完毕。
这里点击Finish后因为这里默认勾选了发行文档,所以我们可以取消勾选后,点击Finish。上面的一个选项是启动Git Bash,这是Git的命令行工具,我们暂时不需要从这个地方打开。
在这里插入图片描述

3.3 验证安装是否成功

验证的方式有两种,一种是我们直接打开我们的Visual Studio Code,点击左边第三个后,如果出现的是不是让你安装Git便是成功,比如我这里已经打开了项目,所以这里提示我让我Initialize Repository(初始化仓库)。
在这里插入图片描述
当然如果你的Visual Studio Code是启动的过程中安装的Git,你可能需要关闭Visual Studio Code再打开一遍才可能会识别到安装的Git。

第二种方法是我们在桌面上右击,然后如果点击后没出现以下的界面,则还需要点击显示更多选项,然后就应该会出现下面的界面,然后这里便有Open Git GUI here和Open Git Bash here这两个选项,就说明我们的安装成功了。
在这里插入图片描述

4. 配置Git

配置Git的方法有很多,这里主要是为了后续上传我们前面说的代码存档,需要进行一个小小的设置。官方教程中也推荐你进行这一步的设置,也就是设置Git用户名和电子邮件地址。
Git官方文档/书籍
这里的电子邮箱地址建议先去GitHub官网上注册一个账号,然后这里的电子邮箱就是GitHub上注册账号的邮箱,这样的话会方便我们前面说的团队合作场景中,大家互相方便沟通。
GitHub官网
注:GitHub也需要科学上网才能流程使用。
我们在桌面上右击后,点击显示更多选项,再点击Open Git Bash here,就会出现Git的命令行工具。
如下图所示。
在这里插入图片描述
我们需要输入的命令格式如下。

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

其中的John Doe可以改为自己的用户名,邮箱也可以改为自己的邮箱。
在这里插入图片描述
提示:在这里想粘贴需要右击后点击Paste,或者我们右击后看到这里的Paste快捷键,并不是传统的ctrl+v
至此我们就完成了Git的配置。

5. Git基础使用

Git使用的方式主要是两种,一种是通过Git Bash输入命令进行使用,一种是我们使用Visual Studio Code自动使用Git。

5.1 通过Git Bash使用

5.1.1 创建一个新的仓库。

第一步我们需要创建一个新的仓库(Repository),为什么需要一个仓库呢?我们玩游戏的时候开始新的游戏就会创建一个新的存档,就像我们玩游戏新游戏也是会让你选择一个存档位置一样,我们的一个项目开始也就会有一个存放存档的仓库,一个游戏我们可以有多个存档,可能是多个人游玩导致的,因此这些存档有不同的存档位置,因此就是不同的仓库。
一般来说一个项目是最大的,其下面可能会有多个仓库,每个仓库之中会有多个存档。

5.1.1.1 克隆别人的仓库

当然我们有的时候可以下载网上的存档直接进行游戏,我们也可以直接拿别人的仓库过来直接开始项目,这种操作叫做克隆(clone)。
我们在本地选择好要存储的地方,然后右击后选择显示更多选项,然后点击Open Git Bash here。
在这里插入图片描述
然后我们去GitHub上选择一个项目点击Code,然后选择下面的复制地址。
在这里插入图片描述
在Git Bash里输入命令。

git clone (加上刚刚的地址)

这里复制和前面说的一样建议直接右击Paste,因为默认快捷键不是ctrl+v。
再按下回车后,Git就会把对应的仓库直接全部下载下来。
在这里插入图片描述
在这里插入图片描述

5.1.1.2 自己创建一个本地仓库

我们还是要打开对应的我们想创建仓库的文件夹,然后右击后选择显示更多选项,然后点击Open Git Bash here。
在这里插入图片描述
然后输入命令。

git init

再按下回车。
在这里插入图片描述
我们的文件夹里便会有一个.git文件夹,这个便是我们的代码仓库了,这里面的东西千万不要动。
在这里插入图片描述
如果你无法看见这个文件夹,可能是你没有开启显示隐藏文件夹,点击上面的查看,然后点击显示,勾上隐藏的项目即可。
在这里插入图片描述

5.1.2 管理存档

我们现在有了存档之后,我们开始书写我们的代码,我今天写了个1.txt进去,现在我想保存以下我目前的进度。
在这里插入图片描述
这里虽然1.txt在这个文件夹,但其实还没有放进仓库之中,因此我们现在需要在Git中提交我们这个存档到仓库之中。
在这里插入图片描述
我们打开这里的Git Bash,输入以下命令。

git add 1.txt

在这里插入图片描述
但这一步只是暂时将这个文件放到暂存区,可以理解成存档放进仓库需要先拿一个盒子将存档装起来,再放到仓库里。
当然如果这里有很多个文件的话,你也可以输入以下命令,会将所有文件放入暂存区。

git add .

注意这里.和add之间有空格。
在这里插入图片描述
我们现在存档已经打包好,我们需要将这个存档上交到仓库去了,执行下面命令。

git commit -m "(备注内容)"

在这里插入图片描述
这样代码就被我们成功添加到了仓库之中。
我们现在就会有保存好的存档在仓库之中,我们可以输入以下代码去检查这些存档。

git log

在这里插入图片描述

这里就能发现上面不仅有提交的记录,记录上还会有时间提交人等信息,帮助我们溯源,如果这份代码有问题,我们就可以找到对应负责的人。

我们还可以输入以下命令,检查每次提交修改了哪些文件。

git log --stat

在这里插入图片描述
我们发现每次存档还会有一个存档ID,也就是黄色字的那一行,我们可以使用这个ID去查看每次存档提交与之前的存档有哪些地方不同。
输入以下命令。

git diff (commit ID)

这里可能的结果比较抽象,但是如果我们使用下一种方法使用Git就可以清楚的看到代码前后的差异。

那么如何读取之前的存档,让我们的代码回到之前的保存节点呢?我们可以输入以下的两行命令中的任意一个。

git reset --hard [commit ID]
git checkout [commit ID]

这两行代码的区别在于是否会影响暂存区或当前分支的HEAD,上面会将工作目录和暂存区(staged area)也更新到该提交的状态,而下面的不会影响。

我们前面提到了很多分支一词,我们在前面创建完仓库后,我们现在每一行命令都会有一个括号(main),其实表示的就是我们现在的所有操作都在main这一个分支下,分支是什么呢?
我们前面说过,我们可能有多个人开发的代码,这些代码之间互相可能会有冲突或者问题,所以这些当然不能是直接放到原来的代码之中的,我们之前安装的时候选择了默认的分支名,因为修改成了main所以现在创建完仓库后,Git会帮我们创建这个默认分支main,当我们如果发现某一分支没有问题的时候,我们可以再将这个分支合并到main中,我们以后会详细演示这个过程。
相关的命令如下。

git branch new-feature
git checkout branch-name
git checkout -b new-branch
git merge branch-name
git branch -d branch-name
git branch

1.创建分支:
你可以从当前分支(通常是 main 或 master)创建一个新的分支。例如,使用 git branch new-feature 命令创建一个名为 new-feature 的新分支。
2.切换分支:
使用 git checkout branch-name 命令可以切换到指定的分支。如果分支不存在,这个命令会失败。
3.创建并切换分支:
git checkout -b new-branch 命令会创建一个新的分支,并立即切换到这个新分支。
4.合并分支:
当你在分支上完成开发后,可以使用 git merge branch-name 命令将该分支的更改合并到当前分支。
5.删除分支:
使用 git branch -d branch-name 命令可以删除一个已经合并到其他分支的分支。如果分支还没有合并,可以使用 -D 选项强制删除:git branch -D branch-name。
6.分支管理:
git branch 命令可以列出所有的分支,其中当前分支会用星号 * 标记。

5.2 通过Visual Studio Code使用

我们在IDE中完成对应的代码操作后,我们点击左边的第三个Source controls,点击后由于我们这里没有创建对应的仓库,所以这里的第一步当然是创建仓库。
在这里插入图片描述
我们直接点击Initialize Repository创建仓库,点击后界面就会变成这样。
在这里插入图片描述

和前面一样我们现在需要将代码进行一个存档的保存并提交。与前面不同的是这里它直接出现的是Commit也就是提交到仓库之中,没有前一步添加到暂存区的操作。然后这里的commit上面我们也可以输入对应的备注信息在文本框中。
注意我们提交之前之前记得要保存一下文件,可以使用ctrl+s快速保存,在Visual Studio Code中,如果你的文件没有保存,其右边会出现一个小圆点,比如前两张图的1.txt右边有个小圆点,而下面的图没有,代表这个文件已经被我保存了。
那这个旁边的U是什么意思呢?这表示该文件是unstaged的,即它已经被修改但还没有被添加到暂存区。但没有关系我们这里直接点击commit。

在这里插入图片描述
这里也会出现一个弹窗提示我们没有将存档先添加到暂存区中。
在这里插入图片描述
我们这里直接点击Always就好,这样它就会默认直接将东西帮我们放进暂存区然后再提交了。
在这里插入图片描述
然后我们的左下的这个Graph就会显示我们有多少次提交,以及这些提交之间的关系。

比如我们现在再次修改这个代码,我们右边的这个图标又会出现一个1的下标,提示我们有一个未提交到仓库的文件。
在这里插入图片描述
我们这边再次提交后,Graph下面就会出现新的提交记录。

在这里插入图片描述
然后这个记录和原来的记录有一个线连起来,表示它是从原来的那个存档上演变过来的,我们点击后,右边会出现一个类似编辑器的界面,但是这里不能修改(只读),这里显示的绿色部分就是我们新添加的内容,也就是这两个存档之间的不同的地方,就这样被清晰的展示出来了。
在这里插入图片描述
这个地方展示了一个新的存档,这个存档对原来的存档进行了删除,红色部分展示了删除了哪些内容,然后绿色部分是其新添加的内容,也就是前面Git Bash里的diff命令的结果的一个可视化展现。
当我们点击左下角main的时候就可以对分支进行编辑了。
在这里插入图片描述
点击后上面的搜索框会出现对应的选项,然后我们点击Create new branch。
在这里插入图片描述
比如这里我创建了一个新的Test分支,然后我进行了代码修改,现在打算将这两个分支进行合并。
我们按住Ctrl+Shift+P打开命令面板,再输入Git: Merge Branch命令,然后选择要合并的分支如下。
在这里插入图片描述
点击后,分支就完成了合并。左下的Graph上面的图标显示出main和Test分支完成了合并。
在这里插入图片描述

6. Git完成远程提交

6.1 Git Bash版本

我们先打开GitHub官网,然后点击自己的头像然后点击Settings。
在这里插入图片描述
然后点击左边的SSH and GPG keys,这里我已经添加过一个。
在这里插入图片描述
我们这里点击右上角的New SSH key
在这里插入图片描述
接下来就会进入这个界面。
在这里插入图片描述
现在我们就要生成SSH key了。
我们打开命令行,输入以下命令。

ssh-keygen -t rsa -b 4096 -C "你的注册邮箱"

按下回车后再按下三次回车就好。然后我们就会出现下面的界面,代表SSH keys生成完毕。
在这里插入图片描述
命令行的这个地方提示了SSH keys生成的地方,打开对应文件夹可以找到SSH keys。
在这里插入图片描述
打开对应文件夹后,用记事本打开这个.pub结尾的文件。
在这里插入图片描述
打开后复制里面的内容,然后回到之前的添加SSH Key界面,上面的Title随便输入一个名字就好。
然后下面的Key栏粘贴我们刚刚复制的生成的SSH key。
在这里插入图片描述
完成后点击下面的Add SSH key,然后会让你再输入一遍账号的密码进行确认,之后就完成了添加。
现在我们可以检查以下是否能成功建立连接,这一步同样需要科学上网。
我们输入以下命令。

ssh -T git@github.com

回车后对于下一个询问输入yes再回车即可。
在这里插入图片描述
出现Hi的那一行就说明SSH连接建立完毕。

现在我们先创建一个远程仓库,这个远程仓库,就相当于我们前面说的大家一起使用的网盘,本地的仓库只是在自己电脑上,别人难以访问,现在放到GitHub上之后,它就是一个网上的资源,当然你也可以设置哪些人可以访问。
我们打开GitHub页面,然后选择这里的加号,然后点击New repository。当然也可以在别的界面创建仓库,比如左边的侧栏,或者是个人仓库界面都可以创建一个新的仓库。
在这里插入图片描述
点击后,我们输入这个仓库的名字,下面Description一栏中可以输入这个仓库的描述,下面的Add a README file,也建议勾选。
在这里插入图片描述
其余选项不动后,然后点击右下角的Create repository就完成了仓库的创建。
完成创建后就只会有一个孤零零的README文件展示了这个项目是做什么的。
在这里插入图片描述
我们其实可以直接点击Add file添加文件,但是只能上传单一的文件,无法直接上传文件夹,而且本教程就是想教大家如何使用Git进行上传。我们这里点击Code,然后选择SSH,然后复制对应的SSH地址。
在这里插入图片描述
我们回到要上传的文件夹下,我们向前面的步骤一样开始操作。
在这里插入图片描述
当我们完成本地仓库的提交后,我们下一步就是将这个存档提交到远程仓库之中去。
我们输入以下指令。

git remote add origin (远程仓库的SSH地址)

在这里插入图片描述
我们输入以下指令会发现报错。

git push -u origin main

在这里插入图片描述
该指令是说我们将本地的main分支推送到远程仓库origin中,但是现在远程仓库有README文件,我们本地没有,这就是我们前面说的发生了冲突,我们为了解决这个问题,我们需要先拉取远程仓库的更改,以确保我的本地仓库是最新的。
我们输入命令。

git pull origin main

在这里插入图片描述
我们发现这里继续报错,因为这里我们都是main分支,这里引起了冲突。
由于我们这里是不同的文件,我们现在要求它们强制合并其实也不会有什么问题,因此我们可以使用下面的命令。

git pull origin main --allow-unrelated-histories

在这里插入图片描述
这里我们可以发现文件夹下多了原来的README文件,因为这里我们进行了强制合并。

我们再输入远程提交命令。

git push -u origin main

在这里插入图片描述
这里提示已经成功,我们再去GitHub上查看一下。
也成功完成上传。
在这里插入图片描述
这其实告诉我们正确的代码顺序,其实是先创建远程仓库,然后我们将仓库和我们的本地仓库进行同步(pull),然后我们进行代码书写,然后完成修改后,再提交到远程仓库,这才是正确的远程仓库使用顺序。

6.2 Visual Studio Code版本

Visual Studio Code版本的操作如下。
我们回到刚刚的Souce Control界面,然后点击这里的Publish Branch。
在这里插入图片描述
这里会弹出一个弹窗,这个弹窗会让你去登录GitHub。
在这里插入图片描述
这里确定是自己的账号后点击Continue即可。
在这里插入图片描述
然后后面会有一个正式的权限授权,继续点击Authorize Visual-Studio-Code即可。允许后面的弹窗。
回到Visual Studio Code后,这里会问你要上传到私人仓库,还是公开仓库,这就看你的具体项目情况了。
在这里插入图片描述
我这里选择上传到公共仓库,等待一会后,它就会上传完毕,当然这里需要科学上网。
在这里插入图片描述
成功后左边的Graph里的这个分支的右边会多一个云的标志,表示你的这个分支已经上传到GitHub上了。
我们打开GitHub上能看到成功上传。

在这里插入图片描述
当我们现在本地又有新的存档提交到仓库之中时,我们的这里云端就会落后与本地的仓库,这里的Graph也会出现左边的这种情况,我们这时候再点击左边的Sync Changes就能完成前面的Pull和Push的操作。
在这里插入图片描述
同样这里会提示你,这里可以选择OK,Don’t Show Again即可。
在这里插入图片描述
等待上传完毕,现在云端和本地又实现同步了。
在这里插入图片描述
这就是全部Git和GitHub的基础教学教程,一些其他复杂的实际使用这里没有详细说明,希望大家能学会Git的基础使用,能在GitHub上找到优秀的开源项目帮助到自己,在未来和别人的多人项目中做出自己的贡献。

相关文章:

Git和GitHub基础教学

文章目录 1. 前言2. 历史3. 下载安装Git3.1 下载Git3.2 安装Git3.3 验证安装是否成功 4. 配置Git5. Git基础使用5.1 通过Git Bash使用5.1.1 创建一个新的仓库。5.1.1.1 克隆别人的仓库5.1.1.2 自己创建一个本地仓库 5.1.2 管理存档 5.2 通过Visual Studio Code使用 6. Git完成远…...

Django-ORM-select_related

Django-ORM-select_related 作用使用场景示例无 select_related 的查询有 select_related 的查询 如何理解 "只发起一次查询,包含所有相关作者信息"1. select_related 的工作原理2. 具体示例解析3. 为什么只发起一次查询 数据库中的books量巨大&#xff0…...

蓝桥杯 k倍区间

题目描述 给定一个长度为 NN 的数列,A1,A2,⋯ANA1​,A2​,⋯AN​,如果其中一段连续的子序列 Ai,Ai1,⋯AjAi​,Ai​1,⋯Aj​ ( i≤ji≤j ) 之和是 KK 的倍数,我们就称这个区间 [i,j][i,j] 是 K 倍区间。 你能求出数列中总共有多少个 KK 倍区间…...

数据结构(蓝桥杯常考点)

数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…...

Tomcat+Servlet运行后出现404错误解决方案

TomcatServlet运行后出现404错误解决方案 一、错误效果复现 后续的解决方案,仅仅针对我遇到的情况。对不能涵盖大部分情况感到抱歉。 二、错误分析 先看看源代码? package com.example.secondclass.Servlet; import java.io.*; import jakarta.servl…...

论文摘要生成器:用TextRank算法实现文献关键信息提取

我们基于python代码,使用PyQt5创建图形用户界面(GUI),同时支持中英文两种语言的文本论文文献关键信息提取。 PyQt5:用于创建GUI应用程序。 jieba:中文分词库,用于中文文本的处理。 re&#xff…...

Flutter中网络图片加载显示Image.network的具体用法

Image.network的具体用法 Image.network 是 Flutter 中用于从网络加载图片的便捷方法。它基于 NetworkImage,可以快速加载并显示网络图片。以下是 Image.network 的具体用法和常见参数说明。 基本用法 最简单的用法是提供一个图片的 URL: dart 复制 …...

【HarmonyOS Next】鸿蒙应用故障处理思路详解

【HarmonyOS Next】鸿蒙应用崩溃处理思路详解 一、崩溃问题发现后定位 1. 崩溃现象: 常见的崩溃问题表现为,应用操作后白屏闪退,或者应用显示无响应卡死。 2.定位问题: 发现崩溃后,我们首先需要了解复现步骤&#x…...

狮子座大数据分析(python爬虫版)

十二星座爱情性格 - 星座屋 首先找到一个星座网站,作为基础内容,来获取信息 网页爬取与信息提取 我们首先利用爬虫技术(如 Python 中的 requests 与 BeautifulSoup 库)获取页面内容。该页面(xzw.com/astro/leo/&…...

QT系列教程(18) MVC结构之QItemSelectionModel模型介绍

视频教程 https://www.bilibili.com/video/BV1FP4y1z75U/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 QItemSelectionModel Qt的MVC结构支持多个View共享同一个model,包括该model的选中状态等。我们可以通过设置QItemSelectionModel,来更改View的选…...

git设置本地仓库和远程仓库

设置本地仓库和远程仓库是使用Git进行版本控制的基本操作。以下是详细步骤: 创建本地仓库 初始化本地仓库: 打开命令行工具(如Terminal或Git Bash)。导航到你希望创建Git仓库的项目文件夹。运行以下命令来初始化一个新的Git仓库&…...

openharmony中HDF驱动框架源码梳理-驱动加载流程

要想大概了解一个公司,我们可能只需要知道它的运行逻辑即可,例如我们只需要知道它有财务有研发有运营等,财务报销、研发负责产品等即可,但是如果想深入具体的了解的话我们就要了解都有什么部门(对象)、各部门都包含哪些职责(对象方…...

golang 高性能的 MySQL 数据导出

需求导出方式对比方案1:快照导出(耗时:1.5s)方案2: 偏移分页(耗时:4s)方案 3:普通分页(耗时:4min40s) 需求 导出 MySQL 数据 分析: 一次性 select 大量数据带来的问题 性能问题: 数据库负载:大量数据查询会增加数据库的CPU、内存和I/O负担&#xff…...

31-判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&#x…...

leetcode日记(95)将有序数组转换为二叉搜索树

很简单,感觉自己越来越适应数据结构题目了…… /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : va…...

使用SSH密钥连接本地git 和 github

目录 配置本地SSH,添加到github首先查看本地是否有SSH密钥生成SSH密钥,和邮箱绑定将 SSH 密钥添加到 ssh-agent:显示本地公钥*把下面这一串生成的公钥存到github上* 验证SSH配置是否成功终端跳转到本地仓库把http协议改为SSH(如果…...

C语言基础之【内存管理】

C语言基础之【内存管理】 存储类型作用域普通局部变量静态局部变量普通全局变量静态全局变量全局函数和静态函数 内存布局内存分区存储类型与内存四区内存操作函数memset()memcpy()memmove()memcmp() 堆区内存分配和释放malloc()free() 内存分区代码分析返回栈区地址返回data区…...

C盘清理技巧分享:释放空间,提升电脑性能

目录 1. 引言 2. C盘空间不足的影响 3. C盘清理的必要性 4. C盘清理的具体技巧 4.1 删除临时文件 4.2 清理系统还原点 4.3 卸载不必要的程序 4.4 清理下载文件夹 4.5 移动大文件到其他盘 4.6 清理系统缓存 4.7 使用磁盘清理工具 4.8 清理Windows更新文件 4.9 禁用…...

每天一道算法题【蓝桥杯】【两两交换链表中的节点】

思路 本质问题可以分成若干个子问题 即把前两个链表交换,并与后面的链表相连 故实现函数功能调用自身递归即可 #define _CRT_SECURE_NO_WARNINGS 1 struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), nex…...

mIoU Class与mIoU Category的区别

mIoU(mean Intersection over Union)是语义分割任务中常用的评估指标,用于衡量模型预测的分割结果与真实标签之间的重叠程度。mIoU Class 和 mIoU Category 的区别主要体现在计算方式和应用场景上: 1. mIoU Class 定义&#xff…...

深入解析 C 语言中含数组和指针的构造体与共同体内存计算

在 C 语言中,构造体(struct)和共同体(union)允许我们将多种数据类型组合到一起。除了常见的基本数据类型之外,经常还会在它们中嵌入数组和指针。由于数组的内存是连续分配的,而指针的大小与平台…...

【C++模板】:开启泛型编程之门(函数模版,类模板)

📝前言: 在上一篇文章C内存管理中我们介绍了C的内存管理,重点介绍了与C语言的区别,以及new和delete。这篇文章我们将介绍C的利器——模板。 在C编程世界里,模板是一项强大的特性,它为泛型编程奠定了坚实基础…...

HEC-HMS水文建模全解析:气候变化与极端水文、离散化流域单元‌精准刻画地表径流、基流与河道演进过程‌

一、技术革新:数字流域的精密算法革命 在全球气候变化与极端水文事件频发的双重压力下,HEC-HMS模型凭借其‌半分布式建模架构‌与‌多尺度仿真能力‌,已成为现代流域管理的核心工具。该模型通过‌离散化流域单元‌精准刻画地表径流、基流与河…...

具备多种功能的PDF文件处理工具

软件介绍 在日常办公和学习场景中,PDF文件使用极为频繁,而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414,就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…...

【SpringMVC】SpringMVC的启动过程与原理分析:从源码到实战

SpringMVC的启动过程与原理分析:从源码到实战 SpringMVC是Spring框架中用于构建Web应用的核心模块,它基于MVC(Model-View-Controller)设计模式,提供了灵活且强大的Web开发能力。本文将深入分析SpringMVC的启动过程、核…...

转自南京日报:天洑软件创新AI+仿真技术变制造为“智造

以下文章来源:南京日报 进入3月,南京天洑软件有限公司(以下简称天洑软件)董事长张明更加忙碌。“公司强调工业软件在数字经济与先进制造业融合中的关键作用,并已广泛应用在能源、电力和航空等领域。”他说,…...

golang dlv调试工具

golang dlv调试工具 在goland2022.2版本 中调试go程序报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.7 (maximum supported version 1.19) 即使你go install了新的dlv也无济于事 分析得出Goland实际使用的是 Goland安装目录下dlv 例…...

LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析

Hi,大家好,我是半亩花海。本实验基于汽车销量时序数据,使用LSTM网络(长短期记忆网络)构建时间序列预测模型。通过数据预处理、模型训练与评估等完整流程,验证LSTM在短期时序预测中的有效性。 目录 一、实验…...

微服务——网关、网关登录校验、OpenFeign传递共享信息、Nacos共享配置以及热更新、动态路由

之前学习了Nacos,用于发现并注册、管理项目里所有的微服务,而OpenFeign简化微服务之间的通信,而为了使得前端可以使用微服务项目里的每一个微服务的接口,就应该将所有微服务的接口管理起来方便前端调用,所以有了网关。…...

【数据结构】二叉搜索树、平衡搜索树、红黑树

二叉搜索树(Binary Search Tree) 二叉搜索树是一种特殊的二叉树,它用来快速搜索某个值,对于每个节点都应该满足以下条件: 若该节点有左子树,那么左子树中所有节点的值都应该小于该节点的值。若该节点有右…...