获得徽章 0
#青训营 x 字节后端训练营#
5月10日打卡 day 24
今日学习《「算法与数据结构」一张脑图带你看动态规划算法之美》。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」一张脑图带你看动态规划算法之美
什么是动态规划:动态规划在寻找有很多重叠子问题的情况的最佳解时有效。它将问题重新组合成子问题,为了避免多次解决这些子问题,它们的结果都逐渐被计算并被储存,从简单的问题直到整个问题都被解决。因此,动态规划储存递归时的结果,因而不会在解决同样的问题时花费时间。动态规划只能应用于有最佳子结构的问题。最佳子结构的意思是局部最佳解能决定全域最佳解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。
动态规划解题三大步骤:1. 状态定义;2. 列出状态转移方程;3. 初始化状态。
5月10日打卡 day 24
今日学习《「算法与数据结构」一张脑图带你看动态规划算法之美》。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」一张脑图带你看动态规划算法之美
什么是动态规划:动态规划在寻找有很多重叠子问题的情况的最佳解时有效。它将问题重新组合成子问题,为了避免多次解决这些子问题,它们的结果都逐渐被计算并被储存,从简单的问题直到整个问题都被解决。因此,动态规划储存递归时的结果,因而不会在解决同样的问题时花费时间。动态规划只能应用于有最佳子结构的问题。最佳子结构的意思是局部最佳解能决定全域最佳解(对有些问题这个要求并不能完全满足,故有时需要引入一定的近似)。简单地说,问题能够分解成子问题来解决。
动态规划解题三大步骤:1. 状态定义;2. 列出状态转移方程;3. 初始化状态。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月9日打卡 day 23
今日学习《ElasticSearch全流程》。
>>数据库延展阅读
- 数据库与存储入门
- ElasticSearch全流程
- ES是什么:搜索引擎 search engine、近实时 (Near) Real Time Search、RESTful API、分布式、高可用、面向文档存储,json格式、基于Apache Lucene。
- 核心概念:Cluster 集群、Node 构成集群的单机节点、Index 索引、Shard 分片、Replica 副本、Segment 分段、Document 文档、Field 字段、Inverted Index 倒排索引、Text / Keyword 类型。
- 使用全流程:
- schema(mapping):因为es数据的交互形式是json,所以doc可以开箱即用,在写入doc时如果没有预先定义的mapping,doc的每一个field会根据传过来的json数据确定类型。不过如果没有动态字段的需求,个人不建议使用es的dynamic mapping,使用不当的话会污染mapping,所以可以指定 dynamic为false来关闭动态mapping。
- 数据写入:如图。
- 数据读取:使用search api可以很方便的实现数据的检索。es提供了很多search api,例如match_query,term_query等等,可以很方便的组装query DSL(Domain Specific Language),且开发人员不需要考虑DSL中query的顺序,dsl中query的顺序不会影响最后的执行效率,真正的执行顺序会在CBO(Cost Based Optimizer)后进行重排。
5月9日打卡 day 23
今日学习《ElasticSearch全流程》。
>>数据库延展阅读
- 数据库与存储入门
- ElasticSearch全流程
- ES是什么:搜索引擎 search engine、近实时 (Near) Real Time Search、RESTful API、分布式、高可用、面向文档存储,json格式、基于Apache Lucene。
- 核心概念:Cluster 集群、Node 构成集群的单机节点、Index 索引、Shard 分片、Replica 副本、Segment 分段、Document 文档、Field 字段、Inverted Index 倒排索引、Text / Keyword 类型。
- 使用全流程:
- schema(mapping):因为es数据的交互形式是json,所以doc可以开箱即用,在写入doc时如果没有预先定义的mapping,doc的每一个field会根据传过来的json数据确定类型。不过如果没有动态字段的需求,个人不建议使用es的dynamic mapping,使用不当的话会污染mapping,所以可以指定 dynamic为false来关闭动态mapping。
- 数据写入:如图。
- 数据读取:使用search api可以很方便的实现数据的检索。es提供了很多search api,例如match_query,term_query等等,可以很方便的组装query DSL(Domain Specific Language),且开发人员不需要考虑DSL中query的顺序,dsl中query的顺序不会影响最后的执行效率,真正的执行顺序会在CBO(Cost Based Optimizer)后进行重排。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月8日打卡 day 22
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之Redis 分布式限流。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(6)
- Redis 是一个开源的内存数据库,可以用来作为数据库、缓存、消息中间件等。Redis 是单线程的,又在内存中操作,所以速度极快,得益于 Redis 的各种特性,所以使用 Redis 实现一个限流工具是十分方便的。
- 固定窗口限流:Redis 中的固定窗口限流是使用 incr 命令实现的,incr 命令通常用来自增计数;如果我们使用时间戳信息作为 key,自然就可以统计每秒的请求量了,以此达到限流目的。
- 滑动窗口限流:通过对上面的基于 incr 命令实现的 Redis 限流方式的测试,我们已经发现了固定窗口限流所带来的问题,在这篇文章的第三部分已经介绍了滑动窗口限流的优势,它可以大幅度降低因为窗口临界突变带来的问题,那么如何使用 Redis 来实现滑动窗口限流呢?这里主要使用 ZSET 有序集合来实现滑动窗口限流。
code.juejin.cn
5月8日打卡 day 22
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之Redis 分布式限流。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(6)
- Redis 是一个开源的内存数据库,可以用来作为数据库、缓存、消息中间件等。Redis 是单线程的,又在内存中操作,所以速度极快,得益于 Redis 的各种特性,所以使用 Redis 实现一个限流工具是十分方便的。
- 固定窗口限流:Redis 中的固定窗口限流是使用 incr 命令实现的,incr 命令通常用来自增计数;如果我们使用时间戳信息作为 key,自然就可以统计每秒的请求量了,以此达到限流目的。
- 滑动窗口限流:通过对上面的基于 incr 命令实现的 Redis 限流方式的测试,我们已经发现了固定窗口限流所带来的问题,在这篇文章的第三部分已经介绍了滑动窗口限流的优势,它可以大幅度降低因为窗口临界突变带来的问题,那么如何使用 Redis 来实现滑动窗口限流呢?这里主要使用 ZSET 有序集合来实现滑动窗口限流。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月7日打卡 day 21
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之令牌桶算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(5)
- 令牌桶算法:令牌桶算法同样是实现限流是一种常见的思路,最为常用的 Google 的 Java 开发工具包 Guava 中的限流工具类 RateLimiter 就是令牌桶的一个实现。令牌桶的实现思路类似于生产者和消费之间的关系。系统服务作为生产者,按照指定频率向桶(容器)中添加令牌,如 QPS 为 2,每 500ms 向桶中添加一个令牌,如果桶中令牌数量达到阈值,则不再添加。请求执行作为消费者,每个请求都需要去桶中拿取一个令牌,取到令牌则继续执行;如果桶中无令牌可取,就触发拒绝策略,可以是超时等待,也可以是直接拒绝本次请求,由此达到限流目的。下面是令牌桶限流算法示意图。
5月7日打卡 day 21
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之令牌桶算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(5)
- 令牌桶算法:令牌桶算法同样是实现限流是一种常见的思路,最为常用的 Google 的 Java 开发工具包 Guava 中的限流工具类 RateLimiter 就是令牌桶的一个实现。令牌桶的实现思路类似于生产者和消费之间的关系。系统服务作为生产者,按照指定频率向桶(容器)中添加令牌,如 QPS 为 2,每 500ms 向桶中添加一个令牌,如果桶中令牌数量达到阈值,则不再添加。请求执行作为消费者,每个请求都需要去桶中拿取一个令牌,取到令牌则继续执行;如果桶中无令牌可取,就触发拒绝策略,可以是超时等待,也可以是直接拒绝本次请求,由此达到限流目的。下面是令牌桶限流算法示意图。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月6日打卡 day 20
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之漏桶算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(4)
- 漏桶算法:漏桶算法中的漏桶是一个形象的比喻,这里可以用生产者消费者模式进行说明,请求是一个生产者,每一个请求都如一滴水,请求到来后放到一个队列(漏桶)中,而桶底有一个孔,不断的漏出水滴,就如消费者不断的在消费队列中的内容,消费的速率(漏出的速度)等于限流阈值。即假如 QPS 为 2,则每 1s / 2= 500ms 消费一次。漏桶的桶有大小,就如队列的容量,当请求堆积超过指定容量时,会触发拒绝策略。
由介绍可以知道,漏桶模式中的消费处理总是能以恒定的速度进行,可以很好的保护自身系统不被突如其来的流量冲垮;但是这也是漏桶模式的缺点,假设 QPS 为 2,同时 2 个请求进来,2 个请求并不能同时进行处理响应,因为每 1s / 2= 500ms 只能处理一个请求。
5月6日打卡 day 20
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之漏桶算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(4)
- 漏桶算法:漏桶算法中的漏桶是一个形象的比喻,这里可以用生产者消费者模式进行说明,请求是一个生产者,每一个请求都如一滴水,请求到来后放到一个队列(漏桶)中,而桶底有一个孔,不断的漏出水滴,就如消费者不断的在消费队列中的内容,消费的速率(漏出的速度)等于限流阈值。即假如 QPS 为 2,则每 1s / 2= 500ms 消费一次。漏桶的桶有大小,就如队列的容量,当请求堆积超过指定容量时,会触发拒绝策略。
由介绍可以知道,漏桶模式中的消费处理总是能以恒定的速度进行,可以很好的保护自身系统不被突如其来的流量冲垮;但是这也是漏桶模式的缺点,假设 QPS 为 2,同时 2 个请求进来,2 个请求并不能同时进行处理响应,因为每 1s / 2= 500ms 只能处理一个请求。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月5日打卡 day 19
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之滑动日志算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(3)
- 滑动日志算法:滑动日志算法是实现限流的另一种方法,这种方法比较简单。基本逻辑就是记录下所有的请求时间点,新请求到来时先判断最近指定时间范围内的请求数量是否超过指定阈值,由此来确定是否达到限流,这种方式没有了时间窗口突变的问题,限流比较准确,但是因为要记录下每次请求的时间点,所以占用的内存较多。
code.juejin.cn
5月5日打卡 day 19
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之滑动日志算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(3)
- 滑动日志算法:滑动日志算法是实现限流的另一种方法,这种方法比较简单。基本逻辑就是记录下所有的请求时间点,新请求到来时先判断最近指定时间范围内的请求数量是否超过指定阈值,由此来确定是否达到限流,这种方式没有了时间窗口突变的问题,限流比较准确,但是因为要记录下每次请求的时间点,所以占用的内存较多。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月4日打卡 day 18
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之滑动窗口算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(2)
- 滑动窗口算法:我们已经知道固定窗口算法的实现方式以及它所存在的问题,而滑动窗口算法是对固定窗口算法的改进。既然固定窗口算法在遇到时间窗口的临界突变时会有问题,那么我们在遇到下一个时间窗口前也调整时间窗口不就可以了吗?下面是滑动窗口的示意图:
5月4日打卡 day 18
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之滑动窗口算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(2)
- 滑动窗口算法:我们已经知道固定窗口算法的实现方式以及它所存在的问题,而滑动窗口算法是对固定窗口算法的改进。既然固定窗口算法在遇到时间窗口的临界突变时会有问题,那么我们在遇到下一个时间窗口前也调整时间窗口不就可以了吗?下面是滑动窗口的示意图:
展开
评论
点赞
#青训营 x 字节后端训练营#
5月3日打卡 day 17
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之固定窗口算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(1)
- 固定窗口算法:固定窗口算法又叫计数器算法,是一种简单方便的限流算法。主要通过一个支持原子操作的计数器来累计 1 秒内的请求次数,当 1 秒内计数达到限流阈值时触发拒绝策略。每过 1 秒,计数器重置为 0 开始重新计数。
code.juejin.cn
5月3日打卡 day 17
今日学习《5种限流算法,7种限流方式,挡住突发流量?》之固定窗口算法。
>>数据库延展阅读
- 数据结构概览
- 5种限流算法,7种限流方式,挡住突发流量?(1)
- 固定窗口算法:固定窗口算法又叫计数器算法,是一种简单方便的限流算法。主要通过一个支持原子操作的计数器来累计 1 秒内的请求次数,当 1 秒内计数达到限流阈值时触发拒绝策略。每过 1 秒,计数器重置为 0 开始重新计数。
展开
评论
点赞
#青训营 x 字节后端训练营#
5月2日打卡 day 16
今日学习《「算法与数据结构」梳理6大排序算法》之选择排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(6)
- 选择排序:每一次从待排序的数组元素中选择最大(最小)的一个元素作为首元素,直到排完为止。
- 思路:1. 有n个数,需要排序n-1次。2. 第一次选择最小值,放在第一位。3. 第二次选择最小值,放在第二位,…..重复该过程。4. 第n-1次选择最小值,放在第n-1位。
- 时间复杂度:「时间复杂度O(n*n)」
5月2日打卡 day 16
今日学习《「算法与数据结构」梳理6大排序算法》之选择排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(6)
- 选择排序:每一次从待排序的数组元素中选择最大(最小)的一个元素作为首元素,直到排完为止。
- 思路:1. 有n个数,需要排序n-1次。2. 第一次选择最小值,放在第一位。3. 第二次选择最小值,放在第二位,…..重复该过程。4. 第n-1次选择最小值,放在第n-1位。
- 时间复杂度:「时间复杂度O(n*n)」
展开
评论
点赞
#青训营 x 字节后端训练营#
5月1日打卡 day 15
今日学习《「算法与数据结构」梳理6大排序算法》之插入排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(5)
- 插入排序:顾名思义:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
- 思路:1. 从第一个元素开始,该元素可以认为已经被排序;2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;5. 重复步骤2~5。
- 时间复杂度:「时间复杂度: O(n*n)」
5月1日打卡 day 15
今日学习《「算法与数据结构」梳理6大排序算法》之插入排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(5)
- 插入排序:顾名思义:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
- 思路:1. 从第一个元素开始,该元素可以认为已经被排序;2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;5. 重复步骤2~5。
- 时间复杂度:「时间复杂度: O(n*n)」
展开
评论
点赞
#青训营 x 字节后端训练营#
4月30日打卡 day 14
今日学习《「算法与数据结构」梳理6大排序算法》之归并排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(4)
- 归并排序:将两个有序数列合并成一个有序数列,我们称之为“归并”。基本思想与过程:先递归的分解数列,再合并数列(分治思想的典型应用)
- 思路:1. 将一个数组拆成A、B两个小组,两个小组继续拆,直到每个小组只有一个元素为止。2. 按照拆分过程逐步合并小组,由于各小组初始只有一个元素,可以看做小组内部是有序的,合并小组可以被看做是合并两个有序数组的过程。3. 对左右两个小数列重复第二步,直至各区间只有1个数。
- 时间复杂度:「时间复杂度: O(nlog(n))」
4月30日打卡 day 14
今日学习《「算法与数据结构」梳理6大排序算法》之归并排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(4)
- 归并排序:将两个有序数列合并成一个有序数列,我们称之为“归并”。基本思想与过程:先递归的分解数列,再合并数列(分治思想的典型应用)
- 思路:1. 将一个数组拆成A、B两个小组,两个小组继续拆,直到每个小组只有一个元素为止。2. 按照拆分过程逐步合并小组,由于各小组初始只有一个元素,可以看做小组内部是有序的,合并小组可以被看做是合并两个有序数组的过程。3. 对左右两个小数列重复第二步,直至各区间只有1个数。
- 时间复杂度:「时间复杂度: O(nlog(n))」
展开
评论
点赞
#青训营 x 字节后端训练营#
4月29日打卡 day 13
今日学习《「算法与数据结构」梳理6大排序算法》之快速排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(3)
- 快速排序基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
- 思路:1. 选择数组中间数作为基数,并从数组中取出此基数;2. 准备两个数组容器,遍历数组,逐个与基数比对,较小的放左边容器,较大的放右边容器;3. 递归处理两个容器的元素,并将处理后的数据与基数按大小合并成一个数组,返回。
- 时间复杂度:「时间复杂度:O(nlogn)」
4月29日打卡 day 13
今日学习《「算法与数据结构」梳理6大排序算法》之快速排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(3)
- 快速排序基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
- 思路:1. 选择数组中间数作为基数,并从数组中取出此基数;2. 准备两个数组容器,遍历数组,逐个与基数比对,较小的放左边容器,较大的放右边容器;3. 递归处理两个容器的元素,并将处理后的数据与基数按大小合并成一个数组,返回。
- 时间复杂度:「时间复杂度:O(nlogn)」
展开
评论
点赞
#青训营 x 字节后端训练营#
#青训营 x 字节后端训练营#
4月28日打卡 day 12,今日学习《「算法与数据结构」梳理6大排序算法》之计数排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(2)
- 计数排序:从名称上就知道,它的思想:就是把数组元素作为数组的下标,然后用一个临时数组统计该元素出现的次数。数组的数据必须是整数,而且最大最小值相差的值不要过大。
- 思路:1. 计算出差值d,最小值小于0,加上本身add。2.创建统计数组并统计对应元素个数。3.统计数组做变形,后面的元素等于前面的元素之和,也就是排名数组。4.遍历原始数组,从统计数组中找到正确位置,输出到结果数组。
- 「时间复杂度:O(n+k)」
#青训营 x 字节后端训练营#
4月28日打卡 day 12,今日学习《「算法与数据结构」梳理6大排序算法》之计数排序。
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(2)
- 计数排序:从名称上就知道,它的思想:就是把数组元素作为数组的下标,然后用一个临时数组统计该元素出现的次数。数组的数据必须是整数,而且最大最小值相差的值不要过大。
- 思路:1. 计算出差值d,最小值小于0,加上本身add。2.创建统计数组并统计对应元素个数。3.统计数组做变形,后面的元素等于前面的元素之和,也就是排名数组。4.遍历原始数组,从统计数组中找到正确位置,输出到结果数组。
- 「时间复杂度:O(n+k)」
展开
评论
点赞
#青训营 x 字节后端训练营#
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(1)
- 冒泡排序:这个名字的由来是向泡泡一样浮起来,脑补一下,就是每次比较相邻的两个元素大小,然后慢慢'漂浮'起来。
- 思路:1. 比较相邻的元素,前者比后者大的话,两者交换位置。2. 对每一对相邻元素做相同操作,从开始第一对到最后一对,这样子最后的元素就是最大元素。3. 针对n个元素重复以上步骤,每次循环排除当前最后一个。4. 重复步骤1~3,直到排序完成。
- 「时间复杂度O(n*n)」
>>数据库延展阅读
- 数据结构概览
- 「算法与数据结构」梳理6大排序算法(1)
- 冒泡排序:这个名字的由来是向泡泡一样浮起来,脑补一下,就是每次比较相邻的两个元素大小,然后慢慢'漂浮'起来。
- 思路:1. 比较相邻的元素,前者比后者大的话,两者交换位置。2. 对每一对相邻元素做相同操作,从开始第一对到最后一对,这样子最后的元素就是最大元素。3. 针对n个元素重复以上步骤,每次循环排除当前最后一个。4. 重复步骤1~3,直到排序完成。
- 「时间复杂度O(n*n)」
展开
评论
点赞
#青训营 x 字节后端训练营#
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(7)
- 基本操作
- 创建本地仓库 git init
- 链接本地仓库与远端仓库 git remote add origin
- 检查配置信息 git config --list
- Git user name 与email
- git config --global user.name "yourname"
- git config --global user.email "your_email"
- 生成SSH密钥 ssh-keygen -t rsa -C "这里换上你的邮箱"
- 查看远端仓库信息 git remote -v
- 远端仓库重新命名 git remote rename old new
- 提交到缓存区 git add 指定文件
- 提交到本地仓库 git commit -m 'some message'
- 提交远程仓库 git push <远程主机名> <本地分支名>:<远程分支名>
- 查看分支 git branch
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(7)
- 基本操作
- 创建本地仓库 git init
- 链接本地仓库与远端仓库 git remote add origin
- 检查配置信息 git config --list
- Git user name 与email
- git config --global user.name "yourname"
- git config --global user.email "your_email"
- 生成SSH密钥 ssh-keygen -t rsa -C "这里换上你的邮箱"
- 查看远端仓库信息 git remote -v
- 远端仓库重新命名 git remote rename old new
- 提交到缓存区 git add 指定文件
- 提交到本地仓库 git commit -m 'some message'
- 提交远程仓库 git push <远程主机名> <本地分支名>:<远程分支名>
- 查看分支 git branch
展开
评论
点赞
#青训营 x 字节后端训练营#
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(6)
- 分支命名
- master分支:主分支,用于部署生产环境的分支,确保稳定性。master分支一般由develop以及hotfix分支合并,任何情况下都不能直接修改代码。
- develop 分支:develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码。开发新功能时,feature分支都是基于develop分支下创建的。
- feature分支:开发新功能,基本上以develop为基础创建feature分支。分支命名:feature/ 开头的为特性分支, 命名规则: feature/user_module、feature/cart_module。
- release分支:release 为预上线分支,发布提测阶段,会release分支代码为基准提测。
- hotfix分支:分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(6)
- 分支命名
- master分支:主分支,用于部署生产环境的分支,确保稳定性。master分支一般由develop以及hotfix分支合并,任何情况下都不能直接修改代码。
- develop 分支:develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码。开发新功能时,feature分支都是基于develop分支下创建的。
- feature分支:开发新功能,基本上以develop为基础创建feature分支。分支命名:feature/ 开头的为特性分支, 命名规则: feature/user_module、feature/cart_module。
- release分支:release 为预上线分支,发布提测阶段,会release分支代码为基准提测。
- hotfix分支:分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。
展开
评论
点赞
#青训营 x 字节后端训练营#
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(5)
- fetch指令
- fetch推荐写法:git fetch origin <branch-name>:<local-branch-name>
- 一般而言,这个origin是远程主机名,一般默认就是origin。
- branch-name 你要拉取的分支。
- local-branch-name 通常而言,就是你本地新建一个新分支,将origin下的某个分支代码下载到本地分支。
- fetch其他写法:
- 将某个远程主机的更新,全部取回本地。git fetch <远程主机名>
- 如果想取回特定分支,可以指定分支名。git fetch <远程主机名> <分支名>
- 当你想将某个分支的内容取回到本地下某个分支的话。git fetch origin :<local-branch-name>
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(5)
- fetch指令
- fetch推荐写法:git fetch origin <branch-name>:<local-branch-name>
- 一般而言,这个origin是远程主机名,一般默认就是origin。
- branch-name 你要拉取的分支。
- local-branch-name 通常而言,就是你本地新建一个新分支,将origin下的某个分支代码下载到本地分支。
- fetch其他写法:
- 将某个远程主机的更新,全部取回本地。git fetch <远程主机名>
- 如果想取回特定分支,可以指定分支名。git fetch <远程主机名> <分支名>
- 当你想将某个分支的内容取回到本地下某个分支的话。git fetch origin :<local-branch-name>
展开
评论
点赞
#青训营 x 字节后端训练营#
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(4)
- 分支管理
- 查看本地分支:git branch
- 查看远程分支:git branch -r
- 查看本地和远程分支:git branch -a
- 从当前分支,切换到其他分支:git checkout <branch-name>
- 创建并切换到新建分支:git checkout -b <branch-name>
- 删除分支:git branch -d <branch-name>
- 当前分支与指定分支合并:git merge <branch-name>
- 查看哪些分支已经合并到当前分支:git branch --merged
- 查看哪些分支没有合并到当前分支:git branch --no-merged
- 查看各个分支最后一个提交对象的信息:git branch -v
- 删除远程分支:git push origin -d <branch-name>
- 重命名分支:git branch -m <oldbranch-name> <newbranch-name>
- 拉取远程分支并创建本地分支:git checkout -b 本地分支名x origin/远程分支名x
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(4)
- 分支管理
- 查看本地分支:git branch
- 查看远程分支:git branch -r
- 查看本地和远程分支:git branch -a
- 从当前分支,切换到其他分支:git checkout <branch-name>
- 创建并切换到新建分支:git checkout -b <branch-name>
- 删除分支:git branch -d <branch-name>
- 当前分支与指定分支合并:git merge <branch-name>
- 查看哪些分支已经合并到当前分支:git branch --merged
- 查看哪些分支没有合并到当前分支:git branch --no-merged
- 查看各个分支最后一个提交对象的信息:git branch -v
- 删除远程分支:git push origin -d <branch-name>
- 重命名分支:git branch -m <oldbranch-name> <newbranch-name>
- 拉取远程分支并创建本地分支:git checkout -b 本地分支名x origin/远程分支名x
展开
评论
点赞
#青训营 x 字节后端训练营#
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(3)
- git配置命令
- 列出当前配置:git config --list
- 列出Repository配置:git config --local --list
- 列出全局配置:git config --global --list
- 列出系统配置:git config --system --list
通过上述的命令,发现你并没有配置用户信息的话,接下来配置一下:
- 配置用户名:git config --global user.name "your name"
- 配置用户邮箱:git config --global user.email "youremail@github.com"
>>Git 正确使用以及最佳实践
- 「一劳永逸」一张脑图带你掌握Git命令(3)
- git配置命令
- 列出当前配置:git config --list
- 列出Repository配置:git config --local --list
- 列出全局配置:git config --global --list
- 列出系统配置:git config --system --list
通过上述的命令,发现你并没有配置用户信息的话,接下来配置一下:
- 配置用户名:git config --global user.name "your name"
- 配置用户邮箱:git config --global user.email "youremail@github.com"
展开
评论
点赞