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

我看谁还敢说不懂git

文章目录

      • 一、Git介绍
        • 1.1、Git的作用
        • 1.2、Git的理念
        • 1.3、Git的特点
        • 1.4、Git对比SVN
      • 二、Git的概念
        • 2.1、Git基础概念
      • 三、Git的基本操作
        • 3.1、使用Git管理一个代码仓库的流程
        • 3.2、Git常用命令介绍
      • 四、Git状态的变化
      • 五、Git安装和配置
        • 5.1、Git的安装
        • 5.2、Git的配置
      • 六、Git的高级操作
        • 6.1、.gitignore文件的使用
        • 6.2、git diff的使用
        • 6.3、git如何处理代码冲突
          • 6.3.1、更新本地代码库
          • 6.3.2、查找冲突
          • 6.3.3、手动解决冲突
          • 6.3.4、添加解决后的文件
          • 6.3.5、提交解决后的文件
        • 6.4、git merge合并代码
        • 6.5、git 代码回退
      • 七、Git的GUI工具
      • 八、如何使用Git在Github上贡献代码

公众号:MCNU云原生,欢迎微信搜索关注,更多干货,及时掌握。

一、Git介绍

1.1、Git的作用

Git 是一个开源的分布式版本控制系统,用于管理一个或多个文件的整个历史记录。它有助于跟踪文件的变化,同时让多个开发者对同一个文件做出更改,并帮助开发者们在不同时间点进行历史查阅和版本比较。

1.2、Git的理念

Git 拥有一个独特的理念,即分布式版本控制系统。它采用客户端-服务器模式,将文件、数据和代码以分布式仓库的形式保存在不同的服务器上,以便用户进行版本控制、代码管理和共享。 Git 的分布式版本控制系统可以更快地处理版本控制任务,比传统的集中式版本控制系统更安全、更可靠、更高效。

1.3、Git的特点

  1. 分布式:每个开发者都拥有完整的代码库,可以离线工作,不需要依赖中央服务器。
  2. 非线性开发:可以创建多个分支,并行开发多个功能,通过合并分支进行代码整合。
  3. 高效性:Git 的设计可以快速地进行代码比较和合并,使得开发者可以快速迭代。
  4. 安全性:Git 使用 SHA-1 散列值来保证代码的完整性,具有防篡改的能力。
  5. 易于学习和使用:Git 的命令行操作简单,且有大量的可视化工具和第三方工具支持。
  6. 开放源代码:Git 是自由软件,任何人都可以自由地使用、修改和分发它。
  7. 大规模协作:Git 可以支持上千人同时协作开发同一项目,通过不同分支的合并和冲突解决保证项目的稳定性和质量。

1.4、Git对比SVN

Git 和 SVN 都是版本控制系统,用来管理软件开发过程中的源代码。它们具有一些相似的功能,但是也有一些显著的不同。

Git 是分布式版本控制系统,每个人都可以拥有 Git 仓库的完整拷贝,可以将代码更改推送给其他人,而不用依赖中央服务器。这使得 Git 具有更强大的灵活性,尤其是对于跨越多个组织的团队来说,它可以更快地提交和合并代码。

Git 具有更快的性能,因为它包含一个高效的文件夹索引系统,只跟踪文件本身的变化,而不是整个文件夹。Git 还支持分支,可以轻松地创建许多不同的分支,并利用它们来实现快速发布和实验。

SVN 是集中式版本控制系统,它的工作流程需要一个中央服务器来存储所有的文件及其更改。这使得 SVN 在管理大型团队的源代码时比较方便,因为它提供了一个共享的仓库,每个人都可以从中获取最新的代码。SVN 的另一个优点是,它支持自动合并所有变更,这样可以很容易地将多个开发者的更改合并到一起,而不会出现冲突。另外,SVN 可以跨多个操作系统使用,可以管理任何文件类型。

总的来说,Git 和 SVN 都是强大的版本控制系统,但各有优势。Git 更适合多个组织的团队,以及需要快速发布和实验的项目,而 SVN 则更适合大型团队,并且可以跨多个操作系统使用。

目前从应用和发展的广度来说,Git已经渐渐地在取代SVN的市场份额,所以可以说Git是必学的。

二、Git的概念

2.1、Git基础概念

