摘要:        
目录 引入 组合模式 源码 引入 在上一篇执行 _connectionDelegate 之后,HttpConnectionMiddleware 处理请求 return connection.ProcessRequestsAsync(_application); 在 HttpConnection 中调    
阅读全文
 
        
        posted @ 2022-01-06 23:04
郑子铭
阅读(342)
推荐(0)
        
 
		
    
        
        
摘要:        
目录 责任链模式 源码 责任链模式 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了 何时使用:在处理消息的时候以过滤很多道 使用场景: 有多个对象可以处理同一个请求,具体到哪个对象处理该请求由运行时刻    
阅读全文
 
        
        posted @ 2022-01-05 19:47
郑子铭
阅读(386)
推荐(1)
        
 
		
    
        
        
摘要:        
目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You Aren't Gonna Need It 你不会需要它的) CCP 共同闭包 CRP 共同复用 高    
阅读全文
 
        
        posted @ 2022-01-04 21:25
郑子铭
阅读(495)
推荐(2)
        
 
		
    
        
        
摘要:        
演化与完善整体概念 ASP .NET Core 整体概念推演 整体概念推演到具体的形式 ASP .NET Core 整体概念推演 ASP .NET Core 其实就是通过 web framework 处理 HTTP 请求并提供 HTTP 响应 web framework 由程序员使用,它包括 ASP    
阅读全文
 
        
        posted @ 2021-12-30 23:27
郑子铭
阅读(565)
推荐(2)
        
 
		
    
        
        
摘要:        
RGCA Requirement:从利益相关者获取需求 Goal:将需求转化为目标(功能意图) Concept:将目标扩展为完整概念 Architecture:将概念扩展为架构 目录 从利益相关者获取需求 将需求转化为目标 将目标扩展为完整概念 从利益相关者获取需求 有哪些类型的利益相关者 利益相关    
阅读全文
 
        
        posted @ 2021-12-29 22:48
郑子铭
阅读(255)
推荐(0)
        
 
		
    
        
        
摘要:        
新年彩蛋 | 完整版思考题答案 基础概念篇 Go 语言在多个工作区中查找依赖包的时候是以怎样的顺序进行的? 答:你设置的环境变量GOPATH的值决定了这个顺序。如果你在GOPATH中设置了多个工作区,那么这种查找会以从左到右的顺序在这些工作区中进行。 你可以通过试验来确定这个问题的答案。例如:先在一    
阅读全文
 
        
        posted @ 2021-12-27 22:15
郑子铭
阅读(532)
推荐(1)
        
 
		
    
        
        
摘要:        
目录 UML OPM OPM优化 UML 1997年发布UML标准 主要域视图图主要概念 结构静态视图类图类、关联、泛化、依赖关系、实现、接口 用例视图用例图用例、参与者、关联、扩展、包括、用例泛化 实现视图构件图构件、接口、依赖关系、实现 部署视图部署图节点、构件、依赖关系、位置 动态状态机视图状    
阅读全文
 
        
        posted @ 2021-12-24 00:31
郑子铭
阅读(240)
推荐(0)
        
 
		
    
        
        
摘要:        
49 | 程序性能分析基础(下) 在上一篇文章中,我们围绕着“怎样让程序对 CPU 概要信息进行采样”这一问题进行了探讨,今天,我们再来一起看看它的拓展问题。 知识扩展 问题 1:怎样设定内存概要信息的采样频率? 针对内存概要信息的采样会按照一定比例收集 Go 程序在运行期间的堆内存使用情况。设定内    
阅读全文
 
        
        posted @ 2021-12-22 23:25
郑子铭
阅读(480)
推荐(0)
        
 
		
    
        
        
摘要:        
目录 对外展现的功能 内部功能 功能交互与价值通路 系统架构 目标 认识系统的价值通路 认识功能架构,通过把功能结构与形式结构结合来描述系统架构 受益原则 好的架构必须使人受益,要想把架构做好,就要专注于功能的涌现,使得系统把它的主要功能通过跨越系统边界的接口对外展示出来 对外展现的功能 ASP .    
阅读全文
 
        
        posted @ 2021-12-21 23:39
郑子铭
阅读(668)
推荐(3)
        
 
		
    
        
        
摘要:        
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NET Core 是什么 ASP .NET Core 是干什么的 Host、Server、HostApp    
阅读全文
 
        
        posted @ 2021-12-20 22:03
郑子铭
阅读(452)
推荐(3)
        
 
		
    
        
        
摘要:        
48 | 程序性能分析基础(上) 作为拾遗的部分,今天我们来讲讲与 Go 程序性能分析有关的基础知识。 Go 语言为程序开发者们提供了丰富的性能分析 API,和非常好用的标准工具。这些 API 主要存在于: 1、runtime/pprof; 2、net/http/pprof; 3、runtime/t    
阅读全文
 
        
        posted @ 2021-12-19 22:01
