GitHub学习记录5-内部原理
GitHub学习记录5 Git 内部原理 本地仓库下有个名为 .git 的隐藏目录 .git 的目录结构 .git的目录结构如下: 123456789101112131415161718├── *config 配置信息(比如本地repo是否大小写敏感, remote端repo的url, 用户名邮箱等) ├── description 无需关心(仅供GitWeb程序使用)├── *HEAD 目前被检出的分支├── index 保存暂存区信息││├── hooks/ 钩子脚本(执行Git命令时自动执行一些特定操作)├── info/ 包含一个全局性排除文件│ └── exclude 放置不希望被记录在 .gitignore 文件中的忽略模式├── logs/ 记录所有操作├── *objects/ 存储所有数据内容│ ├──...
GitHub学习记录4-git工具
GitHub学习记录4 Git工具 引用 Commit 的记录 切换至本项目工作目录,执行 git log 能看到类似提交日志的输出。 想查看某次提交信息,可以通过 git show + 哈希值 来查看。 引用分支 如果你要查看一个分支的最后一次对象,可以通过分支名查看。查看本地分支列表通过git branch查看。 查看远程分支通过后加参数-r 引用日志 当你在工作时, Git 会在后台保存一个引用日志(reflog), 引用日志记录了最近几个月你的 HEAD 和分支引用所指向的历史。 你可以使用 git reflog 来查看引用日志 交互式暂存 当你修改大量文件后,希望将改动拆分成多个提交而不是一起提交的时候,可以通过如下命令操作。 如果运行 git add 后加 -i 或者 --interactive 选项的时候,Git 会进入一个交互式命令模式. 在这块区域后是 Commands 命令区域。 在这里你可以做一些工作,包括暂存文件、取消暂存文件、暂存文件的一部分、添加未被追踪的文件、显示暂存内容的区别。 暂存、取消文件 在 Waht now>>...
GitHub学习记录3-分支
GitHub学习记录3 Git分支管理 分支的简介 Git最重要的运用场景是多人协同开发,但是如何能保证每个人之间的开发不影响其他人的开发进程,Git 分支的出现就是解决了这个问题,使得每个人之间的开发是独立的,互不影响的。 分支的创建 可以使用git branch命令来查看或创建分支: 1git branch 当我们要创建新分支时,在git branch后面加上新建的分支名 分支的切换 我们可以通过git checkout 分支名命令来进行切换分支 切换分支后,我们就可以进行自己的开发。分支上的文件状态是不同的。 分支的合并 当我们在分支上完成来开发工作后,我们需要将我们在当前分支进行的工作合并到主分支上。首先我们需要切回需要合并到的分支上 接下来,进行合并: 1git merge...
GitHub学习记录2-仓库
GitHub学习记录2 获取Git仓库 通常,有两种获取Git项目仓库的方式: 将尚未进行版本控制的本地目录转换为 Git 仓库 从其它服务器 克隆 一个已存在的 Git 仓库 已存在目录中初始化仓库 首先,进入该项目目录中(使用cd或者直接到该文件夹右键) 之后执行: 1git init 即可完成初始化操作。但此时项目里的文件还没有被跟踪。 克隆现有的仓库 1git clone https://github.com/libgit2/libgit2 会在当前目录下创建“libgit2”的目录,从远程仓库拉取下所有数据放入 .git 文件夹。 记录每次更新到仓库 通常,我们会对仓库中的文件做些修改,每当完成了一个阶段的目标,想要将记录下它时,就将它提交到仓库。 我们的文件有两种状态:已跟踪 或 未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。简而言之,已跟踪的文件就是 Git 已经知道的文件。 编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git...
GitHub学习记录1-安装与配置
GitHub学习记录1 版本控制 版本控制系统可以帮我们记录对代码的变化,并且可以恢复到指定的某个版本的代码。甚至,我们既可以对某个文件进行回溯,也可以对整个项目进行回溯。 集中式版本控制与分布式版本控制 集中式版本控制系统 集中式版本控制系统,版本库集中存放于单一的服务器中。在协同工作时,如果遇到中央服务器故障,整个项目组就得停工扥待服务器修复。 分布式版本控制系统 分布式版本控制系统根本没有“中央服务器”, 我们每次是把代码仓库完整地镜像下来,包括完整的历史记录。这使得每个人的电脑上都是一个完整的版本库。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。github正是这样的一个分布式版本控制系统。 Git的安装 linux环境 可以在terminal输入命令: 1git 查看是否安装了git 对于Debian和Ubuntu Linux,可以通过在termainal中输入: 1sudo apt-get install git 进行安装 Windows 直接在官网上进行下载安装。Windows也有 GitHbu...
数据结构复习
数据结构复习 数据结构的基本概念 数据: 信息的载体,是对客观事物的符号表示,图像,声音,视频等也属于数据的范畴 数据元素: 数据的基本单位,也称元素,结点或记录 由若干个数据项构成,数据项是数据不可分割的最小单位 数据对象: 数据的子集 具有相同性质的数据元素的集合 数据结构: 数据元素的集合中,元素相互之间的关系: 逻辑结构:集合,线性结构,树型结构,图状结构 物理结构:顺序,链接,索引,散列 **算法的特性:**可行性,有穷性,确定性,输入,输出 **算法的设计原则:**正确性,可读性,健壮性,高效率,低存储量 队列 队列是一种先进先出的线性表,队头只允许出队,队尾只允许入队。 通常,维护队头的数指向队头所在的下标,维护队尾的数指向队尾的数+1.此时,当队头==队尾的时候队列为空 循环队列 随着出队和入队的进行,数组会整体向右平移,因为数组前面的元素因为出队变成了空白,变得不可使用。造成空间的浪费。使用循环队列可以避免空间的浪费。 一样地,队头==队尾的时候,队列为空。 循环队列里,队头==(队尾+1)%maxsize...
C++学习记录算法篇-堆排序
C++学习记录算法篇-堆排序 一、堆 堆是一颗完全二叉树 如果堆的每一个节点(叶子节点除外)都大于他的子节点,这样的堆称为大根堆 如果堆的每一个节点(叶子节点除外)都小于他的子节点,这样的堆称为小根堆 对于用数组储存的堆,有以下运算性质: 某个节点i的父节点下标为:(i-1)/2 (整数除法) 某个节点i的左孩子节点下标为: i*2+1 某个节点i的右孩子节点下标为: i*2+2 二、堆排序(以从小到大为例) 利用堆的性质进行排序:从小到大使用大根堆,从大到小使用小根堆 大根堆的根节点的值最大,因此不断地把根节点放到数组的最末端,放完再维护堆,就可以实现从小到大排序 三、代码实现: 首先实现堆的维护: 对于某个待维护的下标,我们要维护其子节点,子节点的子节点…直到叶子节点,这是一个递归的过程 12345678910111213141516171819202122//维护堆的性质,以大根堆为例://所需要的参数:数组,数组的长度,待维护的下标void heapify(int arr[], int n, int...
C++学习记录算法篇—归并排序
C++学习记录算法篇—归并排序 一、归并排序: 归并排序利用了分治思想,即把大问题先拆分为小问题,对小问题进行求解,最后合并成大问题的解。在归并排序中体现为:先把数组拆分为许多小数组,对小数组进行排序,再把有序的小数组合并成有序的大数组。 二、归并排序的实现: 首先是归并排序的入口,在这个入口创建临时数组,并进行划分,最后在排序完成后删除临时数组 12345678910void merge_sort(int arr[],int n){ //首先分配辅助数组 int* tempArr = new int[n]; //分配完,进行数组的划分 msort(arr, tempArr, 0, n - 1); //排序完后,删除临时数组 delete tempArr; return;} 接下来是数组的划分,传入的参数为: 欲划分的数组 临时数组 划分的起点(最开始是0) 划分的终点(最开始是n-1) 首先一直划分数组,直到每个小数组只有一个元素,这是一个递归的过程 划分数组后,进入合并阶段 123456789101112131415void...
C++学习记录算法篇—快速排序
C++学习记录算法篇—快速排序 一、快速排序的过程(从小到大排为例): 首先,假设基准数为最左边的数。 然后,让两个“哨兵”从最左边和最右边向中间探测,从左边出发的哨兵找比基准数大的数,从右边出发的哨兵找比基准数小的数 注意,因为是从小到大排,所以右边的哨兵要先出发 两个哨兵都“停下”(即找到了符合要求的数),交换两个“哨兵”的值,接着继续探测,继续交换,直到两个哨兵相遇为止 两个哨兵相遇后,交换基准数与相遇时所指示的数。 此时,基准数左边都小于基准数,基准数右边都大于基准数,这也是为什么要右边哨兵先动的原因 至此,基准数归位,接着对基准数的两边再次进行快速排序,这是一个递归的过程。 可以看到,快速排序就是不断地把基准数归位的过程 下面是代码: 12345678910111213141516171819202122232425262728293031323334353637//快速排序函数void quicksort(int l, int r)//接受最左边数字的下标left,和最右边数字的下标right{ int i, j, t, temp; if (l >=...
Java基础知识
switch里case没有break的情况 swtich中的case如果没有break,那么default的语句也会执行 switch可以用于判断的数据类型 byte、char、short、int、enum即枚举类型、Java7之后支持了String类型。 而long,float,double,boolean四种类型和他们的包装类型不能用于swtich 在c++中,switch仅支持int、char和enum 方法中else的return 在方法中带有return的最后一个else不能用else if,否则编译器会认为方法可能没有返回值、 字符直接量 Java中的默认值 在类中的变量如果没有赋值,那么程序会赋予该变量初始值 在方法中的变量如果没有赋值,程序编译时会报错






