Git简介与工作原理:了解Git的基本概念、版本控制系统和分布式版本控制的工作原理

在这里插入图片描述

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁
🦄 个人主页——libin9iOak的博客🎐
🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

文章目录

  • Git简介与工作原理:了解Git的基本概念、版本控制系统和分布式版本控制的工作原理
    • 摘要:
    • 1. 引言
    • 2. 什么是Git?
      • 2.1 历史背景与由来
      • 2.2 特点与优势
        • 2.2.1 分布式版本控制
        • 2.2.2 强大的分支管理
        • 2.2.3 本地化操作
        • 2.2.4 数据完整性
        • 2.2.5 多种工作流支持
    • 3. 版本控制系统简介
      • 3.1 集中式版本控制系统
        • 3.1.1 优点
        • 3.1.2 缺点
      • 3.2 分布式版本控制系统
        • 3.2.1 优点
        • 3.2.2 缺点
    • 4. Git的核心概念
      • 4.1 仓库(Repository)
        • 使用场景:
      • 4.2 提交(Commit)
        • 使用场景:
      • 4.3 分支(Branch)
        • 使用场景:
      • 4.4 合并(Merge)
        • 使用场景:
      • 4.5 标签(Tag)
        • 使用场景:
    • 5. Git的工作原理
      • 5.1 提交对象(Commit Object)
        • 工作原理:
      • 5.2 树对象(Tree Object)
        • 工作原理:
      • 5.3 引用(Reference)
        • 工作原理:
    • 6. 分布式版本控制的优势
      • 6.1 离线操作
      • 6.2 协作性能
      • 6.3 分支管理
      • 6.4 安全性
    • 7. Git的基本操作
      • 7.1 初始化Git仓库
      • 7.2 文件跟踪与提交
      • 7.3 查看提交历史
      • 7.4 创建分支
      • 7.5 切换分支
      • 7.6 合并分支
      • 7.7 查看状态
    • 8. 远程仓库与协作
      • 8.1 远程仓库的概念
      • 8.2 使用远程仓库
        • 8.2.1 克隆远程仓库
        • 8.2.2 添加远程仓库
      • 8.3 团队协作流程
        • 8.3.1 拉取(Pull)
        • 8.3.2 推送(Push)
        • 8.3.3 合并请求(Pull Request)
    • 9. 解决代码冲突
    • 10. 附录:Git常用命令速查表
    • 11. 总结
    • 12. 参考资料
  • 原创声明

在这里插入图片描述

Git简介与工作原理:了解Git的基本概念、版本控制系统和分布式版本控制的工作原理

摘要:

本篇博客将带您了解Git版本控制系统的基本概念和工作原理。Git在现代软件开发中扮演着重要的角色,通过本文的介绍,您将了解Git的历史背景、核心概念、工作原理以及与分布式版本控制系统的优势比较。同时,我们还会介绍Git的基本操作、远程仓库与协作、解决代码冲突的方法和技巧,并提供Git常用命令的速查表供您参考。

1. 引言

Git是目前最流行的版本控制系统之一,在现代软件开发中扮演着重要的角色。它能够有效地跟踪文件变化、协作开发,并存储项目的历史记录。本文的目的是向读者介绍Git的基本概念和工作原理,帮助初学者快速上手使用Git,并帮助有经验的开发者深入了解Git的内部机制。

2. 什么是Git?

Git是一个免费、开源的分布式版本控制系统,由Linus Torvalds于2005年创建。它因其速度快、灵活性高和强大的分支管理能力而广受欢迎。

2.1 历史背景与由来

Git的历史可以追溯到2005年,当时Linux内核社区使用BitKeeper作为版本控制系统。然而,由于一些争议和限制,Linux社区需要一个替代方案。于是,Linus Torvalds决定亲自开发一个新的版本控制系统,这就是Git的由来。

Linus Torvalds在Git的设计和开发过程中借鉴了一些现有版本控制系统的优点,并加入了自己的创新。Git最初的目标是为了更好地管理Linux内核的开发,但其简洁高效的设计很快引起了全球开发者的关注,逐渐成为最受欢迎的版本控制系统之一。

2.2 特点与优势

Git之所以如此受欢迎,主要归功于以下特点与优势:

2.2.1 分布式版本控制

Git是一种分布式版本控制系统,每个开发者都可以在本地拥有完整的代码仓库,不必依赖中央服务器。这样的设计使得团队成员可以在没有网络连接的情况下继续工作,提高了开发的灵活性和效率。

