二叉树遍历
二叉树的遍历二叉树的遍历,主要有四种方式
先序遍历
中序遍历
后序遍历
层序遍历
实现方式有两种
递归实现
迭代实现
先序遍历前序遍历的顺序是 根节点-左子树-右子树 。意思是从根节点开始,要一直访问左子树,直到没有左孩子,然后访问右子树。
中序遍历中序遍历的过程是 左子树-根节点-右子树
后序遍历后序遍历的过程就是 左子树-右子树-根节点
源码准备一个二叉树
1234567 1 / \ 2 3 / \ / \4 5 6 7 / \ 8 9
推理出,理论输出:
1234前序输出: 1 2 4 5 3 6 8 9 7中序输出: 4 2 5 1 8 6 9 3 7后序输出: 4 5 2 8 9 6 7 3 1层序输出: 1 2 3 4 5 6 7 8 9
下面是源码实现,有两种实现方式
递归方式
迭代方式
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 ...
golang操作Elasticsearch
go操作Elasticsearch主要有以下两个sdk
github.com/olivere/elastic 第三方开发,各个版本都有对应的sdk,文档也丰富
github.com/elastic/go-elasticsearch
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561 ...
envsubst命令, 并实现docker下nginx动态配置
使用1234# 添加环境变量export myname=pangxieke# 查看env | grep myname
使用
123echo $myname# 注意单引号包裹的时候代表是字符串echo "$myname"
通过envsubst用环境变量替换掉了字符串$myname
1echo '$myname' | envsubst
进阶使用新建一个测试文件echo '我的名字=$myname' > one
将one文件的内容输入到envsubst envsubst '$myname' < one
将内容输出到two文件中envsubst '$myname' < one > two, 查看cat two
常见应用新建.env文件
1echo "PORT=9998" > .env
创建中间文件, source.template 方便查看并将defalut.conf置空
cp defalut.conf source.template 注意这里中间文 ...
Golang 源码剖析,log 标准库
日志输出12018/09/28 20:03:08 EDDYCJY Blog...
构成[日期]<空格>[时分秒]<空格>[内容]<\n>
源码剖析Logger1234567type Logger struct { mu sync.Mutex prefix string flag int out io.Writer buf []byte}
mu:互斥锁,用于确保原子的写入
prefix:每行需写入的日志前缀内容
flag:设置日志辅助信息(时间、文件名、行号)的写入。可选如下标识位:
123456789const ( Ldate = 1 << iota // value: 1 Ltime // value: 2 Lmicroseconds // value: 4 Llongfile // value: 8 Lshortfile ...
gitbook介绍及使用
gitbook 介绍gitbook网站是一个简单的个人在线书籍网站,在这里可以把自己的文档整理成书籍发布出来,便于阅读。gitbook网站:https://legacy.gitbook.com/
可以使用gitbook工具,来制作精美的电子书,然后部署到自己的网站上(或在github托管)。
本文主要介绍gitbook工具
基本操作1234567891011# Installnpm install -g gitbook-cli# initgitbook init# servegitbook serve# buildgitbook build
部署通过docker部署一个nginx
123456789web: image: nginx:1.20 privileged: true volumes: - ./conf.d:/etc/nginx/conf.d - ./www/_book:/data/www/_book - /data/logs/nginx:/data/logs/nginx ports: - "80:80"
将gitbook中文档 ...
阿里云k8s+log-pilot日志收集
阿里云k8s+log-pilot日志收集
部署Elasticsearch集群
登录阿里云Elasticsearch控制台。
在Elasticsearch实例页面的实例列表中,单击实例ID/名称链接。
单击左侧导航栏的ES集群配置,进入ES集群配置页面。在YML文件配置区域框右侧单击修改配置,弹出YAML文件配置页面。
自动创建索引设置为允许自动创建索引,选中该操作会重启实例,请确认后操作。然后单击确认。
需要开启自动创建索引功能,版本最好选择6.3 或者6.7版本。
测试Elasticsearch集群测试集群
1curl -XGET "http://name:passwd@es-cn-*******.public.elasticsearch.aliyuncs.com:9200/_cluster/health?pretty"
查看index
1curl 'name:passwd@es-cn-******.public.elasticsearch.aliyuncs.com:9200/_cat/indices?v'
部署Log- ...
Swagger介绍及使用
swagger是什么无论是前端调用后端,还是后端调用后端,都期望有一个好的接口文档。
但是这个接口文档对于程序员来说,就跟注释一样,经常会抱怨别人写的代码没有写注释,然而自己写起代码起来,最讨厌的,也是写注释。所以仅仅只通过强制来规范大家是不够的,随着时间推移,版本迭代,接口文档往往很容易就跟不上代码了。
你只需要按照它的规范去定义接口及接口相关的信息。再通过Swagger衍生出来的一系列项目和工具,就可以做到生成各种格式的接口文档,生成多种语言的客户端和服务端的代码,以及在线接口调试页面等等。
这样,如果按照新的开发模式,在开发新版本或者迭代版本的时候,只需要更新Swagger描述文件,就可以自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。
Openapi规范因为 Swagger 定义是基于 OpenAPI 规范的。
OpenAPI 规范(OAS)为 RESTful API 定义了一个与语言无关的标准接口,允许人和计算机发现和理解服务的功能,而无需通过访问源代码、文档或开发者工具。
OpenAPI 定义大致如下:
123456789101112 ...
解决x509:certificate signed by unknown authority证书验证问题
错误信息在go项目中发送https请求时,就会提示x509:certificate signed by unknown authority
原因我们在构建 docker 镜像时一般使用的是 linux(centos或者ubuntu等待) 系统,默认是不带 ca-certificates 根证书的,导致无法识别外部 https 携带的数字证书。
所以在我们项目中发送https请求时,就会提示x509:certificate signed by unknown authority
为了解决证书验证的问题,我们要在构建 docker 镜像的时候把 ca-certificates 根证书给装上,这样就能识别来自外部 https 的数字证书了。
12FROM alpine:3.8RUN apk --no-cache add ca-certificates
以utuntu基础镜像为例,apt-get是utuntu的下载命令在编辑 Dockerfile 的时候加入以下命令即可:
12RUN apt-get -qq update \ && apt-get -qq install ...
Elasticsearch数据迁移
公司测试的elasticsearch是直接在ECS上安装的,现在需要迁移服务器,准备通过docker安装一个elasticsearch,并将数据迁移过去。
查询资料,有多种迁移方式。
通过Oss快照
通过阿里云Logstash的管道配置功能实现
通过reindex方式
本文通过reindex方式,将旧数据迁移到新的es中。
Docker启动elasticsearch12345678910#!/bin/bashdocker stop elasticsearchdocker rm elasticsearchdocker run --name elasticsearch -d \ -p 9200:9200 \ -e "discovery.type=single-node" \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -v /data/services/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticse ...
Elasticsearch状态red解决
将公司的Elasticsearch的磁盘缩小了一些,节省点成本。但是操作完成后,发现status为red。参考了相关文章,终于解决了问题。现在将参考文章及解决方法分享如下。
这里说的red,是指es集群的状态,一共有三种,green、red、yellow。具体含义:
问题:ES集群Red集群节点是否都存在、查看集群状态。
1curl -XGET 'http://localhost:9200/_cluster/health?pretty'
响应
1234567891011121314151617{ "cluster_name" : "es_idc", "status" : "red", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 10 ...