想要使用Git需要先掌握Git的一些基础概念,更好地理解Git。

  1. 仓库(Repository):仓库是 Git 中最重要的概念之一,它是用来存储项目代码的地方。所有的修改记录都保存在仓库中,包括提交的代码历史、分支信息、标签等。当我们将修改记录提交到仓库后,它们就会成为代码的一部分。
  2. 提交(Commit):Git 中的提交是指将文件或代码变更记录下来,并且提交一个说明(commit message)。
  3. 分支(Branch):Git 中的分支是指代码版本的不同分支。可以创建新的分支来尝试新的代码,而不会影响到主分支。
  4. 合并(Merge):Git 中的合并是指将一个分支中的代码合并到另一个分支中。
  5. 拉取(Pull):Git 中的拉取是指将远程仓库中的代码更新到本地仓库中。
  6. 推送(Push):Git 中的推送是指将本地仓库中的代码更新到远程仓库中。
  7. 标签(Tag):Git 中的标签是指给某一个特定的提交打上一个标签,用于区分这个提交与其他提交的不同。
  8. 工作区(Working Directory):工作区是指项目代码所在的目录,也就是我们平时编辑和修改代码的地方,在工作区中,我们可以创建、修改和删除文件等。
  9. 暂存区(Staging Area):暂存区是介于工作区和仓库之间的一个缓冲区域。在提交代码之前,我们需要将修改过的文件添加到暂存区中。暂存区中保存了待提交的修改记录,包括哪些文件被修改了,修改了哪些部分,但还没有真正提交到仓库。

可以用下面的图来更好地理解这三个概念之间的关系:

         git add              git commit
工作区 --------------> 暂存区 --------------> 仓库

简单来说,我们在工作区中修改代码后,通过 git add 命令将修改的文件添加到暂存区,然后通过 git commit 命令将暂存区中的修改记录提交到仓库中。在提交之前,我们可以通过 git status 命令来查看工作区和暂存区的状态,以及哪些文件被修改过、添加到了暂存区等信息。

三、Git的基本操作

3.1、使用Git管理一个代码仓库的流程

  1. 初始化仓库:使用 git init 命令在本地创建一个新的 Git 仓库。
  2. 添加文件:将项目文件添加到仓库中,使用 git add 命令将修改后的文件添加到 Git 的暂存区中。
  3. 提交代码:使用 git commit 命令提交修改记录到 Git 仓库中。每次提交需要添加一条注释,简要描述修改了哪些内容。
  4. 创建分支:使用 git branch 命令创建一个新的分支,并切换到该分支。这个分支可以用于开发新的功能或修复错误,不会影响主分支(通常为 master)的代码。
  5. 合并分支:在开发新功能或修复错误后,需要将分支合并到主分支上,使用 git merge 命令将分支合并到主分支上。
  6. 拉取代码:在多人协作开发中,需要将远程仓库中的代码拉取到本地进行开发。使用 git pull 命令将远程仓库中的代码更新到本地仓库中。
  7. 推送代码:在完成开发并且测试通过后,需要将修改的代码推送到远程仓库中。使用 git push 命令将本地仓库中的代码更新到远程仓库中。
  8. 标记版本:当完成一个里程碑或者发布一个版本时,可以使用 git tag 命令创建一个新的标签,用于标记当前的版本号。

3.2、Git常用命令介绍

Git 是一个强大的版本控制工具,提供了众多命令来管理代码仓库,以下是一些常用的 Git 命令介绍:

  1. git init:初始化一个新的 Git 仓库。
  2. git add:将文件或目录添加到 Git 的暂存区中。
  3. git commit:将暂存区的修改记录提交到 Git 仓库中。
  4. git clone:从远程 Git 仓库中克隆一个副本到本地。
  5. git status:查看当前 Git 仓库的状态,包括哪些文件被修改过、添加到了暂存区等信息。
  6. git log:查看 Git 仓库中的提交历史记录,包括每个提交的作者、时间、注释等信息。
  7. git branch:查看 Git 仓库中的分支信息,并可以创建、删除、重命名等操作。
  8. git merge:将一个分支的修改合并到当前分支中。
  9. git pull:从远程 Git 仓库中拉取最新的代码到本地仓库中。
  10. git push:将本地 Git 仓库中的修改推送到远程 Git 仓库中。
  11. git checkout:切换到指定分支或提交。
  12. git tag:为当前的提交打上一个标签,用于标识当前版本。
  13. git remote:管理与远程仓库的连接,可以添加、删除、重命名等操作。
  14. git diff:查看当前修改和之前提交的版本之间的差异。