2.2.2 强大的分支管理

Git在分支管理方面表现出色。创建、合并和切换分支非常快速和高效,这为团队的协同开发和并行工作提供了便利。分支的使用使得开发者可以独立开发新功能或修复bug,而不会影响主线代码,最后再将其合并回主分支。

2.2.3 本地化操作

Git的所有操作都是本地化的,无需联网即可进行版本控制操作。这使得Git的速度非常快,开发者可以快速地提交、切换分支和查看历史记录。

2.2.4 数据完整性

Git中的所有数据都以SHA-1哈希值存储,这意味着每个文件和版本都有唯一的标识,并保证数据的完整性和安全性。

2.2.5 多种工作流支持

Git适用于多种开发工作流程,可以根据团队的需求和开发模式来选择合适的工作流。

总的来说,Git作为一个高效、灵活且功能强大的版本控制系统,为开发者提供了极大的便利和支持,成为现代软件开发中不可或缺的工具。

3. 版本控制系统简介

版本控制系统是一种记录文件内容变化的系统,它对文件的每次修改都进行记录和保存。版本控制系统的主要目的是帮助团队成员协同开发,并有效地管理代码。

3.1 集中式版本控制系统

在集中式版本控制系统中,所有的文件和版本都存储在中央服务器上。开发者通过与服务器交互来获取文件的最新版本,然后进行开发工作。代表性的集中式版本控制系统包括SVN(Subversion)。

3.1.1 优点

  • 管理简单:所有版本信息集中存储在服务器上,易于管理和控制。
  • 安全性高:服务器存储所有文件,团队成员只能通过服务器进行协作,可以有效保护代码安全。

3.1.2 缺点

  • 单点故障:如果服务器发生故障,所有团队成员将无法正常工作。
  • 需要联网:开发者必须联网才能进行版本控制操作,限制了团队的工作灵活性。

3.2 分布式版本控制系统

分布式版本控制系统中,每个开发者都拥有完整的代码仓库,包含完整的历史记录。开发者可以在本地进行版本控制操作,不需要始终依赖中央服务器。代表性的分布式版本控制系统包括Git、Mercurial等。

3.2.1 优点

  • 分布式协作:每个开发者都有完整的代码仓库,可以在本地独立开发和提交,然后再将修改推送到远程仓库,从而实现分布式协作。
  • 离线操作:由于每个开发者本地拥有完整的代码仓库,可以在没有网络连接时继续工作,不受网络状态的影响。

3.2.2 缺点

  • 初始复制较慢:在开始时,需要将远程仓库克隆到本地,这可能需要一些时间。
  • 学习曲线较陡:相对于集中式版本控制系统,分布式版本控制系统有一定的学习曲线。

综上所述,版本控制系统是现代软件开发不可或缺的工具,而分布式版本控制系统具有更多的优势,因其灵活性和高效性而成为首选。Git作为最流行的分布式版本控制系统之一,拥有强大的功能和便利

的特性,是众多开发团队的选择。

4. Git的核心概念

Git作为一个分布式版本控制系统,有一些核心概念,这些概念是理解Git工作原理和使用Git的关键。在本节中,我们将介绍Git的核心概念,并解释它们在项目开发中的作用和使用场景。

4.1 仓库(Repository)

Git仓库是存储项目所有文件、历史记录和元数据的地方。它可以理解为项目的数据库,保存了项目从创建到最新状态的所有信息。在仓库中,每个提交(Commit)都包含了项目的一个快照和相关的元数据,这样就可以随时回溯到任意历史状态。

使用场景:

  • 创建新项目:通过在本地或远程服务器上初始化一个Git仓库,您可以开始一个新的项目。
  • 克隆项目:通过从远程仓库克隆一个Git仓库,您可以复制项目到本地并开始参与开发。
  • 回溯历史:通过查看提交历史,您可以回溯到项目的不同版本,了解每个版本之间的差异和变化。

4.2 提交(Commit)

提交是Git中最基本的操作,它代表了项目中的一个快照或一个代码的更改。每次提交都会生成一个唯一的SHA-1哈希值,用于标识该次提交。每个提交都包含了作者、提交时间、提交信息以及指向它所包含的快照和上一个提交的引用。