郑子铭
阅读(352)
推荐(1)
        
 
		
    
        
        
摘要:        
47 | 基于HTTP协议的网络服务 我们在上一篇文章中简单地讨论了网络编程和 socket,并由此提及了 Go 语言标准库中的syscall代码包和net代码包。 我还重点讲述了net.Dial函数和syscall.Socket函数的参数含义。前者间接地调用了后者,所以正确理解后者,会对用好前者有    
阅读全文
 
        
        posted @ 2021-12-10 23:24
郑子铭
阅读(497)
推荐(0)
        
 
		
    
        
        
摘要:        
46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情)。说到网络编程,我们就不得不提及 socket。 socket,常被翻译为套接字,它应该算是网络编程世界中最为核心的知识之一了。关于 socket,我们    
阅读全文
 
        
        posted @ 2021-12-09 23:00
郑子铭
阅读(458)
推荐(0)
        
 
		
    
        
        
摘要:        
45 | 使用os包中的API (下) 我们在上一篇文章中。从“os.File类型都实现了哪些io包中的接口”这一问题出发,介绍了一系列的相关内容。今天我们继续围绕这一知识点进行扩展。 知识扩展 问题 1:可应用于File值的操作模式都有哪些? 针对File值的操作模式主要有只读模式、只写模式和读写    
阅读全文
 
        
        posted @ 2021-12-08 23:58
郑子铭
阅读(274)
推荐(1)
        
 
		
    
        
        
摘要:        
44 | 使用os包中的API (上) 我们今天要讲的是os代码包中的 API。这个代码包可以让我们拥有操控计算机操作系统的能力。 前导内容:os 包中的 API 这个代码包提供的都是平台不相关的 API。那么说,什么叫平台不相关的 API 呢? 它的意思是:这些 API 基于(或者说抽象自)操作系    
阅读全文
 
        
        posted @ 2021-12-06 23:01
郑子铭
阅读(162)
推荐(0)
        
 
		
    
        
        
摘要:        
43 | bufio包中的数据类型(下) 在上一篇文章中,我提到了bufio包中的数据类型主要有Reader、Scanner、Writer和ReadWriter。并着重讲到了bufio.Reader类型与bufio.Writer类型,今天,我们继续专注bufio.Reader的内容来进行学习。 知识    
阅读全文
 
        
        posted @ 2021-12-05 21:59
郑子铭
阅读(348)
推荐(0)
        
 
		
    
        
        
摘要:        
42 | bufio包中的数据类型 (上) 今天,我们来讲另一个与 I/O 操作强相关的代码包bufio。bufio是“buffered I/O”的缩写。顾名思义,这个代码包中的程序实体实现的 I/O 操作都内置了缓冲区。 bufio包中的数据类型主要有: 1、Reader; 2、Scanner;     
阅读全文
 
        
        posted @ 2021-12-02 22:17
郑子铭
阅读(302)
推荐(0)
        
 
		
    
        
        
摘要:        
41 | io包中的接口和工具 (下) 上一篇文章中,我主要讲到了io.Reader的扩展接口和实现类型。当然,io代码包中的核心接口不止io.Reader一个。 我们基于它引出的一条主线,只是io包类型体系中的一部分。我们很有必要再从另一个角度去探索一下,以求对io包有更加全面的了解。 下面的一个    
阅读全文
 
        
        posted @ 2021-12-01 19:22
郑子铭
阅读(239)
推荐(0)
        
 
		
    
        
        
摘要:        
40 | io包中的接口和工具 (上) 我们在前几篇文章中,主要讨论了strings.Builder、strings.Reader和bytes.Buffer这三个数据类型。 知识回顾 还记得吗?当时我还问过你“它们都实现了哪些接口”。在我们继续讲解io包中的接口和工具之前,我先来解答一下这个问题。     
阅读全文
 
        
        posted @ 2021-11-30 21:07
郑子铭
阅读(370)
推荐(0)
        
 
		
    
        
        
摘要:        
39 | bytes包与字节串操作(下) 在上一篇文章中,我们分享了bytes.Buffer中已读计数的大致功用,并围绕着这个问题做了解析,下面我们来进行相关的知识扩展。 知识扩展 问题 1:bytes.Buffer的扩容策略是怎样的? Buffer值既可以被手动扩容,也可以进行自动扩容。并且,这两    
阅读全文
 
        
        posted @ 2021-11-29 22:17
郑子铭
阅读(448)
推荐(2)
        
 
		
    
        
        
摘要:        
38 | bytes包与字节串操作(上) 前导内容: bytes.Buffer基础知识 strings包和bytes包可以说是一对孪生兄弟,它们在 API 方面非常的相似。单从它们提供的函数的数量和功能上讲,差别可以说是微乎其微。 只不过,strings包主要面向的是 Unicode 字符和经过 U    
阅读全文
 
        
        posted @ 2021-11-28 22:31
