自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

田园园野的博客

每一个你不满意的现在,都有一个你没有努力的曾经。

  • 博客(201)
  • 收藏
  • 关注

原创 golang 算法-约瑟夫环

1、一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?func main(){ var n,find,count int //find=1找到下一个猴子让它出去,count计数是否...

2018-06-23 22:38:26 810

原创 golang 算法-矩阵

矩阵相乘:package mainimport "fmt"type SQ struct { m,n int data [][]int}//a的列数和b的行数相等func mul(a SQ,b SQ) [][]int{ res := [][]int{} for i:=0;i<a.n;i++ { t := []int{} for j:=0;j<b.m;j...

2018-06-23 17:34:33 4925

原创 golang 算法-字符串

1、从字符串str1中查找是否有字符串str2func main(){ var str1 string var str2 string fmt.Scan(&str1) fmt.Scan(&str2) if strings.Contains(str1,str2) { fmt.Println("Yes") }}2、给出一串字符,要求统计出里面的字母、数字、空格以及其他...

2018-06-23 17:09:23 339

原创 golang 算法一 数学

1、golang会自动进行四设五入func main(){ var a float32 fmt.Scan(&a) fmt.Printf("%.2f",a)}//输入:1.235//结果:1.242、火柴游戏,21根火柴,轮流取,每人可取1-4根,不可多取,也不可不取,编程,让一个人赢得比赛。每轮让两个人去火柴的数量为5。3、求圆周率=1-1/3+1/5-1/7+...........

2018-06-19 20:39:19 5285

原创 docker 网络访问

docker网络访问:1、bractl show:显示桥接。 docker0网桥,网桥上会有接口,docker中的容器可以通过网桥进行网络访问。[root@tcy1 tcy]# brctl showbridge name bridge id STP enabled interfacesdocker0 8000.56847afe9799 no veth0ce12adpan0 8000....

2018-06-13 20:10:03 426

原创 docker: 数据管理 - 数据卷 数据卷容器 备份 恢复

一、数据卷:1、启动一个nginx的容器,创建一个data的数据卷,自动映射到本地主机的某个文件目录;[root@tcy1 tcy]# docker run -it --name volume-test1 -h nginx -v /data nginx-h  指定主机名;     -v: 启用数据卷2、查看数据卷与本地主机之间的映射[root@tcy1 tcy]# docker inspect -...

2018-06-09 19:56:32 1140

原创 分布式架构,微服务架构,rest风格,rpc协议

多个节点容错性可扩展性(可扩展性)固有分布性,一些业务本来就是分布式的消息传递多个节点之间消息传递的方式不是通过共享的存储,而是通过消息传递节点具有私有存储易于开发可扩展性对比:并行计算方法:rest:接口的规范,elasticsearch(http协议):动作完成特定需求...

2018-06-05 11:48:38 1660

原创 HTTP中GET,POST和PUT的区别

一、HTTP中定义了以下几种请求方法:1、GET;2、POST;3、PUT;4、DELETE;5、HEAD;6、TRACE;7、OPTIONS;二、各个方法介绍:1、GET方法:对这个资源的查操作。2、DELETE方法:对这个资源的删操作。但要注意:客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。3、HEAD方法:与GET方法...

2018-06-04 20:58:44 159220 17

原创 URL和URI的区别

一、概念URN :统一资源名称名称; 如一个人的身份证号URL : 统一资源定位符地址; URL则通过描述是哪个主机上哪个路径上的文件来唯一确定一个资源,也就是定位的方式来实现的URI.如一个人在哪里URI : 统一资源标志符URI可以分为URL,URN或同时具备名称和地址的一个东西,URI就是在某一规则下能把一个资源独一无二地标识出来。二、区别1、URL是URI的一种URL是一种具体的URI,它...

2018-06-04 19:35:45 197

原创 jsonrpc

一、rpc1、概念rpc:(Remote Procedure Call)远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用。远程过程调用是一个分布式计算的客户端-服务器(Client/Server)的例子,它简单而又广受欢迎。...

2018-06-02 19:55:00 9514

原创 golang ----------- 并发版爬虫实现二

1、要解决的问题:1)、把request直接发给worker会卡住,如下架构图。2)也不想每个request都开一个goroutine,控制力比较小,如下架构图。同时希望对worker加以控制。2、解决上面问题:把request和worker都放到相应队列,把我们选择的request发给我们选择的worker。如下架构图3、代码实现:发送请求:1、把对eng...