使用场景:

  • 保存更改:当您在项目中修改了文件后,将这些更改提交到仓库,就会生成一个新的提交,记录了这些更改的状态。
  • 添加描述:每次提交都需要添加提交信息,描述本次更改的内容,方便其他开发者理解您的工作内容。

4.3 分支(Branch)

分支是Git中一个非常重要的概念,它是项目的一个独立线路,是从某个提交派生出来的指针。默认情况下,Git会创建一个名为"master"的主分支,但您也可以创建其他分支来并行开发不同的功能或修复bug。

使用场景:

  • 并行开发:通过创建不同的分支,不同开发者可以同时处理不同的任务,而互不干扰。
  • 临时修复:当项目的主分支出现问题时,您可以创建一个临时分支来快速修复bug,而不影响主分支的开发。

4.4 合并(Merge)

合并是将两个分支的更改合并成一个新的提交,以使两个分支的历史记录保持同步。在合并过程中,Git会尝试自动合并更改,但有时可能会出现冲突,需要手动解决。

使用场景:

  • 将功能集成到主分支:当一个功能开发完成后,您可以将该功能分支合并到主分支,以便发布新功能。
  • 解决冲突:当两个分支上有相同文件的不同修改时,合并会产生冲突。您需要手动解决冲突,以确保合并成功。

4.5 标签(Tag)

标签是用于标记项目中的重要点,比如版本发布。与分支不同,标签是不可变的,一旦创建后就不会再改变。它们通常用于指定版本号或重要的里程碑。

使用场景:

  • 版本发布:在发布一个版本时,您可以创建一个标签来标记该版本的稳定状态,方便日后回溯和参考。
  • 重要事件:当项目达到一个重要的里程碑,比如完成一个重要功能或修复一个重要的问题时,可以创建一个标签来标记这个事件。

以上是Git的核心概念,它们为项目开发提供了强大的版本控制和管理能力。理解这些概念将帮助您更好地使用Git,并在团队协作中发挥更大的作用。

5. Git的工作原理

Git的工作原理涉及到一些重要的概念,例如提交对象(Commit Object)、树对象(Tree Object)和引用(Reference)。深入了解Git的工作原理将帮助我们更好地理解Git是如何跟踪文件变化和存储历史记录的。

5.1 提交对象(Commit Object)

提交对象是Git中的基本单位,每次提交都会生成一个唯一的提交对象。提交对象包含了当前项目的快照信息和提交相关的元数据,比如作者、提交时间和提交信息。

工作原理:

当您提交更改时,Git会创建一个提交对象,该对象包含了项目文件的快照,记录了这次提交的作者、时间和提交信息,以及指向前一个提交对象的引用。这样就形成了一条提交历史链,可以方便地回溯项目的历史状态。

5.2 树对象(Tree Object)

树对象是一个目录结构的快照,它对应着项目文件在某个提交时的状态。每次提交都会生成一个树对象,其中包含了当前项目文件和目录的结构和内容信息。

工作原理:

当您提交更改时,Git会创建一个树对象,该对象对应着当前项目文件和目录的结构,记录了文件的位置、名称和内容信息。这样就可以通过树对象快速查找和恢复项目文件在某个提交时的状态。

5.3 引用(Reference)

引用是指向提交对象的指

针,它可以是分支、标签或其他指向提交的指针。引用可以帮助我们标记提交历史中的重要点,方便查找和管理。

工作原理:

当您创建一个分支或标签时,Git会创建一个引用,它指向某个提交对象。随着新的提交产生,引用也会随之移动,始终指向最新的提交。通过引用,您可以方便地找到不同分支或标签对应的提交历史。

通过了解Git的工作原理,我们可以更深入地理解Git是如何跟踪文件变化、保存历史记录和实现版本控制的。这些核心概念和工作原理为我们在实际项目中更加灵活和高效地使用Git提供了基础。

6. 分布式版本控制的优势

分布式版本控制系统(DVCS)相较于集中式版本控制系统(CVCS)具有许多优势,这些优势使得分布式版本控制系统如Git越来越受欢迎。以下是分布式版本控制的优势:

6.1 离线操作

在分布式版本控制系统中,每个开发者都有完整的代码仓库,不必始终依赖中央服务器。这意味着即使在没有网络连接的情况下,开发者仍然可以进行版本控制操作和提交更改。这种离线操作的能力在实际开发中非常有用,尤其是在旅途或网络连接不稳定的情况下,团队成员可以持续工作而不受网络状态的影响。

6.2 协作性能

