自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(68)
  • 资源 (1)
  • 收藏
  • 关注

原创 golang设计模式之建造者模式

建造者模式一个Builder类会一步一步构造最终的对象,该Builder类是独立于其他对象的主要解决在软件系统中,有时候面临一个复杂对象的创建工作,通常这个复杂对象由各个部分的子对象用一定的算法构建成。由于需求的变化,这个复杂对象的各个部分通常会出现巨大的变化,所以,将各个子对象独立出来,容易修改实现建造所有产品的接口type Builder interface { Process1() Process2() Process3()}实现具体的产品type IntBuilder

2020-11-15 18:00:46 184

原创 golang设计模式之原型模式

原型模式原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。实现定义一个原型对象需要实现的接口//原型对象需要实现的接口//拷贝原有的数据type CloneAble interface { Clone() CloneAble}实现一个原型管理类func NewProtoTypeManager() *Prot

2020-11-15 16:34:29 267

原创 golang设计模式之工厂模式

1.简单工厂模式通过参数的方式创建产品,在增加一个新的类型时,除了要增加新的类和方法之外,还需要修改工厂函数,在工厂函数中添加case,这一点违背了对修改关闭这个原则(开放-封闭原则)。//抽象的产品type SuperMarket interface { GetGoods()}//参数的方式创建产品func NewSupermarket( name string) SuperMarket { switch name { case "s": return &Snacks{}

2020-11-08 17:10:17 341

原创 设计模式

一、六大原则开闭原则一个软件实体类,模块,函数应该对扩展开放,对修改关闭。比如百度搜索,搜索是永恒的需求,只是按照什么条件搜索排序会有调整。里式替换原则上,任何基类可以出现的地方,子类都可以出现。里式替换是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,里式替换是对开闭原则的补充,实现开闭原则的关键步骤就是抽象化。而基类与子类的集成关系就是抽象化的具体实现,所以,里式替换原则是对实现抽象类的功能,但不能改变父类原有功能单一职责功能一个类只负责一项职责

2020-11-08 15:34:48 93

原创 golang设计模式之单例模式

golang设计模式之单例模式核心作用保证一个类只有一个实例,并且提供一个访问该实例的全局访问点优点由于单例模式只生成一个实例,减少系统性能开销,当一个对象的生产需要比较多资源时,就可以通过在应用启动的时候直接产生一个单例对象,然后永久驻留内存,例如日志模块单例模式可以在系统设置全局访问点,优化资源共享问题,比如数据库里连接池简单实现type Singleton struct {}var singleton *Singletonvar once sync.Oncefunc G

2020-11-07 21:54:21 231

原创 Raft协议

分布式一致性算法Raft协议学习

2018-12-14 00:05:58 1060

原创 macOS安装SecureCrt

下载SecureCrtSecureCrt下载地址密码:tnrz安装1:打开dmg镜像文件,然后将软件“securecrt”拖入应用程序中进行安装2:打开应用程序中的SecurCrt,点击agree,退出3:打开crack,复制其中的SecurCrt4:打开finder->应用程序->secureCrt,右键,显示包内容5:替换显示包内容”—Conten...

2018-11-10 14:56:25 5008 5

原创 腾讯一面

一面: 1:介绍项目架构,以及各个组件的功能 2:针对项目的可能出现的问题,想出一个容灾的解决方案 3:tcp三次握手,4次挥手 4:45分钟做一套试题(题目将会在文中最后列出)二面: 1:项目中常用的容器(答了vector,map) 2:vector和map区别 3:vector和map底层实现 4:vector扩容机制 5:hash_map和map的区别,什么时候使用ha...

2018-09-06 20:55:30 391

原创 今日头条一面

一面: 1:介绍项目经验,以及项目组件 2:多线程–两个线程同时对两个数进行加减操作,如何实现安全 3:数组实现一个队列–队列是不限容量的,如何进行扩容 4:10亿的数据,每个文件1000万行,共100个文件,找出前1万大 5:建堆 6:mysql、redis底层实现 7:pb原理二面: 1:介绍项目 2: 编码求一个数组的中位数 3:排序算法(c++,golang)三...

2018-09-06 20:29:28 1227

原创 cmake简单使用

CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程使用cmake .(生成makefile)make (生成可执行文件)单文件/*main.cpp*/#include <iostream>using namespace std;int main(){ cout<<"hello world"&lt...

2018-08-25 19:48:49 201

原创 架构基础概念

系统系统泛指一群有**关联**的个体组成,根据某种**规则**运作,能完成个别元件不能单独完成的工作群体。子系统其实子系统也是由一群有关联的个体所组成的系统,多半是更大系统中的一部分模块软件模块是一套一致而互相有紧密关联的软件组织。它分别包含了程序和数据结构两个部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素...

2018-08-25 15:19:36 469

原创 c++智能指针

智能指针是什么智能指针是一个类,这个类的构造函数中传入一个普通指针,析构函数中释放传入的指针。智能指针的类都是栈上的对象,所以当函数(或程序)结束时会自动被释放智能指针产生背景case 1 1 void test1(string &str) 2 { 3 string *ps = new string(str); 4 ... 5 ...

2018-08-18 15:51:23 136

原创 redis主从复制

Redis是通过slave of ip port来配置主从复制读写分离的,每次slave与master断开之后,都需要重新连接,从新执行上述配置命令,或者直接将配置写入配置文件case1:一仆二主如图所示,6380,6381都是slave,master是6379 1):一旦转成slave,master所有的数据都将被复制 2):slave写失败,只能读 ...

2018-08-11 17:49:10 164

原创 redis持久化配置

redis持久化1:RDB(redis database)--快照2: AOF(append only file)--日志RDB介绍1:RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话将的Snapshot快照, 它恢复时是将快照文件直接读到内存里。2:Redis会单独创(fork)一个子进程进行持久化, 会先将数据写入到一个临时文件中, 待持久化过程...

2018-08-11 16:29:25 644

原创 c/c++带有默认参数的函数

函数参数默认值从右到左设定,调用函数传递参数从左往右传默认值函数调用,实参push入栈没有变化参数默认值具有唯一性,默认,从上到下 从右往左函数声明int max(int a,int b);int max(int a,int b=10);int max(int a = 10,int b = 10);调用int ret = max(10,10);等价于i...

2018-07-24 22:41:19 3857 1

原创 聚合类型内存分布说明

聚合定义 将具有相同或者不同数据类型的元素放在 一起就是结构体类型,结构体中的值称为成员变量,结构的每个成员可以是不同类型的变量。为什么会有内存对齐 1、平台原因:(移植原因)不是所有的硬件平台都能访问任意地址上的任意数据,某些平台上只能在某些地址处取特定类型的数据,否则,抛出硬件异常2、性能问题:数据结构(尤其是栈),应该,尽可能的在自然边界上对齐。原因在于,为了访问未对齐的内存,处...

2018-06-10 18:37:29 305

原创 排序算法之桶排序

