-
领域驱动设计之单元测试最佳实践(二)
所属栏目:[大数据] 日期:2021-05-21 热度:169
领域驱动设计之单元测试最佳实践(一) ? 介绍完了DDD案例,我们终于可以进入主题了,本方案的测试代码基于Xunit编写,断言组件采用了FluentAssertions,类似的组件还有Shouldly。另外本案例使用了Code Contracts for .NET,如果不安装此插件,可能有个别测试[详细]
-
领域驱动设计之单元测试最佳实践(一)
所属栏目:[大数据] 日期:2021-05-21 热度:126
领域驱动设计之单元测试最佳实践(二) ? 一直以来,我试图找到一种有效的单元测试模式,使得“单元测试”真正能够在团队中流行起来,让单元测试不再是走过场,而是让单元测试切切实实成为提高代码质量的途径。 本文将描述一种以EF Code First模式实现的领域驱[详细]
-
使用NServiceBus开发分布式应用
所属栏目:[大数据] 日期:2021-05-21 热度:100
系列主题:基于消息的软件架构模型演变 NServiceBus 是一个.Net平台下开源的消息服务框架,这类产品有时也被称作ESB(Enterprise Service Bus)——企业服务总线。 NServicebus官方地址:http://particular.net/ git: https://github.com/Particular/NServiceB[详细]
-
使用Masstransit开发基于消息传递的分布式应用
所属栏目:[大数据] 日期:2021-05-21 热度:109
Masstransit作为.Net平台下的一款优秀的开源产品却没有得到应有的关注,这段时间有机会阅读了Masstransit的源码,我觉得我有必要普及一下这个框架的使用。 值得一提的是Masstransit的源码写的非常优秀,值得每个想提高自己编程能力的.Net选手阅读,整个代码[详细]
-
[翻译]理解Ruby中的blocks,Procs和lambda
所属栏目:[大数据] 日期:2021-05-21 热度:188
原文出处:Understanding Ruby Blocks,Procs and Lambdas blocks,Procs和lambda(在编程领域被称为闭包)是Ruby中很强大的特性,也是最容易引起误解的特性。 这有可能是因为Ruby使用相当独特的方式来处理闭包。Ruby有四种处理闭包的方式,每一种方式都稍有点[详细]
-
go中string是如何实现的呢
所属栏目:[大数据] 日期:2021-05-21 热度:166
go中string是如何实现的呢 前言 实现 go语言中的string是不可变的 []byte转string string转[]byte 字符串的拼接 +方式进行拼接 fmt 拼接 Join 拼接 buffer 拼接 builder 拼接 测试下几种方法的性能 字符类型 byte rune 内存泄露的场景 string和[]byte如何取[详细]
-
go中context源码解读
所属栏目:[大数据] 日期:2021-05-21 热度:55
context 前言 什么是context 为什么需要context呢 context底层设计 context的实现 几种context emptyCtx cancelCtx timerCtx valueCtx 防止内存泄露 总结 参考 context 前言 之前浅读过,不过很快就忘记了,再次深入学习下。 本文的是在 go version go1.13.1[详细]
-
go中sync.Cond源码解读
所属栏目:[大数据] 日期:2021-05-21 热度:54
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-05-21 热度:54
sync.map 前言 深入了解下 查看下具体的实现 Load Store Delete LoadOrStore 总结 流程图片 参考 sync.map 前言 Go中的map不是并发安全的,在Go1.9之后,引入了 sync.Map ,并发安全的map。 深入了解下 对于map,我们常用的做法就是加锁。 对于 sync.Map 这些[详细]
-
go中errgroup源码解读
所属栏目:[大数据] 日期:2021-05-21 热度:118
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中的读写锁源码刨析
所属栏目:[大数据] 日期:2021-05-21 热度:72
读写锁 基本结构 RLock RUnlock Lock Unlock 问题要论 写操作是如何阻止写操作的 写操作是如何阻止读操作的 读操作是如何阻止写操作的 为什么写锁定不会被饿死 参考 读写锁 基本结构 写锁需要阻塞写锁:一个协程拥有写锁时,其他协程写锁定需要阻塞 写锁需要[详细]
-
go中channel源码剖析
所属栏目:[大数据] 日期:2021-05-21 热度:138
channel 前言 设计的原理 共享内存 csp channel channel的定义 源码剖析 环形队列 创建 写入数据 读取数据 channel的关闭 优雅的关闭 M个receivers,一个sender 一个receiver,N个sender M个receiver,N个sender 关闭的 channel 仍能读出数据 控制goroutine[详细]
-
silce的扩容,截取,使用规范总结
所属栏目:[大数据] 日期:2021-05-21 热度:165
切片 什么是slice slice的创建使用 slice使用的一点规范 slice和数组的区别 slice的append是如何发生的 复制Slice和Map注意事项 接收 Slice 和 Map 作为入参 返回 Slice 和 Map 切片的截取 不发生扩容情况下修改新切片 发生扩容情况下修改新的切片 总结 参考[详细]
-
go中的sync.pool源码剖析
所属栏目:[大数据] 日期:2021-05-21 热度:166
sync.pool sync.pool作用 使用 适用场景 案例 源码解读 GET pin pinSlow getSlow Put poolChain popHead pushHead pack/unpack popTail 缓存的回收 总结 参考 sync.pool sync.pool作用 有时候我们为了优化GC的场景,减少并复用内存,我们可以使用 sync.Pool[详细]
-
GO中的GC
所属栏目:[大数据] 日期:2021-05-21 热度:97
go中的垃圾回收 前言 垃圾回收 go中的垃圾回收方式 三色标记法 根对象 STW 屏障技术 插入屏障 删除屏障 混合写屏障 GO中GC的流程 GC的触发时机 如果内存分配速度超过了标记清除的速度怎么办? 如何观察GC GC如何优化 GO中GC的演进过程 总结 参考 go中的垃圾[详细]
-
go中waitGroup源码解读
所属栏目:[大数据] 日期:2021-05-21 热度:185
waitGroup源码刨铣 前言 WaitGroup实现 noCopy state1 Add Wait 总结 参考 waitGroup源码刨铣 前言 学习下waitGroup的实现 本文是在 go version go1.13.15 darwin/amd64 上进行的 WaitGroup实现 看一个小demo func waitGroup() {var wg sync.WaitGroupwg.Add[详细]
-
什么是内存对齐,go中内存对齐分析
所属栏目:[大数据] 日期:2021-05-21 热度:197
内存对齐 什么是内存对齐 为什么需要内存对齐 减少次数 保障原子性 对齐系数 对齐规则 总结 参考 内存对齐 什么是内存对齐 弄明白什么是内存对齐的时候,先来看一个demo type s struct {Bool boolByte byteIn32 int32Int64 int64Int8 int8}func main() {fmt.[详细]
-
字符编码-字库表,字符集,字符编码
所属栏目:[大数据] 日期:2021-05-21 热度:50
字符编码笔记 前言 字符类型 什么是字符集 字库表 编码字符集(字符集) 字符编码(编码方式) ASCII 码 Unicode Unicode和ASCII的区别 UTF-8编码 UTF-8和Unicode的关系 乱码 总结 参考 字符编码笔记 前言 最近在看go中string的源码,发现字符中的几个概念还是有[详细]
-
excel中存储的时间的类型是什么
所属栏目:[大数据] 日期:2021-05-21 热度:112
做了一个excel导入数据的功能,其中需要导入时间,默认到天。在开发过程中发现了一个问题, 导入的数据解析到的时间格式是 02-03-19,发现年份前面的两位数丢失了。这当然是导入数据 的解析包的问题。深入代码里面查看,发现excel解析到的原始数据是一个数字[详细]
-
go中bufio使用小结
所属栏目:[大数据] 日期:2021-05-21 热度:128
bufio 前言 例子 bufio 源码解析 Reader对象 实例化 ReadSlice ReadString ReadLine Peek Scanner Give me more data Error Writer 对象 实例化 Available Buffered Flush 写入的方法 ReadWriter 总结 bufio 前言 最近操作文件,进行优化使用到了 bufio 。好[详细]
-
go module学习笔记
所属栏目:[大数据] 日期:2021-05-21 热度:70
go module了解 前言 Go 的包管理方式是逐渐演进的, 最初是 monorepo 模式,所有的包都放在 GOPATH 里面,使用类似命名 空间的包路径区分包,不过这种包管理显然是有问题,由于包依赖可能会引入破坏性更新,生产环境和测试环 境会出现运行不一致的问题。 从[详细]
-
go中内存泄露的发现与排查
所属栏目:[大数据] 日期:2021-05-21 热度:154
内存泄露 前言 场景 暂时性内存泄露 永久性内存泄露 goroutine内存泄露 发送端channel满了 接收端消费的channel为空 生产者消费者异常退出,导致channel满了或者channel为空 channel未初始化 未添加超时处理 使用pprof排查 什么是pprof 浏览器查看 命令行模[详细]
-
go 中的WaitGroup
所属栏目:[大数据] 日期:2021-05-21 热度:142
wait_group sync.WaitGroup 类型是并发安全的,也是开箱就能用的。 该类型有三个指针方法,即:Add,Done和Wait. sync.WaitGroup是一个结构体类型。其中一个代表计数的字节数组类型的字段,该 字段用4字节表示给定计数,另4字节表示等待计数。当一个sync.Wait[详细]
-
go中的线程的实现模型-P G M的调度
所属栏目:[大数据] 日期:2021-05-21 热度:91
线程实现模型 ? go 中线程的实现是依靠 P G M M machine 的缩写。一个 M 代表一个内核线程,或称 “ 工作线程 ” P processor 的缩写。一个 P 代表执行一个 Go 代码片段所需要的资源(或称 “ 上下文环境 ” ) G goroutine 的缩写。一个 G 代表一段 Go 代码[详细]
-
go1.13errors的用法
所属栏目:[大数据] 日期:2021-05-21 热度:166
go1.13errors的用法 前言 基本用法 fmt.Errorf Unwrap errors.Is As 扩展 参考 go1.13errors的用法 前言 go 1.13发布了 error 的一些新的特性,那么就来探究学习下。 基本用法 fmt.Errorf 使用 fmt.Errorf 加上 %w 格式符来生成一个嵌套的 error ,它并没有[详细]