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

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技术核心学习团队。一起探索科技的未来,共同成长。

相关文章:

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

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…...

java篇 类的进阶0x02:方法重载

文章目录 方法重载 overload方法签名返回值不属于方法签名的原因&#xff1a; 重载的参数匹配规则 方法重载 overload 多个方法功能很相似&#xff0c;但不完全一样&#xff0c;可以考虑使用方法的重载。 同一个类中&#xff0c;方法可以重名&#xff0c;但是签名不可以重复。…...

Android11 相机拍照权限,以及解决resolveActivity返回null

一、配置拍照和读写权限 <uses-permission android:name"android.permission.CAMERA"/> <uses-feature android:name"android.hardware.camera" /><uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/&…...

MAXENT模型的生物多样性教程

详情点击链接&#xff1a;基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化及未来气候变化下评估中的应用及论文写作 一&#xff1a;生物多样性保护格局与自然保护区格局优化 1.我国生物多样性格局与分布&#xff1b; 2.我国自然保护区格局与分布&…...

CISA学习笔记-第一章、信息系统审计过程

传统的审计三方关系理论指明&#xff0c;审计作为独立于会计记录之外的一项重要职能&#xff0c;是公司财务信息公允可靠的有力保障&#xff0c;制约着会计行为&#xff0c;制衡了会计权力。 1. IS审计和保障标准、指南、工具 职业道德规范 信息技术保证框架&#xff08;ITAF&a…...

回调函数的使用:案例一:c语言简单信号与槽机制。

系列文章目录 文章目录 系列文章目录前言一、回调函数1.1 回调函数基本概念1.2 简单实现 二、代码案例1.代码示例 总结 前言 了解回调函数的基本概念&#xff0c;函数指针的使用、简单信号与槽的实现机制&#xff1b; 一、回调函数 1.1 回调函数基本概念 回调函数就是一个通…...

python matplotlib库 设置字体字号等

主要是记录字体、字号对应的参数。注意字符串类型的参数要加引号 1.字体&#xff1a; fontname 常见参数&#xff1a; # 常用 Times New Roman、Dejavu sans、TeX Gyre Schola中文字体 黑体&#xff1a;SimHei 微软雅黑&#xff1a;Microsoft YaHei 微软正黑体&#xff1a;M…...

【MySQL】SQL性能分析 (七)

&#x1f697;MySQL学习第七站~ &#x1f6a9;本文已收录至专栏&#xff1a;MySQL通关路 ❤️文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 假如我们需要对SQL进行优化&#xff0c;我们就必须对他足够的了解&#xff0c;比如 对哪一类SQL进行优化&#xff08;增删改查…...

超越想象的GPT医疗 20230723

7月份读完了这本书&#xff0c;趁着周末写下读书笔记吧 这本书 作者&#xff1a;【美】彼得.李 Peter Lee 【美】凯丽.戈德伯格CareyGoldberg 著 【美】伊萨克.科恩Isaac Kohane 芦义 译 在AI风起云涌时代&#xff0c;在这刚刚过去的新冠三年&#xff0c;“超越想象的GPT医…...

【N32L40X】学习笔记03-gpio输出库

gpio输出 该函数库的目的就是在统一的地方配置&#xff0c;将配置的不同项放置在一个结构体内部使用一个枚举来定义一个的别名 led.c #include <stdio.h> #include "led/bsp_led.h"static led_t leds[LED_NUM]{{GPIOB,GPIO_PIN_2,RCC_APB2_PERIPH_GPIOB},{GP…...

WebClient,HTTP Interface远程调用阿里云API

HTTP Interface Spring 允许我们通过定义接口的方式&#xff0c;给任意位置发送 http 请求&#xff0c;实现远程调用&#xff0c;可以用来简化 HTTP 远程访问。需要webflux场景才可 <dependency><groupId>org.springframework.boot</groupId><artifactId&…...

飞书ChatGPT机器人 – 打造智能问答助手实现无障碍交流

文章目录 前言环境列表1.飞书设置2.克隆feishu-chatgpt项目3.配置config.yaml文件4.运行feishu-chatgpt项目5.安装cpolar内网穿透6.固定公网地址7.机器人权限配置8.创建版本9.创建测试企业10. 机器人测试 前言 在飞书中创建chatGPT机器人并且对话&#xff0c;在下面操作步骤中…...

React、Vue框架如何实现组件更新,原理是什么?

引言 React 和 Vue 都是当今最流行的前端框架,它们都实现了组件化开发模式。为了优化性能,两者都采用了虚拟DOM技术。当组件状态发生改变时,它们会使用虚拟DOM进行局部渲染比对,只更新必要的DOM节点,从而避免重新渲染整个组件树。本文将从React和Vue的组件更新原理入手,剖析两…...

常见面试题之设计模式--策略模式

1. 概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然可以进行代码开发的工具有很多&#xff0c;可以选择Idea进行开发&a…...

redis多key问题

多key问题指的是在Redis中存在大量的key&#xff0c;如果这些key过多&#xff0c;超过了Redis可以容纳的内存大小&#xff0c;那么数据会被保存在交换空间&#xff08;swap区&#xff09;&#xff0c;这会导致性能下降。 Redis是一种基于内存的缓存数据库&#xff0c;它的性能…...

kafka第三课-可视化工具、生产环境问题总结以及性能优化

一、可视化工具 https://pan.baidu.com/s/1qYifoa4 密码&#xff1a;el4o 下载解压之后&#xff0c;编辑该文件&#xff0c;修改zookeeper地址&#xff0c;也就是kafka注册的zookeeper的地址&#xff0c;如果是zookeeper集群&#xff0c;以逗号分开 vi conf/application.conf 启…...

2_Apollo4BlueLite中断控制器NVIC

1.概述 Apollo4BlueLite 的中断控制器是采用 ARM Cortex-M4 内核&#xff0c;并集成了 NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09;作为其中断控制器。 NVIC 是 ARM Cortex-M 系列处理器中常用的中断控制器&#xff0c…...

WAIC2023:图像内容安全黑科技助力可信AI发展

目录 0 写在前面1 AI图像篡改检测2 生成式图像鉴别2.1 主干特征提取通道2.2 注意力模块2.3 纹理增强模块 3 OCR对抗攻击4 助力可信AI向善发展总结 0 写在前面 2023世界人工智能大会(WAIC)已圆满结束&#xff0c;恰逢全球大模型和生成式人工智能蓬勃兴起之时&#xff0c;今年参…...

微信小程序quickstartFunctions中云函数的应用

1、在quickstartFunctions文件中新建文件夹和文件 2、index.js 文件书写 const cloud require(wx-server-sdk);cloud.init({env: cloud.DYNAMIC_CURRENT_ENV }); const db cloud.database();// 链表查询试卷和对应的题库 exports.main async (event, context) > {retu…...

Go学习 2、程序结构

2、程序结构 2.1 命名 一个名字必须以一个字母或下划线开头&#xff0c;后面可以跟任意数量的字母、数字或下划线。 大写字母和小写字母是不同的。 GO语言有25个关键字&#xff0c;关键字不能用于自定义名字。 还有大约30多个预定义名字&#xff0c;对应内建的常量、类型和函…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...