【C++八股-第四期】git 分布式版本控制系统 - 24春
提纲:
👉八股:
- 简单说一下大端、小端。
- 什么是git?
- 为什么要用git?
- 简述集中式版本控制库和分布式版本控制库的区别
- 简述Git 与 SVN 区别
- 简述diff 与 patch 区别
- git常用命令
👉 代码:
一、C++八股内容: 1、简单说一下大端、小端。
换句话说👇:存在字符串:
高有效位 → 12 34 56 78 → 低有效位
小端:低地址位 → 78 56 34 12→ 高地址位
大端:低地址位 → 12 34 56 78→ 高地址位
助记:
大端模式:符合阅读习惯,高字节存放在低地址,低字节存放在高地址;类似于把数据当作字符串顺序处理
小端模式:低字节存放在低地址,高字节存放在高地址;即高地址部分权值高,低地址部分权值低
2、什么是git?
- Git 是一个开源的分布式版本控制系统,用于快速高效地处理任何或小或大的项目。最初是为了帮助管理Linux内核开发的一个开放源码的版本控制软件。
- Git应用十分广泛,小到我们平时使用github网站,大到公司中多人合作的大型项目开发。
- 它速度快,完全分布式,允许成千上万个并行开发的分支,容灾性能强。
git分为哪几个区?分别是什么?
①工作区(Workspace)是电脑中实际的目录。
②暂存区(Index)类似于缓存区域,临时保存你的改动。
③仓库区(Repository),分为本地仓库和远程仓库。
通常提交代码分为几步:
① git add 从工作区提交到暂存区
② git commit 从暂存区提交到本地仓库
③ git push 或 git svn dcommit 从本地仓库提交到远程仓库
3、为什么要用git?
让你回答为什么用git,其实就是让你说之前的版本控制系统为什么不好
最开始的版本控制方法一般都是采用人工手动控制。
- 缺点:
- 千人千面,不同版本命名随意
- 有时无法快速辨别版本新旧
- 无法快速知道版本1相比版本2自己改了什么
- 如果要是多人开发,那命名和版本控制更为可怕
4、简述集中式版本控制库和分布式版本控制库的区别
- 备份集中式存在单点故障,一旦故障,没法恢复,所以备份极其重要;分布式则更安全,出现故障可以恢复数据,每一个节点都是一个服务器。
- 服务器压力集中式所有的操作都要与服务器交互,操作首先于带宽,不能移动办公;分布式全是离线操作,不受限于带宽,可以移动办公。
- 安全性集中式容易出现单点故障,遭受黑客攻击;分布式数据、提交全部使用SHA1哈希,以保证数据完整性,甚至提交可以使用PGP签名。
- 工作模式集中式合适人数不多的项目,集中管理;分布式适合很多人的项目。
集中式和分布式最根本的区别就是:
分布式每个人的电脑上都可以直接拷贝完整的代码版本。而集中式只能拷贝自己需要的。
分布式的服务器挂掉之后,不会影响工作。而集中式的服务器挂掉之后,根本就没法进行工作。
5、简述Git 与 SVN 区别
SVN:
Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
- Git是分布式的,SVN是集中式的;这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。
- Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。
- Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。
- Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
- Git分支廉价,SVN分支昂贵;Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个特性使 Git 的分支切换非常迅速,且创建成本非常低。
- 适配性:
- SVN不适合的领域:
- 跨地区的协同开发(因为局域网之外延迟巨大)
- 对代码的高质量追求和代码门禁
- Git不适合的领域:
- 不适合Word等二进制文档的版本控制
- 原因:Git 无锁定/解锁模式,故不能排他式修改。
- 二进制文件(基于值编码),即为自定义的编码。每一个字符的编码都可能不同,所以git才没法操作。————(还有基于字符编码)ASCII码 & UTF-8
- 整体的读授权,不能将读授权精细到目录级别
- 解决方案:版本库按照目录拆分
6、简述diff 与 patch 区别
- 在最初的版本控制出现之前,有 diff 和 patch 被用于版本控制。
- diff
- diff是Linux里的命令,用于比较文件的差异。
- diff以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
- patch
- patch是Linux里的命令,用于修补文件。
- patch指令让用户利用设置修补文件的方式,修改,更新原始文件。
- patch是diff的反向操作
7、git常用命令 工作准备:
- git clone —— 工程克隆
查看工作区:
- git diff —— 查看工作区修改内容
- git status —— 查看工作区文件状态
文件修改后提交推送:
- git add —— 新增文件到缓存区
- git rm —— 删除文件到缓存区
- git mv —— 移动文件到缓存区
- git commit —— 提交更改的文件
- git push —— 推送到仓库
查看日志:
- git log —— 查看当前分支上的提交日志
新建分支:
- git branch:创建后不会切换至新分支;
- git checkout -b 创建后会切换至新分支;
更新分支:
- git pull 拉取远端服务器更新内容后自动与当前分支合并;
- git fetch 拉取远端服务器更新内容后不与当前分支合并,需要手动merge
代码推荐:剑指Offer(说在**中的题号)
第一天:
- 剑指 Offer 26
- 剑指 Offer 27
- 剑指 Offer 28
第二天:
- 剑指 Offer 10-I
- 剑指 Offer 10-II
- 剑指 Offer 63
第三天:
- 剑指 Offer 42
- 剑指 Offer 47
相关阅读:
【Java八股】:点击跳转
【简历制作】:点击跳转
【C++八股】:点击跳转

