【Git】万字详解 Git 的原理与使用(上)
🥰🥰🥰来都来了,不妨点个关注叭!
👉博客主页:欢迎各位大佬!👈
文章目录
- 1. 初识 Git
- 1.1 Git 是什么?
- 1.2 为什么要有 Git
- 2. 安装 Git
- 2.1 Linux-Ubuntu 安装 Git
- 2.2 Windows 安装 Git
- 3. Git 初始化与配置
- 3.1 创建 Git 本地仓库
- 3.2 配置 Git
- 3.3 查看配置
- 3.4 删除配置
- 4. Git 工作流程 - 认识工作区、暂存区、版本库
- 5. Git 基本操作
- 5.1 添加文件
- 5.1.1 场景一
- 5.1.2 场景二
- 5.2 查看.git文件
- 【可能遇到的问题】 Windows下的 Git Bash 环境下并没有安装 tree工具
- 5.3 修改文件
- 5.4 版本回退
- 5.5 撤销修改
- 5.5.1 情况一:对于工作区代码还未 add
- 5.5.2 情况二:已经 add,但没有 commit
- 5.5.3 情况三:已经 add,并且 commit 了
- 5.6 删除本地仓库中的文件
1. 初识 Git
1.1 Git 是什么?
Git 是一个开源的分布式版本控制系统,用于高效地跟踪和管理项目代码的变更历史(不仅仅是代码,还有其它格式也是可以的~)
1.2 为什么要有 Git
在学习或者是工作的时候,比如编写各种文档,为了防止文档丢失,更改失误,我们不得不复制出一个副本,保留历史记录,方便找回历史记录,比如:
“设计文档-v1”
“设计文档-v2”
“设计文档-v3”
“设计文档-确定版”
“设计文档-最终版”
…
每个版本有各自的内容,但最终会只有⼀份文档是需要被使用的,在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,文件就越来越多,不仅文件多,更重要的是,随着版本数量的不断增多,我们可能记不太清每一个版本具体修改的哪些内容,文档如此,我们编写的项目代码也如此!
那么,如何解决呢?
答:版本控制器 ,记录每次修改以及版本迭代的一个管理系统,目前,最主流的版本控制器就是 Git,可以控制电脑上所有格式的文件
为了能够更方便管理这些不同版本的⽂件,便有了版本控制器! 所谓的版本控制器,就是能让你了解到⼀个文件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也方便多人协同作业,目前最主流的版本控制器就是 Git,Git 可以控制电脑上所有格式的文件,例如doc、excel、dwg、dgn、rvt等等,对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项目中的源代码文件!
【注意事项】
所有的版本控制系统,Git也不例外,其实只能跟踪文本文件的改动,比如 txt文件,网页,所有的程序代码等等,版本控制系统可以告诉你每次的改动,比如在第10行加了"name",在第12行删除了一个"Windows",而图片、视频等这些二进制文件,虽然也能由版本控制系统管理,但没办法跟踪文件的变化,只能把⼆进制文件每次改动串起来,即只知道图片从90KB改成了100KB,但到底改了啥,版本控制系统无法记录,所有并不知道,也没法知道~
2. 安装 Git
接下来,我们来进行实操!安装 Git ~
Git 是开放源代码的代码托管工具,最早是在 Linux 下开发的,当然,最开始也只能应用于 Linux 平台,后面慢慢的被移植到 Windows下,现在 Git 可以在 Linux、Unix、Mac 和 Windows 这几大平台上正常运行了~
2.1 Linux-Ubuntu 安装 Git
这里介绍 Ubuntu 下的安装(因为 Centos 现在不维护了~,因此,本文不作过多介绍)
在 Ubuntu 安装 git 相当简单~ 一起来看看!
- 首先查看系统有没有安装过 Git,输入命令:
git --version
- 如果出现 git 版本号已经安装:
- 如果出现这类提示,则没安装
Command 'git' not found, but can be installed with:
sudo apt install git
- 没有则进行安装,输入安装命令:
sudo apt-get install git -y
(在安装过程中,出现了图形化界面,回车即可~)
再次输入git --version
,就可以看到 git 版本号啦!此时,安装完成!(是不是非常简单!)
2.2 Windows 安装 Git
Git 官网直接下载:Git 下载官网
- 选择 Windows 操作系统
- 根据自己的电脑选择相应的下载
-
下载完成后,找到下载到的文件,进行双击进行安装
-
接着,按照指示,一步步安装~
非常简单的~ 按照指示点下一步就好啦(勇敢牛牛,不怕困难!)
- 检测是否安装好 Git,打开 Git Bash
输入:git -- verison
,出现对应安装的 git 版本号,就是安装成功啦!!!
3. Git 初始化与配置
Git 的安装是很简单的,现在我们来看看 Git 的初始化与配置~
3.1 创建 Git 本地仓库
可以将仓库理解成是进行版本控制的一个文件目录,如果我们想要对文件进行版本控制,就必须先创建一个仓库出来!
创建⼀个 Git 本地仓库对应的命令为 git init
,注意命令要在文件目录下执行,例如:
- 首先找到自己想要的文件目录~
- 右键,找到选项【Git Bash Here】 ,进入界面,输入仓库初始化命令
我们就会发现,当前目录下多了一个.git 的隐藏文件,.git 目录是 Git 用来跟踪管理仓库的,千万不要手动修改里面的文件!!! 如果修改了,很容易乱,就会把 Git 仓库给破坏了~(感兴趣的小伙伴,可以点击进行详细了解哦)
3.2 配置 Git
当安装 Git 后首先要做的事情就是设置你的用户名称和 e-mail 地址,这是非常非常重要的,配置命令为:
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com" # 把 Your Name 改成你的用户名
# 把 email@example.com 改成你的邮箱的格式,只要格式正确即可
示例:
git config [--global] user.name "xxx"
git config [--global] user.email "1234567@163.com"
注意 --global
是⼀个可选项,如果使用了该选项,就表示这台机器上所有的 Git 仓库都会使用这个配置,如果你希望在不同仓库中使用不同的 name 或 e-mail ,即可以不要 --global
选项,但需要注意的是,执行命令时必须要在仓库里面~
3.3 查看配置
查看配置命令:git config -l
3.4 删除配置
删除对应的配置命令如下:
git config [--global] --unset user.name
git config [--global] --unset user.email
4. Git 工作流程 - 认识工作区、暂存区、版本库
-
工作区:是在电脑上要写的代码或者是文件的目录
-
暂存区(stage/index):一般存放在 .git 目录下的 index 文件(.git/index)中,把暂存区有时也叫作索引(index)
-
版本库(repository):也叫仓库,工作区有⼀个隐藏目录 .git ,它不算工作区,而是 Git 的版本库,这个版本库里面的所有文件都可以被 Git管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以"还原"
- 左侧为工作区,右侧为版本库,Git 的版本库里存放了很多东西,其中最重要的是暂存区
- 在创建版本库的时候, Git 会自动为我们自动创建一个唯一的 master 的分支,以及指向 master 的一个指针 HEAD (分支与HAED后续介绍)
- 当对工作区修改或者是新增的文件,执行
git add
命令,暂存区目录树的文件索引会被更新 - 当执行提交操作
git commit
时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中
Git 工作流程:
- 工作区:开发者实际编辑代码的目录
- 暂存区:通过
git add
将修改添加到暂存区,准备提交 - 本地仓库(Local Repository):通过
git commit
将暂存区的修改保存到本地仓库,生成一个提交记录(上述介绍的是本地仓库) - 远程仓库(Remote Repository):通过
git push
将本地提交推送到远程仓库,如Gitee、GitHub(后续介绍如何连远程仓库)
5. Git 基本操作
(碎碎念:笔者每次都喜欢先看到命令集合,有啥先用啥,之后再慢慢了解原理,因此,这里先介绍几个常用的命令,方便查找~同时,笔者后续内容均基于 Windows 11 系统展示操作)
命令 | 作用 |
---|---|
git init | 初始化一个Git仓库 |
git clone | 克隆远程仓库到本地 |
git status | 查看当前仓库状态 |
git log | 查看历史提交记录 |
git reflog | 记录本地的每⼀次命令 |
git add | 添加文件到暂存区 |
git commit -m “msg” | 提交修改到本地仓库 |
git push origin main | 推送到远程仓库的main分支 |
git pull origin main | 从远程仓库拉取最新代码 |
git branch | 查看分支 |
git checkout | 切换分支 |
git merge | 合并分支 |
git reset | 版本回退 |
5.1 添加文件
5.1.1 场景一
在包含.git 的目录下新建⼀个 Read 文件,
- 可以使用
git add
命令可以将文件添加到暂存区:
-
添加⼀个或多个文件到暂存区:
git add [file1] [file2] ...
-
添加指定目录到暂存区,包括子目录:
git add [dir]
-
添加当前目录下的所有文件改动到暂存区:
git add .
- 再使用
git commit
命令将暂存区内容添加到本地仓库中:
-
提交暂存区全部内容到本地仓库中:
git commit -m "message"
-
提交暂存区的指定文件到仓库区:
git commit [file1] [file2] ... -m "message"
注意 git commit
后⾯的 -m 选项,要跟上描述本次提交的 message,由用户自己完成,这部分内容千万不能省略,并且要好好描述,这是记录提交的细节,方便自己看也是方便别人看的~(不好好描述,自己和别人都不好理解哦!)
示例:
git commit
命令执行成功后会告诉我们,1个文件被改动,就是我们新添加的 Read 文件,插入了一行内容,Read 有一行内容
也可以多次 add 不同的⽂件,而只 commit ⼀次便可以提交所有文件,是因为需要提交的文件是通通被 add 到暂存区中,然后⼀次性再commit暂存区的所有修改,如下:
这样就一次性将暂存区的三个文件都提交了~
可以使用 git log
命令,来查看历史提交记录:可以看到刚刚提交的两次记录
git log
命令显示从最近到最远的提交⽇志,并且可以看到我们 commit 时的日志消息,如果觉得输出信息太多,可以加上 --pretty=oneline
参数,即 git log --pretty=oneline
,日志更加简单,可以清楚了解~
5.1.2 场景二
为了更深刻理解工作区、暂存区、版本库,这里再展示一种场景,如下:
提交后发现打印了 1 file changed, 0 insertions(+), 0 deletions(-)
,只有⼀个文件改变了,但是,我们新增了两个文件呀!
仔细观察, git add
是将文件添加到暂存区, git commit
是将暂存区的内容添加到本地仓库中。在上述命令,并没有使用 git add file5
,file5 就不在暂存区中维护,因此,commit 的时候其实只是把已经在暂存区的 file4 提交了,遗漏了工作区的 file5,那如何提交 file5 呢?很简单,再次 git add file5
, commit
即可~
所以,有时候你 commit 了,结果该内容并没有提交,需要排查一下是否将这个内容添加到了暂存区哦~
5.2 查看.git文件
首先,我们来看看 .git 的目录结构,进入 .git 文件(注意,是点击进入.git隐藏文件哦!),使用命令:tree
,查看树形结构
如下:这是没有任何提交记录的哦~
在上一小节中,我们添加了文件,再添加文件后,我们再来观察 .git 文件的树形结构
【总结】在本地的 git 仓库中,有几个文件或者目录很特殊:
- index: 暂存区, git add 后会更新该内容
- HEAD: 默认指向 master 分支的⼀个指针
- refs/heads/master: 文件里保存当前 master 分支的最新 commit id
- objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了 git 维护的所有修改
【小建议】:在后面的学习过程中,我们最好能将常见的 git 操作与 .git 目录当中的结构内容变化对应起来,这样有利于我们理解 git 细节流程
【可能遇到的问题】 Windows下的 Git Bash 环境下并没有安装 tree工具
问题:如果出现 bash: tree: command not found
,则说明在 Windows下的 Git Bash 环境下并没有安装 tree工具,因此,导致无法使用
解决方式:git bash 默认是没有 tree 命令的!下载 tree
- 下载
- 解压,在 bin 目录下找到 tree.exe
3. 将 tree.exe 拷贝到 git bash 的应用程序位置,找到自己的 git安装路径\usr\bin
- 再次输入 tree 命令,即可:
5.3 修改文件
Git 比其他版本控制系统设计得优秀,是因为 Git 跟踪并管理的是修改,而并非文件,就比如新增了一行内容,这就是⼀个修改,删除了一行内容,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些⼜加了⼀些,同样是⼀个修改!
现在对 Read 文件,进行修改,通过 git status
,查看上次提交之后是否有对文件进行再次修改
(注意仓库中的 Read 和 工作区的 Read 是不同的,我们这里是在工作区进行修改的!通过 git status
,查看当前仓库的状态)
图中结果显示,Read 已经被修改过,但是还没有完成添加与提交,目前,只知道文件被修改了,但是不知道具体哪些地方被修改了!(知道这个是很重要的!)
使用 git diff [file]
命令用来显示暂存区和工作区文件的差异,也可以使用 git diff HEAD -- [file]
命令来查看版本库和工作区文件的区别,知道了对 Read 做了什么修改后,再把它提交到本地仓库就会放心许多!
使用 add 添加到暂存区,再 commit 提交到本地仓库~
5.4 版本回退
我们知道,Git 能够管理文件的历史版本,这也是版本控制器最重要的能力,如果想在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能~ 执行回退版本命令: git reset
可以指定退回某⼀次提交的版本,注意,"回退"本质是要将版本库中的内容进行回退,⼯作区或暂存区是否回退由命令参数决定!
git reset
命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]
-
--mixed
为默认选项,使用时可以不带该参数,该参数是将暂存区的内容退回为指定提交版本内容,而工作区文件保持不变 -
--soft
该参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本 -
--hard
参数将暂存区和工作区都退回到指定版本,切记!!!工作区有未提交的代码时千万不要使用这个命令,因为工作区会回滚,没有提交的代码就再也找不回了,因此,使用这个参数的时候,一定要慎重 -
HEAD
可直接写成 commit id,表示指定退回的版本,也可以这样写:
写法1:使用 ^
HEAD
表示当前版本
HEAD^
表示上⼀个版本
HEAD^^
表示上上⼀个版本
以此类推…
写法2:可以使用 ~ 数字表示
HEAD~0
表示当前版本
HEAD~1
表示上⼀个版本
HEAD~2
表示上上⼀个版本
以此类推…
示例:为了方便演示回退功能,先做一些准备工作,更新 3 个版本的 Read,并进行 3 次提交,准备工作如下:
【操作一】提交 version3 后,发现 version3 编写有误,想回退到 version2,重新基于 version2 开始写,这里希望工作区的内容也回退到 version2 版本,因此需要 --hard
参数,如下:
可以看到 Read 文件的内容,已经回退到 version2 了,使用 git log
查看提交⽇志,也发现 HEAD 指向了 version2
【操作二】后悔回退到 version2,想再回到 version3
可以继续使用 git reset
命令,回退到 version3 版本,but 我们必须要拿到 version3 的 commit id 去指定回退的版本,从上图中,看到 git log
并不能打印出 version3 的 commit id ,如果运气好的话,可以在终端找之前的记录,运气不好的话,commit id 已经被我们搞丢啦,不过不用担心!Git 还提供了⼀个 git reflog
命令,可以补救⼀下,该命令用来记录本地的每⼀次命令!!!
使用git reflog
可以很方便找到所有操作记录,但 e9980d9 是什么呢?是 version3 的 commit id 的部分,Git 版本回退的时候,也可以使用部分 commit id 来代表目标版~
【操作三】在实际开发中,由于长时间开发,导致 commit id 早就找不到了,但是又想回到 version3,貌似现在不可能~
我们要知道 Git 版本回退速度非常快,因为 Git 在内部有个指向当前分支,这里是 HEAD 指针默认指向 master 分支,在.git 隐藏文件中refs/heads/master 文件里面保存了当前 master 分支的最新 commit id,当我们在回退版本的时候, Git 仅仅是给 refs/heads/master 中存储⼀个特定的 version,可以简单理解为下图:
可以查看 refs/heads/master 文件内容,保存了最新的 commit id,如下:
如果是操作二,回退到 version3 版本,则保存的 commit id 为 version3 的:
如果是操作一,回退到 version2 版本,则保存的 commit id 为 version2 的:
5.5 撤销修改
有一种场景,比如在工作区写了很久的代码,但是越写越写不下去,觉得自己写得不太好,想恢复到上⼀个版本~ 我们需要撤销修改,这里分三种情况:
5.5.1 情况一:对于工作区代码还未 add
【操作一】可以直接删除目前在工作区中新增的代码(不推荐),如下:
万幸!才写了一行内容,就发现需要删除了,万一写了很多,一直都没有提交,可能都忘记自己新增的哪些内容了,那如何删除呢?
Git 为我们提供了更好的方式!!!
【操作二】使用 git checkout -- [file]
命令,使工作区文件回到最近一次 add 或者是 commit 状态(注意,该命令中的 --
千万不能省略,省略就变成其它意思了!!!)
5.5.2 情况二:已经 add,但没有 commit
add 了,保存到了暂存区,如何撤销呢?
还记得刚介绍的 git reset
回退命令嘛!! 该命令使用 --mixed
参数,则可以将暂存区的内容回退到指定版本的内容,工作区文件保持不变,这样,我们就可以回退暂存区的内容了~
命令:git reset HEAD Read
(注意,这里为啥没有带上 --mixed
参数呢?因为 --mixed
参数是默认的!!!)
5.5.3 情况三:已经 add,并且 commit 了
这种情况也无需担心,使用 git reset --hard HEAD^
回退到上一个版本
不过这里是有条件的,即还没有将自己本地版本库推送到远程!!!(一旦推送到远程版本库,那就…)
5.6 删除本地仓库中的文件
在 Git 中,删除也是一个修改操作
下面演示删除 file4 文件:
使用 rm file4
?
这样直接删除是没有用的,此时只是删除了工作区的 file4,git status 会告诉你哪些文件被删除了,但是,这个时候,工作区和版本库就不一致了,要删除文件,除了要删除工作区的文件,还要清除版本库的文件
到这里,有两种情况:
【情况一】确实需要从版本库删除该文件
使用 git rm [文件名]
,将文件从工作区和暂存区中删除,并且 commit ~
【情况二】删错了
使用 git checkout -- file4
来恢复, 删除也是修改哦,这是刚刚学过的命令~
这期 git 内容介绍到这里,可以自己动手操作,加深印象哦~
💛💛💛本期内容回顾💛💛💛
✨✨✨本期内容到此结束啦~
相关文章:
【Git】万字详解 Git 的原理与使用(上)
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 初识 Git1.1 Git 是什么?1.2 为什么要有 Git 2. 安装 Git2.1 Linux-Ubuntu 安装 Git2.2 Windo…...
Python高级爬虫之JS逆向+安卓逆向1.7节: 面向对象
目录 引言: 1.7.1 先理解面向过程 1.7.2 再理解面向对象 1.7.3 面向对象的三大特征 1.7.4 类属性,类方法,静态方法 1.7.5 构造函数,对象属性,对象方法 1.7.6 爬虫接单实现了雪糕自由 引言: 大神薯条老师的高级爬虫+安卓逆向教程: 这套爬虫教程会系统讲解爬虫的初…...
SpringBoot基础(原理、项目搭建、yaml)
SpringBoot:javaweb的一个框架,基于Spring开发,SpringBoot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷的开发新一代基于Spring框架的应用程序,它与Spring框架紧密结合用于提升Spring开发者体验的…...
MTV-SCA:基于多试向量的正弦余弦算法
3 正弦余弦算法 (SCA) 正弦余弦算法(SCA)是为全局优化而开发的,并受到两个函数,正弦和余弦的启发。与其他基于启发式种群的算法一样,SCA在问题的预设最小值和最大值边界内随机生成候选解。然后,通过应用方…...
STL之vector容器
vector的介绍 1.vector是可变大小数组的容器 2.像数组一样,采用连续的空间存储,也就意味着可以通过下标去访问,但它的大小可以动态改变 3.每次的插入都要开空间吗?开空间就要意味着先开临时空间,然后在拷贝旧的到新…...
Android学习总结之jetpack组件间的联系
在传统安卓开发中,UI 组件(Activity/Fragment)常面临三个核心问题: 生命周期混乱:手动管理 UI 与数据的绑定 / 解绑,易导致内存泄漏(如 Activity 销毁后回调仍在触发)。数据断层&am…...
linux的信号量初识
Linux下的信号量(Semaphore)深度解析 在多线程或多进程并发编程的领域中,确保对共享资源的安全访问和协调不同执行单元的同步至关重要。信号量(Semaphore)作为经典的同步原语之一,在 Linux 系统中扮演着核心角色。本文将深入探讨…...
【安装指南】Centos7 在 Docker 上安装 RabbitMQ4.0.x
目录 前置知识:RabbitMQ 的介绍 一、单机安装 RabbitMQ 4.0.7版本 1.1 在线拉取镜像 二、延迟插件的安装 2.1 安装延迟插件 步骤一:下载延迟插件 步骤二:将延迟插件放到插件目录 步骤三:启动延迟插件 步骤四:重启 RabbitMQ 服务 步骤五:验收成果 步骤六:手动…...
Android和iOS测试的区别有哪些?
作为移动端测试工程师,Android 和 iOS 的测试差异直接影响测试策略设计。本文从测试环境、工具链、兼容性、发布流程等维度全面解析,并附实战建议。 1. 测试环境差异 维度AndroidiOS设备碎片化高(厂商/分辨率/系统版本多样)低(仅苹果设备,版本集中)系统开放性开放(可Ro…...
spring中的@PostConstruct注解详解
基本概念 PostConstruct 是 Java EE 规范的一部分,后来也被纳入到 Spring 框架中。它是一个标记注解,用于指示一个方法应该在依赖注入完成后被自动调用。 主要特点 生命周期回调:PostConstruct 标记的方法会在对象初始化完成、依赖注入完成…...
大模型开发学习笔记
文章目录 大模型基础大模型的使用大模型训练的阶段大模型的特点及分类大模型的工作流程分词化(tokenization)与词表映射 大模型的应用 进阶agent的组成和概念planning规划子任务分解ReAct框架 memory记忆Tools工具\工具集的使用langchain认知框架ReAct框架plan-and-Execute计划…...
【android Framework 探究】pixel 5 内核编译
相关文章: 【android Framework 探究】android 13 aosp编译全记录 【android Framework 探究】android 13 aosp 全记录 - 烧录 一,环境 主机 -> Ubuntu 18.04.6 LTS 内存 -> 16GB 手机 -> pixel 5 代号redfin。kernel代号redbull 二…...
PowerBI实现点击空白处隐藏弹窗(详细教程)
PowerBI点击空白处隐藏弹窗 第五届PowerBI可视化大赛中亚军作品:金融企业智慧经营分析看板 有个功能挺好玩的:点击空白处隐藏弹窗,gif动图如下: 我们以一个案例分享下实现步骤: 第一步, 先添加一个显示按钮ÿ…...
【git】获取特定分支和所有分支
1 特定分支 1.1 克隆指定分支(默认只下载该分支) git clone -b <分支名> --single-branch <仓库URL> 示例(克隆 某一个 分支): git clone -b xxxxxx --single-branch xxxxxxx -b :指定分支…...
Windows配置grpc
Windows配置grpc 方法一1. 使用git下载grph下载速度慢可以使用国内镜像1.1 更新子模块 2. 使用Cmake进行编译2.1 GUI编译2.2 命令行直接编译 3. 使用Visual Studio 生成解决方法 方法二1. 安装 vcpkg3.配置vckg的环境变量2. 使用 vcpkg 安装 gRPC3. 安装 Protobuf4. 配置 CMake…...
【学习笔记】深入理解Java虚拟机学习笔记——第2章 Java内存区域与内存溢出异常
第2章 Java内存区域与内存溢出异常 2.1 概述 略 2.2 运行时数据区域 2.2.1 程序计数器 线程私有,记录执行的字节码位置 2.2.2 Java 虚拟机栈 线程私有,存储一个一个的栈帧,通过栈帧的出入栈来控制方法执行。 -栈帧:对应一个…...
数字智慧方案6189丨智慧应急综合解决方案(46页PPT)(文末有下载方式)
资料解读:智慧应急综合解决方案 详细资料请看本解读文章的最后内容。 在当前社会环境下,应急管理的重要性愈发凸显。国务院发布的《“十四五” 国家应急体系规划》以及 “十四五” 智慧应急专项规划,明确了应急管理体系建设的方向和重点&…...
解决 3D Gaussian Splatting 中 SIBR 可视化组件报错 uv_mesh.vert 缺失问题【2025最新版!】
一、📌 引言 在使用 3D Gaussian Splatting(3DGS)进行三维重建和可视化的过程,SIBR_gaussianViewer_app 是一款官方推荐的本地可视化工具,允许我们在 GPU 上实时浏览重建结果。然而,许多用户在启动该工具时…...
见多识广4:Buffer与Cache,神经网络加速器的Buffer
目录 前言传统意义上的Buffer与Cache一言以蔽之定义与主要功能BufferCache 数据存储策略二者对比 神经网络加速器的bufferInput BufferWeight BufferOutput Buffer与传统buffer的核心区别总结 前言 知识主要由Qwen和Kimi提供,我主要做笔记。 参考文献: …...
微服务中组件扫描(ComponentScan)的工作原理
微服务中组件扫描(ComponentScan)的工作原理 你的问题涉及到Spring框架中ComponentScan的工作原理以及Maven依赖管理的影响。我来解释为什么能够扫描到common模块的bean而扫描不到其他模块的bean。 根本原因 关键在于**类路径(Classpath)**的包含情况: Maven依赖…...
C++之类和对象基础
⾯向对象三⼤特性:封装、继承、多态 类和对象 一.类的定义1. 类的定义格式2.类域 二.实例化1.对象2.对象的大小 三.this指针 在 C 的世界里,类和对象构成了面向对象编程(Object-Oriented Programming,OOP)的核心框架&…...
【DIY小记】新手小白超频遇到黑屏问题解决分享
最近玩FPS游戏的时候,发现以前一顿操作超频之后的电脑,有一定概率会出问题。具体表现比如一种是,电脑显示器直接黑屏,所有键盘交互没有响应,只能直接重启电脑,还有一种是偶现卡顿,直接死机或者卡…...
虚幻引擎 IK Retargeter 编辑器界面解析
我来为您详细解释这段关于虚幻引擎IK Retargeter编辑器界面的文本,它描述了动画重定向系统的核心组件和工作原理。 Retarget Phases (重定向阶段) 这部分介绍了动画重定向过程中的三个关键计算阶段,每个阶段都可以单独启用或禁用,这对于调试…...
uc系统中常用命令、标准C库函数和系统调用
目录 一、常用命令 env echo $name 键值 export name unset name gcc -c xxx.c ar 命令 ar -r libxxx.a xxx1.o xxx2.o gcc -c -fpic xxx.c gcc -shared -fpic xxx1.c xxx2.c -o libxxx.so kill [-信号] PID kill -l 软链接:ln -s xxx yyy 硬链接&…...
OpenHarmony - 驱动使用指南,HDF驱动开发流程
OpenHarmony - HDF驱动开发流程 概述 HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发…...
C++负载均衡远程调用学习之UDP SERVER功能
目录 1.LARSV0.9-配置功能 2.LARSV0.10-upd-server的实现 3.LARSV0.10-udp-client的实现 1.LARSV0.9-配置功能 2.LARSV0.10-upd-server的实现 3.LARSV0.10-udp-client的实现...
word交叉引用图片、表格——只引用编号的处理方法
交叉引用图片/表格 在“引用”选项卡上的“题注”组中,单击“插入题注”。勾选【从题注中排除标签】。在文中插入题注。 【注 意】 这时候插入的题注只有编号项了。然后手动打上标签【TABLE】,并在标签和编号项之间加上【样式分隔符,AltCt…...
平台介绍-开放API接口-鉴权
平台的理念是一个组织内部只建一套系统。但是现实情况是,组织内部已经建立了很多系统,是不能一次性替代的,只能先搭起平台,然后逐步开始替换。这样就不可避免的存在其他系统和平台进行交互的问题。 平台为此设计了开放API接口。其…...
【Bootstrap V4系列】 学习入门教程之 组件-警告框(Alert)
Bootstrap V4 学习入门教程之 组件-警告框(Alert) 警告框(Alert)一、示例二、链接的颜色三、添加其它内容四、关闭警告框 通过 JavaScript 触发行为触发器本组件所暴露的事件 警告框(Alert) 通过精炼且灵活…...
【服务器通信-socket】——int socket(int domain, int type, int protocol);
#include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); domain: AF_INET 这是大多数用来产生socket的协议,使用TCP或UDP来传输,用IPv4的地址 AF_INET6 与上面类似,不过是来用IPv6的地…...
洛谷P1014(Cantor 表[NOIP 1999 普及组])题解
题目大意:求Cantor表(按照Z字形排列(如第一项是1/1,然后是1/2,2/1,3/1,2/2))的第N项。 那么,我们需要找出Cantor表的排列规律。根据题目中的Z字形描述&#x…...
【愚公系列】《Manus极简入门》012-自我认知顾问:“内在探索向导”
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! …...
密码学_加密
目录 密码学 01 密码基础进制与计量 02 加解密基操 替换 移位 编码 编码 置换 移位 加解密强度 03 对称加密算法(私钥) 工作过程 缺陷 对称加密算法列举? DES DES算法架构 DES分组加密公式 DES中ECB-CBC两种加密方式 3DES 由于DES密钥太短…...
w317汽车维修预约服务系统设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
云盘系统设计
需求背景 网盘面向大量C端用户 1000w用户 DAU 20% 每天10次 QPS: 1000w * 0.2 * 10 / 100k 500 峰值估计:500 * 5 2500 功能需求 支持上传,下载,多端共同在线编辑,数据冲突处理 非功能需求 1.latency 20s左右 2.可用性与…...
西电雨课堂《知识产权法》课后作业答案
目录 第 1 章 1.1 课后作业 1.2 课后作业 第 2 章 2.1 课后作业 2.2 课后作业 2.3 课后作业 2.4 课后作业 2.5 课后作业 2.6 课后作业 2.7 课后作业 2.8 课后作业 2.9 课后作业 2.10 课后作业 第 3 章 3.1 课后作业 3.2 课后作业 3.3 课后作业 3…...
通信协议记录仪-产品规格书
以下是为 通信协议记录仪(ProtoLogger Pro) 的详细产品规格书,覆盖 技术细节、场景需求、竞品差异化,确保可作为产品开发、市场营销及竞品分析的核心依据。 通信协议记录仪产品规格书 产品名称:ProtoLogger Pro(中文名称:蹲守…...
订单系统冷热分离方案:优化性能与降低存储成本
随着时间推移,订单数据不断积累。在电商平台或者服务型应用中,订单数据是核心数据之一。然而,随着数据量的增长,如何高效存储、管理和查询这些数据成为了系统架构设计的重要问题。在大多数情况下,订单数据的处理不仅涉…...
数据结构学习笔记
第 1 章 绪论 【考纲内容】 (一)数据结构的基本概念 (二)算法的基本概念 算法的时间复杂度和空间复杂度 【知识框架】 【复习提示】 本章内容是数据结构概述,并不在考研大纲中。读者可通过对本章的学习,初步…...
读懂 Vue3 路由:从入门到实战
在构建现代化单页应用(SPA)时,Vue3 凭借其简洁高效的特性成为众多开发者的首选。 而 Vue3 路由(Vue Router)则是 Vue3 生态中不可或缺的一部分,它就像是单页应用的 “导航地图”,帮助用户在不同…...
Aws S3上传优化
上传大约 3.4GB 的 JSON 文件,zip算法压缩后约为 395MB,上传至 S3 效率优化,有一些优化方案可以提高上传速率。下面是几种可能的优化方式,包括选择压缩算法、调整上传方式、以及其他可能的方案。 方案 1. 选择更好的压缩算法 压…...
Python 数据智能实战 (8):基于LLM的个性化营销文案
写在前面 —— 告别群发轰炸,拥抱精准沟通:用 LLM 为你的用户量身定制营销信息 在前面的篇章中,我们学习了如何利用 LLM 增强用户理解(智能分群)、挖掘商品关联(语义购物篮)、提升预测精度(融合文本特征的流失预警)。我们不断地从数据中提取更深层次的洞察。 然而,…...
html:table表格
表格代码示例: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><!-- 标准表格。 --><table border"5"cellspacing&qu…...
2.maven 手动安装 jar包
1.背景 有的时候,maven仓库无法下载,可以手动安装。本文以pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar为例。 2.预先准备 下载文件到本地指定位置。 2.1.安装pom mvn install:install-file \-Dfile/home/wind/tmp/pentaho-aggdesigner-5.1.5-jh…...
C++ unordered_set unordered_map
上篇文章我们讲解了哈希表的实现,这节尝试使用哈希表来封装unordered_set/map 1. unordered_set/map的框架 封装的过程实际上与set/map类似,在unordered_set/map层传递一个仿函数,用于取出key值 由于我们平常使用的都是unordered_set/map&…...
第37课 绘制原理图——放置离页连接符
什么是离页连接符? 前边我们介绍了网络标签(Net Lable),可以让两根导线“隔空相连”,使原理图更加清爽简洁。 但是网络标签的使用也具有一定的局限性,对于两张不同Sheet上的导线,网络标签就不…...
< 自用文 Texas style Smoker > 美式德克萨斯烟熏炉 从设计到实现 (第一部分:烹饪室与燃烧室)
原因: 没钱还馋! 但有手艺。 预计目标: 常见的两种偏置式烟熏炉(Offset Smoker) 左边边是标准偏置式(Standard Offset),右边是反向流动式(Reverse Flow Offset&#x…...
【现代深度学习技术】现代循环神经网络03:深度循环神经网络
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
AimRT从入门到精通 - 03Channel发布者和订阅者
刚接触AimRT的小伙伴可能会疑惑,这个Channel和RPC(后面讲的)到底是什么呢? 但是当我们接触了之后,就会发现,其本质类似ROS的Topic通信!(其本质基于发布订阅模型) 接下来…...
MySQL初阶:数据库基础,数据库和表操作,数据库中的数据类型
1.数据库基础 数据库是一个客户端——服务器结构的程序。 服务器是真正的主体,负责保存和管理数据,数据都存储在硬盘上 数据库处理的主要内容是数据的存储,查找,修改,排序,统计等。 关系型数据库&#…...