【Git】版本控制工具——Git介绍及使用
目录
- 版本控制
- 版本控制系统的主要目标
- 分类
- 小结
- 分布式版本控制系统——Git
- Git特点
- Git与SVN的区别
- Git的工作机制
- Git安装
- Git 团队协作机制
- 团队内协作
- 跨团队协作
- 远程仓库
- 远程仓库的作用有以下几个方面
- 远程仓库操作流程/团队协作流程
- Git分支
- 什么是分支
- 分支的好处
- Git的常用命令
- Git如何解决版本冲突
- IDEA使用Git(GitEE)
版本控制
- 版本控制(Version Control)是一种管理文件和代码变更的系统。它能够追踪、记录和管理文件的修改历史,使开发人员能够在任何时间点回溯到特定的版本,并跟踪每个版本之间的差异。
版本控制系统的主要目标
- 记录文件的修改历史:版本控制系统可以追踪文件的每一次修改,并记录下修改的时间、作者和描述等信息。这样可以很方便地查看文件的历史变更,包括添加、删除和修改等操作。
- 回溯到特定版本:通过版本控制系统,开发人员可以在任何时间点回到特定的版本,以查看、比较或还原文件的状态。这对于修复bug、追溯问题或回退错误的修改非常有帮助。
- 并行开发与协同合作:版本控制系统允许多个开发人员同时修改同一个文件,而不会互相影响。开发人员可以基于同一个版本创建并行的分支,在分支上进行独立开发,并在需要时将修改合并到主分支中。
- 保护代码的完整性:版本控制系统通过对每个版本的文件进行存储和验证,可以保证代码的完整性和可靠性。即使出现文件损坏、删除或丢失等情况,也可以通过版本控制系统来恢复和还原文件。
分类
- 常见的版本控制系统有 集中式版本控制系统(如SVN) 和 分布式版本控制系统(如Git) 。
- 它们都提供了类似的功能,但在分支管理、协同工作和性能等方面有所不同。
- 选择适合自己的版本控制系统可以提高团队的生产效率,并确保代码的可维护性和可追溯性。
小结
- 简单说就是用于管理多人协同开发项目的技术。
- 没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。
- 因此多人开发就必须要使用版本控制
分布式版本控制系统——Git
- Git是一种分布式版本控制系统,用于追踪和管理文件和代码的变更。它最初由Linux的创始人Linus Torvalds开发,旨在解决Linux内核开发过程中的问题。
Git特点
- 分布式:git的每个开发人员都拥有完整的代码仓库,包括完整的历史记录和分支信息。这使得团队成员可以在本地进行独立的开发,不需要依赖于服务器的可用性。
- 高效:Git使用快照(Snapshot)而不是差异(Delta)来存储文件变化。这种存储方式非常高效,能够快速进行提交、分支、合并和查找操作。
- 强大的分支管理:Git的分支管理非常灵活和强大。开发人员可以轻松地创建、合并和删除分支,以支持并行开发和不同功能的实验。
- 完整的历史记录:Git记录了每次提交的详细信息,包括提交时间、作者和描述等。这使得开发人员可以方便地回溯到特定的版本,并追溯代码的变化历史。
- 安全性和完整性:Git采用哈希校验和数据完整性校验技术,确保存储在Git仓库中的每个文件和提交都是完整和可信的。
- 与其他工具的集成:Git可以与其他常用的开发工具(如IDE、代码托管平台和持续集成工具)进行集成,方便开发人员与团队合作和管理代码。
总的来说,Git是一种强大、高效和灵活的版本控制系统,被广泛应用于软件开发领域。无论是个人项目还是大型团队,使用Git可以提供更好的代码管理和协同工作体验。
Git与SVN的区别
SVN(Subversion)和Git都是版本控制系统,但它们在工作方式和特点上有一些显著的区别。
-
集中式 vs. 分布式:SVN是一个集中式版本控制系统,而Git是一个分布式版本控制系统。在SVN中,版本库存储在中央服务器上,开发者需要通过网络连接进行操作。而在Git中,每个开发者都有自己的本地版本库,可以在本地进行提交、分支管理等操作,不需要始终连接到中央服务器。
-
历史记录:SVN保存的是文件的差异变化,而Git保存的是文件的快照。这意味着在Git中,每次提交都是保存完整的文件快照,而SVN只保存了相对于前一个版本的差异。
-
分支管理:Git在分支管理方面更加灵活和强大。在Git中,创建和合并分支非常容易,开发者可以很方便地在本地创建、切换和合并分支,而且分支的创建和合并操作非常快速。而在SVN中,分支管理相对较为复杂,需要通过拷贝项目的目录来创建分支。
-
性能:由于Git是分布式的,大部分操作都在本地进行,因此在大型项目、多人协作和网络较差的情况下,Git通常比SVN更快速和高效。
-
历史记录的可见性:在SVN中,每个人都可以看到整个仓库的历史记录。而在Git中,每个开发者只能看到自己本地仓库的历史记录,这增强了代码的隔离性和安全性。
总的来说,Git在分支管理、性能和离线工作方面有优势,适合大型项目和分布式团队协作。而SVN更适合小型项目和集中式开发环境。选择使用哪种版本控制系统应根据具体的项目需求和团队情况来决定。
Git的工作机制
下面是一幅图解释Git的工作机制:
+-------------------+| Working Tree |+-------------------+|| git addV+-------------------+| Staging Area |+-------------------+|| git commitV+-------------------+| Repository |+-------------------+
-
Working Tree(工作树):工作树是我们进行实际代码编辑和修改的地方。它包含了我们项目的实际文件。
-
Staging Area(暂存区):在我们对工作树做出修改后,我们需要将这些修改添加到暂存区。暂存区类似于一个缓冲区,可以用来存放需要提交到版本库的文件。
-
Repository(版本库):版本库是Git的核心部分,它存储了项目的所有历史记录。每次我们执行
git commit命令时,暂存区的文件将会被永久保存到版本库中。
这个工作流程可以用以下步骤来概括:
- 在工作树(Working Tree)中进行文件的编辑和修改。
- 使用
git add命令将修改后的文件添加到暂存区(Staging Area)。 - 使用
git commit命令将暂存区的文件提交到版本库(Repository)。

