自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

HJ

业余算法爱好者

  • 博客(646)
  • 资源 (5)
  • 收藏
  • 关注

原创 领域驱动设计(DDD)好文一览

入门 领域驱动设计简介及相关思想 Saga 分布式事务 DDD 中的那些模式 — CQRS vivo 领域驱动设计(DDD)实践之路(一) 领域驱动设计(DDD)实践之路(二):事件驱动与CQRS 领域驱动设计(DDD)实践之路(三):如何设计聚合 领域驱动设计(DDD)实践之路(四):领域驱动在微服务设计中的应用 美团 领域驱动设计在互联网业务开发中的实践 ThoughtWorks 领域驱动实战思考(一):用 TDD 思想对 DDD 的协作设计过程进行基准化

2021-08-26 16:08:34 352

原创 Go语言分布式微服务系统

简介baby-fried-rice(宝宝煎米果,以下简称baby)是一套由Go语言开发,以用户中心、即时通信、用户空间三个模块为主的分布式微服务后台系统。使用了Gin作为Web框架,Gorm为连接数据库的ORM框架,JWT实现Token验证。服务之间的调用通过gRPC的方式进行,为了方便每个微服务的横向扩展,引入了ETCD作为服务注册中心。使用了NSQ作为消息队列转发消息,引入Redis做热点数据缓存。使用了七牛云云存储服务存储照片、文件等内容。业务内容如下图所示,服务整体包含六个部分,每个部分

2021-06-25 15:11:52 469

原创 Golang批量更新数据操作

基础知识在现实的开发场景中,有许许多多的数据在入库之前,我们并不知道到数据库是否已经存在该数据,其实都会先查询一遍,若存在,则执行更新语句,否则执行插入语句。但是在SQL标准语句中,对于批量插入数据若存在则更新的语句实现方式有insert ... on duplicate key update ...针对批量插入或者更新的业务,我们可以实现拼接SQL语句来提高数据入库的效率。适用数据库类型 MySQL PostgresSQL SQLite 数据库适用框架

2021-10-11 19:01:04 3005

原创 Golang网络编程(一)Websocket编程

背景​ ​ ​ ​ ​ ​ ​ 在服务端与前端或者sdk端通过http进行数据交互的时候,常常会面临一些问题:比如在im场景下,前端需要主动push数据给服务端;比如在高并发场景下,sdk端请求服务端压力过大导致服务器文件句柄数不够前端无法继续请求、服务端开启goroutine过多内存消耗过大等问题;websocket是一种应用层通信协议,建立在TCP协议之上,具有数据格式轻量、通信双方均可以推送消息等特点。使用package ma

2021-05-19 10:17:23 378

原创 Golang库解析之mapstructure