郑子铭
阅读(268)
推荐(0)
        
 
		
    
        
        
摘要:        
37 | strings包与字符串操作 Go 语言不但拥有可以独立代表 Unicode 字符的类型rune,而且还有可以对字符串值进行 Unicode 字符拆分的for语句。 除此之外,标准库中的unicode包及其子包还提供了很多的函数和数据类型,可以帮助我们解析各种内容中的 Unicode 字符    
阅读全文
 
        
        posted @ 2021-11-27 21:42
郑子铭
阅读(214)
推荐(0)
        
            
        
        
摘要:        
36 | unicode与字符编码 在开始今天的内容之前,我先来做一个简单的总结。 Go 语言经典知识总结 在数据类型方面有: 基于底层数组的切片; 用来传递数据的通道; 作为一等类型的函数; 可实现面向对象的结构体; 能无侵入实现的接口等。 在语法方面有: 异步编程神器go语句; 函数的最后关卡d    
阅读全文
 
        
        posted @ 2021-11-27 00:43
郑子铭
阅读(278)
推荐(0)
        
 
		
    
        
        
摘要:        
35 | 并发安全字典sync.Map (下) 我们在上一篇文章中谈到了,由于并发安全字典提供的方法涉及的键和值的类型都是interface{},所以我们在调用这些方法的时候,往往还需要对键和值的实际类型进行检查。 这里大致有两个方案。我们上一篇文章中提到了第一种方案,在编码时就完全确定键和值的类型    
阅读全文
 
        
        posted @ 2021-11-26 00:02
郑子铭
阅读(294)
推荐(0)
        
 
		
    
        
        
摘要:        
34 | 并发安全字典sync.Map (上) 我们今天再来讲一个并发安全的高级数据结构:sync.Map。众所周知,Go 语言自带的字典类型map并不是并发安全的。 前导知识:并发安全字典诞生史 换句话说,在同一时间段内,让不同 goroutine 中的代码,对同一个字典进行读写操作是不安全的。字    
阅读全文
 
        
        posted @ 2021-11-24 22:34
郑子铭
阅读(297)
推荐(1)
        
 
		
    
        
        
摘要:        
33 | 临时对象池sync.Pool 到目前为止,我们已经一起学习了 Go 语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁、读写锁、条件变量和原子操作,以及 Go 语言特有的几个同步工具: 1、sync/atomic.Value 2、sync.Once 3、sync.WaitGroup    
阅读全文
 
        
        posted @ 2021-11-23 19:32
郑子铭
阅读(802)
推荐(0)
        
 
		
    
        
        
摘要:        
32 | context.Context类型 我们在上篇文章中讲到了sync.WaitGroup类型:一个可以帮我们实现一对多 goroutine 协作流程的同步工具。 在使用WaitGroup值的时候,我们最好用“先统一Add,再并发Done,最后Wait”的标准模式来构建协作流程。 如果在调用该    
阅读全文
 
        
        posted @ 2021-11-22 19:20
郑子铭
阅读(170)
推荐(0)
        
 
		
    
        
        
摘要:        
31 | sync.WaitGroup和sync.Once 我们在前几次讲的互斥锁、条件变量和原子操作都是最基本重要的同步工具。在 Go 语言中,除了通道之外,它们也算是最为常用的并发安全工具了。 说到通道,不知道你想过没有,之前在一些场合下里,我们使用通道的方式看起来都似乎有些蹩脚。 比如:声明一    
阅读全文
 
        
        posted @ 2021-11-21 22:12
郑子铭
阅读(395)
推荐(0)
        
 
		
    
        
        
摘要:        
30 | 原子操作(下) 我们接着上一篇文章的内容继续聊,上一篇我们提到了,sync/atomic包中的函数可以做的原子操作有:加法(add)、比较并交换(compare and swap,简称 CAS)、加载(load)、存储(store)和交换(swap)。并且以此衍生出了两个问题。 今天我们继    
阅读全文
 
        
        posted @ 2021-11-18 22:07
郑子铭
阅读(329)
推荐(1)
        
 
		
    
        
        
摘要:        
29 | 原子操作(上) 我们在前两篇文章中讨论了互斥锁、读写锁以及基于它们的条件变量,先来总结一下。 互斥锁是一个很有用的同步工具,它可以保证每一时刻进入临界区的 goroutine 只有一个。读写锁对共享资源的写操作和读操作则区别看待,并消除了读操作之间的互斥。 条件变量主要是用于协调想要访问共    
阅读全文
 
        
        posted @ 2021-11-17 23:19
郑子铭
阅读(300)
推荐(0)