由于每个开发者都拥有完整的代码仓库,分布式版本控制系统可以支持更高效的协作方式。开发者可以在本地创建分支、提交更改和合并,而不必每次都依赖中央服务器。这种分散的协作模式可以大大减轻服务器的负担,提高团队的协作性能和开发效率。

6.3 分支管理

分布式版本控制系统在分支管理方面表现出色。创建、合并和切换分支都非常快速和高效,使得团队成员可以并行开发不同的功能或修复bug。每个开发者都可以在本地创建分支,独立进行开发,而不必影响主线代码。这种灵活的分支管理使得团队的开发流程更加流畅和灵活。

6.4 安全性

由于每个开发者都有本地完整的代码仓库,分布式版本控制系统具有更高的安全性。即使中央服务器发生故障或数据丢失,团队成员的本地仓库仍然包含完整的项目历史记录,可以用于恢复和重建。这种安全性和冗余性使得分布式版本控制系统在保护项目数据方面更加可靠。

综上所述,分布式版本控制系统的离线操作、协作性能、分支管理和安全性等优势,使得它成为现代软件开发中首选的版本控制系统。Git作为其中最流行和广泛使用的分布式版本控制系统,为开发团队提供了强大的版本控制能力和优秀的协作体验。

7. Git的基本操作

在本节中,我们将介绍Git的基本操作,这些操作是使用Git进行版本控制的关键步骤。对于初学者来说,掌握这些基本操作是非常重要的。

7.1 初始化Git仓库

在开始使用Git之前,您需要在项目目录中初始化一个Git仓库。使用以下命令来初始化Git仓库:

git init

7.2 文件跟踪与提交

在Git中,您需要明确告诉Git哪些文件需要进行版本控制。使用以下命令来将文件添加到暂存区:

git add <file1> <file2> ...

一旦您添加了所有要提交的文件到暂存区,使用以下命令来提交这些更改:

git commit -m "提交说明"

7.3 查看提交历史

您可以使用以下命令来查看项目的提交历史:

git log

7.4 创建分支

在Git中,创建分支是非常简单的。使用以下命令来创建一个新的分支:

git branch <branch-name>

7.5 切换分支

切换分支是非常常见的操作。使用以下命令来切换到其他分支:

git checkout <branch-name>

7.6 合并分支

当您在其他分支完成了开发工作后,可以将该分支合并到主分支。使用以下命令来合并分支:

git merge <branch-name>

7.7 查看状态

您可以使用以下命令来查看项目的当前状态:

git status

以上是Git的一些基本操作,这些操作可以帮助您开始使用Git进行版本控制。熟练掌握这些基本操作后,您将能更好地利用Git的功能,并在团队协作中发挥更大的作用。

8. 远程仓库与协作

8.1 远程仓库的概念

远程仓库是位于云端或其他服务器上的Git仓库,用于存储项目的代码和版本历史。它可以是像GitHub、GitLab等代码托管平台,也可以是您自己搭建的服务器。远程仓库允许多个开发者在不同的地方协同工作,并可以通过推送(Push)和拉取(Pull)操作来同步代码。

8.2 使用远程仓库

8.2.1 克隆远程仓库

要开始与远程仓库进行协作,首先需要将远程仓库克隆到本地。使用以下命令来克隆远程仓库:

git clone <remote-url>

其中,<remote-url>是远程仓库的URL地址,通常以.git结尾。

8.2.2 添加远程仓库

在克隆远程仓库后,Git会自动将其添加为默认远程仓库,并命名为origin。您也可以添加其他远程仓库,使用以下命令:

git remote add <remote-name> <remote-url>

其中,<remote-name>是远程仓库的别名,<remote-url>是远程仓库的URL地址。

8.3 团队协作流程

8.3.1 拉取(Pull)

在团队协作中,开发者通常需要先拉取远程仓库的最新代码,以便与其他开发者的工作保持同步。使用以下命令拉取远程分支的最新代码:

git pull <remote-name> <branch-name>

其中,<remote-name>是远程仓库的别名,<branch-name>是要拉取的分支名称。

8.3.2 推送(Push)

当您在本地完成了新的提交后,可以将这些更改推送到远程仓库,使其他开发者可以看到您的工作。使用以下命令推送本地分支的更改到远程仓库:

git push <remote-name> <branch-name>

8.3.3 合并请求(Pull Request)

