自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (2)
  • 收藏
  • 关注

原创 Google--Proto Buffer的序列化原理

Google–Proto Buffer的序列化原理这篇文档将讨论 protocol buffer 消息的二进制编码格式,了解不同的 protocol buffer 格式如何影响编码消息的大小可能非常有用!!!简单示例让我们来看一看非常简单的消息定义:message Person { string user_name = 1; int64 favorite_number = 2; repeated string interests = 3;}## 赋值:oldData := &am

2021-03-10 14:36:00 840 1

原创 搭建以太坊私链记录

这篇文档,是记录自己搭建以太坊私链的过程。安装以太坊搭建私链的安装方式有很多,其中之一就是源码安装。源码安装下载go-ethereum源码,编译:git clone https://github.com/ethereum/go-ethereum.git在目录下,编译:make geth显示:env GO111MODULE=on go run build/ci.go install ./cmd/geth............github.com/ethereum/go-ether

2021-07-30 20:49:03 6391 1

原创 群签名和Go语言实现细节(BBS04--Short Group Signatures)

本文主要介绍论文《Short Group Signatures》群签名的go语言版本的具体实现。本文是在参考 yunfeiyanggzq 的实现基础上,进行了进一步的改造加工,以此为基础进行的详细解释。其代码地址为:https://github.com/yunfeiyangbuaa/BBS04_signature群签名在一个群签名方案中,一个群体中的任意一个成员可以以匿名的方式代表整个群体对消息进行签名。与其他数字签名一样,群签名是可以公开验证的,而且可以只用单个群公钥来验证。群签名主要流程:

2021-05-31 15:25:44 3047 2

原创 consul实践--服务发现

本文中,我们将介绍如何使用consul进行服务发现。首先,我们先运行启动一个consul服务:consul agent -server -bootstrap-expect=1 -data-dir=/tmp/consul -node=consulServer -ui -config-dir=./consul.d/ -client 0.0.0.0启动consul后,就需要进行服务注册了。服务注册consul的服务注册可用通过一个json 配置文件进行配置。我们只需要指定存放的目录,consul启动之

2021-05-07 15:20:30 1715

原创 consul实践--运行原理

在上一节中,展示了如何安装consul,本文,我们将继续深入的探究consul。本文将:给出一个简单的启动示例简介consul的架构搭建3个server和3个client的集群简单示例我们将常用命令放到本文中来对照:consul agent ##代理-bind=0.0.0.0 ## 指定consul所在机器的IP地址,默认是0.0.0.0-http-port=8500 ## consul自带一个web访问的默认端口-client=127.0.0.1

2021-04-29 18:33:59 592

原创 golang环境变量以及错误处理

源码安装Go语言时,需要对其进行环境变量的配置,本文就是简述Go从安装,到环境变量的配置过程中的步骤和出现的错误处理。安装安装包下载:https://golang.google.cn/dl/选择对应操作系统的安装包,直接按照即可如果是window的话,直接去我的电脑里配置即可。是Linux或MAC的话,就要配置环境变量了。环境变量一般而言,我是这样配置环境变量的:export GOROOT=/usr/local/goexport GOPATH=/root/goexport PATH=$P.

2021-04-26 16:56:40 601

原创 记一次博客的多平台发布经验

我使用以下组合,将博客在多个平台一键发布,非常方便markdown+Typora+GitHub+CDN+BlogHelper他们分别的作用是:markdown:内容写作Typora: markdown 编辑器GitHub+CDN:作为博客图片的存储仓库BlogHelper:写作助手,一键在多平台发布内容Typora官网:Typora — a markdown editor, markdown reader.一款很好用的 markdown 语法编辑器图片云存储使用:GitHub+C

2021-04-26 16:18:30 396

原创 gRPC实践--拦截器

前提阅读:gRPC实践–加密通信升级版gRPC实践–加密通信gRPC实践–Server&Client本文的代码,可能在以上代码的基础上进行了更改。前言什么是拦截器?拦截器(Interceptor),主要完成请求参数的解析、将页面表单参数赋给值栈中相应属性、执行功能检验、程序异常调试等工作。说人话,就是,我需要在调用 gRPC 方法之前(或之后),对某些参数(如,日子、异常,甚至是token)做一些处理。实现这类功能的活,就叫“拦截器”。gRPC中的拦截器gRPC中

2021-04-26 11:04:17 923

原创 gRPC实践--加密通信升级版

本文,将续上一个博客未完成的尾巴,对gRPC加密通信进行一个升级。主要是分为:使用CA,为server端和client端颁发证书并通信。使用token对不同的方法访问进行权限管理。我们将在上一次的代码中进行重构,参考:gRPC实践–加密通信基于CA证书的认证和加密通信如下图所示,为CA与服务端和客户端的交互过程:在上一篇博客中,我们已经为server端颁发了证书,现在,我们需要为client端颁发证书:## 生成client私钥$ openssl genrsa -out clie

2021-04-24 18:15:40 568 2

