事件驱动的微服务-事件驱动设计

本篇是“事件驱动的微服务”系列的第二篇,主要讲述事件驱动设计。如果想要了解总体设计,请看第一篇"事件驱动的微服务-总体设计" 程序流程 我们通过一个具体的例子来讲解事件驱动设计。 本文中的程序有两个微服务,一个是订单服务(Order Service), 另一个是支付服务(Payment Service)。用户调用订单服务的用例createOrder()来创建订单,创建之后的订单暂时还没有支付信息,订单服务然后发布命令(Command)给支付服务,支付服务完成支付,发送支付完成(Payment C...阅读全文

Segmentfault 2020-04-18 09:32:34 倚天码农

Go 语言踩坑记——panic 与 recover

题记   Go 语言自发布以来,一直以高性能、高并发著称。因为标准库提供了 http 包,即使刚学不久的程序员,也能轻松写出 http 服务程序。   不过,任何事情都有两面性。一门语言,有它值得骄傲的有点,也必定隐藏了不少坑。新手若不知道这些坑,很容易就会掉进坑里。《 Go 语言踩坑记》系列博文将以 Go 语言中的 panic 与 recover 开头,给大家介绍笔者踩过的各种坑,以及填坑方法。 初识 panic 和 recover panic   panic 这个词,在英语中具有恐慌、恐慌的...阅读全文

掘金 2020年04月15日 初一公主奶爸

Go语言(十二)web编程

web编程 web编程基础 web的工作方式 http协议介绍 http请求体 http响应体 Web程序开发 基于“net/http”封装的web服务相关的功能 使用简单 func sayhelloName(w http.ResponseWriter,r *http.Request) { r.ParseForm() //参数解析 fmt.Printf("r.Form:%v\n",r.Form) fmt.Printf("Path:%v\n",r.URL.Path) fmt.Printf("Sch...阅读全文

51CTO博客 2020-04-15 20:25:30 wx5b285b48ed74e

抖音服务端招聘!北上深杭均岗位!

机遇与挑战 我们是抖音国内产品研发团队,我们需要支撑一个数亿日活用户的产品研发工作,这包括各业务方向的功能演进和迭代、核心业务系统建设、业务架构升级、运营支撑系统建设等。 我们面对的是亿级日活 X 亿级日投稿 X 千亿级别的在线业务数据,我们需要在国内和海外的跨州多数据中心多活的环境下构建应用系统。 面对每年都翻倍的业务增长,我们需要持续地优化技术方案和架构,在有限的计算资源下提供更好的用户体验。我们有大量的核心系统需要被重新设计以更好的面对未来更大的业务挑战。 挑战即机遇,在应对日益扩大的问题...阅读全文

用Golang实现一个服务器性能实时监控程序

学习一下Golang,语法不过关还在慢慢摸索 基于gopsutil写了一个可以在不同os环境定时运行的监控程序,可以定期记录该服务器配置、实时CPU、实时内存等信息。后期本人应用主要是通过Web方式采集并可视化多个服务器的性能信息,结合服务请求数据、提供服务器性能瓶颈和扩展的基础数据支撑,以下为生成的JSON格式文件样例(按日期生成Log文件) image.png image.png 目前程序默认间隔时间为15秒,空置时间为每天21点-次日8点,需要调整的可以自行修改 或直接下载 源码地址阅读全文

Go 和 PHP 根据目标值计算两数之和

原文链接:go letcode,作者:三斤和他的喵 php 代码个人原创 两数之和(Two Sum) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。示例: 给定 nums = [2, 7, 11, 15],target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]来源:力扣 简单来说就是给定一个数组,让你找到和为 target 的两个元素的索引。 解题思路 主要有 两种解...阅读全文

Segmentfault 2020-04-18 07:32:33 hxd_

Go 和 PHP 实现计算最长公共前缀

原文链接:go letcode,作者:三斤和他的喵 php 代码个人原创 最长公共前缀(Longest-Common-Prefix) 题干如下: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1: 输入: ["flower","flow","flight"] 输出: "fl"示例 2: 输入: ["dog","racecar","car"] 输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。来源:力扣 解题思路 首先我们...阅读全文

Segmentfault 2020-04-17 19:32:33 hxd_

Go 和 PHP 基于一组数计算盛最多水的容器

原文链接:go letcode,作者:三斤和他的喵 PHP 代码个人原创 盛最多水的容器(Container-With-Most-Water) 题干如下: 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4...阅读全文

Segmentfault 2020-04-17 16:32:35 hxd_

在个人博客实现「小课」系统

程序员这个行业,是一个终身学习的行业,经常会有新技术出现。我是一个很爱学习的人,喜欢尝鲜。每次想去学习一项新技术的时候,总是苦于找不到合适的入门教程。于是有了想自己写个小课系统的想法:希望能通过写一系列的文章,组织成一门小课,帮助想学习某项技术的同学快速入门。 有了这个想法之后,我开始准备搭建小课平台,一开始想的是做一个前后端分离的网站,后端用 Go 写 API,前端用 vue 写页面。 使用 vue + ElementUI 搭建出来的第一个版本长这样: 写完第一个版本之后,仔细想了一下,如果要...阅读全文

Java是未来的第一编程语言吗?

一、前言 Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言。Java语言具有什么魅力?想必这都是已经为大多数人们所熟知的了,不值得过多赘述。而Java语言发展至今,面对发展势头迅猛又十分简单易学的python,以及各种层出不穷的高级语言,Java程序员的份额已经逐步下降,那它是否还能在未来保持领先的优势呢?本文就主要从Java语言所不擅长的领域,以及它在自己的领土内受到的对手入手,聊一聊Java语言在未来所面临的挑战。 二、Java帝国的今天 2.1 ...阅读全文

Segmentfault 2020-04-17 10:32:33 黄钰朝

Go语言之GRPC

1.RPC的基本知识介绍:RPC叫做远程调用框架(Remote Procedure Call),远程调用原理如下所示:比如 A (client) 调用 B (server) 提供的remoteAdd方法: 首先,A与B之间建立一个TCP连接; 然后,A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去; 接着,B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回; 最...阅读全文

Go语言中文网 2020-04-16 09:12:14 ZhDavis

Go语言之性能分析工具pprof

一、pprof的概述:pprof:是Go的性能分析工具,在程序运行过程中,可以记录程序的运行信息,可以是CPU使用情况、内存使用情况、goroutine运行情况等,Go语言已经将pprof 封装在包net/http/pprof中。对于pprof来说主要用于:CPU分析、内存分析、阻塞分析、互斥锁分析。查看这些指标有两种方式,一种是浏览器方式,一种是命令行方式。浏览器方式:通过 http://pprofIPAddress:port/debug/pprof/ 来访问,访问之后的界面如下所示:命令行方...阅读全文

Go语言中文网 2020-04-16 09:10:34 ZhDavis

在个人博客实现「小课」系统

程序员这个行业,是一个终身学习的行业,经常会有新技术出现。我是一个很爱学习的人,喜欢尝鲜。每次想去学习一项新技术的时候,总是苦于找不到合适的入门教程。于是有了想自己写个小课系统的想法:希望能通过写一系列的文章,组织成一门小课,帮助想学习某项技术的同学快速入门。 有了这个想法之后,我开始准备搭建小课平台,一开始想的是做一个前后端分离的网站,后端用 Go 写 API,前端用 vue 写页面。 使用vue+ElementUI搭建出来的第一个版本长这样: 写完第一个版本之后,仔细想了一下,如果要写好这个...阅读全文

Segmentfault 2020-04-17 15:32:37 艾逗笔

【golang】切片扩容原理,完成入栈操作

我们都知道,切片是对一段数组的引用,其内部有指向引用数组首地址指针,长度与容量三个部分组成。其长度相对于数组是可变的。 通过append可以给切片添加元素,如果切片长度超过容量时候,切片会进行自动扩容(扩容过程通过拷贝实现的),需要注意的当切片扩容时,其会新开一块内存来存储扩容后的切片,相比前后其内存地址已经改变,这在引用中是一个易错点 切片扩容机制:当原切片长度小于1024时,新切片的容量会直接翻倍。而当原切片的容量大于等于1024时,会反复地增加25%,直到新容量超过所需要的容量 下面演示一...阅读全文

简书 2020-04-16 03:32:48 dongzaidong

Go Web 编程--使用 bcrpyt 哈希用户密码

上一期的文章《我们应该如何保护用户的密码》里我们介绍了bcrypt相较于MD5,SHA-1...SHA-256等哈希算法更适合用于做密码的哈希,原因就是bcrypt算法哈希字符串的速度远远慢于上面列举的那些算法。这样即使整个用户密码库被用户盗用后想要通过彩虹表和暴力破解的方法猜测出用户的密码代价会非常高昂。今天的文章里就主要来看一下bcrypt哈希的组成部分以及在Go语言里如何使用bcrypt对密码字符串进行哈希。 bcrypt哈希字符串的组成 bcrypt哈希由多个部分组成。这些部分用于确定创...阅读全文

简书 2020-04-16 03:32:48 KevinYan_a990

golang版本工具GVM 和包管理工具go mod原理讲解

一句话简介 GVM(Go Version Manager) 下载多版本golang到本地缓存,通过切换环境变量指向不同的Golang版本 Go mod 对 go modules 的依赖管理,使得不同项目中依赖不同版本的同一个库更简单。 进一步介绍 GVM配置环境变量的原理 gvm配置路径 $ cat /Users/name/.gvm/scripts/gvm export GVM_ROOT=/Users/name/.gvm . $GVM_ROOT/scripts/gvm-default gvm配置...阅读全文

【golang】select{}中break的易错点

一个select语句用来选择哪个case中的发送或接收操作可以被立即执行。它类似于switch语句,但是它的case涉及到channel有关的I/O操作,阻塞监听IO操作 在项目中我们可能需要无限监听某个IO操作,在满足条件后跳出操作。如: tick := time.NewTicker(2 * time.Second) var a int for { select { case <-tick.C: a++ if a > 2 { break } } time.Sleep(time.Second *...阅读全文

简书 2020-04-16 03:32:48 dongzaidong

【golang】变量的stack与heap分配

堆栈定义 栈 stack:由操作系统自动释放,存放函数的参数值、局部变量等,更新速度快。 堆 heap:一般由程序员释放,在Golang中自动垃圾回收gc掉,存放全局变量、共享变量等。 golang 参数传递重点 使用值传递,该值存放在stack上,当return时候会自动释放。 使用引用传递,该值存放在heap上,需要gc。 使用引用传递,因为复制的是一份地址,减少大的结构体传递的内存占用。但因为存放在heap上需要垃圾回收掉,运行速度要比值传递慢。所以出来共享传递参数外,尽量值传递 gola...阅读全文

简书 2020-04-16 03:32:47 dongzaidong

Circle CI

概念 Jobs 任务是step的集合,单个任务必须指定一种executor executor type: executor type文档 在Docker映像内(docker) 在Linux虚拟机(VM)映像中(machine) 在macOS VM映像中(macos) 在Windows VM映像内(windows) version 2 jobs: build1: # job name docker: - image: buildpack-deps:trusty - image: postgres:...阅读全文

简书 2020-04-16 03:32:43 木子由

【Golang进阶】指针的详细讲解

指针是一个代表着某个内存地址的值, 这个内存地址往往是在内存中存储的另一个变量的值的起始位置. Go语言对指针的支持介于Java语言和 C/C++ 语言之间, 它既没有像Java那样取消了代码对指针的直接操作的能力, 也避免了 C/C++ 中由于对指针的滥用而造成的安全和可靠性问题. 指针地址和变量空间 Go语言保留了指针, 但是与C语言指针有所不同. 主要体现在: 默认值: nil. 操作符 & 取变量地址, * 通过指针访问目标对象. 不支持指针运算, 不支持 -> 运算符, 直接用 . 访...阅读全文

简书 2020-04-16 03:32:43 尹宁丶