1.2.3 Go 泛型设计G CN Go泛型设计 赵柯 QQ音乐 Go泛型发展史 01 Go泛型设计实现提案 02 Go泛型底层实现原理 03 总结 04 第一部分 Go泛型发展史 ’ alt=‘OCR图片’/> 什么是泛型? 1967年,克里斯托弗·斯特雷奇在《Fundamental Concepts in Programming Languages》提出了两个概念: 特设多态(ad-hoc): void print(string type unknown struct {} func (u unknown) walk() {} func (u unknown) quack() {} ’ alt=‘OCR图片’/> 泛型困局 编码速度 or 编译速度 or 运行速度? C++(slow compiler) ’ alt=‘OCR图片’/> 早期提案 - Type Functions type Lesser(t) interface return a } return b } MyVector(t)(v)看上去像是两次函数调用 type关键字使用混乱 部分场景实现困难: 支持通用运算符 支持泛型方法 ’ alt=‘OCR图片’/> 早期提案-Generalized Types(广义类型) gen [t] type Lesser(t) interface { Less(t) bool0 码力 | 35 页 | 1.31 MB | 3 月前3
Go 1.18 中的泛型### Go 1.18 中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 ## 语法和使用 ## 什么时候需要泛型? 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的类型: type T interface { Add(T) T } func Sum(elem s ...T) (sum T) { // T 可以是任何实现 Add() (sum S) { // S 的底层类型必须底层类型为 int 约束的类型 for i := range elements { sum += elem[i] } return } 使用泛型的根本目的是:类型安全的参数传递,以及对实现的类型进行抽象  {} // OK 为什么第二个 bar 不会报错? ## 抽象能力 泛型没有任何运行时的机制,所以关于泛型的组件只发生在编译时期 对于下面的接口而言,无法作为普通参数使用: func Foo[T any]( ) {} x := Foo // ERROR: cannot use0 码力 | 45 页 | 501.50 KB | 2 年前3
王强-Apache RocketMQ事务消息## Apache RocketMQ 事务消息 王强 (辽天) 阿里巴巴 中间件技术专家 ## QCon 全球软件开发大会 北京·2019 更多技术干货分享,北京站精彩继续 提前参与,还能享受更多优惠 识别二维码 查看了解更多 2019.qconbeijing.com  ## TABLE OF CONTENTS 大纲 • Apache RocketMQ 简介 • Apache RocketMQ 存储设计 • 事务消息的演进与Apache RocketMQ的实现 • Cloud Native时代下消息系统的挑战 ## Apache RocketMQ  金融交易 分布式事务  电子商务 异步解耦  ## 学习目标 ■ 理解泛型的概念,掌握其基本应用 ▶ 集合框架中的泛型 ▶ 泛型的向后兼容性 ■ 掌握自定义泛型类和泛型方法 ▶ 理解类型参数 ▶ 理解差异性并能够定义自己的泛型类和泛型方法 ▶ 受限制的类型参数 ■ 学会处理泛型类型,包括使用通配符实现泛型容器遍历和操作 ## 大纲 1 泛型概念 2 泛型类与泛型方法 3 处理泛型类型 ## 泛型概念 ## 什么是泛型 ## 泛型(Generics) 泛型机制自 JDK 5.0 开始引入,其实质是将原本确定不变的数据类型参数化。 作为对原有 Java 类型体系的扩充,使用泛型可以提高 Java 应用程序的类型安全、可维护性和可靠性。 ## 什么是泛型 ## ☑ 集合框架中的数据造型问题 传统的集合容器为了提供广泛的适用性,会将所有加入其中的元素当作 Object 类型来处理。基于此原因,在实际使用时,我们必须将从集合中取出的元素值再强制转换(造型)为所期望的类型。 ## 什么是泛型 ## 集合框架中的数据造型问题 传统0 码力 | 35 页 | 587.40 KB | 2 年前3
4 seata-golang 分布式事务框架[Image](/uploads/documents/b/c/4/2/bc4201e3191543d1cf3ac91f91e8ea10/p1_2.jpg) ## 微信号: ## scottlewis ## 分布式事务框架 Seata-Golang  刘晓敏 & QA 05 目录 ## 什么是分布式事务问题? 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 ## Demo Demo 演示 1997-1998 1 ## Seata 原理 ## 整体机制: • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。 • 二阶段: • 提交异步化,非常快速地完成。 • 回滚通过一阶段的回滚日志进行反向补偿。 BranchSession Lock BranchSession Lock  王启军,华为云PaaS团队架构师,负责微服务框架的开发。曾任当当网架构师,主导电商平台架构设计;曾就职于搜狐负责手机微博的研发。《持续演进的Cloud Native》作者,微信公众号“奔跑中的蜗牛”博主。 [Image](/uploads/documents/4/f/c/1/4fc1dac86fed58e3630871012bbe2224/p5_1.jpg) |方案\\指标|2PC 传统事务|可靠事件|TCC 柔性事务|SAGA 补偿事务| |---|---|---|---|---| |数据一致性|强一致|最终一致|最终一致|最终一致| |总体性能|低|高|取决于实现|取决于实现| |业务侵入性|较低侵入|高侵入|高侵入|高侵入| |产品成熟度|高|高|一般|低|  ## 分布式事务管理中间件 (Distributed Transaction Management, DTM) ## DTM总体架构(TCC) 用户侧 系统侧   • 分布式事务和两阶段提交的原理 Greenplum两阶段提交协议的实现 Greenplum两阶段提交协议的优化 ## 事务的属性:ACID |属性|含义|数据库系统的实现| |---|---|---| |Atomic原子性|事务中的操作要么全部正确执行,要么完全不执行。|Write 完全不执行。|Write Ahead Logging,分布式事务:两阶段提交协议| |Consistency一致性|数据库系统必须保证事务的执行使得数据库从一个一致性状态转移到另一个一致性状态。(满足完整性约束)|实现对A、I、D三个属性的支持| |Isolation隔离性|多个事务并发地执行,对每个事务来说,它并不会感知系统中有其他事务在同时执行。|多版本并发控制Multi-Version Concurrency0 码力 | 42 页 | 2.12 MB | 2 年前3
《Saga分布式事务解决⽅案与实践》演讲者/姜宁 # 《Saga分布式事务解决方案与实践》 演讲者 / 姜宁 ## 关于我 • 华为开源能力中心 • ServiceComb项目负责人 • Apache Member, IPMC, 多个Apache项目 • RedHat, IONA Travelsky  ## 议题 • 微服务事务一致性问题? • 业界Saga的解决方案 • ServiceComb Saga的演进 • 后续的开发计划 ## 微服务架构 - 微服务架构将一个应用分成多个相互独立的服务。 - 好处是各个服务能够持续独立的开发和部署。 资源层面提供保障业务侵入性低 • 协议成本高,并且存在全局锁的问题 ## ACID 与 BASE • ACID (刚性事务) • 原子性 (Atomicity) • 一致性 (Consistency) - 隔离性 (Isolation) - 持久性 (Durability) - BASE (柔性事务) • 基本可用(Basically Available) • 柔性状态 (Soft state)0 码力 | 33 页 | 2.38 MB | 2 年前3
共 879 条
- 1
- 2
- 3
- 4
- 5
- 6
- 88