这些命令只是 Git 提供的众多命令中的一部分,可以根据具体需求进行选择和使用。同时,可以通过 git --help 命令查看 Git 的帮助文档,以获得更多的信息和帮助。

四、Git状态的变化

在Git中,有三个主要的概念:工作区、暂存区和仓库。它们分别代表了不同的状态,可以通过Git命令进行变化。

  1. 工作区(Working Directory):指的是你在本地电脑上实际修改的文件。当你修改了文件,但没有执行Git命令时,这些文件的状态就是“未跟踪”或“已修改”。
  2. 暂存区(Staging Area):也称为索引(Index),是一个临时的存储区域,用于存储即将被提交到Git仓库的文件。当你执行git add命令时,修改的文件会被添加到暂存区,此时这些文件的状态为“已暂存”。
  3. 仓库(Repository):也称为版本库,是Git用来存储历史提交记录的地方。当你执行git commit命令时,暂存区中的文件会被提交到仓库中,此时这些文件的状态为“已提交”。

下面是这些状态如何相互转换的说明:

  • 将修改的文件添加到暂存区:git add <file>,此时文件的状态由“未跟踪”或“已修改”变为“已暂存”;
  • 将暂存区的文件提交到仓库:git commit -m "commit message",此时文件的状态由“已暂存”变为“已提交”;
  • 查看文件状态:git status,此命令可以查看工作区、暂存区和仓库中文件的状态;
  • 撤销暂存区的修改:git reset <file>,此命令可以将暂存区的文件恢复为未暂存的状态;
  • 撤销工作区的修改:git checkout -- <file>,此命令可以将工作区的文件恢复到上次提交的状态;
  • 恢复仓库中的文件:git checkout <commit> <file>,此命令可以将指定提交中的文件恢复到当前分支上。

需要注意的是,上述命令在执行时需要指定对应的文件或提交。同时,这些命令还有更多的选项和参数可以使用,可以通过git help命令来查看Git的文档。

五、Git安装和配置

5.1、Git的安装

Windows和Mac下都有直接图形界面的安装方式,非常简单,不再赘述,主要讲讲Linux下的安装方式。

在Linux下安装Git需要先安装必要的依赖:

  • Centos/RedHat

    $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
    
  • Debian/Ubuntu

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev

下载最新版Git进行安装

$ tar -zxf git-2.39.2.tar.gz
$ cd git-2.39.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

5.2、Git的配置

git提供了git config命令用于配置或读取相应的工作环境变量,其主要配置文件分为三层,从上到下分别是:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • .git/config文件:仅针对当前项目有效,.git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

最重要的配置就是配置用户名和电子邮件,使用以下命令即可:

$ git config --global user.name "lucas"
$ git config --global user.email lucas@foxmail.com

如果想要查看已有配置信息,可以使用以下命令:

$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/install/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
user.name=lucas
user.email=lucas@foxmail.com
......

六、Git的高级操作

6.1、.gitignore文件的使用

在使用 Git 管理代码仓库时,有些文件或目录不应该被 Git 进行版本控制,例如编译输出文件、日志文件等。这时可以使用 .gitignore 文件来告诉 Git 忽略这些文件或目录。

.gitignore 文件是一个文本文件,列出了 Git 应该忽略的文件或目录的规则。每一行规则都是一个模式,可以包含通配符、反斜线等符号,表示需要忽略的文件或目录的名称或路径。例如:

# 忽略所有 .txt 文件
*.txt# 忽略 build 目录及其下的所有内容
/build/# 忽略指定的文件
example.log

在上述例子中,第一行规则使用了通配符 * 来匹配所有 .txt 结尾的文件;第二行规则使用了反斜线 / 来指定需要忽略的目录 build,并在末尾加上了斜线 / 来表示忽略该目录下的所有内容;第三行规则指定了需要忽略的文件名 example.log

.gitignore 文件可以放置在代码仓库的任何级别上,从仓库根目录到任意子目录都可以。一般建议将其放置在代码仓库的根目录下,以便更方便地管理和维护。