mapstructure传送门package mainimport ( "encoding/json" "fmt" "github.com/mitchellh/mapstructure")type Demo struct { ID int `json:"id"` Name string `json:"name"`}func main() { var value = make(map[string]Demo) value["1"] = Demo{ ID: 1,

2021-05-12 14:18:40 1551 2

原创 科目一刷题易错知识点总结

1、无线城3公4,有线城5公72、弯道行驶最高不超过30km/h3、在没有中心隔离设施或者没有中心线的道路上,在狭窄的山路,不靠山体的一方先行。在有障碍的路段,无障碍的一方先行;但有障碍的一方已驶入障碍路段而无障碍的一方未驶入时,有障碍的一方先行4、有中心圈的路口,应靠近中心圈转弯左转5、转弯车辆让直行车辆先行;右方道路来车先行;右转弯车让左转弯车辆先行6、白色菱形是人行道预告,要减速行驶7、机动车在道路上发生故障或者发生交通事故,妨碍交通但又难以移动的,应当按照规定开启危险报警闪光灯并在车后5

2021-04-01 17:52:43 512

原创 两年工作总结(上)

工作交代时间过得好快,从校园出来,一眨眼就两年的时光过去了。仿佛还来不及做什么,就这么迷迷糊糊的对待了。我是2019年10月份,拖着行李箱,独自来到了杭州这座城市,开始我的工作生涯。那个时候有几家正准备现场面试的公司,我从中挑中了比较中意的一个,第二年六月份大学毕业,参加公司的毕业转正答辩,前前后后总共呆了一年多。我也是从在这家公司工作开始,接触到了Golang语言。好在大学里面有C++和Java的基础,所以入门起来比较快。在公司里面的工作内容主要是做爬虫任务调度系统,和另外一个同事,一起开发了

2021-03-10 17:32:40 353 2

原创 Hyperledger Fabric学习(十三)1.4版本的搭建

准备环境go 1.13或以上版本docker ce-17.06或以上版本准备工作拉取项目## 进入$GOPATH/src/github.com/hyperledgercd $GOPATH/src/github.com/hyperledger## 拉取1.4版本的fabric项目git clone -b release-1.4 https://github.com/hyperledger/fabric.git## 拉取1.4版本的fabric-samples项目git clone

2020-08-20 16:06:17 375

原创 Golang操作etcd实现服务发现

简介etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。etcd作为服务发现系统,有以下的特点:简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单安全:支持SSL证书验证快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作可靠:采用raft算法,实现分布式系统数据的可用性和一致性etcd项目地址:https://g

2020-08-20 15:52:23 2185

原创 Hyperledger Fabric学习(十二)智能合约(链码)使用富查询

富查询的使用      链码中的数据存储都是基于K-V键值对的形式,一般来说,是保存在LevelDB中。但是目前Fabric支持链码使用couchDB进行存储数据、通过编写富查询的方式查询数据。认识第一个富查询语句​ 富查询语句是一种特定的json格式,如下所示:{ "selector": { "coin": 100 }}selector对应一个列表,列表包含多个单元,每个单元匹配一个字段,譬如上述中

2020-08-20 14:49:24 3052 1

原创 Hyperledger Fabric学习(十一)智能合约(链码)第一个链码

概述​      链上代码,简称链码,又称智能合约。一般是指由开发人员使用Go语言(也支持Java等语言)编写的应用程序代码,提供分布式账本的状态处理逻辑。链码被部署在Fabric的网络节点中,能够独立运行在具有安全特性的受保护的Docker 容器中,以 gRPC 协议与相应的 peer 节点进行通信,以操作(初始化或管理)分布式账本中的数据。可以根据不同的需求开发出不同的复杂的应用。在 Hyperledger Fabric 中,链码一般分为:

2020-08-20 14:42:03 1113

原创 Hyperledger Fabric学习(十)智能合约(链码)devplat工具测试

devplat工具介绍devplat是一款本地链码测试工具,提供了一键部署清理本地fabric开发环境的功能。解决了fabric开发环境搭建的难题。项目参照了fabric-samples中的chaincode-docker-devmode的搭建方式,使用docker-sdk的方式一键集成peer、orderer、cli、couchdb、chaincode等服务。传送门https://github.com/3115826227/devplat...

2020-08-19 14:41:53 710

原创 Golang使用zipkin进行链路监控

准备工作docker运行zipkin服务一、对grpc服务进行监控关于Golang使用grpc的内容请转移到这边文章https://blog.csdn.net/feizaoSYUACM/article/details/106024127代码改造服务端const ( serviceName = "simple_zipkin_server" zipkinAddr = "http://127.0.0.1:9411/api/v1/spans" zipkinRec

2020-08-19 14:09:38 3305

原创 Hyperledger Fabric学习(零)入门

​       自从2008年中本聪发明了比特币以来,区块链行业被越来越多的人所关注。区块链具有分布式对等、数据块链式、不可伪造和防篡改、透明可信、高可靠性等关键特征。到目前为止,根据不同的应用场景和设计体系,区块链可以采用对应的开放共享节点权限方案,包括如下三种区块链部署模型:公有链:所有人都可以随意使用,所有节点都可以随时加入退出,凡是加入的节点都会参与共识和数据的读写,该模型具有较强的中心化特征,比如我们现在熟知的比特币、以太坊

2020-07-30 11:02:51 906

原创 Hyperledger Fabric学习(九)智能合约(链码)MockStub测试

1、概述​ ​ ​ ​ ​ ​ 链码运行的环境通常是在docker容器中,调用需要与peer进行交互,而peer又依赖于orderer、leveldb/couchdb等服务,因此本地IDE开发的链码,要想测试,通常来说是一件比较麻烦的事情。​​ ​ ​ ​ ​ ​ 在fabric中,开发链码用到的shim包除了给我们提供Chaincode和ChaincodeStubInterface两

2020-07-14 10:00:01 1815 11

原创 Hyperledger Fabric学习(八)Fabric SDK调用链码、监听链码

Fabric SDK调用流程1、文字描述获取FabricSDKsdk, err := fabsdk.New(config.FromFile(sdkConfig))加入Org、User信息rcp := sdk.Context(fabsdk.WithOrg(orgName), fabsdk.WithUser(userName))获取指定Channel的Channel Providerccp := sdk.ChannelContext(channelID, fabsdk.WithUs

2020-07-13 18:02:25 2071

原创 Hyperledger Fabric学习(七)智能合约(链码)

智能合约(链码)1、概述      链码的编写需要自定义struct,实现shim包Chaincode接口的两个方法:type Chaincode interface { Init(stub ChaincodeStubInterface) pb.Response Invoke(stub ChaincodeStubInterface) pb.Response}      

2020-07-13 17:58:54 1914

原创 Golang使用grpc实战

1、准备工作获取google.golang.org/grpc包go get -u google.golang.org/grpc安装protobuf工具brew install protobuf获取github.com/golang/protobuf/protoc-gen-go包go get -u github.com/golang/protobuf/protoc-gen-go安装consulbrew install consul后台启动consulnohup

2020-05-09 17:28:25 1408

原创 kubeadm搭建K8s集群

准备工作系统配置版本:CentOS 7Docker:17.06.2-ceKubernetes:1.14.2系统资源ip角色10.0.0.62master10.0.0.48slave搭建步骤注意,以下操作需要在root用户下进行1、安装kubeadm、kubectl、kubelete准备国内repocat <&lt...

2020-04-09 16:26:35 284

原创 Hyperledger Fabric学习(六)交易流程详解

在Hyperledger Fabric学习(一)初识 中,简单的介绍了以下一次提案的提交流程,下面我们从源码来分析一些详细的流程:发送签名提案消息到Endorser背书节点请求处理:Client构造签名提案信息(SignedProposal类型),通过调用Endorser背书服务客户端的ProcessProposal()接口,提交消息到Endorser背书节点,请求模拟执行交易提案并签名背...

2020-03-19 20:01:55 1017

原创 Hyperledger Fabric学习(五)Orderer排序服务

1、启动过程从本地配置文件和环境变量中读取配置信息,构建配置树结构配置日志级别配置go pprof服务配置gRPC监听服务,创建gRPC服务连接配置MSP结构初始化签名结构初始化账本管理器结构创建操作账本的工厂结构LedgerFactory;如果是首次执行,初始化系统管道,将系统管道信息接入区块中;初始化共识插件,共识插件负责跟后台的队列打交道;创建各个账本的管理器Man...

2020-03-19 19:58:43 1249

原创 Hyperledger Fabric学习(四)Endorser背书流程

检验提案消息的合法性,以及相关的权限;调用ValidateProposalMessage()方法对提案格式进行检查Channel头部格式:头部类型是否合法;签名头格式: 是否包括了nonce和creator数据;签名域: creator证书MSP是否合法,签名是否正确;如果是系统链码调用,检查是否是允许从外部调用的三种SCC之一;如果chainID不为空,获取对应chain的...

2020-03-19 19:42:10 810

原创 Hyperledger Fabric学习(三)链码

一、链码开发模板        链码开发实现Chaincode接口,Chaincode接口里面只有两个方法,一个是Init()方法(链码初始化),另一个是Invoke()方法(链码调用主要逻辑),Chaincode接口如下:/* 所有链码必须实现Chaincode接口的Init()和Invoke()方法, ...

2020-03-19 19:38:03 729

原创 Hyperledger Fabric学习(二)部署

准备配置go,docker环境拉取 https://github.com/hyperledger/fabric 1.0.0版本的代码到本地$GOPATH/src/github/hyperledger/fabric路径下部署        部署情况如下脚本一键部署 ✘ cd examples/e2e_c...

2020-03-19 19:13:47 1055 1

原创 Hyperledger Fabric学习(一)初识

1、 设计       在Fabric中,包括身份的认证、共识服务以及链码服务。身份认证主要负责成员属性证书认证;共识服务包括分布式账本、网络协议、背书、排序等;链码服务主要负责提供链码运行所需的环境(即容器)       简单来说,主要是三层:业务层、...

2020-03-19 17:47:00 746

原创 Hadoop最全的入门介绍

目录Hadoop家族概述HadoopHadoop介绍HDFS概述节点介绍文件读写MapReduce概述原理过程分析管理框架YARN失败处理HBase概述内部原理服务器特点存储特性基本命令配置教程Hadoop家族概述Hadoop:分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分...

2020-03-14 16:49:30 496

原创 Java学习(十八)锁

一、内容结构二、锁初识1、锁类型1)悲观锁        对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候,一定有别的线程在同时修改数据,所以在获取数据的时候会先加锁,保证数据不会被别的数据修改。在Java中,常见的synchronized和Lock使用的都是悲观锁;2)乐观锁(无锁) ...

2020-03-14 15:52:17 177

原创 Java学习(十七)多线程安全问题

前文回顾上一次我们讲过了在操作系统中,进程是一个非常重要的概念,它是计算机程序运行的基础。我们使用计算机应用程序的时候,操作系统实际上管理着这个应用程序背后运行的进程。我们现在来总结一下,进程有以下几个特点: 进程有创建、就绪、运行、阻塞、退出五个状态; 进程在创建态的时候,需要分配资源,在就绪态的时候,资源进入内存,准备等待获取CPU时间片,执行程序; 进程与进程间需要通信,通...

2020-03-08 12:19:41 435

原创 Java学习(十六)进程与线程入门

操作系统的出现主要是方便于用户与计算机进行交互,管理与分配计算机多项应用程序的资源存储与运行。操作系统最基础的任务是进程的管理,进程是操作系统用于资源分配的最小单位,在一定程度上,我们可以把计算机中应用程序的运行,类似的看做操作系统中的进程的执行。在操作系统中,单核CPU同一时刻只允许一个进程执行,其他进程需要等待。进程在执行中会获得CPU的时间片,这个时间片非常短暂。在不考虑优先级抢占式的情况下...

2020-02-29 14:55:56 251

原创 Kafka系列(二) 生产者Producer(处理模式、消息发送)

1、处理模式数据处理目前有两种常见的处理模式,一种是批处理,一种是流处理。批处理的代表是Spark,流处理的代表则是Storm,两者能兼容的代表则是Flink。在Kafka的不断更新迭代中,Kafka Stream已经在流处理中占据一席之地了。借此机会,先科普一下这两种处理模式。什么是批处理、流处理?在这里我们提出一个关键词量化对于处理中心,如果处理的事情是可以量化的,什么是量化?比如...

2019-08-30 19:06:10 862

原创 Kafka系列(一) 基本概念(概述、设计、集群)

1、概述Kafka是一种消息中间件。举个例子,一个网站在用户进行注册的时候,后台的操作包括发送邮箱、写入用户表、写入日志等等,但是一般都不会等这些完全处理完才告诉你注册成功。这一系列的操作通常是异步的。但是异步跟消息中间件有什么联系呢?我们试想一下,假如没有消息中间件,后台操作的顺序假设是(1)写入用户表(2)写入日志(3)发送邮箱如果系统在写入用户表之后,异常重启,或者需要更新(...

2019-08-29 17:40:46 437

原创 Golang对Redis的常用操作

Redis操作package redisimport ( "fmt" "github.com/go-redis/redis" "time")type clientRedis struct { *redis.Client}/* 获取一个*redis.Client */func NewRds(addr, password string, DB, poolSize int...

2019-07-17 14:58:02 294

原创 Golang编写规范

Go语言编写规范声明空的slice应使用下面的格式var t []string/* 原因: var t []string 声明了一个nil slice t := []string{} 声明的是一个长度为0的非nil slice*/打印输出//错误字符串不应该大写,应该写成:fmt.Errorf("failed to write data")//而...

2019-07-17 14:56:01 258

原创 Docker基础一篇就足够

Docker简介虚拟机实现了硬件上的虚拟,而Docker则实现了操作系统级别的虚拟;其应用场景:Web应用的自动化打包和发布;自动化测试和持续集成、发布;在服务型环境中部署和调整数据库或其他的后台应用;当运行容器时,使用的镜像如果在本地不存在,docker就会自动从docker镜像仓库中下载,默认是从Docker Hub公共镜像源下载原理Docker引擎如下图...

2019-04-22 16:48:17 362

原创 随笔记录:三个月的实习

好久没有更新过博客了,自己总想写点什么,但是总感觉那种想法隐隐约约,写不出来,下不了笔。今天就挑一个三个月实习的主题,记录一下吧。 实习之前:秋招大四开学前从长沙的比赛中夺得省银,那个时候感觉心里终于舒了一口气。三年了,自己的ACM之路因此也走到了尾声。我也算一个对自己要求比较高,越是困难越要去尝试的人吧。以至于到后来整个九月份,都把精力放在了秋招求职上。从长沙回来之后,我通过牛客网平...

2019-01-24 20:34:23 1528 2

原创 二叉树遍历(递归、非递归)

简要概述前序遍历:先输出父节点,再输出左孩子节点,最后输出右孩子节点;中序遍历:先输出左孩子节点,再输出父节点,最后输出右孩子节点;后序遍历:先输出左孩子节点,再输出右孩子节点,最后输出父节点; 递归实现如果对递归的思想还不是很清楚,建议博客入门递归算法入门#include&lt;iostream&gt;#include&lt;stack&gt;using nam...

2018-12-18 00:17:13 308 2

原创 命令行扩展小记

Mac下取消homebrew自动更新export HOMEBREW_NO_AUTO_UPDATE=true查看端口占用情况lsof -i tcp:port远程连接ssh user@ip -p port远程文件传输scp -P port 本地文件 user@ip:目录地址在Mac下编译main.go所生成的文件,如果需要在Linux环境下运行,则需以下命令...

2018-12-11 18:42:41 315

原创 Vim常用的简单命令操作

三种模式:命令模式、插入模式、编辑模式输入vim/vi filename 进入文本的命令模式输入i/a/o 进入文本的插入模式输入:[cmd] 进入文本的编辑模式常用命令1、插入命令a/i 在光标所在字符后/前插入A/I 在光标所在行尾/首插入o 在光标下插入新行O 在光标上插入新行2、定位命令:set nu/nonu 设置/取消行号gg/G ...

2018-12-09 21:55:43 278

原创 保持初心,继续前行 -- 做一名程序员容易,但做一名好程序员难

大纲1、学习传统的算法与数据结构2、为什么计算机基础如此重要?3、作为一个后端工程师,如何规划自己?4、在每天的工作之中保持一颗学习的心态5、真正的热爱,才能保持初心6、写给培训班出来的一些话 正文1、学习传统的算法与数据结构15年我开始接触ACM,进了校队,利用自己蹩脚的C语言基础在HDU上刷题。当时并没有多大的概念,也不知道算法与数据结构在实际应用中有什...

2018-12-09 14:16:30 2492 3

原创 前端学习(二) HTML表格

一、表格的基本介绍1、表格的基本元素:表格、行、单元格&lt;table&gt; 表格&lt;tr&gt; 行&lt;td&gt; 普通单元格 &lt;th&gt; 表头单元格(有加粗和居中效果)2、基本部分:表头、表格主体、表格脚注&lt;thead&gt;表格的头(放标题之类的内容)&lt;tbody&gt;表格的主题(放数据主体)&lt;tfoot&gt;

2018-12-02 16:45:34 359 1

Fabric_源码分析.pdf

Hyperledger Fabric源码1.0版本的流程全解析,包括链码启动、Peer启动、Peer与链码交互、Endorser背书流程、Orderer启动、Orderer与Kafka集群交互等等内容

2020-05-08

字符串基本知识点讲解

对KMP算法的详细讲解(私密材料),以及Manacher算法的经典讲述。

2018-02-09

基础数据结构总结

基础数据结构的知识点的讲解、总结,包括栈、队列、二叉树、图等。

2018-02-09

动态规划总结

ACM中基础动态规划的各类知识点讲述、总结。其中包括基础DP、背包问题、数位DP、概率DP等。

2018-02-09

线段树矩形面积并讲解

ACM中对于矩形面积并用线段树+离散化+ 扫描线一类问题求解

2018-02-09

空空如也

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

TA关注的人

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