手撸golang 基本数据结构与算法 图的最短路径 A*(A-Star)算法

缘起最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一)本系列笔记拟采用golang练习之A*(A-Star)算法A*(A-Star)算法也是一种在图中求解最短路径问题的算法, 由狄克斯特拉算法发展而来。 A*算法不仅会考虑从起点到候补顶点的距离, 还会考虑从当前所在顶点到终点的估算距离。 距离估算值越接近当前顶点到终点的实际值, A*算法的搜索效率也就越高. 当距离估算值小于实际距离时, 是一定可以得到正确答案的. A*算法在游戏编程中经常被用于计算敌人追赶玩家时的行动路线等. 摘自 ...阅读全文

Segmentfault 2021-03-05 17:32:34 ioly

rabbitmq实现延迟队列

大家有没有遇到过这样的场景,一个订单超过一个时间段未支付自动取消,退款申请一段时间未人工处理自动通过或者拒绝,这些场景都有一个特点,在一个事件发生之后,需要在固定的事件段以后处理另一个事件,如果使用定时任务,每秒扫描一次数据库,取出需要处理的事件数据。这样固然能实现这个需求,但是在数据量比较大的情况会对数据库造成不小的压力,而且这样显然不够优雅,这时候就需要一个延时队列。首先大家需要了解一下rabbitmq的死信队列,如果消息具备下面三个条件之一1.消息被否定确认2.消息的存活时间超过设置的最大...阅读全文

Segmentfault 2021-03-05 15:32:32 润雨冰雪

golang-熔断器

熔断器 go-zero在breaker里面基于google的sre算法实现了熔断器逻辑,并在redis等客户端操作的时候引入了熔断器 算法公式 image.png go-zero 实现了这个公式,并且作为底层组件很好被嵌入使用,在redis的调用就有很好的表现. 定义接口 底层组件实现该接口, 初始化breaker各属性对象,依赖对象数据类型定义的都是interface https://github.com/tal-tech/go-zero/blob/master/core/breaker/br...阅读全文

简书 2021-03-02 03:32:43 Best博客

2021-02-22

go使用踩过什么坑(for range,数据库连接defer close) 1.select是随机的还是顺序的?select的使用场景? select会随机选择一个可用通道做收发操作. 常用语gorotine的完美退出 golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作 每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作 2.Go语言局部变量分配在栈还是堆?深入分析 Go语言编译器会自动决定把一个变量放在栈还是放在堆. ...阅读全文

简书 2021-03-02 03:32:42 voidFan

火爆外网的 DGS 框架使用心得~

image Netflix 已开放其 Domain Graph Service(DGS)框架的源代码 ,该框架是为了方便整合 GraphQL 使用,用于简化 GraphQL 的实现。 image GraphQL 主要是作用于数据接口,比如前端后端交互。无需定义或修改后台 Controller、Service 等业务代码即可实现灵活的数据变更,客户端可以自由获取服务端事先定义好的数据,提高了交互接口的灵活性 组件依赖 graphql-dgs-spring-boot-starter <pre cla...阅读全文

简书 2021-03-02 03:32:42 Java斗帝之路

2020-03-01:给定一个非负数组arr,代表直方图。返回直方图的最大长方形面积。