需要注意的是,如果在 .gitignore 文件中忽略了某个文件或目录,那么 Git 将不会对其进行版本控制,也不会将其包含在提交中,因此需要确保 .gitignore 文件中的规则正确地列出了需要忽略的文件或目录。

6.2、git diff的使用

git diff 是一个常用的 Git 命令,用于比较 Git 仓库中的不同版本之间的差异。它可以用于比较两个提交之间的差异,或比较工作目录中的文件与暂存区或最新提交之间的差异。

下面是 git diff 命令的一些常见用法:

  1. 比较工作目录中的文件与最新提交之间的差异:
git diff
  1. 比较工作目录中的文件与暂存区之间的差异:
git diff --cached
  1. 比较两个提交之间的差异:
git diff <commit1> <commit2>

其中 <commit1><commit2> 分别是要比较的两个提交的 SHA-1 标识符,可以使用提交的短标识符或分支名代替。

  1. 比较指定文件或目录的差异:
git diff <commit1> <commit2> <file>

其中 <file> 可以是文件或目录的路径,可以只比较某个文件或目录的差异。

  1. 比较两个分支之间的差异:
git diff <branch1>..<branch2>

其中 <branch1><branch2> 分别是要比较的两个分支的名称,可以使用分支的短名称或完整名称代替。

以上是 git diff 命令的一些常见用法,使用这些命令可以帮助开发者比较不同版本之间的差异,从而更好地管理代码仓库。

6.3、git如何处理代码冲突

在多人协作开发时,经常会出现代码冲突的情况。当两个或多个开发者同时修改同一个文件的同一部分时,就会发生冲突。Git 提供了一些命令和工具来帮助开发者处理代码冲突,下面是处理代码冲突的一般步骤:

6.3.1、更新本地代码库

在处理代码冲突之前,需要先更新本地代码库。使用 git pull 命令从远程仓库获取最新的代码。

6.3.2、查找冲突

在更新代码库之后,如果有冲突,使用 git status 命令查看冲突文件的状态,冲突文件的状态为 both modified

6.3.3、手动解决冲突

手动编辑冲突文件,将冲突部分保留下来,删除其他部分。可以使用编辑器或其他工具来帮助解决冲突。

6.3.4、添加解决后的文件

在解决冲突之后,使用 git add 命令将解决后的文件添加到暂存区。

6.3.5、提交解决后的文件

在将解决后的文件添加到暂存区后,使用 git commit 命令提交修改。

如果在解决冲突的过程中遇到问题或错误,可以使用 git merge --abort 命令取消合并操作,返回到合并前的状态。

需要注意的是,在多人协作开发时,最好避免同时修改同一个文件的同一部分,可以通过拆分任务、分工协作等方式来避免冲突的发生。此外,在处理冲突时,需要保持沟通和协作,及时解决问题。

6.4、git merge合并代码

Git merge是将两个或多个分支的代码合并到一个分支中的操作。在合并过程中,Git会自动尝试将两个分支的代码进行比较和合并,以生成一个新的合并提交。

以下是使用Git merge合并代码的一些步骤:

  1. 确保你已经切换到需要合并到的目标分支,例如master分支:git checkout master
  2. 运行merge命令来将目标分支与要合并的分支进行合并:git merge <branch-name>
  3. Git会尝试自动合并分支的代码。如果Git遇到了冲突,它会提示你手动解决冲突。你需要手动编辑有冲突的文件,以解决冲突。
  4. 如果合并成功,Git会生成一个新的合并提交。在这个提交消息中,Git会包含有关合并的信息,如何合并的分支等等。
  5. 最后,使用git push命令将合并的代码推送到远程仓库。

注意:在进行合并操作之前,建议先从远程仓库获取最新的代码并将其合并到本地分支。这样可以避免不必要的冲突和合并问题。

6.5、git 代码回退