2018-05-30 12:03:50 1500

原创 golang ----------- 并发版爬虫实现一

控制力很小

2018-05-30 09:17:01 2281 1

原创 golang------------单任务版爬虫实现

此爬虫最终结果为爬取慕课网视频观看人数,评分,和评论,此篇为最简单版,接下来的篇幅中会有利用goroutine和channel的并发版本,最后还有使用rpc实现的分布式版。一、架构图:Seed:  URL+Parser,从URL中爬出来的数据由相应的Parser解析,解析出新的URL继续加入到任务队列中,继续爬。Engine: 将请求都加入到任务队列中,一个一个执行Fetche...

2018-05-29 18:27:46 536

原创 golang 爬虫 403

如下,我直接用http.Get(url)进行获取信息,用浏览器可以对该URL进行访问,可是爬取时则返回403,禁止访问resp,err := http.Get(url)解决方案:模拟浏览器访问:1、查看自己浏览器中的User-Agent 信息。2、将下面代码 resp,err := http.Get(url) defer resp.Body.Close()替换成下面的代码 client := ...

2018-05-29 17:34:22 2624 4

原创 ElasticSearch ----------- 使用教程1(goland作为工具)

1、<service>:9200/index/type/idindex:相当于databasetype:相当于tableid:相当于每条记录的id2、使用goland内置的testRestful Web Service对ElasticSearch进行增删改查2.1、进行查询:GET结果:现在里面还没有数据2.2、添加数据:POST添加...

2018-05-29 10:39:52 674

原创 docker ElasticSearch安装教程

1、Docker安装[root@tcy1 dockerfile]# docker run -d -p 9200:9200 elasticsearch2、有如下结果,成功:Unable to find image 'elasticsearch:latest' locally//本地没有,去pulllatest: Pulling from elasticsearch841c6d57cd5e: Pu...

2018-05-28 21:31:27 1169

原创 Docker删除镜像

删除镜像时:1、先停掉镜像相关容器2、删除容器3、删除镜像例如:删除如下镜像[root@tcy1 dockerfile]#index.tenxcloud.com/docker_library/elasticsearch:1.6查看容器:[root@tcy1 dockerfile]# docker ps -aCONTAINER ID IMAGE ...

2018-05-28 21:11:07 777

原创 红黑树 插入 删除 代码实现 思想 与2-3-4树的联系 golang实现

介绍红黑树之前,要先了解其他几种树(二叉树,二叉排序树,平衡二叉树),红黑树就是在其他树的变形(特别是平衡二叉树,要先明白平衡二叉树,读者要先去了解一下)。一、红黑树介绍:1、性质:性质1、每个节点是红色或黑色性质2、根节点是黑色性质3、每个叶子结点(NIL)是黑色【这里的叶子结点,是指为空(NIL或NULL)的叶子结点!】性质4、如果一个节点是红色的,则它的子结点必须是黑色的性质5、从一个节点到...

2018-05-24 10:59:25 956

原创 B树 插入 删除 图文 代码实现 golang实现

一、B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1、每个结点最多有m-1个关键字。2、根结点最少可以只有1个关键字。3、非根结点至少有Math.ceil(m/2)-1个关键字。4、每个结点中的关键字都按照从小到大的顺序排列,每个关键字...

2018-05-20 15:14:14 3448 4

转载 goland ----------- 快捷键

Goland常用快捷键文件相关快捷键:CTRL+E,打开最近浏览过的文件。CTRL+SHIFT+E,打开最近更改的文件。CTRL+N,可以快速打开struct结构体。CTRL+SHIFT+N,可以快速打开文件。代码格式化:CTRL+ALT+T,可以把代码包在一个块内,例如if{…}else{…}。CTRL+ALT+L,格式化代码。CTRL+空格,代码提示。CTRL+/,单行注释。CTRL+SHIF...