在使用像GitHub、GitLab这样的代码托管平台时,团队成员通常使用合并请求来将自己的更改合并到主分支中。合并请求是一种让团队成员审查和讨论代码更改的机制。其他团队成员可以查看您的合并请求,并提供反馈和建议,确保代码的质量和正确性。

9. 解决代码冲突

在团队协作中,当多个开发者同时修改同一个文件或同一部分代码时,可能会发生代码冲突。代码冲突意味着Git无法自动合并这些更改,需要开发者手动解决冲突。

解决代码冲突的方法和技巧:

  1. 查看冲突

    在发生冲突后,使用git status命令查看冲突文件,Git会在文件中标记出冲突的部分,例如:

    <<<<<<< HEAD
    代码在本地分支的更改
    =======
    代码在远程分支的更改
    >>>>>>> remote/branch
    
  2. 手动编辑文件

    打开冲突文件,手动编辑以解决冲突。您需要决定保留哪个更改或进行修改来合并两个版本。

  3. 提交解决冲突后的文件

    解决完冲突后,使用git add命令将冲突文件标记为已解决。然后使用git commit提交解决冲突后的文件。

  4. 重新拉取和推送

    在解决冲突并提交后,确保您的本地分支是最新的,使用git pull拉取远程分支的最新代码,并使用git push推送您的更改到远程仓库。

解决代码冲突是团队协作中常见的任务,了解如何正确解决冲突对于保持项目的稳定和团队的协作非常重要。及时解决冲突并保持代码的一致性可以使团队开发更加顺利和高效。

10. 附录:Git常用命令速查表

以下是Git常用命令的速查表,供读者在实际使用中参考:

  1. 初始化Git仓库:

    git init
    
  2. 克隆远程仓库:

    git clone <remote-url>
    
  3. 添加文件到暂存区:

    git add <file1> <file2> ...
    
  4. 提交更改:

    git commit -m "提交说明"
    
  5. 查看提交历史:

    git log
    
  6. 创建分支:

    git branch <branch-name>
    
  7. 切换分支:

    git checkout <branch-name>
    
  8. 合并分支:

    git merge <branch-name>
    
  9. 查看项目状态:

    git status
    
  10. 添加远程仓库:

    git remote add <remote-name> <remote-url>
    
  11. 拉取远程分支代码:

    git pull <remote-name> <branch-name>
    
  12. 推送本地分支代码到远程仓库:

    git push <remote-name> <branch-name>
    
  13. 解决代码冲突:

    • 查看冲突:使用git status命令查看冲突文件。
    • 手动编辑文件:打开冲突文件,解决冲突并保存。
    • 提交解决冲突后的文件:使用git add标记冲突文件为已解决,并使用git commit提交更改。

11. 总结

本文介绍了Git的基本概念和工作原理,探讨了分布式版本控制系统相较于集中式系统的优势。我们学习了Git的核心概念,包括仓库、提交、分支、合并和标签等。了解了Git的工作原理,包括提交对象、树对象和引用的作用。同时,我们学习了在团队协作中使用远程仓库,进行拉取、推送和合并请求的操作。

Git作为现代软件开发中最流行的版本控制系统,为团队协作和项目管理提供了强大的支持。熟练掌握Git的基本操作和工作原理,可以使开发团队更加高效地协作,有效地管理项目,保障代码的稳定性和质量。

鼓励读者在实际项目中广泛应用Git,并充分利用速查表,快速高效地使用Git,将版本控制成为项目开发中的得力助手。

12. 参考资料

  1. Pro Git (2nd Edition) by Scott Chacon and Ben Straub

    • 这本书是Git的权威指南,详细介绍了Git的原理、使用方法和最佳实践,是学习Git的重要参考资料。
  2. Official Git Documentation (git-scm.com)

    • Git官方文档是学习Git的官方来源,包含了Git的全部命令和使用说明,对于深入了解Git的工作原理非常有帮助。
  3. GitHub Guides (guides.github.com)

    • GitHub提供了一系列Git和GitHub的教程,涵盖了从入门到高级使用的内容,对于学习Git的实际操作和团队协作有很大帮助。
  4. Atlassian Git Tutorials (atlassian.com/git/tutorials)

    • Atlassian提供了一系列Git教程,涵盖了版本控制基础、团队协作、解决冲突等方面的内容,非常适合新手入门。
  5. Git for Teams: A User-Centered Approach to Creating Efficient Workflows in Git by Emma Jane Hogbin Westby

    • 这本书着重讲解团队协作中如何使用Git进行版本控制,提供了实用的工作流程和最佳实践。
  6. Git Internals by Scott Chacon

    • 这本书深入探讨了Git的内部工作原理,对于理解Git的底层机制非常有帮助。
  7. Git Version Control Cookbook by Aske Olsson and Rasmus Voss

    • 这本书提供了许多实用的Git使用技巧和实例,适合那些想要深入了解Git的高级用法的读者。