在Git中,可以使用多种方法回退代码,包括撤销工作区的修改、恢复指定版本的代码等。下面介绍一些常用的回退代码的方法:

  1. 撤销工作区的修改:git checkout -- <file>,此命令可以将工作区的文件恢复到上次提交的状态。如果你已经使用git add将修改的文件添加到暂存区,但还没有提交,可以使用git reset HEAD <file>来撤销暂存区的修改。
  2. 恢复指定版本的代码:git checkout <commit> <file>,此命令可以将指定提交中的文件恢复到当前分支上。你可以使用git log命令来查看提交历史记录,并选择需要恢复的版本。如果你想恢复到某个历史提交的状态,可以使用git checkout <commit>命令,这将使得HEAD指向这个提交,并将工作区和暂存区都恢复到这个提交的状态。
  3. 回退提交:git revert <commit>,此命令可以创建一个新的提交,用于撤销指定提交的更改。该命令将会生成一个新的提交,包含了回退操作的更改,但是不会删除原始提交。如果你需要完全删除某个提交,可以使用git reset命令,但是需要注意,这将会删除该提交及其之后的提交,因此需要谨慎使用。

需要注意的是,在使用Git回退代码时,需要注意不要将未提交的修改丢失,并且需要保留历史提交记录。如果你不确定该如何回退代码,可以先创建一个新的分支,进行实验,确保不会对主分支造成不可逆的影响。

七、Git的GUI工具

Git GUI工具是一种可以通过图形界面操作Git的工具,它可以帮助用户更轻松地管理Git仓库、提交代码、查看历史记录等操作。下面是一些常用的Git GUI工具:

  1. GitKraken:这是一款跨平台的Git GUI工具,支持Windows、Mac和Linux系统。它提供了一套直观的图形界面,可以帮助用户更方便地管理Git仓库。GitKraken还支持一些高级功能,如分支管理、代码审核等。

  2. Sourcetree:这是一款免费的Git GUI工具,支持Windows和Mac系统。Sourcetree提供了一套简洁的界面,可以帮助用户更轻松地管理Git仓库。它还支持一些高级功能,如Git-flow工作流、Submodule管理等。

  3. GitHub Desktop:这是一款免费的Git GUI工具,支持Windows和Mac系统。GitHub Desktop提供了一套直观的界面,可以帮助用户更方便地管理Git仓库、提交代码等操作。它还支持GitHub网站的集成,可以更轻松地进行Pull Request等操作。

  4. Git Cola:这是一款开源的Git GUI工具,支持Windows、Mac和Linux系统。Git Cola提供了一套简洁的界面,可以帮助用户更轻松地管理Git仓库、提交代码等操作。它还支持一些高级功能,如分支管理、Submodule管理等。

  5. Git GUI:这是Git自带的GUI工具,可以在Windows、Mac和Linux系统中使用。Git GUI提供了一套简单的图形界面,可以帮助用户更轻松地进行Git操作。它支持大多数Git操作,如提交代码、查看历史记录等。

以上是一些常用的Git GUI工具,它们都提供了一套直观的图形界面,可以帮助用户更方便地管理Git仓库、提交代码等操作。不同的Git GUI工具有不同的特点和优缺点,用户可以根据自己的需要选择合适的工具。

八、如何使用Git在Github上贡献代码

  1. 在 GitHub 上创建一个账户并登录。

  2. 找到要贡献代码的项目,并在项目主页上点击 “Fork” 按钮,将项目复制到自己的账户下。

  3. 在自己的电脑上安装 Git 工具。

  4. 使用 Git 将项目克隆到本地计算机中。可以通过在命令行终端中使用以下命令来克隆项目:

    bashCopy code
    git clone https://github.com/你的用户名/项目名.git
    
  5. 在本地修改代码,并使用以下命令将更改提交到本地 Git 仓库:

    sqlCopy codegit add .
    git commit -m "提交信息"
    

    其中,git add . 命令将所有修改添加到暂存区,git commit 命令将提交更改,并在提交信息中描述更改。

  6. 将本地更改推送到自己的 GitHub 账户中:

    perlCopy code
    git push origin master
    

    这将把本地的更改推送到 GitHub 上。

  7. 在自己的 GitHub 账户上打开一个 Pull Request (PR) 请求,请求将更改合并到原始项目中。在 GitHub 上点击 “New pull request” 按钮,填写 PR 请求的标题和描述,并选择要合并的分支。

  8. 等待原始项目的维护者审核并接受你的 PR 请求。如果需要进一步修改,原始项目的维护者可以在 PR 请求中提出评论和建议。

  9. 当 PR 请求被接受并合并到原始项目后,你的代码贡献就完成了。

以上是在 GitHub 上贡献代码的基本步骤。在此过程中,你需要注意遵循项目的代码风格和贡献规范,避免与其他贡献者冲突,以便顺利地将你的代码贡献到项目中。