2018-05-15 19:17:52 2478

原创 golang ----------- 平衡二叉树-AVL树

平衡二叉树的旋转:有4类,每类中又有两类1、右旋转:当插入的结点为失衡点的左孩子的左孩子,如下图所示,A,B是一种情况,虚线部分表示不存在。这两种情况都是右旋转,代码一样2、左旋转:当插入的结点为失衡点的右孩子的右孩子,如下图所示,A,B是一种情况,虚线部分表示不存在。这两种情况都是右旋转,代码一样3、先右旋转,再左旋转:当插入的结点为失衡点的右孩子的子孩子(左右孩子都行),如下图所示,A,B是一...

2018-05-14 21:46:24 1903

原创 golang ----------- 二叉排序树

二叉排序树又叫二叉搜索树,二叉查找树主要在删除时:分两种情况:1、如果被删除结点只有一个子结点,就直接将A的子结点连至A的父结点上,并将A删除2、如果被删除结点有两个子结点,将该结点右子数内的最小结点取代A。代码:package mainimport "fmt"type BST struct { left *BST value int right *BST}//查找元素fun...

2018-05-14 17:07:02 787

原创 Linux ------------ Xshell快捷键

2018-05-13 21:00:56 357

原创 linux ----------- 常用命令

1、文件操作查找文件find / -name java -print从根目录下查找java文件,并把路径打印出来删除操作:Linux 删除文件夹和文件的命令-r 就是向下递归,不管有多少级目录,一并删除-f 就是直接强行删除,不作任何提示的意思查看某个文件安装位置:locate2、系统用户新建系统普通用户useradd 用户名: 增加...

2018-05-12 19:59:22 169

原创 golang ----------- nil