希望本篇博客能为您提供对Git简介与工作原理的全面了解。通过掌握Git的基本概念和工作原理,您将在软件开发过程中拥有更好的版本控制能力,提高团队的协作效率。开始您的Git学习之旅吧!

原创声明

======= ·

  • 原创作者: 猫头虎

作者wx: [ libin9iOak ]

  • 今日已学习

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day33哈希表

1.哈希表 常见的哈希表分为三类&#xff0c;数组&#xff0c;set&#xff0c;map&#xff0c;C语言的话是不是只能用数组和 2.例题 题目一&#xff1a; 分析&#xff1a;题目就是判断两个字符串出现的次数是否相同&#xff1b; 1&#xff09;哈希表26个小写字母次数初始化为0&…

RB-tree(红黑树)详解

RB-tree(红黑树) 红黑树的规则如下&#xff1a; 1.每个节点不是红色就是黑色 2.根节点为黑色 3.如果节点为红色&#xff0c;那么它的子节点必须为黑色 4.任何一个节点到NULL&#xff08;树的尾端&#xff09;的任何路径所包含的黑节点个数相同 简而言之就是每个路径的黑色节点数…

模拟量输出FC S_RTI(信捷C语言源代码)

模拟量输出FC SCL源代码请查看下面博客: PLC模拟量输出 模拟量转换FC S_RTI_博途模拟量转换指令_RXXW_Dor的博客-CSDN博客1、本文主要展示西门子博途模拟量输出转换的几种方法, 方法1:先展示下自编FC:计算公式如下:intput intput Real ISH Real //工程量上限 ISL Real //工…

【数据挖掘】将NLP技术引入到股市分析

一、说明 在交易中实施的机器学习模型通常根据历史股票价格和其他定量数据进行训练&#xff0c;以预测未来的股票价格。但是&#xff0c;自然语言处理&#xff08;NLP&#xff09;使我们能够分析财务文档&#xff0c;例如10-k表格&#xff0c;以预测股票走势。 二、对自然语言处…

【OpenCV】常见问题及解决办法

文章目录 0 前言1 中文乱码问题2 非法路径问题 0 前言 本篇博客主要是总结OpenCV使用过程中遇到的一些问题&#xff0c;以及对应的解决办法&#xff0c;这里重点是关注OpenCV&#xff0c;既有基于C的&#xff0c;也有基于Python的&#xff0c;比较全面&#xff0c;而且也会随着…

RocketMQ教程-安装和配置

Linux系统安装配置 64位操作系统&#xff0c;推荐 Linux/Unix/macOS 64位 JDK 1.8 Maven3.0 yum 安装jdk8 yum 安装maven 1.下载安装Apache RocketMQ RocketMQ 的安装包分为两种&#xff0c;二进制包和源码包。 点击这里 下载 Apache RocketMQ 5.1.3的源码包。你也可以从这…

Windows11的VS201x编译OpenCV+Contrib+CUDA

(1) CUDA下载&#xff0c;注意要和cudnn版本号相关。 我安装的是cuda11.0,注意VS2015不能编译CUDA11&#xff0c;所以用VS2015的话需要下载CUDA 10。因为更高的版本目前还没有cudnn。 (2) 下载和安装VS2015。 (3) 下载和解压CMake。 CMake地址&#xff1a; Releases Kitw…

Android dp to pix resources.getDimension(R.dimen.xxx) ,kotlin

Android dp to pix resources.getDimension(R.dimen.xxx) ,kotlin <?xml version"1.0" encoding"utf-8"?> <resources><dimen name"my_size_dp">20dp</dimen><dimen name"my_size_px">20px</dime…

数据仓库表设计理论

数据仓库表设计理论 数仓顾名思义是数据仓库&#xff0c;其数据来源大多来自于业务数据(例如:关系型数据库)&#xff0c;当设计数仓中表类型时(拉链表、增量表、全量表、流水表、切片表)时&#xff0c;应先观察业务数据的特点再设计数仓表结构 首先业务数据是会不断增长的-即…