掌握以上知识,一般的Git操作完全不在话下!还等啥,行动吧。

相关文章:

我看谁还敢说不懂git

文章目录一、Git介绍1.1、Git的作用1.2、Git的理念1.3、Git的特点1.4、Git对比SVN二、Git的概念2.1、Git基础概念三、Git的基本操作3.1、使用Git管理一个代码仓库的流程3.2、Git常用命令介绍四、Git状态的变化五、Git安装和配置5.1、Git的安装5.2、Git的配置六、Git的高级操作6…...

Scratch少儿编程案例-算法练习-实现加减乘除练习题

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

【离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计】

离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计离线数仓-9-数据仓库开发DWS层设计要点-1d/nd/td表设计一、DWS层设计要点二、DWS层设计分析 - 1d/nd1.DWS层设计一&#xff1a;不考虑用户维度2.DWS层设计二&#xff1a;考虑用户维度2.DWS层设计三 &#xff1a;考虑用户商…...

python网络数据获取

文章目录1网络爬虫2网络爬虫的类型2.1通用网络爬虫2.1.12.1.22.2聚焦网络爬虫2.2.1 基于内容评价的爬行策略2.2.2 基于链接结构的爬行策略2.2.3基于增强学习的爬行策略2.2.4基于语境图的爬行策略2.3增量式网络爬虫深层网页爬虫3网络爬虫基本架构3.1URL管理模块3.2网页下载模块3…...

[Datawhale][CS224W]图机器学习(六)

目录一、简介二、概述三、算法四、PageRank的缺点五、Python实现迭代法参考文献一、简介 PageRank&#xff0c;又称网页排名、谷歌左侧排名、PR&#xff0c;是Google公司所使用的对其搜索引擎搜索结果中的网页进行排名的一种算法。 佩奇排名本质上是一种以网页之间的超链接个…...

aws ecr 使用golang实现的简单镜像转换工具

https://pkg.go.dev/github.com/docker/docker/client#section-readme 通过golang实现一个简单的镜像下载工具 总体步骤 启动一台海外区域的ec2实例安装docker和awscli配置凭证访问国内ecr仓库编写web服务实现镜像转换和自动推送 安装docker和awscli sudo yum remove awsc…...

【20230225】【剑指1】分治算法(中等)