按照Go语言规范,任何类型在未初始化时都对应一个零值:布尔类型是false,整型是0,字符串是"",而指针,函数,interface,slice,channel和map的零值都是nil。很重要:指针为空是nil,但nil不是空指针。下面说一说哦不同类型的nil的用法和坑1、指针指针对象的方法来说,就算指针的值为nil也是可以调用type Student struct {}func (s *St...

2018-05-11 20:37:03 1053

原创 golang ----------- 二叉树的建立

1、由标明空子树的先跟遍历序列建立一颗二叉树的操作算法var i = -1func HaveEmptyCreate(arr []int) *TreeNode{ i=i+1 if i >= len(arr){ return nil } var t TreeNode if arr[i] != 0 { t = TreeNode{nil,arr[i],nil} t.Left ...

2018-05-09 21:09:14 3219

原创 golang ----------- 复制二叉树

二叉树的复制:package mainimport "fmt"type TreeNode struct { Left *TreeNode Value int Right *TreeNode}//建立二叉树func TreeCreate(i int,arr []int) *TreeNode{ t := &TreeNode{nil,arr[i],nil} if i&l...

2018-05-09 18:56:16 387

原创 遍历二叉树(递归,非递归都有)

主要描述一下非递归,递归在下面的总的代码里有:因为非递归都用到了栈,先贴一下栈的代码const stackSize int = 22 //栈的容量type TreeNode struct { //树结点 Left *TreeNode Value int Right *TreeNode}type Stack struct { ...

2018-05-09 17:39:03 951

原创 树 ------------ 基础知识汇总

一、二叉树1、概念:二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。2、特殊二叉树:满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树完全二叉树:只有最下面的两层结点度能够小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树,完全二叉树...

2018-05-08 17:20:15 387

原创 堆排序

一、概念堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序中的堆指选择排序中的无序区间,利用了大根堆(或小根堆)堆顶记录的 关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。二、演示过程1、初始化大顶堆(对应上图的建大顶堆)2、将大...

2018-05-08 15:28:36 1404

原创 golang ----------- 选择排序

从未排序的序列a[i+1:]中选择最小的值,存入a[i]代码:func ChooseSort(a []int){ for i:=0; i<len(a);i++ { for j:=i+1;j<len(a);j++{ if a[j] < a[i] { a[j],a[i] = a[i],a[j] } } } fmt.Println(a)}测试:fun...

2018-05-07 20:08:11 239 1

原创 golang ----------- 快速排序

在数组a中,设置一个值key为枢轴。在调整的过程中,设立两个指针low和high;之后逐渐减小high,增加low(low<=high);并保证a[low]<key,a[high]>key;否则进行记录的交换代码:func QuickSort(a []int){ if len(a) <= 1{ return } key := a[0] /...

2018-05-07 19:53:10 824 5

原创 golang ----------- 希尔排序

尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行 插入排序。如将下面数组进行排序:1、d =len(a)/2=3,036一组,14一组,25一组,如下排序后如下:2、d=d/2=1,只剩全体一组了注意:当数组为偶数时,1~8;开始d=4,15  26  37  48分四组 当数组为奇数时: 1~9;开始d=4,159  26  37  48也分四组,(注意159三个数一组)代码:...

2018-05-07 18:51:30 363

原创 golang ------------ 表插入排序

一、表插入排序优点为了减少在排序过程中进行的“移动”记录的操作,必须改变排序过程中采用的存储结构。利用静态链表进行排序,并在排序完成之后,一次性的调整各个记录相互之间的位置,即将在各个记录都调整到它们所应该在的位置。二、表结构type Node struct{ value int next int}var NL []Node //NL为此记录表表结构就是一个静态链表,它可以用一个数组来...

2018-05-07 10:58:09 332

原创 golang ----------- 折半插入排序

折半插入排序是直接插入排序的升级,在查找插入点时,使用折半查找,代码如下:func HalfInsertSort(a []int){//折半插入 var j,low,high int for i := 1;i<len(a);i++ { a[0] = a[i] low = 1 high = i-1 for low <= high { //在a[1:i-1]中折半...

2018-05-06 17:29:07 241

原创 golang ----------- 直接插入排序

时间复杂度:最好的情况:比较次数:n-1;    移动次数:0最坏情况:(n+2)(n-1)/2;   移动次数:(n+4)(n-1)/2一 、插入算法通过比较和插入来实现排序,流程如下:首先对数组的前两个数据进行从小到大的排序将第3个数据与排好的两个数据进行比较,将第3个数据插入到合适的位置然后,将第4个数据插入已排好的前3个数据中不断重复上述过程,直到把最后一个数据插入合适的位置,完成排序。简...

2018-05-06 16:51:35 477

原创 golang ----------- 冒泡排序及其优化

1、普通方法:func BubbleSort(a []int){ for j := 0 ;j<len(a)-1; j++ { for i := 0; i<len(a)-j-1; i++ { if a[i] > a[i+1] { a[i],a[i+1] = a[i+1],a[i] } } } fmt.Println(a)}2、优化1:里...

2018-05-06 14:05:36 566

原创 golang ----------- map

一、map实现原理1、Go中的map在底层是用哈希表实现,一个hashmap的关键元素包括:hash函数,冲突解决方式。go的冲突解决方法属于链表法的一种。 hash函数为模运算2、map不是goroutine安全的,所以在有多个gorountine对map进行写操作是会panic。多gorountine读写map是应加锁(RWMutex),或使用sync.Map3、内存布局二...

2018-05-05 21:25:45 315

原创 golang ----------- new,make,struct{}

1、适用范围:make 只能创建类型(slice map channel), new可以对所有类型进行内存分配2、返回值: new 返回指针, make 返回引用new返回一个指向已清零内存的指针,而make返回一个复杂的结构。make返回复杂的结构为slice时:它是一个包含3个域的结构体:指向slice中第一个元素的指针,slice的长度,以及slice的容量3、填充值: new 填充零值, ...

2018-05-05 13:38:30 9065

原创 golang ----------- 结构体

1、内存布局type Persion { name string age int}2、结构体的域在内存中是紧挨着排列的。type Persion { name string age int}type Couple1 struct { p1,p2 Persion}type Couple2 struct { p1,p2 *Persion}...

2018-05-05 11:47:24 360

空空如也

空空如也

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

TA关注的人

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