-
使用OAuth打造webapi认证服务供自己的客户端使用(二)
所属栏目:[大数据] 日期:2021-07-06 热度:60
在上一篇”使用OAuth打造webapi认证服务供自己的客户端使用“的文章中我们实现了一个采用了OAuth流程3-密码模式(resource owner password credentials)的WebApi服务端。今天我们来实现一个js+html版本的客户端。 一、angular客户端 angular版本的客户端代[详细]
-
使用Domain-Driven创建Hypermedia API
所属栏目:[大数据] 日期:2021-07-06 热度:62
使用Domain-Driven创建Hypermedia API 在现实世界中我们会遇到各种各样的复杂场景,没有一种API设计方式可以应对所有的场景。区别于”Consumer-Driven Contract”,本文将描述另外一种设计API的方式:Domain-Driven API。这不是API设计的标准方法,但是也许[详细]
-
玩转Asp.net MVC 的八个扩展点
所属栏目:[大数据] 日期:2021-07-06 热度:68
MVC模型以低耦合、可重用、可维护性高等众多优点已逐渐代替了WebForm模型。能够灵活使用MVC提供的扩展点可以达到事半功倍的效果,另一方面Asp.net MVC优秀的设计和高质量的代码也值得我们去阅读和学习。 本文将介绍Asp.net MVC中常用的八个扩展点并举例说明[详细]
-
DIP原则、IoC以及DI
所属栏目:[大数据] 日期:2021-07-06 热度:185
一、DIP原则 高层模块不应该依赖于底层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 该原则理解起来稍微有点抽象,我们可以将该原则通俗的理解为: "依赖于抽象” 。 该规则告诉我们,程序中所有的依赖关系都应该终止于 抽象类[详细]
-
领域驱动设计之单元测试最佳实践(二)
所属栏目:[大数据] 日期:2021-07-06 热度:195
领域驱动设计之单元测试最佳实践(一) ? 介绍完了DDD案例,我们终于可以进入主题了,本方案的测试代码基于Xunit编写,断言组件采用了FluentAssertions,类似的组件还有Shouldly。另外本案例使用了Code Contracts for .NET,如果不安装此插件,可能有个别测试[详细]
-
继承结构的另类实现方式
所属栏目:[大数据] 日期:2021-07-06 热度:63
不知从何时起,我不太轻易去设计抽象类了,一方面是因为我写的业务确实没有设计抽象类的需求,另一方面则基于以下三个考虑: 1、面向对象编程中建议多使用“组合”而不是使用“抽象”,原因在于“组合”更加灵活。 2、因为要公用一个“方法”,就迫不及待的[详细]
-
领域驱动设计之单元测试最佳实践(一)
所属栏目:[大数据] 日期:2021-07-06 热度:97
领域驱动设计之单元测试最佳实践(二) ? 一直以来,我试图找到一种有效的单元测试模式,使得“单元测试”真正能够在团队中流行起来,让单元测试不再是走过场,而是让单元测试切切实实成为提高代码质量的途径。 本文将描述一种以EF Code First模式实现的领域驱[详细]
-
使用NServiceBus开发分布式应用
所属栏目:[大数据] 日期:2021-07-06 热度:166
系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)——企业服务总线。 NServicebus官方地址:http://particular.net/ git: https://github.com/Particular/NServiceB[详细]
-
使用Masstransit开发基于消息传递的分布式应用
所属栏目:[大数据] 日期:2021-07-06 热度:195
Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用。 值得一提的是Masstransit的源码写的非常优秀,值得每个想提高自己编程能力的.Net选手阅读,整个代码[详细]
-
[翻译]理解Ruby中的blocks,Procs和lambda
所属栏目:[大数据] 日期:2021-07-06 热度:180
原文出处:Understanding Ruby Blocks,Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引起误解的特性。 这有可能是因为Ruby使用相当独特的方式来处理闭包。Ruby有四种处理闭包的方式,每一种方式都稍有点[详细]
-
go中string是如何实现的呢
所属栏目:[大数据] 日期:2021-07-06 热度:126
go中string是如何实现的呢 前言 实现 go语言中的string是不可变的 []byte转string string转[]byte 字符串的拼接 +方式进行拼接 fmt 拼接 Join 拼接 buffer 拼接 builder 拼接 测试下几种方法的性能 字符类型 byte rune 内存泄露的场景 string和[]byte如何取[详细]
-
go中context源码解读
所属栏目:[大数据] 日期:2021-07-06 热度:192
context 前言 什么是context 为什么需要context呢 context底层设计 context的实现 几种context emptyCtx cancelCtx timerCtx valueCtx 防止内存泄露 总结 参考 context 前言 之前浅读过,不过很快就忘记了,再次深入学习下。 本文的是在 go version go1.13.1[详细]
-
go中sync.Cond源码解读
所属栏目:[大数据] 日期:2021-07-06 热度:95
sync.Cond 前言 什么是sync.Cond 看下源码 Wait Signal Broadcast 总结 sync.Cond 前言 本次的代码是基于 go version go1.13.15 darwin/amd64 什么是sync.Cond Go语言标准库中的条件变量 sync.Cond ,它可以让一组的 Goroutine 都在满足特定条件时被唤醒。[详细]
-
Go中sync.map使用小结
所属栏目:[大数据] 日期:2021-07-06 热度:165
sync.map 前言 深入了解下 查看下具体的实现 Load Store Delete LoadOrStore 总结 流程图片 参考 sync.map 前言 Go中的map不是并发安全的,在Go1.9之后,引入了 sync.Map ,并发安全的map。 深入了解下 对于map,我们常用的做法就是加锁。 对于 sync.Map 这些[详细]
-
go中errgroup源码解读
所属栏目:[大数据] 日期:2021-07-06 热度:145
errgroup 前言 如何使用 实现原理 WithContext Go Wait 错误的使用 总结 errgroup 前言 来看下errgroup的实现 如何使用 func main() {var eg errgroup.Groupeg.Go(func() error {return errors.New("test1")})eg.Go(func() error {return errors.New("test2"[详细]
-
go中channel源码剖析
所属栏目:[大数据] 日期:2021-07-06 热度:92
channel 前言 设计的原理 共享内存 csp channel channel的定义 源码剖析 环形队列 创建 写入数据 读取数据 channel的关闭 优雅的关闭 M个receivers,一个sender 一个receiver,N个sender M个receiver,N个sender 关闭的 channel 仍能读出数据 控制goroutine[详细]
-
go中sync.Once源码解读
所属栏目:[大数据] 日期:2021-07-06 热度:159
sync.Once 前言 sync.Once的作用 实现原理 总结 sync.Once 前言 本次的代码是基于 go version go1.13.15 darwin/amd64 sync.Once的作用 根据名字就大致能猜到这个函数的作用,就是使用 sync.once 的对象只能执行一次。 我们在 errgroup 就能看到它的身影 typ[详细]
-
silce的扩容,截取,使用规范总结
所属栏目:[大数据] 日期:2021-07-06 热度:163
切片 什么是slice slice的创建使用 slice使用的一点规范 slice和数组的区别 slice的append是如何发生的 复制Slice和Map注意事项 接收 Slice 和 Map 作为入参 返回 Slice 和 Map 切片的截取 不发生扩容情况下修改新切片 发生扩容情况下修改新的切片 总结 参考[详细]
-
GO中的GC
所属栏目:[大数据] 日期:2021-07-06 热度:77
go中的垃圾回收 前言 垃圾回收 go中的垃圾回收方式 三色标记法 根对象 STW 屏障技术 插入屏障 删除屏障 混合写屏障 GO中GC的流程 GC的触发时机 如果内存分配速度超过了标记清除的速度怎么办? 如何观察GC GC如何优化 GO中GC的演进过程 总结 参考 go中的垃圾[详细]
-
使用protobuf生成代码import包找不到
所属栏目:[大数据] 日期:2021-07-06 热度:109
protobuf使用import导入包找不到 前言 解决方案 protobuf使用import导入包找不到 前言 使用 protobuf 生成go代码,发现 protobuf 中一个import引用找不到 protobuf代码 Syntax = "proto3";package main;import "github.com/mwitkow/go-proto-validators/vali[详细]
-
go中waitGroup源码解读
所属栏目:[大数据] 日期:2021-07-06 热度:71
waitGroup源码刨铣 前言 WaitGroup实现 noCopy state1 Add Wait 总结 参考 waitGroup源码刨铣 前言 学习下waitGroup的实现 本文是在 go version go1.13.15 darwin/amd64 上进行的 WaitGroup实现 看一个小demo func waitGroup() {var wg sync.WaitGroupwg.Add[详细]
-
字符编码-字库表,字符集,字符编码
所属栏目:[大数据] 日期:2021-07-06 热度:132
字符编码笔记 前言 字符类型 什么是字符集 字库表 编码字符集(字符集) 字符编码(编码方式) ASCII 码 Unicode Unicode和ASCII的区别 UTF-8编码 UTF-8和Unicode的关系 乱码 总结 参考 字符编码笔记 前言 最近在看go中string的源码,发现字符中的几个概念还是有[详细]
-
GO中的channel使用小结
所属栏目:[大数据] 日期:2021-07-06 热度:103
go关键字可以用来开启一个goroutine(协程))进行任务处理,而多个任务之间如果需要通信,就需要用到channel了。 func testSimple(){intChan := make(chan int)go func() {intChan - 1}()value := - intChanfmt.Println("value : ",value)} ? 上面这个简单的例[详细]
-
excel中存储的时间的类型是什么
所属栏目:[大数据] 日期:2021-07-06 热度:51
做了一个excel导入数据的功能,其中需要导入时间,默认到天。在开发过程中发现了一个问题, 导入的数据解析到的时间格式是 02-03-19,发现年份前面的两位数丢失了。这当然是导入数据 的解析包的问题。深入代码里面查看,发现excel解析到的原始数据是一个数字[详细]
-
go module学习笔记
所属栏目:[大数据] 日期:2021-07-06 热度:88
go module了解 前言 Go 的包管理方式是逐渐演进的, 最初是 monorepo 模式,所有的包都放在 GOPATH 里面,使用类似命名 空间的包路径区分包,不过这种包管理显然是有问题,由于包依赖可能会引入破坏性更新,生产环境和测试环 境会出现运行不一致的问题。 从[详细]