2020-03-01:给定一个非负数组arr,代表直方图。返回直方图的最大长方形面积。 福哥答案2020-03-01: 单调栈,大压小。有代码。 代码用golang编写,代码如下: package main import ( "container/list" "fmt" ) func main() { arr := []int{3, 2, 4, 2, 5} fmt.Println(largestRectangleArea1(arr)) fmt.Println(largestRectangleAr...阅读全文

简书 2021-03-02 03:32:40 福大大架构师每日一题

leetcode304 二维区域和检索 - 矩阵不可变 golang

304. 二维区域和检索 - 矩阵不可变 解题思路 image.png 和昨天的一样,利用 sum[i][j]表示 num[0][0]+... nums[i-1][j-1]的数值即可 具体可以参考 https://www.jianshu.com/p/e11b76a1eb4f 注意点 做预处理的时候,先按照行处理,再按照列处理。一定切记不可重复计算。 统计区域和 因为 sum[r][c] 被重复减掉了,需要加回来。 代码 type NumMatrix struct { A [][]int } fu...阅读全文

简书 2021-03-02 03:32:39 lucasgao

golang实现微信支付v2版本

一、准备阶段配置密钥 、获取证书官方文档 https://kf.qq.com/faq/180830U... 有部分接口需要用到证书 私钥获取后有三个文件apiclient_key.p12 apiclient_cert.pem apiclient_key.pem本次示例程序中,使用的是文件 apiclient_cert.pem apiclient_key.pem内容二、发起微信支付常量const appId = "" // 小程序或者公众号的appid const mchId = "" // 微信...阅读全文

Segmentfault 2021-03-04 23:32:34 快乐源泉

go-锁机制

Golang中的锁机制主要包含互斥锁和读写锁 互斥锁 互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。 func mutex() { var mu sync.Mutex mu.Lock() fmt.Println("locked") mu.Unlock() } defer实现 func mutex() { var mu sync.Mutex mu.Lock() defer mu.Unlock() fmt.Println("...阅读全文

简书 2021-03-01 16:34:16 林桉

golang 控制重定向

在Client的字段中,有一个 CheckRedirect,此字段就是用来控制重定向的函数,如果没有定义此字段的话,将会使用默认的 defaultCheckRedirect 方法。 默认的转发策略是最多转发10次。 在转发的过程中,某一些包含安全信息的Header,比如Authorization、WWW-Authenticate、Cookie等,如果转发是跨域的,那么这些Header不会复制到新的请求中。 http的重定向判断会默认处理以下状态码的请求: 301 (Moved Permanent...阅读全文

简书 2021-03-01 16:34:15 C的高圆圆

使用Prometheus搞定微服务监控

最近对服务进行监控,而当前监控最流行的数据库就是 Prometheus,同时 go-zero 默认接入也是这款数据库。今天就对 go-zero 是如何接入 Prometheus ,以及开发者如何自己定义自己监控指标。监控接入go-zero 框架中集成了基于 prometheus 的服务指标监控。但是没有显式打开,需要开发者在 config.yaml 中配置:Prometheus: Host: 127.0.0.1 Port: 9091 Path: /metrics如果开发者是在本地搭建 Prome...阅读全文

Segmentfault 2021-03-04 21:32:33 kevinwan

手撸golang 基本数据结构与算法 图的最短路径  狄克斯特拉算法

缘起 最近阅读<<我的第一本算法书>>(【日】石田保辉;宫崎修一) 本系列笔记拟采用golang练习之 狄克斯特拉算法 与贝尔曼-福特算法类似, 狄克斯特拉(Dijkstra)算法也是求解最短路径问题的算法, 使用它可以求得从起点到终点的路径中权重总和最小的那条路径。 比起需要对所有的边都重复计算权重和更新权重的贝尔曼-福特算法, 狄克斯特拉算法多了一步选择顶点的操作, 这使得它在求最短路径上更为高效。 如果闭环中有负数权重,就不存在最短路径。 贝尔曼-福特算法可以直接认定不存在最短路径, 但在...阅读全文

简书 2021-03-01 13:32:44 老罗话编程

Spring Boot使用JSR-380进行校验

介绍 JSR-380是 J2EE 的一个规范,用于校验实体属性,它是JSR-303的升级版,在 Spring Boot 中可以基于它优雅实现参数校验。 示例 在没有使用JSR-380之前,我们一般都会将参数校验硬编码在controller类中,示例: public Result add(@RequestBody User user){ if(StringUtils.isBlank(user.getName())){ return Result.error("用户名不能为空"); } // ......阅读全文

简书 2021-03-01 13:32:44 mklee