自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

junaozun的博客

专注于区块链与go语言

  • 博客(73)
  • 资源 (2)
  • 收藏
  • 关注

原创 mysql 面试知识集合

mysql面试

2022-06-24 15:36:34 236 1

原创 二叉搜索树,avl树,红黑树,B树,B+树介绍

数据结构

2022-06-08 17:30:59 519

原创 go 内存泄漏及性能分析工具使用

go性能分析工具

2022-06-06 18:03:48 336

原创 golang的GC及GC调优

v1.5之后使用了三色标记清除1.程序启初创建,全部标记为白色,将所有对象放入白色集合中2.遍历root set(非递归形式,只遍历一次),得到灰色节点,将灰色节点放入灰色集合中。3.遍历灰色的标记表,将可达到的对象从白色标记为灰色,其本身从灰色变成黑色。重复此步骤,直到灰色标记表中无任何对象4.删除所有的白色对象2.为什么GC过程中需要STW?如果没有STW,发生上面的情况,会把引用的对象删除,造成数据混乱。............

2022-05-18 10:21:00 4052

原创 k8s学习总结

一.k8s的架构二.k8s核心概念三.k8s命令行1.查看所有的namespace kubectl get namespaces2.查看develop命名空间下的所有的podkubectl get pods -n [namespace]3.查看当前所处于的namespcaekcgc4.切换namespacekcn [namespace]5.创建一个namespacekubectl create namespace [n...

2022-04-10 11:57:46 1187

原创 rpc中客户端的连接池的设计

为什么需要连接池? 连接池是一个创建和管理连接的缓冲池技术,我们知道,client 每次向 server 发起请求都会创建一个连接。一般一个 rpc 请求消耗的时间可能是几百毫秒到几秒,也就是说在一个比较短的时间内,这个连接就会被销毁。假设我们一秒钟需要处理 20w 个请求,假如不使用连接池的话,可能几万十几万的连接在短时间内都会被创建和销毁,这对 cpu 资源是一个很大的消耗,同时因为我们的端口数是 1~65535,除了一些端口被计算机内部占用,每次 client 创建连接都需要分配...

2021-09-13 16:16:53 845

原创 IO多路复用机制

什么是IO多路复用:即能够阻塞等待,不浪费CPU等资源,也能同一时刻监听多个IO请求的机制。IO多路复用有三种实现:select、poll、epoll。现在基本都是用的epoll方式,且epoll是linux独有的。epoll API三个:1.创建epoll: int epoll_create(int size) @param size 告诉内核监听的数目 @returns 返回一个epoll句柄(即一个文件描述符)即在内核中创建一个根节点为epfd,节点数量大小为1...

2021-09-08 00:13:04 640

原创 ubuntu编译安装最新redis

1.$ wget http://download.redis.io/releases/redis-6.0.6.tar.gz2.tar xzf redis-6.0.6.tar.gz3.$ cd redis-6.0.64.make5.sudo cp src/redis-server /usr/local/bin/6.sudo cp src/redis-cli /usr/local/bin/## 此目录用于保存各端口配置文件sudo mkdir /etc/redis## 此目录用

2021-01-12 14:53:59 186

原创 docker、docker-compose安装

1.在https://github.com/docker/compose/releases中下载docker-compose的二进制文件:2.将其改名为docker-compsoe,并移到ubuntu的usr/local/bin目录下3.输入docker-compose -version查看是否安装成功

2020-10-17 15:35:57 137

原创 数据结构(堆基础)

Top k问题时间复杂度分析:(从n个数中找出前k大的数)1.建立一个大小为k的小根堆:O(k)(自底向上建立)2.遍历n个数:O(n)3.找到比堆顶大的元素后,删除堆顶元素:O(log(k))4.该元素进堆:O(log(k))5.输出有序的k个元素:O(klog(k))或 输出无序的k个元素:O(k)综上:时间复杂度:O(n+klog(k))...

2020-09-16 15:28:52 93

原创 ssh免密登陆远程服务器

1.本地终端中执行以下命令:ssh-keygen -t rsa生成密钥过程中,建议采用默认值,只需要按三次回车之后,就会再~/.ssh目录下生成密钥文件,其中,id_rsa为私钥,id_rsa.pub为公钥。2.服务器的~/.ssh/authorized_keys文件保存可快速连接的客户端的公钥。只需把客户端生成的id_rsa.pub文件的内容拷贝到authorized_keys文件的末尾。方法如下:2.1 在本地执行:scp ~/.ssh/id_rsa.pub root@ip:

2020-09-10 20:37:15 197

原创 go语言的局部变量是在栈中还是堆中?

先看这两个代码:这两段代码只是调用的打印函数不一样,但是局部变量一个放在堆中,一个是放在栈中的。直接说原因:go语言编译器会做逃逸分析,分析局部变量的作用域是否逃出了函数的作用域,要是没有就放到栈上,要是超出了函数的作用域就自动放到堆上。fmt.println函数使局部变量的作用域超出了函数的作用域,所以局部变量是在堆上。而println是内联函数,并没有使局部变量的作用域逃出函数的作用域,所以是在栈上。...

2020-08-27 10:25:57 1118

原创 mysql引擎

mysql主要是三个引擎:innodb、myisam、memory其中innodb B+树 叶子节点直接放置数据 (聚簇索引)myisam B+树 叶子节点不直接放置数据,而是放置数据的地址或指针(非聚簇索引)memory hash...

2020-06-16 00:36:05 116

原创 mysql索引

MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引(1)普通索引:create index indexName on table(column);或者创建表时指定,create table(..., index indexName column);(2)唯一索引:类似普通索引,索引列的值必须唯一(可以为空,这点和主键索引不同)create unique index indexName on table(column);或者创建表时指定          ...

2020-06-16 00:30:26 115

原创 字符串最后一个单词的长度

测试通过代码如下:package mainimport ( "bufio" "fmt" "os" "strings")func main() { reader := bufio.NewReader(os.Stdin) //读取键盘输入 input,_ := reader.ReadString('\n')//以换行符结束(input中包含了这个换行符) str...

2020-02-25 21:48:04 240

原创 公司内网环境同一网段机器传输文件

源:python -m SimpleHTTPServer 8080目标:wget http://ip:8080/file.zip

2020-01-02 14:40:16 424

原创 ubuntu下从零开始安装消息中间件RocketMQ教程

1.因为RocketMQ是基于java语言编写的,因此运行RocketMQ需要安装java环境,要求jdk1.8以上 ubuntu系统java环境安装过程: (1)下载JDK wgethttps://github.com/frekele/oracle-java/releases/download/8u212-b10/jdk-8u212-linux-x64.tar...

2020-01-02 11:05:50 616

原创 Redis实现分布式锁

分布式锁至少需要满足以下两点:多进程可见 互斥(锁可释放)(1)首先Redis本身就是独立于JVM之外的,因此满足多进程可见。(2)使用Redis的setnx命令,可使锁互斥,然后使用del命令可主动释放锁,如果服务宕机,使用expire命令设置锁过期时间,可在宕机时自动释放锁。为确保原子性,可使用一条命令:set key value nx ex 10. 其中nx表示如果不...

2019-10-30 21:47:44 115

转载 TCP三次握手为什么三次,两次为什么不可以?

为什么不可以是两次握手?当客户端向服务器端发送一个连接请求时,由于某种原因长时间驻留在网络节点中,无法到达服务器端,由于TCP的超时重传机制,当客户端在特定的时间内没有收到服务器端的的确认应答时,就会重新向服务器端发送连接请求,该请求到达服务器端并建立连接,进行数据传输,当数据传输完成时,释放了TCP连接。若此时第一次的连接请求报文段延迟了一段时间后到达了服务器端,本来这是一个很早到达的失...

2019-10-30 20:09:34 955

原创 go语言实现一个无限buffer的channel

我们知道go语言内置的channel缓冲大小是有上限的,那么我们自己如何实现一个无限缓冲的通道呢?代码如下:package mainimport ( "container/list" "fmt" "sync")func UnlimitedChannel() (chan &lt...

2019-09-21 20:38:30 951

原创 go语言的接口

1.接口断言因为空接口interface{}没有定义任何函数,因此Go中所有类型都实现了空接口。当一个函数的形参是interface{},那么在函数中,需要对形参进行断言,从而得到他的真实类型。package mainimport ( "fmt" "math")/*接口断言方法1:instance, ok := 接口对象.(实际类型) //安全方法2:switc...

2019-08-23 19:29:14 174

原创 http请求

http请求报文: http请求包: 请求行:请求方法(空格)请求文件URL(空格)协议版本(\r\n) 请求头:语法格式 : key :value 空行:\r\n —— 代表 http请求头结束。 请求包体:请求方法对应的数据内容。 GET方法没有内容!! ...

2019-07-18 15:41:15 151

翻译 k8s基本介绍

k8s的基本概念 在部署前,必须先学习Kubernetes的几个重要概念,它们是组成Kubernetes集群的基石。1 Cluster(集群) Cluster是计算、存储和网络资源的集合,Kubernetes利用这些资源运行各种基于容器的应用。2 Master(控制主节点) Master是Cluster的大脑,它的主要职责是调度,即决定将应用放在哪里运行。Maste...

2019-06-06 14:05:54 291

原创 consul+micro+grpc的使用

注:由于micro默认使用的是rpc,这里我们将rpc换成grpc来使用。1.将所有micro/rpc包换成micro/grpc包导入。2.srv下main.go这里缓存grpc.NewService 3.web/hander/hander.go,这里改一下: ...

2019-06-01 13:43:58 756

原创 consul+micro多台云服务器部署

1.准备两台云服务器,公网ip分别是106.14.125.167 ,129.28.80.792.在本机中将我们上一个章节写的srv和web分别编译。全代码我已上传到我的github中https://github.com/junaozun/micro.git 下载下来后将代码放入GOPATH/src路径下: (1) cd GOPATH/src/micro/rp...

2019-06-01 12:38:58 575

原创 micro的介绍、安装与使用

1.Micro的介绍 Micro解决了构建云本地系统的关键需求。它采用了微服务体系结构模式,并将其转换为一组工具,作为可伸缩平台的构建块。Micro隐藏了分布式系统的复杂性,并为开发人员提供了很好的理解概念。Micro是一个专注于简化分布式系统开发的微服务生态系统。是一个工具集合, 通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。 Micro...

2019-05-31 19:18:57 4509

原创 consul的介绍、安装与使用

1.consul是什么?Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。它具备以下特性 : service discovery:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。 health checking...

2019-05-30 19:30:19 21053

原创 gRPC的介绍、安装与使用

1.gRPC是什么? 在 gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC系统类似, gRPC也是基于以下理念: 定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC服务器来处理客户端调用。2.gRPC环境安装(1)进入GOPA...

2019-05-30 15:53:25 7479 2

原创 protobuf的介绍、安装与使用

1.protobuf是什么? protobuf是google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式,只要实现相同的协议格式即同一 proto文件被编译成不同的语言版本,加入到各自的工程中去。这样不同语言就可以解析其他语言通过 protobuf序列化的数据。2.数据交互xml、json、proto...

2019-05-29 21:03:01 16613 2

原创 微服务的几个重要组件

一.跨语言、跨平台之间相互通信的数据交换格式 protobuf二.通讯协议 gRPC三.调度管理服务发现 consul四.微服务框架 ...

2019-05-29 17:27:02 4508

原创 docker compose介绍与简单使用

将业务拆分为成多个子任务,然后对这些子任务进行顺序组合,当子任务按照方案执行完毕后,就完成了业务目标任务编排:就是对多个子任务执行顺序进行确定的过程。常见的任务编排工具:单机版:docker compose集群版:Docker swarm(docker) Mesos (Apache) kubern...

2019-05-28 18:33:34 337

原创 在docker容器中手工部署go环境和项目

一.需求:基于docker镜像,手工部署go项目环境 方案分析: 1.docker环境部署 2.go环境部署 3.go项目部署 4.测试 1.docker环境配置 1.1 获取一个ubuntu的模板文件...

2019-05-28 17:25:15 5929 2

原创 dockerfile-cmd命令

一.dockerfile运行的命令CMD:是指定容器启动时默认执行的命令,会被docker run提供的参数覆盖 格式: CMD commandparam1 param2 (shell模式)CMD ["executable","param1","param2"] (exec模式)推荐...

2019-05-28 15:42:41 7787

原创 dockerfile--简介

一.什么是dockerfile? dockerfile类似于脚本,将docker镜像使用自动化的方式实现出来。1.1dockerfile的作用 1.找一个镜像:例如ubuntu 2.创建一个容器:docker run ubuntu 3.进入容器:docker exec -it 容器 命令 4.操作:各种应用配置.... 5.构造新镜像:doc...

2019-05-28 13:39:08 128

原创 docker--网络

docker的网络很重要,我们前面所说的所有东西都依赖网络才能工作。我们从两方面来学习网络: 端口映射和网络模式1.端口映射:默认情况下,容器和宿主机之间网络是隔离的,我们可以通过端口映射的方式,将容器中的端口,映射到宿主机的某个端口上,这样我们就可以通过宿主机的ip+port来访问容器里的内容。 docker的端口映射: (1)随机映射:-P(大写)...

2019-05-27 20:44:24 145

原创 docker--数据卷

1.生产环境使用docker的过程中,往往需要对数据进行持久化保存,或者需要更多容器之间进行数据共享,那我们需要怎么要的操作呢? 答案:数据卷和数据卷容器。数据卷实现容器到宿主机之间的映射;而数据卷容器实现容器到容器之间的映射。2.什么是数据卷? 数据卷:容器内数据直接映射到本地主机环境。就是将宿主机的某个目录,映射到容器中,作为数据存储的目录,我们就可以在宿主机中对数据进...

2019-05-26 20:43:05 109

原创 docker--容器

一.容器是什么? 容器(Container):容器是一种轻量级、可移植,并将应用程序进行打包的技术,使应用程序可以在几乎任何地方以相同的方式运行。 docker将镜像文件运行起来后,产生的对象就是容器。容器就相当于是镜像运行起来的一个实例。 容器具备一定生命周期。 容器创建后,会存储在宿主机/var/lib/docker/containers目录下二.容器的查看...

2019-05-26 18:44:39 836

原创 docker--镜像

Docker的架构图:Docker是采用了C/S架构模式的应用程序: Client docker CLI:客户端命令行 REST API:一套介于客户端与服务端之间进行通信并指示其执行的接口 Server docker daemon:服务端docker守护进程,等待客户端发送命令来执行Docker的四大核心技术: image--镜像:一个Do...

2019-05-26 15:05:10 226

原创 操作系统--死锁

死锁的概念: 计算机系统中多道程序并发执行时,两个或两个以上的进程由于竞争资源而造成的一种互相等待现象,如无外力作用,这些进程将永远不能再向前推进。举个例子:一道桥上只能同时通过一个方向的车,但是此时两个方向的车同时进入桥上,互不相让,两边的车谁也动不了,相当于造成了死锁。死锁的原因:1.竞争资源引起的死锁:当系统中供多个进程所使用的资源,不足以同时满足它们的需要时,...

2019-05-25 19:08:21 278

原创 操作系统--CPU调度

什么是CPU调度?从就绪队列中选出进程分配CPU的过程CPU调度算法先来先服务(FCFS):最简单的调度算法 短作业优先(SJF):从就绪队列中选出最短作业优先分配CUP。缺点是难以实现,因为难以知道就绪队列中作业的时间长短。优点平均等待时间短。 优先权调度:静态优先权在进程创建时确定,且在整个生命周期中保持不变。动态优先权是指进程的优先权可以随进程的推进而改变,以便获得更好的...

2019-05-25 15:59:48 256

经典项目-海量用户通信系统

这是尚硅谷的一个讲课项目,海量用户通信系统。由go+redis实现,类似微信的群聊的功能,注册,登录,群聊功能都有,部署方式在项目readme.txt中有写。

2019-05-09

go语言实现工作量证明(POW)共识算法

用go语言实现的一个简单的工作量证明算法,代码和可执行程序都有,下载后放在gopath路径下就可直接运行演示

2019-04-27

空空如也

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

TA关注的人

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