练习——动态内存分配的笔试题

今天我们分享几道经典的笔试题&#xff0c;做完直接变成陈泽 第一题 ~~ --------------------------------------------------------------------------------------------------~~ void GetMemory(char* p) {p (char*)malloc(100); } void Test(void) {char* str NULL;Get…

阿里云容器镜像仓库(ACR)的创建和使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

使用spark进行hbase的bulkload

使用spark进行hbase的bulkload 一、 背景 HBase 是一个面向列&#xff0c;schemaless&#xff0c;高吞吐&#xff0c;高可靠可水平扩展的 NoSQL 数据库&#xff0c;用户可以通过 HBase client 提供的 put get 等 api 实现在数据的实时读写。在过去的几年里&#xff0c;HBase …

HTTP 请求走私漏洞(HTTP Request Smuggling)

一、什么是Http 请求走私漏洞&#xff1f; HTTP请求走私漏洞&#xff08;HTTP Request Smuggling&#xff09;是一种安全漏洞&#xff0c;利用了HTTP协议中请求和响应的解析和处理方式的不一致性。攻击者通过构造特定的恶意请求&#xff0c;以欺骗服务器和代理服务器&#xff0…

Godot 4 源码分析 - 增加管道通信

学习研究Godot 4&#xff0c;很爽&#xff0c;虽然很庞杂&#xff0c;但相对于自己的水平来说&#xff0c;很强大&#xff0c;尤其是vulkan这块直接打包可用&#xff0c;省得自己从头琢磨。 一点一点地消化、优化与完善&#xff0c;最终才能成为自己的。 这段时间就在Godot的…

Pytorch迁移学习使用Resnet50进行模型训练预测猫狗二分类

目录 1.ResNet残差网络 1.1 ResNet定义 1.2 ResNet 几种网络配置 1.3 ResNet50网络结构 1.3.1 前几层卷积和池化 1.3.2 残差块&#xff1a;构建深度残差网络 1.3.3 ResNet主体&#xff1a;堆叠多个残差块 1.4 迁移学习猫狗二分类实战 1.4.1 迁移学习 1.4.2 模型训练 1.…

华为数通HCIP-ISIS基础

IS-IS的基本概念 isis&#xff08;中间系统到中间路由协议&#xff09; 链路状态路由协议、IGP、无类路由协议&#xff1b; IS-IS是一种链路状态路由协议&#xff0c;IS-IS与OSPF在许多方面非常相似:运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此&#xff0c;然后建…

从零开始搭建vue3 + ts + pinia + vite +element-plus项目

前言&#xff1a;据说vue2将于 2023 年 12 月 31 日停止维护&#xff0c;最近打算搭建一个vue3项目来学习一下&#xff0c;以防忘记&#xff0c;记录一下搭建过程。 一、使用npm创建项目 前提条件&#xff1a;已安装 16.0 或更高版本的 Node.js 执行 “npm init vuelatest”…

【Java基础教程】(四十三)多线程篇 · 下:深入剖析Java多线程编程:同步、死锁及经典案例——生产者与消费者,探究sleep()与wait()的差异

Java基础教程之多线程 下 &#x1f539;本节学习目标1️⃣ 线程的同步与死锁1.1 同步问题的引出2.2 synchronized 同步操作2.3 死锁 2️⃣ 多线程经典案例——生产者与消费者&#x1f50d;分析sleep()和wait()的区别&#xff1f; &#x1f33e; 总结 &#x1f539;本节学习目标…

谷歌插件(Chrome扩展) “Service Worker (无效)” 解决方法

问题描述&#xff1a; 写 background 文件的时候报错了&#xff0c;说 Service Worker 设置的 background 无效。 解决&#xff08;检查&#xff09;方法&#xff1a; 检查配置文件&#xff08;manifest.json&#xff09; 中的 manifest_version 是否为 3。 background 中的…

如何动态修改 spring aop 切面信息?让自动日志输出框架更好用

业务背景 很久以前开源了一款 auto-log 自动日志打印框架。 其中对于 spring 项目&#xff0c;默认实现了基于 aop 切面的日志输出。 但是发现一个问题&#xff0c;如果切面定义为全切范围过大&#xff0c;于是 v0.2 版本就是基于注解 AutoLog 实现的。 只有指定注解的类或…