git使用教程
5 Git5.1 基本概念常用的远程仓库有GitHub和Gitee 工作区:仓库的目录,独立于各个分支。 暂存区:数据暂时存放的区域,可看做工作区写入版本库之前的缓冲区,它独立于各个分支。 版本库:存放所有已经提交到本地仓库的代码版本。 版本结构:树结构,树中每个结点代表一个代码版本。 5.2 本地命令5.2.1 配置git账户配置文件位于~/.gitconfig中 12git config --global user.name xxx # 全局用户名git config --global user.email xxx@xxx.com # 全局邮箱 5.2.2 初始化1git init 5.2.3 暂存区操作查看暂存区状态,红色表示被修改的文件,绿色表示被修改,但已添加到暂存区。 1git status 添加文件到暂存区 12git add filename # 添加文件filename到暂存区git add . # 添加所有文件到暂存区 提交到本地版本库,同时HEAD指针指向该版本结点 1git commit -m...
设计模式-原型模式
深克隆和浅克隆在了解原型模式前先了解一下深克隆和浅克隆 浅克隆浅拷贝是一种对象复制方式,其中只复制对象的成员变量值,而不复制它们所指向的资源。这意味着多个对象可能会共享相同的资源,包括动态分配的内存、文件句柄等。 深克隆深拷贝是一种对象复制方式,其中对象的成员变量值被复制,同时资源也被复制,每个对象都有自己独立的资源副本。这确保了对象之间的数据独立性,不会相互干扰。深拷贝通常需要手动实现拷贝构造函数和拷贝赋值运算符。 代码验证12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include <iostream>#include <cstring>class MyClass {public: char* data; // 默认构造函数,动态分配内存并初始化 MyClass() { ...
设计模式-建造者模式
建造者模式建造者模式是一种创建型设计模式,它允许你创建复杂对象的步骤与表示方式相分离。建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示相分离,从而可以创建具有不同表示形式的对象。 主要解决在软件系统中,一个复杂对象的创建通常由多个部分组成,这些部分的组合经常变化,但组合的算法相对稳定。 何时使用当一些基本部件不变,而其组合经常变化时。 如何解决将变与不变的部分分离开。 类图示例 举个例子我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。然后我们创建一个 Meal...
设计模式-抽象工厂模式
抽象工厂模式抽象工厂模式是工厂方法模式的泛化版,工厂方法模式是一种特殊的抽象工厂模式。在抽象工厂模式中,每一个具体工厂可以生产多个具体产品。 类图示例 举个例子数据库工厂,由用户表和部门表,可以用SQLServer和Access数据库 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148//用户表class User { private...
设计模式-工厂方法模式
简单工厂模式的不足在简单工厂模式中只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。但是最大的缺点就是每当有新产品要加入到系统中,必须修改工厂类。也就是违背了开闭原则,而工厂方法模式可以很好的解决这一问题 工厂方法模式在简单工厂模式基础上修改,不在设计一个工厂类来统一负责所有产品的创建。而是由具体的工厂来创建具体的产品,也就是说需要定义抽象产品类和抽象工厂类 类图示例 举个例子假设需要生产电视机,有不同的品牌的电视机 代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748//抽象产品TVinterface TV{ public void display();}//具体产品HaierTV类class HaierTV implements TV{ public void display(){ ...
设计模式-简单工厂模式
简单工厂模式动机与定义在实际的软件开发过程中,有时需要创建一些来自于相同父类的类的实例,为此可以专门定义一个类来负责创建这些类的实例,可以通过传入不同的参数来获得不同的对象,这个就是最简单的设计模式之一简单工厂模式 举个例子现在要写一个计算器程序,实现加减乘除四则运算。 先来设计一下类图由于四则运算都是运算符,都可以继承自同一个父类,所以用运算类来作为他们的父类,再用一个简单工厂类来根据运算类的种类来产生不同的运算符 代码实现1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768//定义抽象运算类abstract class Operation { protected double NumberA; protected double NumberB; public void setNumberA(double NumberA) { ...
设计模式-简介
设计模式简介设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。...
归并排序
概述归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是将序列分成两部分,然后用两个指针指向两个序列的开始,比较两个指针所指的值,将较小值放入一个新数组,同时该指针后移。最后将新数组的值赋值给原数组,达到从小到大排列的目的 动画展示 思路解析 初始序列3 44 38 5 47 15 36 26 27 2 46 4 19 50 48 这里第一步将序列二分到不能再分,此时左边两个部分为3和44,排序结果作为一个整体为3 44 然后再处理右边两个部分38和5,排序结果作为一个整体为5 38 此时在将两个排序好两个整体在进行相同的步骤,每次取较小值,排序结果作为一个整体为3 5 38 44 同理右半边结果为15 26 36 47 再处理这两个部分,结果为3 5 15 26 36 38 44 47,此时原序列左半边排序完成 以相同步骤处理原序列右半边,结果为2 4 19 27 46 48 50 两个指针相比取最小值放入新数组,结果为2 3 4 5 15 19 26...
Shell脚本
3 shell语法3.1 概论终端可以看做逐条执行的shell脚本,Linux默认使用bash,脚本文件第一行必须为 1#! /bin/bash 可通过两种方式执行shell脚本 解释器执行:bash xxx.sh 作为可执行文件执行 添加执行权限chmod +x xxx.sh 执行./xxx.sh 3.2 注释单行注释:类似python,用#注释 多行注释: 123:<<EOF...EOF 其中EOF可替换成任意字符串,例如abc 3.3 变量定义变量 定义不需要$,而且=两边不能有空格。字符串可用单引号、双引号或不用引号描述,例如下边三种变量声明都是正确的。 123name1='abc'name2="abc"name3=abc 引用变量 需要用$,可用{}限定变量名边界,实现字符串与变量混合表示 1echo ${name1}defg # 输出abcdefg 只读变量 声明前加上readonly或declare -r 12readonly name1declare...
KMP算法详解
...