原创 gRPC实践--加密通信

gRPC实践–加密通信在gRPC的demo通信中,有服务端和客户端,他们之间都是明文通信的,这样会带来安全隐患。一般的,gRPC有几种方法对server 和 client 之间的通信进行加密,即,身份验证机制:这里,介绍最常用的证书认证机制,通过使用证书认证,在TLS协议下,实现加密通信。我们知道,gRPC建立在HTTP/2协议之上,所以对 TLS 提供了很好的支持。之前的gRPC的服务都没有提供证书支持,因此客户端在链接服务器中通过grpc.WithInsecure()选项跳过了对服务器证书

2021-04-24 16:53:45 2006 1

原创 gRPC实践--Server&Client

前言在gRPC中,客户端应用程序可以直接在其他计算机上的服务器应用程序上调用方法,就好像它是本地对象一样,从而使您更轻松地创建分布式应用程序和服务。与许多RPC系统一样,gRPC围绕定义服务的思想,指定可通过其参数和返回类型远程调用的方法。 在服务器端,服务器实现此接口并运行gRPC服务器以处理客户端调用。 在客户端,客户端具有一个存根(在某些语言中仅称为客户端),提供与服务器相同的方法。例如,你可以使用Go,Python或Ruby的客户端轻松地用 Java 创建 gRPC 服务器。前提知识点:.

2021-04-23 15:57:58 917

原创 总结----20个最常见的算法面试问题

在互联网面试的过程中,有一个环节是逃不掉的,就是算法面试。一般,面试官出的面试题都是从题库里抽出来的,很少有自己出新题的(当然,算法笔试过程除外)。所以,只要我们刷题刷的足够多,就总有概率遇到原题。当然,我们也可以押题,毕竟,一些高频率的题目总是有代表性的。本文列举了20个在计算机面试过程中经常被问到的算法题,排名不分前后,这些题目也只是代表我自己在面试过程中的体会,所以有些好题目没有加入进来也请轻喷,仅供参考。方法前缀和双指针法滑动窗口广度、深度优先搜索回溯法二分法动态规划20个常

2021-03-16 15:35:15 23750

原创 使用 dockerfile构建golang的web服务