1.重建二叉树class Solution { public:TreeNode* traversal(vector<int>& preorder,vector<int>& inorder){if(preorder.size()0) return NULL;int rootValuepreorder.front();TreeNode* rootnew TreeNode(rootValue);//int rootValuepreorder[0];if(preo…...

「JVM 高效并发」Java 线程

进程是资源分配&#xff08;内存地址、文件 I/O 等&#xff09;的基本单位&#xff0c;线程是执行调度&#xff08;处理器资源调度&#xff09;的基本单位&#xff1b; Loom 项目若成功为 Java 引入纤程&#xff08;Fiber&#xff09;&#xff0c;则线程的执行调度单位可能变为…...

ADAS-可见光相机之Cmos Image Sensor

引言 “ 可见光相机在日常生活、工业生产、智能制造等应用有着重要的作用。在ADAS中更是扮演着重要的角色&#xff0c;如tesla model系列全车身10多个相机&#xff0c;不断感知周围世界。本文着重讲解下可见光相机中的CIS(CMOS Image Sensor)。” 定义 光是一种电磁波&…...

【ESP 保姆级教程】玩转emqx MQTT篇③ ——封装 EmqxIoTSDK,快速在项目集成

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-02-26 ❤️❤️ 本篇更新记录 2023-02-26 ❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请…...

Python自动化测试面试题-编程篇

前言 随着行业的发展&#xff0c;编程能力逐渐成为软件测试从业人员的一项基本能力。因此在笔试和面试中常常会有一定量的编码题&#xff0c;主要考察以下几点。 基本编码能力及思维逻辑基本数据结构&#xff08;顺序表、链表、队列、栈、二叉树&#xff09;基本算法&#xf…...

CIT 594 Module 7 Programming AssignmentCSV Slicer

CIT 594 Module 7 Programming Assignment CSV Slicer In this assignment you will read files in a format known as “comma separated values” (CSV), interpret the formatting and output the content in the structure represented by the file. Q1703105484 Learning …...

链路追踪——【Brave】第一遍小结

前言 微服务链路追踪系列博客&#xff0c;后续可能会涉及到Brave、Zipkin、Sleuth内容的梳理。 Brave 何为Brave&#xff1f; github地址&#xff1a;https://github.com/openzipkin/brave Brave是一个分布式追踪埋点库。 #mermaid-svg-riwF9nbu1AldDJ7P {font-family:"…...

Vision Transformer(ViT)

1. 概述 Transformer[1]是Google在2017年提出的一种Seq2Seq结构的语言模型&#xff0c;在Transformer中首次使用Self-Atttention机制完全代替了基于RNN的模型结构&#xff0c;使得模型可以并行化训练&#xff0c;同时解决了在基于RNN模型中出现了长距离依赖问题&#xff0c;因…...

104-JVM优化

JVM优化为什么要学习JVM优化&#xff1a; 1&#xff1a;深入地理解 Java 这门语言 我们常用的布尔型 Boolean&#xff0c;我们都知道它有两个值&#xff0c;true 和 false&#xff0c;但你们知道其实在运行时&#xff0c;Java 虚拟机是 没有布尔型 Boolean 这种类型的&#x…...

QML 颜色表示法

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 如果你经常需要美化样式(最常见的有:文本色、背景色、边框色、阴影色等),那一定离不开颜色。而在 QML 中,颜色的表示方法有多种:颜色名、十六进制颜色值、颜色相关的函数,一起来学习一下吧。 老规矩…...

基础数据结构--线段树(Python版本)

文章目录前言特点操作数据存储updateLazy下移查询实现前言 月末了&#xff0c;划个水&#xff0c;赶一下指标&#xff08;更新一些活跃值&#xff0c;狗头&#xff09; 本文主要是关于线段树的内容。这个线段树的话&#xff0c;主要是适合求解我们一个数组的一些区间的问题&am…...

【micropython】SPI触摸屏开发

背景&#xff1a;最近买了几块ESP32模块&#xff0c;看了下mircopython支持还不错&#xff0c;所以买了个SPI触摸屏试试水&#xff0c;记录一下使用过程。硬件相关&#xff1a;SPI触摸屏使用2.4寸屏幕&#xff0c;常见淘宝均可买到&#xff0c;驱动为ILI9341&#xff0c;具体参…...

【云原生】k8s中Pod进阶资源限制与探针

一、Pod 进阶 1、资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还…...

AI - stable-diffusion(AI绘画)的搭建与使用

最近 AI 火的一塌糊涂&#xff0c;除了 ChatGPT 以外&#xff0c;AI 绘画领域也有很大的进步&#xff0c;以下几张图片都是 AI 绘制的&#xff0c;你能看出来么&#xff1f; 一、环境搭建 上面的效果图其实是使用了开源的 AI 绘画项目 stable-diffusion 绘制的&#xff0c;这是…...

应用场景五: 西门子PLC通过Modbus协议连接DCS系统

应用描述&#xff1a; 西门子PLC&#xff08;S7200/300/400/200SMART&#xff09;通过桥接器可以支持ModbusRTU串口和ModbusTCP以太网&#xff08;有线和无线WIFI同时支持&#xff09;两种通讯方式连接DCS系统&#xff0c;不需要编程PLC通讯程序&#xff0c;直接在模块中进行地…...

我继续问了ChatGPT关于SAP顾问职业发展前景的问题,大家感受一下

目录 SAP 顾问 跟其他IT工作收入情况相比是怎么样的&#xff1f; 如何成为SAP FICO 优秀的顾问 要想成为SAP FICO 优秀的顾问 &#xff0c;需要ABA开发技能吗 SAP 顾问中哪个类型收入最多&#xff1f; 中国的ERP软件能够取代SAP吗&#xff1f; 今天我继续撩 ChatGPT。随便问…...

Python小白入门---00开篇介绍(简单了解一下)

Python 小白入门 系列教程 第一部分&#xff1a;Python 基础 介绍 Python 编程语言安装 Python 环境变量和数据类型运算符和表达式控制流程语句函数和模块异常处理 第二部分&#xff1a;Python 标准库和常用模块 Python 标准库简介文本处理和正则表达式文件操作和目录操作时…...

【算法基础】C++STL容器

一、Vector 1. 初始化(定义) (1)vector最基本的初始化: vector <int> a;(2)定义长度为10的vector: vector <int> a(10);(3)定义长度为10的vector,并且把所有元素都初始化为-3: vector <int...

【经典蓝牙】蓝牙 A2DP协议分析

A2DP 介绍 A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议&#xff0c; 用于传输单声道&#xff0c; 双声道音乐&#xff08;一般在 A2DP 中用于 stereo 双声道&#xff09; &#xff0c; 典型应用为蓝牙耳机。 A2DP旨在通过蓝牙连接传输高质量的立体声音…...

Objective-C 构造方法的定义和声明规范

总目录 iOS开发笔记目录 从一无所知到入门 文章目录源码中 NSArray 的构造方法与命名规律自定义类的构造方法命名截图代码输出源码中 NSArray 的构造方法与命名规律 interface NSArray<ObjectType> (NSArrayCreation) (instancetype)array;(instancetype)arrayWithObject…...

Matlab图像处理学习笔记

Matlab图像处理 Matlab基础 数组 1、向量 生成方式1: x = [值] x = [1 2 3] % 行向量 y = [4; 5; 6] % 列向量 z = x % 行向量转列向量...

笔记(三)——迭代器的基础理论知识

迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。它提供对一个容器中的对象的访问方法&#xff0c;并且定义了容器中对象的范围。一、vector容器的iterator类型vector容器的迭代器属于随机访问迭代器&#xff0c;一次可以移动多个位置。vector<int>::iterator …...

没有公网ip怎么外网访问nas?快解析内网端口映射到公网

对于NAS用户而言&#xff0c;外网访问是永远绕不开的话题。拥有NAS后的第一个问题&#xff0c;就是搞定NAS的外网访问。不过众所周知&#xff0c;并不是所有的小伙伴都能得到公网IP&#xff0c;由于IPV4资源的枯竭&#xff0c;一般不会被分配到公网IP。公网IP在很大程度上除了让…...

spring integration使用:消息转换器

系列文章目录 …TODO spring integration开篇&#xff1a;说明 …TODO spring integration使用&#xff1a;消息路由 spring integration使用&#xff1a;消息转换器 spring integration使用&#xff1a;消息转换器系列文章目录前言消息转换器&#xff08;或者叫翻译器&#x…...

网站上做网上支付功能/免费创建属于自己的网站

企业进行对数据库执行刷数据工作&#xff0c;一段很长的语句希望同时成功或者失败时用到。 1.建立测试环境 /************************************************************* Code formatted by SoftTree SQL Assistant ?v6.5.278* Time: 2016/9/29 21:33:55****************…...

哪些b2b网站做游戏机比较好/seo高级优化方法

1、首先他们底层数据结构不一样&#xff0c;ArrayList底层结构是数组&#xff0c;LinkedList底层结构是链表&#xff1b; 2、数据结构决定了&#xff0c;ArrayList在查询上的效率较高&#xff0c;而LinkedList在删除和添加上的效率更高&#xff1b;&#xff08;需要注意的一点是…...

如何做企业网站内链/上海百度公司总部

在 Java 的线程安全是老生常谈的问题。经常是各种写法说法一大堆&#xff0c;感觉很多的来源都是在面试的时候&#xff0c;很多考官都喜欢问线程安全的问题。 起源 这个问题的起源就是 Java 是支持多线程的。如果对进程和线程是什么不太清楚的话&#xff0c;可以恶补下大学课…...

wordpress标题栏添加星期几/线上销售渠道有哪些

http://blog.csdn.net/xlgen157387/article/details/50353317转载于:https://www.cnblogs.com/ganbo/p/7987681.html...

一个企业做网站推广的优势/百度导航官网

1.新建Gui工程&#xff0c;在主界面上添加一个标签label&#xff0c;并设置其显示内容为“0000-00-00 00:00:00 星期日”。2.在mainwindow.h中添加槽函数声明。private slots:void timerUpDate();3.在mainwindow.cpp中添加代码。添加#include 的头文件包含&#xff0c;这样就包…...

做代售机票网站程序/找索引擎seo

1类型转换&#xff1a; //将string类型的123转为int类型的123//方式1int number1 Convert.ToInt32("123");Console.WriteLine(number1);//方式2int number2 int.Parse("456");Console.WriteLine(number2);//转换失败//int number3 Convert.ToInt32(&quo…...