自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 Go字符串

1.字符串和字节数组相互转化涉及到了复制,当字符串长度大于32字符时,需要申请堆内存,因此涉及一些密集转换场景,需要评估这种转换带来性能损耗。2. 字符串只能被访问,不能被修改和扩容。3. string占16个字节原因: reflect.StringHeadertype StringHeader struct { Data uintptr // 8字节 Len int // 8字节 }...

2021-11-30 09:44:57 136

原创 WebSocket 1005 错误 分析

WebSocket 1005 的错误可以忽略通常websocket是正常关闭的情况下一般是1000,1001 是前端页面刷新或者关闭浏览器引起的,1005 是因为某种外部因素造成websocket不能进行正常关闭引起的。我们在postman做一个测试看看1005产生过程这是一个正在链接的websocket ,我这时候关闭postman,就会产生1005的code error。我们用wireshark抓包这里我们对比发现1005 和1000这两种关闭方式种,1005由于网络原因没有带payloa

2021-11-17 16:48:01 10028

原创 Wireshark捕获过滤器

捕获过滤器:捕获http get ,post,put请求0x47455420 ==>GET ascii码GET 请求:port 80 and tcp[((tcp[12:1] & 0xf0) >>2):4] = 0x47455420POST 请求:port 80 and tcp[((tcp[12:1] & 0xf0) >>2):4] = 0x504f5354PUT 请求:port 80 and tcp[((tcp[12:1] & 0xf0) &

2021-11-16 21:55:45 211

原创 docker 获取硬件信息

**docker 获取硬件信息**dmidecode 是解析/dev/mem 获取硬件信息容器(docker)内无法使用/dev/mem ,因此需要挂载/dev/mem容器(docker)无法使用dmidecode,在这里有2种解决办法,a. 挂载/sbin/dmidecode 到docker内b.docker 安装dmidecode ,yum install -y dmidecode运行docker run -it --privileged -v /dev/mem:/dev/mem

2021-11-01 15:18:22 1878

原创 go之Gob

gob包(“encoding/gob”)管理gob流——在encoder(编码器,也就是发送器)和decoder(解码器,也就是接受器)之间交换的字节流数据(gob 就是 go binary的缩写)。一般用于传递远端程序调用(RPC)的参数和结果。要使用gob,通过调用NewEncoder()方法先创建一个编码器,并向其提供一系列数据;然后在接收端,通过调用NewDecoder()方法创建一个解码器,它从数据流中恢复数据并将它们填写进本地变量里。下面会通过几个例子进行说明。发送端和接收端的值/类型不需要

2021-07-23 15:49:27 724

原创 go 引入私有库 版本管理

更改URL地址git config --global url."[email protected]:".insteadOf "https://xxx.com/"设置私有代理Linux OS: go env -w GOPRIVATE=xxx.comWindows OS :设置环境变量 GOPRIVATE=xxx.com3.gitlab 服务器使用https协议4.安装crt证书(局域网gitlab)5. 设置访问tokengit config --global http.extraheader.

2021-07-19 17:18:34 267

原创 golang之pprof

go tool pprof -inuse_space http://127.0.0.1:8080/debug/pprof/heap命令连接到进程中 查看正在使用的一些内存相关信息,此时我们得到一个可以交互的命令行 $ go tool pprof -inuse_space http://127.0.0.1:9003/debug/pprof/heapFetching profile over HTTP from http://127.0.0.1:9003/debug/pprof/heapSaved p.

2021-07-19 17:10:24 165

原创 数据结构之滑动窗口的最大值

package mainimport "fmt"type DuQueue struct { Q []int}/* 单调递减队列*/func main() { // nums = [1,3,-1,-3,5,3], k = 3 // [3,3,5,5] nums := []int{4, 3, -1, -3, 5, 3} k := 3 winQ := &DuQueue{} ans := []int{} winQ.Q = make([]int, 0) // 元素<

2021-05-16 16:34:13 76

原创 数据结构之循环队列

循环队列:通常:index = i 的后一个是index+1index = i 的前一个是index+1但是这里的循环队列,我们将使用取模运算技巧index = i 的后一个是(index + 1) % capacity index = i 的前一个是(index - 1 +capacity) % capacity...

2021-05-04 21:44:40 258 2

原创 数据结构之二叉树的层次遍历

从上到下按层打印二叉树,同一层结点按从左到右的顺序打印,每一层打印到一行输入:输出:[[3], [9, 8], [6, 7]]package mainimport "fmt"// treetype NodeTree struct { Data int LeftNode *NodeTree RightNode *NodeTree}type Queue struct { Node []*NodeTree QSize int}func main() { no

2021-05-04 17:28:24 206

原创 数据结构之链表

数据结构之链表package mainimport "fmt"type Node struct { Data int PNext *Node}func main() { node := InitLinkList() node.TravserLinkList() node.Insert(3, 99) node.TravserLinkList() var val int node.Delete(5, &val) fmt.Println(val) node.Travs

2021-05-02 22:03:49 60

原创 二叉树遍历

package mainimport "fmt"// 二叉数type TreeNode struct { Data string LefeNode *TreeNode RightNode *TreeNode}func main() { // 创建二叉树 tn := Create() PreTraverse(tn) fmt.Println("") InTraverse(tn) fmt.Println("") PostTraverse(tn)}// 创建静态

2021-04-24 10:17:02 58

原创 汉诺塔

package mainimport ( "fmt" )func main() { // 汉诺塔 test1(3, "A", "B", "C")}func test1(n int, a, b, c string) { if n == 1 { fmt.Printf("将%s柱子移动到%s柱子上\n", a, c) } else { // 将n-1(当前在A上) 借助于c移动到b上 test1(n-1, a, c, b) fmt.Printf("将%s柱子移动到%s柱子

2021-04-21 09:58:03 50

原创 单调栈计算最大矩形面积

单调栈计算最大矩形面积题目:给定一个数组,数组中的元素代表木板的高度。请你求出相邻木板能剪出的最大矩形面积我们以当前列向左右分别扩展查找,直到找到比当前小的第一个元素并且标记这个元素位置,矩形的面积为当前列高*宽度(当前列可以绘制最大宽度)package rectimport ( "main/stacktmp")// 给定一个数组,数组中的元素代表木板的高度。请你求出相邻木板能剪出的最大矩形面积func Rect(s []int) int { if len(s) == 0 { re

2021-04-18 10:14:41 874

原创 合法字符串需要括号可以配对

字符串中只有字符’(‘和’)’。合法字符串需要括号可以配对。比如:输入:"()"输出:true解释:(),()(),(())是合法的。)(,()(,(()是非法的。package mainimport "fmt"func main() { b := stack2("()()())") fmt.Println(b)}func stack2(s string) bool { if len(s) == 0 { // 空字符串不合法 return false } else if

2021-04-13 09:59:47 184

原创 Kubernetes之network: network: failed to set bridge addr: “cni0“ already has an IP address different

在使用Kubernetes部署应用时发现有Pod一直不能创建成功,使用kubectl describe pods -n 得到的结果如下图Failed to create pod sandbox: rpc error: code = Unknown desc = failedto set up sandbox container“ff533db509f4040f7674464940ff3165f98275173bad84f43530b5c2d633d1a0”network for pod “ngi

2021-03-27 11:36:23 1084 1

原创 kubeadm搭建k8s集群

单master K8s集群一、硬件配置:需要至少2GB内存,30GB硬盘,Centos7.x二、对centos进行初始化操作# 1、关闭防火墙systemctl stop firewalldsystemctl disable firewalld# 2、关闭Selinuxsed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# 3、关闭Swapsed -ri 's/.*swap.*/#&/' /etc/f

2021-03-19 13:37:28 62

原创 K8s之helm部署应用

Helm可以用源码或构建的二进制版本安装#下载 helm二进制文件wget https://get.helm.sh/helm-v3.5.3-linux-amd64.tar.gz#解压tar -zxvf helm-v3.5.3-linux-amd64.tar.gz# copy /usr/bincp helm /usr/bin/[root@master linux-amd64]# helmThe Kubernetes package managerCommon actions for Hel

2021-03-12 11:48:37 216

原创 K8S中无状态deployment应用部署

第一步:生成yaml文件kubectl create deployment web --image=nginx --dry-run -o=yaml > web.yaml第二步:运行yaml文件:kubectl apply -f web.yaml

2021-03-12 10:08:23 378

原创 K8S之ETCD和Flannel 之间关系

ETCD 存储了Flannel可分配的IP段资源监控ETCD中每个pod地址,并在etcd中建立维护每一个pod的路由表

2021-01-14 21:45:50 684

原创 RedayGo QPS

空接口测试,不基于DB查询服务器配置:单一节点:QPS:159同一台机子2个节点:QPS:278单机3个节点:QPS:259 ,性能有所下降,且不稳定

2021-01-06 16:33:37 81

原创 Centos7 安装Nginx

一. gcc 安装安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:yum install gcc-c++二. PCRE pcre-devel 安装PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的

2020-11-15 16:20:31 48

原创 mysql 锁

msyql 锁读锁写锁锁的粒度:Innodb 到行,MyIsam 到表查看当前表是否加锁:show open tables;给指定表orders 和order_details 分别加读锁和写锁:lock table orders read, order_details write解锁所有表:unlock tables;总而言之,读锁会阻塞写,但是不会堵塞读,而写锁则会把读和写都阻塞...

2020-10-29 17:50:09 40

原创 Mysql性能调优

MySQL 性能调优:主要表现:1. 执行时间长。2. 等待时间长。优化方向:1. 查询语句写的烂2.索引失效,索引包括单索引和符合索引,优化where 条件之后字段3.关联查询太多join(设计缺陷和或不得已的需求)4. 服务器调优几各个参数设置(缓冲和线程数等)查询手写:Select * From table where xx group by xxx having xxx order by xxx limit机读:From xx where xx group by

2020-10-27 17:07:57 228

原创 Mysql Join 类型汇总

1.SELECT * from stu inner join score on stu.id = score.stu_id;2.select * from stu left join score on stu.id = score.stu_id3.select * from stu right join score on stu.id = score.stu_id4.select * from stu left join score on stu.id = score.stu.

2020-10-26 14:28:56 213

原创 Centos7.x 安装mysql5.7

1、先检查系统是否装有mysqlrpm -qa|grep msyql2、下载mysql的repo源wget http://repo.mysql.com/mysql57-community-release-el7.rpm--2020-09-16 10:18:00-- http://repo.mysql.com/mysql57-community-release-el7.rpmResolving repo.mysql.com (repo.mysql.com)... 23.211.97.88Co

2020-09-16 11:14:41 75

原创 Centos 7.8 安装Nginx

Centos 7.8 安装Nginx:1.官方下载RPM 包http://nginx.org/packages/centos/7/x86_64/RPMS/我这里下载 nginx-1.18.0-1.el7.ngx.x86_64.rpm`wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm`2.安装 `rpm -ivh nginx-1.18.0-1.el7.ng

2020-09-09 11:46:22 504

转载 GO坑

1.简短声明的变量只能在函数内部使用// 错误示例myvar := 1 // syntax error: non-declaration statement outside function bodyfunc main() {}// 正确示例var myvar = 1func main() {}2.Array 类型的值作为函数参数在 C/C++ 中,数组(名)是指针。将数组作为参数传进函数时,相当于传递了数组内存地址的引用,在函数内部会改变该数组的值。在 Go 中,数组是

2020-08-25 11:36:46 171

转载 gin框架中间件 c.Next() c.Abort() c.Set() c.Get 跨中间件取值 gin中间件中使用goroutine

c.Next()演示//HandlerFuncfunc indexHandler(c *gin.Context) { fmt.Println("index") c.JSON(http.StatusOK, gin.H{ "msg": "index", })}//定义一个中间件func m1(c *gin.Context) { fmt.Println("m1 in ...") // 计时 start := time.Now() c.Next() //调用后续的处理函数 .

2020-08-24 16:01:41 1619

原创 arduino esp8266 mqtt连接 阿里云返回 error:2

返回值2:表示客户端标识符不正确,返回值 -4:表示用户名或者密码错误。1、先检查一下PubSubClient.h文件中定义的 MQTT_MAX_PACKET_SIZE的值, 最好要大于1024, MQTT_KEEPALIVE 大于60;2、检查一下你的签名和接入参数的设置,可以参考文档 https://help.aliyun.com/document_detail/73742.html?spm=a2c4g.11186623.6.650.3820619bBWPshh 。管方也有建议CONNECT

2020-08-16 17:31:59 2226

转载 Golang 的 “omitempty” 关键字略解

原文载于 https://old-panda.com/2019/12/11/golang-omitempty/用法熟悉 Golang 的朋友对于 json 和 struct 之间的转换一定不陌生,为了将代码中的结构体与 json 数据解耦,通常我们会在结构体的 field 类型后加上解释说明,例如在表示一个地址的时候, json 数据如下所示{ "street": "200 Larkin St", "city": "San Francisco", "state": "CA",

2020-08-12 15:34:31 1093

原创 Golang中 怎么通过sock实现Nginx和golang程序的fastcgi通讯

Golang中 怎么通过sock实现Nginx和golang程序的fastcgi通讯type TestCgi struct {}//ServeHTTP xxfunc (this *MPLoginCgi) ServeHTTP(w http.ResponseWriter, r *http.Request) { ...}func main() { // sock目录 unixPath := "/var/www/xx/fcgi-bin/" + filepath.Base(os.Args[0]

2020-08-07 15:06:42 517

原创 etcd 终端命令交互

应用通过写入键来储存键到 etcd 中。每个存储的键通过 Raft 协议复制到 etcd 集群的所有成员来实现一致性和可靠性写入键这是设置键 name 的值为 justin 的命令: put[justin@VM_16_9_centos etcd]$ ./etcdctl put name justinOK读取键这是读取键 name 的值的命令:get[justin@VM_16_9_centos etcd]$ ./etcdctl get namenamejustin我们也读取范围覆盖从

2020-08-04 15:14:37 321

原创 结构体转化map[string]interface{}

package mainimport ( "fmt" "reflect")func main() { ret := struct{ Name string `json:"name"` Age int `json:"age"` }{} ret.Name = "justin" ret.Age = 18 m := StructToMap(ret, "json") for k,v := range m{ fmt.Printf("%s:%v \n", k,v) }}/**

2020-06-30 15:21:24 2195

原创 webpack配置vue和坑

安装vue package (运行时依赖)npm --save install vueruntime-only 错误提示:它的意思是说当前是runtime-only无法编译模板,这里我们需要使用runtime-compiler,使用runtime-only使用的是vue.runtime.js文件,无法编译模板,所以需要修改成使用runtime-compiler(vue.esm.js文件)解决方案有两种:第一种是直接以入该文件: import Vue from "vue/dist/vue.esm

2020-06-19 15:59:25 265

原创 webpack ES6转ES5

安装loader:npm --save-dev install babel-loader@7 babel-core babel-preset-es2015{ // ES6 转ES5 npm --save-dev install babel-loader@7 babel-core babel-preset-es2015 test: /\.js$/, // 排除,不打包该文件夹下的js

2020-06-19 11:34:36 113

原创 webpack.config.js配置

// node path packageconst path = require("path")module.exports = { entry: "./webpack-demo/index.js", output: { path: path.resolve(__dirname, "./webpack-demo/dist"), filename: "bundle.js", }, module: { rules: [

2020-06-19 11:08:47 197

原创 安装go package 利器

作者踩了好多坑,最后终于找到一个办法解决golang.org package 安装In Linux or macOS, you can execute the below commands.Enable the go modules featureexport GO111MODULE=on# Set the GOPROXY environment variableexport GOPR...

2020-01-10 10:44:06 219

原创 Grpc 四类服务的方法

1、单项RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。2、服务端流式RPC,即客户端发送一个请求给服务端,可获取一个数据流来读取一系列消息,客户端从数据流中一直读取直到没有更多的消息为止。3、客户端流式RPC,即客户端提供一个数据流写入并发送一系列消息给服务端。一旦客户段完成消息写入,就等待服务器端读取并返回应答。4、双向流式RPC,即两边都可以分别读写...

2019-06-17 19:21:09 656

原创 Go Mediator中介者模式

Mediator 中介者动机(Motivation)在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好的抵御变化。模式变化用一个中介对象来封装(封装变化)一系列的对象交互。...

2019-06-13 11:35:24 179

空空如也

空空如也

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

TA关注的人

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