原理 将待排序数,按照个位,一次进桶,再按桶的顺序依此出桶,再按十尾依此进桶出桶,再按百位进同出桶。。。步骤(1)设置一个定量的数组当作空桶子; (2)寻访序列,并且按照要求把记录一个一个放到对应的桶子去; (3)对每个不是空的桶子进行排序。 (4)从不是空的桶子里把项目再放回原来的序列中。性能 稳定性:稳定 时间复杂度:O(d*n)(d表示趟数 ) 空间复杂度:O(...

2018-06-10 16:48:47 240

原创 排序算法之归并排序

原理 归并排序是分治法(Divide and Conquer)的一个典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并稳定性:稳定 时间复杂度:O(nlogn) 空间复杂度:O(n)步骤1:把长度为n的输入序列分成两个长度为n/2的子序列;2:对这两个子序列分别采用归并排序;3:将两个...

2018-06-10 16:12:34 170

原创 排序算法之堆排序

原理 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构。堆说明 性质:完全二叉树或者是近似完全二叉树 分类:大根堆(父节点总是大于子节点)、小根堆(父节点总是小于子节点) 左右节点:无大小顺序步骤1:对于给定的数据序列建堆2:输出堆顶(首尾元素互相交换)3:调整剩余元素,重建堆4:重复2-3直到所有元素有序性能 ...

2018-06-10 15:49:37 132

原创 排序算法之选择排序

原理 从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止稳定性:不稳定 时间复杂度:O(n^2) 空间复杂度:O(1)步骤1:初始状态:无序区为R[1..n],有序区为空;2:第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟...

2018-06-10 15:28:24 163

原创 排序算法之快速排序

原理 每一趟排序之后使某记录定位在其应处的位置,其余无序列以它为枢轴,分成两部分,比他小的放在它前面,比他大的放在它后面,下一趟分别对前后的子序列排序,显然可以加快速度稳定性:不稳定 时间复杂度:O(n*logn) 空间复杂度:O(logn)步骤1:从数列中挑出一个元素,称为 “基准”(pivot)2:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准...

2018-06-10 15:11:02 139

原创 排序算法之冒泡排序

原理 从数组中第一个数开始,依次遍历数组中的每一个数,通过相邻比较交换,每一轮循环下来找出剩余未排序数的中的最大数并”冒泡”至数列的顶端稳定性:稳定 时间复杂度:O(n^2) 空间复杂度:O(1)步骤1:比较相邻的元素。如果第一个比第二个大,就交换它们两个2:对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数3:针对所有的元素重复以...

2018-06-10 14:55:06 119

原创 排序算法之希尔排序

原理 希尔排序是对相邻指定距离(称为增量)的元素进行比较,并不断把增量缩小至1,完成排序,是直接插入算法的改进版本。稳定性:不稳定时间复杂度:算法的时间复杂度分析比较复杂,实际所需的时间取决于各次排序时增量的个数和增量的取值。研究证明,若增量的取值比较合理,算法的时间复杂度约为O(n^1.3 - n^1.5)空间复杂度:O(n)算法描述先将整个待排序的数据分割成为若干子序列...

2018-06-09 21:24:42 251

原创 排序算法之直接插入排序

工作原理 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 稳定性:稳定 时间复杂度:O(n) 空间复杂度:O(1) 最好的情况:原始数据已经有序 最坏情况:原始数据逆序算法描述1:从第一个数开始,假设认定该元素已有序2:取出下一个待插入数据,从已有序的数据从后往前扫描3:如果已排序元素大于待排序的元素,则将已有序的元素向后移,直到找到比待...

2018-06-09 15:19:13 200

原创 TCP三次握手四次挥手

TCP是一个面向连接的协议,为用户进程提供全双工字节流的可靠的协议,而TCP建立连接通常需要一下过程: 1:服务器必须准备好接受外来连接,这通常调用socket,bind,listen这几个函数完成 2:客户端通过调用connect发起连接,这导致客户端发送一个SYN分节,他告诉服务器客户端在连接中发起的初始序列号,通常SYN分节不携带数据 3:服务器必须确认客户端的SYN,同时自己也发...

2018-04-30 21:58:03 233

原创 棋牌游戏“拖拉机”牌型提取

拖拉机牌型说明:手牌中同花色的牌组成如aabbcc或aabb类型的,被称为拖拉机 - 计算过程 输入一个数组,计算出来长度为4的拖拉机,和长度为6的拖拉机 实现#include <stdio.h>#include <algorithm>#include <iostream>#include <cstring>#in...

2018-04-29 15:38:22 1941

原创 centos7.3搭建samba

samba简介 samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。安装yum serach sambayum install -y samba启动...

2018-04-21 16:41:14 1339

原创 linux例行性工作排程crontab

linux例行性工作排程也就是定时任务工作排程方式 - 定时任务(每天早上的定时闹钟) - 突发任务(超市打折)linux工作排程种类 - at 是个可以处理仅执行一次就结束的指令(需要atd服务支援) - crontab 这个指令所设定的工作将会循环一直进行下去(crontd服务)工作步骤at1:先查找/etc/at.allow,只有写在这个文件...

2018-04-21 15:45:54 495

原创 linux命令之sed

简介sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用。它能执行与编辑器 vi 相同的编辑任务,但是sed不提供交互式使用方法,除非重定向到文件,否则,sed默认输出到标准输出。原理sed 逐行处理文件(或输入),并将输出结果发送到屏幕。 sed 的命令就是在 vi 编辑器中见到的那些。 sed 把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模...

2018-03-18 15:43:40 189

原创 linux命令之grep

常用参数-a 不要忽略二进制数据。-A<显示列数n> 列出包括该行外的后面的n行-b<显示列数n> 列出除了该行外,前面的n行数和后面的n行-B<显示列数n> 列出除了该行外,前面的n行数-c 计算符合范本样式的列数。-C<显示列数n> 除了显示符合范本样式的那一列之外,并显示该列之前的n行。-l 列出文件内容符合指定的范本样式的文件...

2018-03-11 16:11:40 307

原创 golang封装的log日志库

1:支持日志按大小分文件(文件大小支持用户自定义,默认50*1024*1024) 2:支持按照用户自己的实际情况选择每天文件保存的数量(默认10) 3:支持每天凌晨定时创建日志文件夹 4:支持动态设定定期删除过期的文件(日志保存时间支持用户自定义,默认两日) 5:支持输出文件名行号,以及时间、日志界别测试结果: github路径

2018-01-22 23:27:55 4599

原创 golang调用lua脚本

上篇文章已经讲过golua如何安装,本篇文章主要讲解golang如何利用golua调用lua脚本 1:importimport "github.com/aarzilli/golua/lua"2:调用lua脚本的几个重要函数L := lua.NewState() //创建一个lua虚拟机L.DoFile("./xxx") //设置要调用的lua文件L.GetField(lua.LUA_GL

2017-12-23 13:29:06 15303 1

原创 golang调用lua脚本之安装golua

golua按照普通go的驱动安装,由于使用了cgo编译,所以是无法安装成功的 1:下载(已共享) 链接:https://pan.baidu.com/s/1slHnN0T 密码:8f66 分别下载golua-master.zip、lua-5.1.4.tar.gz、ncurses-5.9.tar.gz、readline-6.2.tar.gz 2:安装ncurses-5.9.tar.gz、read

2017-12-11 22:04:21 3051 2

原创 golang操作memcached

go使用memcached需要第三方的驱动库,这里有一个库是memcached作者亲自实现的,代码质量效率肯定会有保障 1:安装go get github.com/bradfitz/gomemcache/memcache2:使用import "github.com/bradfitz/gomemcache/memcache"3:一个栗子package mainimport ( "fmt"

2017-12-09 17:18:46 5250 5

原创 golang之string标准库(三)

1:TrimLeftFunc(c string,f func(rune) bool)string:根据自定义函数来删除字符串左边的字符左边func split(s rune) bool { if s == 'n' { return true } return false}fmt.Println("TrimLeftFunc", strings.TrimLef

2017-12-03 19:15:39 722 1

原创 golang之string标准库(二)

1:Field(s string)[]string:以1个或多个空格字符串,分割字符串,返回所有子串,如果父串是空,则返回空串 str = "helloworld hellogolang helloprograming hellotest hellostring hello" newstr := strings.Fields(str) fmt.Println("Fie

2017-12-03 19:02:24 2263

原创 golang之string标准库(一)

1:Contains(s,substr string) bool:字符串s是否包含substr,包含返回true,不包含返回false flag := strings.Contains("hello world", "wor") if flag { fmt.Println("str is contain substr") } else { fmt

2017-12-03 18:39:41 820

原创 golang操作redis出现的错误解决

1:failed redigo: unexpected type for String, got type int64 解决:操作incr,incrby,decr,decyby时,不需要加上redis.String,因为操作类型是int64类型,加上redis.String,类型不相符合2:cannot range over unino (type interface {}) 解决:获取的值类型

2017-11-25 21:30:21 10436

原创 golang-redis之sorted set类型简单操作

1:安装redigogo get github.com/garyburd/redigo/redis2:引用redigoimport ( "github.com/garyburd/redigo/redis")3:连接Redisc, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Println("c

2017-11-25 21:22:40 9978 1

原创 golang-redis之hash类型简单操作

1:安装redigogo get github.com/garyburd/redigo/redis2:import redigoimport ( "github.com/garyburd/redigo/redis")3:连接redisc, err := redis.Dial("tcp", "192.168.2.225:6379")if err != nil { fmt.Print

2017-11-25 20:53:24 20690

分布式一致性算法Raft协议

分布式一致性算法Raft协议的学习记录,

2018-12-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除