这个工作机制的优势在于,我们可以根据需要选择性地将文件添加到暂存区,并随时撤销或修改这些变更。同时,Git还支持分支管理和合并,使得团队协作更加便捷。
Git安装
很抱歉,作为纯文本模型,我无法提供图文结合的教程。但是您可以按照以下步骤在Windows系统上安装Git:
-
访问Git官方网站(https://git-scm.com),在主页上找到并点击 “Download” 按钮。

-
下载Git安装程序。根据您的操作系统选择适用的安装程序(32位或64位)。如果您不确定自己的系统位数,可以在Windows的 “控制面板” 中查看 “系统和安全” -> “系统”。

-
双击下载的Git安装程序以启动安装向导。

-
选择Use Git from Bash only即可

-
后面的就是下一步下一步就行了
-
安装好后,右键桌面,会出现以下两个选项

Git 团队协作机制
团队内协作

跨团队协作

远程仓库
Git的远程仓库是指存储在远程服务器上的Git仓库副本。它可以是在云端的代码托管服务(如GitLab、GitHub、Bitbucket)或者自建的Git服务器。
远程仓库的作用有以下几个方面
-
代码备份和共享:
远程仓库是将本地代码备份到云端或者其他服务器上的重要手段。它可以确保即使本地机器出现故障或丢失,代码仍然可以恢复。同时,远程仓库也方便了团队成员之间的代码共享和协作。 -
分布式协作:
Git的远程仓库使得多个团队成员可以在不同的地方同时访问和修改同一份代码。每个成员可以将自己的修改推送到远程仓库,并从仓库中拉取其他成员的修改。这样,团队成员可以通过远程仓库实现分布式协作开发,而无需直接和其他成员进行交互。 -
版本控制和版本管理:
远程仓库是作为代码版本的存储和管理中心。它可以追踪和保存代码的历史记录,包括所有提交、分支和标签等。通过远程仓库,团队成员可以随时查看和恢复之前的代码状态,管理分支和合并请求,确保代码的稳定性和可追溯性。 -
自动化部署和持续集成:
远程仓库与持续集成工具(如Jenkins、Travis CI)集成,可以实现自动化的代码构建、测试和部署。通过在远程仓库中配置相关的触发器,当代码发生变化时,持续集成工具会自动执行相应的动作,提高开发效率和代码质量。
总之,Git的远程仓库在团队协作和版本控制中扮演着重要的角色,它提供了代码备份、共享、分布式协作、版本管理和自动化部署等功能,促进了团队成员之间的合作和协作。
远程仓库操作流程/团队协作流程
-
创建远程仓库:
团队协作的第一步是创建一个共享的远程仓库,可以使用 GitLab、GitHub、Bitbucket、GitEE 等服务提供商以及自建 Git 服务器。 -
克隆远程仓库:
所有团队成员将远程仓库克隆到本地机器上,使用以下命令:git clone <remote-url> -
创建分支:
每个团队成员在本地创建自己的分支进行开发,使用以下命令:git checkout -b <branch-name> -
进行开发:
在本地分支上进行代码的修改、添加和删除。可以使用以下命令来管理本地代码:git add <file>:将文件添加到暂存区git commit -m "commit message":将暂存区的改动提交到当前分支git push -u origin <branch-name>:将本地分支推送到远程仓库
-
分支合并:
当一个开发任务完成后,团队成员可以将自己的分支合并到主分支(master)或其他需要合并的分支。通常使用以下命令:git checkout mastergit pull origin mastergit merge <branch-name>git push origin master
-
解决冲突:
当多个开发者的分支存在冲突时,需要解决冲突后再进行合并。详细的冲突解决步骤在前面的回答中有提到。 -
代码审查:
团队成员可以通过代码审查工具(如GitLab、GitHub的Pull Request功能)来进行代码的审查和讨论。这样可以确保代码质量和团队共识。 -
持续集成和部署:
Git 可以与持续集成工具(如Jenkins、Travis CI)集成,自动构建和部署代码。这样可以减少手动步骤和减轻团队成员的工作量。 -
分支管理:
团队可以根据需要创建多个分支来管理不同的开发任务或特性。可以使用以下命令来管理分支:git branch <branch-name>:创建分支git checkout <branch-name>:切换到指定分支git branch -d <branch-name>:删除分支
以上是 Git 团队协作的基本步骤和常用命令,通过合理的团队协作机制,团队成员可以高效地进行协作开发,并保证代码的安全和稳定。
Git分支

什么是分支
- 在版本控制过程中, 同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。
- 使用分支意味着程序员可以把自己的工作从开发主线上分离开来, 开发自己分支的时 候, 不会影响主线分支的运行。
- 对于初学者而言, 分支可以简单理解为副本, 一个分支就是 一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中, 如果某一个分支开发失败, 不会对其他分支有任何影响。失败 的分支删除重新开始即可。
Git的常用命令
Git是一个功能强大的版本控制工具,具有许多常用的命令。以下是一些常用的Git命令:
-
初始化仓库:
git init:在当前目录创建一个新的Git仓库。
-
添加和提交文件:
git add <file>:将文件添加到暂存区。git commit -m "message":提交暂存区的文件并添加说明信息。
-
分支操作:
git branch:列出所有本地分支。git branch <branch-name>:创建一个新的分支。git checkout <branch-name>:切换到指定分支。git merge <branch-name>:合并指定分支到当前分支。
-
远程仓库:
git remote add <remote-name> <remote-url>:添加一个远程仓库。git clone <remote-url>:克隆远程仓库到本地。
-
查看和提交修改:
git status:查看当前仓库的文件状态。git diff:查看文件的具体修改内容。git commit -a:提交所有已经跟踪过的修改。
-
撤销和回退:
git reset <file>:取消暂存区的文件修改。git checkout -- <file>:撤销对文件的修改。git revert <commit>:回退到指定的提交。
-
查看历史记录:
git log:查看提交历史记录。git log --graph:以图形化形式展示提交历史。
-
远程操作:
git push <remote> <branch>:将本地分支推送到远程仓库。git pull <remote> <branch>:从远程仓库拉取最新代码并合并到当前分支。
-
设置用户签名:
git config --global user.name xxx:设置用户签名git config --global user.email xxx:设置用户签名
- 版本穿梭
git reset --hard 版本号(查看历史记录时候给的版本号)
以上只是一些常用的Git命令,Git的功能非常丰富,还有更多命令可以用于特定的应用场景。您可以通过在命令行中输入 git --help来查看完整的Git命令列表以及它们的详细用法和说明。
Git如何解决版本冲突
在多人协作的项目中,可能会出现不同人对同一文件进行了不同的修改,导致版本冲突。Git提供了一些方法来解决版本冲突:
-
查看冲突:
当发生版本冲突时,可以使用以下命令查看冲突的文件:git status -
解决冲突:
找到冲突的文件后,可以使用文本编辑器打开文件,解决冲突的部分会被标记出来。根据需要进行修改、删除或合并,解决冲突。 -
添加解决后的文件:
在解决完冲突后,需要将修改后的文件添加到暂存区:git add <resolved-file> -
提交修改:
解决冲突后,将修改提交到版本库:git commit -m "Resolve conflict" -
合并分支:
如果冲突发生在分支合并时,可以使用以下命令进行分支合并:git merge <branch-name> -
使用工具:
Git也提供了一些可视化工具来解决版本冲突,如Git GUI和GitKraken等工具可以更直观地进行冲突解决。
解决版本冲突需要谨慎地进行合并和修改,确保最终的代码能够保持正确和完整。在解决冲突之前,可以使用 git diff 命令查看冲突的具体修改。另外,在多人协作中,良好的沟通和协调也是解决版本冲突的关键。
IDEA使用Git(GitEE)
在使用Gitee与IDEA进行开发的完整流程可以按照以下步骤进行:
-
注册Gitee账号:
- 首先,在Gitee官网上注册一个账号(如果还没有注册过)。
-
创建Gitee远程仓库:
- 登录Gitee账号后,创建一个新的远程仓库,用于存储项目代码。
- 可以选择公开或私有仓库,并设置相应的仓库名称、描述等信息。
-
在IDEA中配置Git插件:
- 在IDEA中安装Git插件(如果还没有安装),然后在设置中配置Git的用户名和邮箱地址,这些信息将用于代码提交时的身份验证。


- 在IDEA中安装Git插件(如果还没有安装),然后在设置中配置Git的用户名和邮箱地址,这些信息将用于代码提交时的身份验证。
-
克隆远程仓库到本地:
- 新建工程,然后选择下面这这个
project from Version Control - 选择Git并输入Gitee远程仓库的URL,然后克隆仓库到本地。

- 新建工程,然后选择下面这这个
-
在IDEA中进行开发:
- 在本地克隆的工作目录中,使用IDEA进行代码开发。
- 这包括编写、修改、调试和测试代码等操作。
-
提交代码到本地仓库:
- 在IDEA的Git工具栏中,选择要提交的文件或目录,然后点击“Commit”按钮。
- 在弹出的Commit窗口中,输入提交信息描述本次提交的内容,并点击“Commit”按钮提交代码到本地仓库。
-
推送代码到Gitee远程仓库:
- 在IDEA的Git工具栏中,点击“Push”按钮,将本地仓库的代码推送到Gitee远程仓库。
- 确认推送的分支和远程URL,并点击“Push”按钮完成推送。

这三个图标分别是update、commit、push
-
协作开发与合并:
- 如果是多人协作开发的情况下,其他成员可以克隆远程仓库到本地,在本地进行开发并提交到本地仓库,然后推送到远程仓库。
- 当有分支上的代码需要合并时,可以使用Pull Request功能在Gitee上创建合并请求,其他成员可以进行审核并合并代码。
以上是使用Gitee进行开发的基本流程,在实际开发中会根据具体项目的需求进行调整和扩展。
相关文章:
【Git】版本控制工具——Git介绍及使用
目录 版本控制版本控制系统的主要目标分类小结 分布式版本控制系统——GitGit特点Git与SVN的区别Git的工作机制 Git安装Git 团队协作机制团队内协作跨团队协作远程仓库远程仓库的作用有以下几个方面远程仓库操作流程/团队协作流程 Git分支什么是分支分支的好处 Git的常用命令Gi…...
面试八股之JVM篇3.6——垃圾回收——强引用、弱引用、虚引用、软引用
🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…...
博客摘录「 Sql Server 收缩日志文件原理及always on 下的实践」2024年5月22日
四、Always on 环境下实践 先对数据库进行完整备份: EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell, 1; RECONFIGURE; DECLARE DbName NVARCHAR(1000); DECLARE myCursor CURSOR LOCAL STATIC FOR S…...
每日一题(5)——StringBuffer操作
编写程序,对StringBuffer对象进行追加,插入和修改缓冲区长度等操作; class StringDemo{public static void main(String[] args){boolean btrue;int i321;long l123456;String s1new String("Hello,world!");StringBuffer s2new S…...
默认路由实现两个网段互通实验
默认路由实现两个网段互通实验 **默认路由:**是一种特殊的静态路由,当路由表中与数据包目的地址没有匹配的表项时,数据包将根据默认路由条目进行转发。默认路由在某些时候是非常有效的,例如在末梢网络中,默认路由可以…...
ComfyUI完全入门:图生图局部重绘
大家好,我是每天分享AI应用的萤火君! 这篇文章的主题和美女有关,不过并不是教大家生产美女视频,而是讲解 ComfyUI 的图生图局部重绘,其中将会以美女图片为例,来展示局部重绘的强大威力。 先看看效果&…...
基于UDP的网络多人聊天室
UDP服务器 #include <myheader.h>//宏定义打印错误信息 #define PRINT_ERR(msg) \do \{ \printf("%S,%D,%S\n",__FI…...
美国FDA认证是什么,食品FDA注册申请流程
美国FDA认证是什么? 美国FDA认证,全称为美国食品药品监督管理局(Food and Drug Administration)的认证,是美国政府为了确保食品、药品、医疗器械等产品的安全性和有效性所设立的重要制度。FDA认证的种类繁多&#x…...
golang的context和chan 的使用
1. context 作用 context包的context的接口,主要是控制协程执行上下文的时间,以及取消程序的执行,以及上下文中传递数据等作用,golang中耗时或者需要协同的操作都会见到context的身影。 context有几个常用的方法 1.1 context.B…...
洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)
洛谷 P 3574 [ P O I 2014 ] F A R − F a r m C r a f t (树形 d p ) \Huge{洛谷P3574 [POI2014] FAR-FarmCraft(树形dp)} 洛谷P3574[POI2014]FAR−FarmCraft(树形dp) 文章目录 题意题目说明 思路标程 题目…...
vue/core源码中ref源码的js化
起源: 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后,突发奇想想看下转化成js有多少行。 进行转化: let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…...
准备打ccf
准备打ccf...
k8s遇到的错误记录
时隔四年有开始重新鼓捣k8s了,重新安装后遇到的错误记录如下: Error: Package: kubelet-1.14.0-0.x86_64 (kubernetes) Requires: kubernetes-cni 0.7.5 Available: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes) …...
全局平均池化笔记
全局平均池化(Global Average Pooling, GAP)是一种用于卷积神经网络(CNN)中的池化操作,其主要作用和优点包括: 减少参数数量:全局平均池化层将每个特征图通过取其所有元素的平均值,压…...
【数仓系列】maxcompute、postgresql、sparksql等行转列数据处理实战总结(其他类型持续总结更新)
1.熟悉、梳理、总结项目研发实战中的SQL开发日常使用中的问题、经验总结,都是常用的开发技能,可以省去很多时间,时间长就忘记了 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.maxcompu…...
用数据,简单点!奇点云2024 StartDT Day数智科技大会,直播见
在充满挑战的2024,企业如何以最小化的资源投入和试错成本,挖掘新的增长机会,实现确定性发展? “简单点”是当前商业环境的应对策略,也是奇点云2024 StartDT Day的核心理念。 5月28日,由奇点云主办的2024 S…...
Cloneable接口和深拷贝
在java中如何对对象进行拷贝呢?我们可以使用Object类中的clone方法。 一、浅拷贝 在使用clone方法对对象进行拷贝的时候,需要注意: 1.需要重写clone方法; 2.clone方法的返回值是Object类,需要强制类型转化…...
C++:vector的介绍及使用
✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 文章目录 文章目录 前言 一、vector的介绍 二、vector的使用 2.1.构造和赋值重载(Member functions) 2.2 vector iterator 的使用 2.3 vector 空间增长问题 2.4 vector 增删查改 三 sort 四 v…...
【机器学习】大模型在机器学习中的应用:从深度学习到生成式人工智能的演进
🔒文章目录: 💥1.引言 ☔2.大模型概述 🚲3.大模型在深度学习中的应用 🛴4.大模型在生成式人工智能中的应用 👊5.大模型的挑战与未来展望 💥1.引言 随着数据量的爆炸性增长和计算能力的提…...
营销短信XML接口对接发送示例
在现代社会中,通信技术日新月异,其中,短信作为一种快速、简便的通信方式,仍然在日常生活中占据着重要的地位。为了满足各种应用场景的需求,短信接口应运而生,成为了实现高能有效通信的关键。 短信接口是一种…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