在使用docker时,如何将自己的下golang 应用打包成一个镜像呢?1. 编写web应用package mainimport ( "fmt" "log" "net/http")func handler(w http.ResponseWriter, r *http.Request) { if _, err := fmt.Fprintf(w, "hello,you visit url is %q\n", r.URL.Path); err != nil { log.Println(e

2021-02-27 16:32:25 545

原创 如何使用阿里云进行Docker镜像加速

如何使用阿里云进行Docker镜像加速1. 镜像加速服务第一步,找到“容器镜像服务”:2. 镜像加速地址第二步,在“镜像中心”下,找到自己的“镜像加速器”:3. 配置加速器根据自己的操作系统,进行加速器的配置:4. 重启sudo systemctl daemon-reloadsudo systemctl restart docker...

2021-02-27 14:11:58 392

原创 Xshell 和 Xftp 的安装和使用

下载官网是: https://www.netsarang.com/zh/获取软件首先,我们需要获取 Xshell和Xftp 的软件包:点击下载页面:https://www.netsarang.com/zh/xshell-download/点击“免费授权页面”,获取,免费版本填入邮箱,获取下载链接:查看自己的邮箱,会受到邮箱信息,点击进去就是自己的下载链接(建议翻墙):使用XshellXshell 是用于连接远程云服务器的:使用XftpXftp 是用于文件传输的,将数据在

2021-02-04 23:29:00 224

原创 详解Proto Buffer(初级)语法

这篇博客介绍了如何使用 protocol buffer来构建我们的数据,编写 .proto文件,以及如何从.proto文件生成数据访问类。这是 proto3版本,有关proto2语法的信息,请参见官网的《 Proto2语言指南》1. 定义消息类型首先让我们看一个非常简单的例子。这是官网给的一个经典示例:即,定义一个 SearchRequest(搜索请求)消息格式,其中有一个字符串类型的查询键值、int32类型的特定页面结果以及每页结果数。他的定义如下:syntax = "proto3";mess

2021-02-01 17:26:32 857

原创 一文掌握Proto Buffer的安装

Proto Buffer是Google公司开发的一种数据描述语言,并于2008年对外开源。Protobuf刚开源时的定位类似于XML、JSON等数据描述语言,通过附带工具生成代码并实现将结构化数据序列化的功能。但是我们更关注的是Protobuf作为接口规范的描述语言,可以作为设计安全的跨语言PRC接口的基础工具。1. 什么是Proto BufferProtocol Buffers (a.k.a., protobuf) 是Google开发的,和语言无关、平台无关的可扩展机制,用于序列化结构体数据。可以在

2021-02-01 17:22:52 476

原创 Linux上如何使用随机数据填充满磁盘

最近,项目中需要完成这样的一个任务:需要挂在一个磁盘,在这个磁盘中存放一个文件,除了这些文件之外,我们希望该磁盘的其他部分都被随机数据填充-----我们不想在这个磁盘上,除了该文件外还能存放其他文件,也不希望留给敌手存放其他文件的空间。通过查询资料,我知道需要了解 dd命令、磁盘挂载等知识。想法我的想法是:先创建一个文件夹,限制该文件夹的大小。实现方式就是,创建一个20 M大小的磁盘镜像,挂载到文件夹下,这样这个文件夹的大小就限制死了。对该文件,先填充自己需要的文件。填充好必须的,自己需要的文

2021-01-27 22:14:25 3704

原创 Consul实践--安装

Consul是一个分布式高可用的系统,包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:服务发现健康检查Key/Value存储多数据中心本章节主要叙述如何安装 consul安装官网下载地址:https://www.consul.io/downloads.html选择对应的操作系统,下载好安装包。这个安装包是一个可执行的 二进制 文件。在Linux上安装解压好下载的安装包:unzip consul_1.9.2_linux_amd64.zi

2021-01-27 19:12:05 209

原创 golang 的基础数据类型

机器级程序将内存视为一个非常大的字节数组,称为虚拟内存(virtual memory)。内存的每个字节都由一个唯一的数字来标识,称为它的地址(address),所有可能地址的集合就称为虚拟地址空间(virtual memory space)。所以,从内存管理上看,编程语言中的数据类型表示的是存储的何种类型的数据,就是一个类型占用的内存大小。也就是说,数据类型的出现是为了把数据分成所需内存大小不同的数据在程序中,我们通过指定其类型,能实现以特定字节数为单位来进行读写。Go语言提供了丰富的数据组织形式

2021-01-12 14:58:35 175 1

原创 golang---素数筛从单机到并发

使用 golang 的并发特性,可以很好的提高程序的执行速度。其中,并发版本的素数筛是一个经典的例子,通过它我们可以更深刻地理解Go语言的并发特性。首先,我们看看什么是素数筛:素数筛顾名思义,就是将素数筛选出来。首先,我们是怎么判断一个数是素数的呢?我们一般是这样做的:// 判断整数 n 是否是素数func isPrime(n int) bool { for i := 2; i*i <= n; i++ { if n%i == 0 { return false } } re

2021-01-09 17:56:53 396 1

原创 Go语言编程--Slice

本系列为探究golang中,基本类型的一些底层实现。一者是为了在面试中,能对答出来,增加面试通过的几率;一者,是为了彻底了解语言的底层实现,在今后使用的过程中,才能知道自己需要注意什么,在哪里怎么优化。本章节,我们将讨论Go的切片的用法首先,我们看看slice的底层数据结构:数据结构type SliceHeader struct { Data uintptr //指向数组的指针 Len int //当前切片的长度 Cap int //当前切片的容量}Data

2021-01-05 18:21:48 248

原创 程序员面试----操作系统常见面试题

在程序员的面试过程中,少不了要问关于操作系统的问题。这里,我整理了面试过程中常见的一些问题和回答。PS. 这些回答不一定准确,欢迎各位前来纠正进程和线程的区别面试官最喜欢问的一个经典问题,就是:????说一说进程和线程之间的区别吧。????回答:从虚拟地址空间角度来说:进程是操作系统分配资源的单位。一个进程拥有自己的完整的虚拟地址空间,当发生进程切换时,不同的进程拥有不同的虚拟地址空间。而同一进程的多个线程是可以共享同一地址空间从资源的角度说:线程比进程小,基本上不拥有系统资源。

2021-01-05 16:56:41 331

原创 记一次项目构建错误---Use of internal package is not allowed

出错背景最近在写一个项目,是属于两个人合写的,一个人写一个包,最后合并在一起。但是,最后在 main.go 中,需要应用到某个函数时,发现不能引用,报错:报错:Use of internal package is not allowed如下图所示:寻找原因一开始,以为是 GOPATH 的问题,因为看字面意思,我们很容易想到是内部函数出了问题。但是,仔细想想,这个也不是内部函数啊。理所当然的,把这个项目放到 GOPATH/src 下运行,也不会有什么改变,一样报错。真正的原因最后,发现

2021-01-04 12:10:51 10350

原创 Golang--序列化和反序列化方法

在编程过程中,我们总是要遇到这样的问题,就是将我们的数据对象要在网络中传输或保存到文件,这就需要对其编码和解码动作。目前存在很多编码格式:json, XML, Gob, Google Protocol Buffer 等,在Go 语言中,如何对数据进行这样的编码和解码呢?本文记录数据序列化的方法和需要注意的问题

2020-12-30 17:19:27 3728 1

Raft一致性算法.xmind

Raft公式算法的思维导图

2021-01-05

Fabric在Ubuntu上的环境部署

在虚拟机Ubuntu上,部署hyperledger fabric 的环境搭建

2018-07-11

空空如也

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

TA关注的人

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