自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 敏捷软件开发 - 原则、模式与实践

起源《敏捷软件开发 - 原则、模式与实践》是我接触到的第一本系统介绍软件设计的书籍,深刻影响了个人的软件开发习惯。它并不难懂,我一直推荐给身边的各个层次的程序员学习。可对于一本接近500页的图书,很多人还是望而却步。一直都想写个关于这本书的速读,使更多的人了解它。但是最近又重新学习了一遍发现它之所以有价值不仅仅在于书中总结的原则和模式,更在于它提供的如何运用这些原则、模式的实践例子。忽略了大量...

2019-10-11 22:45:23 383

原创 区块链技术总结及发展展望

从下决心做区块链创业到现在,一晃已经快两年。由于我们主要着眼于区块链应用,做为公司的研究骨干,前后研究过多个白皮书(有基础层的,也有协议层的,还有应用层的 ),也基本研究并使用过所有主流的公链和联盟链。一直没有进行过总结,现决心把本阶段的心得体会写下来,以备将来参考。研究过的公链及其特点比特币介绍及特点以太坊介绍及特点EOS介绍及特点比特币、以太坊和EOS都是公链系统。公链对所有人都开放...

2019-09-11 22:09:27 536

原创 Hyperledger Fabric 1.4 产品链搭建教程

起因个人判断国内区块链发展方向应为联盟链,这在区块链技术总结及发展展望一文中已详细阐述。并在主导的联盟链项目中选择Hyperledger Fabric作为底层技术框架(R3的Corda需要收费其主要针对金融项目,金链盟主导的FISCO BCOS还处于发展之中)。Hyperledger Fabric入门并不复杂,按照官方例子Building Your First Network很容易完成链搭建,...

2019-09-11 21:36:27 801

原创 Solidity开发模式

前面写了智能合约开发模式总结了针对智能合约开发的通用模式,原文中还有一些模式只适用于Solidity开发,选出认为不错的几篇翻译整理。本文介绍的每个模式都含有实例代码(Solidity 0.4.20)和详细说明。安全转账 - 确保安全转账以太币内存数组构建 - 高效地使用gas从合约中汇总或提取数据紧密变量打包 - 优化存储加载定长变量的gas消耗参考文章Solidity Patter...

2019-09-10 22:44:01 57

原创 速读《effective go》

effective go官方文档中文精简版

2019-09-09 22:42:55 80

原创 浏览器同源策略

同源策略是什么参考资料浏览器同源政策及其规避方法wiki Same-origin policyW3C Same Origin Policymozilla 浏览器的同源策略简而言之同源是指协议相同、域名相同、端口相同同源策略一般允许发送数据,而禁止读取数据同源策略会影响DOM读取,Cookie、LocalStorage和IndexDB读取,AJAX请求规避同源策略的方式跨文...

2020-03-17 22:35:24 139

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(十二)STATE模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第29章STATE模式STATE模式既具有switch/case语句的效率又具有解释迁移表的灵活性。上图展示该模式的结构。Turnstile类拥有关于事件的公有方法以及关于动作的受保护方法。它持有一个指向TurnstileState接口的引用。当Turnstile的两个事件方法中的一个被调用时,它就把这个事件委托给Turn...

2020-02-23 18:30:59 165

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(十一)VISITOR模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第28章VISTOR模式系列允许在不更改现有层次结构的情况下向其中增加新方法。该系列中的模式如下VISITOR模式ACYCLIC VISITOR模式DECORATOR模式EXTENSION ObJECT模式VISITOR模式这个结构,可以通过增加新的ModemVisitor派生类来增加新的操作系统配置函数,而...

2020-01-11 22:57:48 96

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(十)PROXY模式和STAIRWAY TO HEAVEN模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第26章PROXY模式PROXY模式具有一个非常大的好处:重要关系的分离。在上面的例子中,业务规则和数据库就被完全分开了。在那些把业务 规则和数据库实现分离显得非常重要的情况中,PROXY模式是很适用的。就此而言,PROXY模式可以用来分离业务规则和任何种类的实现问题。它可以用来防止业务规则被诸如:COM、COBRA、EJB...

2020-01-06 21:53:34 92

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(九)ABSTRACT SERVER模式、ADAPTER模式和BRIDGE模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第25章ABSTRACT SERVER模式如上图在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西。这立即就满足了DIP和OCP。这个就是ABSTRACT SERVER模式。请注意接口的名字是从它的客户的角度起的。它被称为Switchable而不是ILight。我们在前面已经...

2020-01-06 21:51:38 92

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(八)OBSERVER模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第24章上图展示了OBSERVER模式的规范形式。在本例中,Clock被DigitalClock观察。DigitalClock通过Subject接口注册到Clock中。无论任何原因,只要时间一改变,Clock就调用Subject的notify方法。而Subject的notify方法会调用每个已注册Observer对象的upda...

2020-01-06 20:43:41 43

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(七)COMPOSITE模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第23章COMPOSITE模式是一个非常简单但具有深刻内涵的模式。上图中展示了COMPOSITE模式的基本结构。图中是一个形状类层次结构。基类Shape有两个派生类:Circle和Square。第3个派生类时一个组合体。CompositeShape持有一个含有多个Shape实例的列表。当调用CompositeShape的dr...

2020-01-06 20:41:23 47

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(六)FACTORY模式

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第21章工厂模式允许我们只依赖于抽象接口就能创建出具体对象的实例。所以,在正在进行的开发期间,如果具体类时高度易变的,那么该模式是非常有用的。结论工厂是有效的工具。在遵循DIP方面工厂有着重大的作用。它们使得高层策略模块在创建类的实例时无需依赖于这些类的具体实现。它们同样使得在一组类的完全不同系列的实现间进行切换成为可能。...

2020-01-06 20:38:49 38

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(五)NULL OBJECT模式

该模式会消除对null进行检查的需要,并且有助于简化代码。public interface Employee { public bool isTimeToPay(DateTime time); public void pay(); public static final Employee NULL = new Employee() { public bool Is...

2019-10-19 17:36:47 44

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(四)SINGLETON模式和MONOSTATE模式

介绍本节讲述了两个强制对象单一性的模式。这两个模式有着非常不同的“代价/收益”权衡。在大多数情况下,它们的实时代价远低于它们的表达力带来的收益。SINGLETON模式public class Singleton { private static Singleton theInstance = null; private Singleton() {} public static...

2019-10-19 17:34:11 46

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(三)FACADE模式和MEDIATOR模式

介绍这两个模式有着共同的目的。它们都把某种策略施加到另外这一组对象上。FACADE模式从上面施加策略,而MEDIATOR模式则从下面施加策略。FACADE模式的使用是明显且受限的,而MEDIATOR模式的使用则是不明显且不受限的。FACADE模式图1MEDIATOR模式图2图2展示了QuickEntryMediator的结构。用一个JList和一个JTextField构造了一个Quic...

2019-10-19 17:23:40 60

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(二)TEMPLATE METHOD模式和STRATEGY模式

介绍TEMPLATE METHOD模式和STRATEGY模式都可以分离通用的算法和具体的上下文。在软件设计中经常会看到这样的需求。我们有一个通用的算法。为了遵循依赖倒置原则(DIP),我们想确保这个通用的算法不要依赖于具体的实现。我们更想使这个通用的算法和具体的实现都依赖于抽象。不同的是,TEMPLATE METHOD模式使用继承来解决问题,而STRATEGY模式使用的则是委托。TEMPLAT...

2019-10-19 17:13:51 78

原创 敏捷软件开发 - 原则、模式与实践 —— 设计模式(一)COMMAND模式和ACTIVE OBJECT模式

COMMAND模式COMMAND模式是最简单、最优雅的模式之一。它的适用范围非常广泛。图1ACTIVE OBJECT模式ACTIVE OBJECT模式是我最喜欢使用COMMAND模式的地方之一。这是实现多线程控制的一项古老技术。该模式有多种使用方式,为许多工业系统提供了一个简单的多任务核心。图2结论COMMAND模式的简单性掩盖了它的多功能性。COMMAND模式可以应用于多种不同的美...

2019-10-19 17:07:27 70

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(八)包的耦合性原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第20章后半部分包的耦合性原则无环依赖原则(ADP - The Acyclic Dependencies Principle )在包的依赖关系图中不允许存在环。解除依赖环的方法使用依赖倒置原则。创建一个新包,把共同依赖的类移动到新包里面。稳定依赖原则(SDP - The Stable-Dependencies P...

2019-10-15 21:56:52 148

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(七)包的内聚性原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第20章前半部分包的内聚性原则重用发布等价原则(REP - The Reuse/Release Equivalence Principle)重用的粒度就是发布的粒度REP指出,一个包的重用粒度可以和发布粒度一样大。我们所重用的任何东西都必须同时被发布和跟踪。简单的编写一个类,然后声称它是可重用的做法是不现实的。只有在建立一...

2019-10-15 21:45:43 104

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(六)接口隔离原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第12章。接口隔离原则(ISP - The Interface Segregation Principle)不应该强迫客户依赖于它们不用的方法。这个原则用来处理“胖”接口所具有的缺点。如果类的接口不是内聚的,就表示该类具有“胖”的接口。换句话说,类的“胖”接口可以分解成多组方法。每一组方法都服务于一组不同的客户程序。这样,一...

2019-10-14 22:13:47 101

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(五)依赖倒置原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第11章。依赖倒置原则(DIP - The Dependency-Inversion Principle)a. 高层模块不应该依赖于低层模块。二者都应该依赖于抽象。b. 抽象不应该依赖于细节。细节应该依赖于抽象。请考虑一下当高层模块依赖于低层模块时以为着什么。高层模块包含了一个应用程序中的重要的策略选择和业务模型。正是这些...

2019-10-14 22:06:02 53

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(四)里氏替换原则

本文为敏捷软件开发 - 原则、模式与实践系列的一部分。本文对应原书第9章。里氏替换原则(LSP - The Liskov Substitution Principle)子类型必须能够替换掉它们的基类型。问题对于LSP的违反常常会导致以明显违反OCP的方式使用运行时类型辨别。这种方式常常是使用一个显示的if语句或者if/else链去确定一个对象的类型,以便于可以选择针对该类型的正确行为。...

2019-10-14 21:58:28 54

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(三)开放-封闭原则

开放-封闭原则 (OCP - The Open/Closed Principle)软件实体(类、模块、函数等等)应该是可以扩展的,但是不能修改的。对于扩展是开放的。对于更改是封闭的。关键是抽象一般而言,无论模块是多么的“封闭”,都会存在一些无法对之封闭的变化。没有对于所有的情况都贴切的模型。既然不可能完全封闭,那么就必须有策略的对待这个问题。也就是说,设计人员必须对于他设计的模块应该对哪种...

2019-10-12 22:04:42 52

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(二)单一责任原则

单一责任原则 (SRP - Single-Responsibility Principle)就一个类而言,应该仅有一个引起它变化的原因。在SRP中,我们把职责定义为‘变化的原因’。如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责。如果决定职责的粒度,要依赖于具体程序的变化方式。如果程序的变化会影响某一个细分职责,那就肯定要分开它们,否则会带来僵化性的臭味。但如果应用...

2019-10-12 21:51:53 71

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷设计(一)设计的臭味

设计的臭味僵化性僵化性是指难以对软件进行改动,即使是最简单的改动。如果单一的改动会导致有依赖关系的模块中的连锁改动,那么设计就是僵化的。必须要改动的模块越多,设计就越僵化。脆弱性脆弱性是指,在进行一个改动时,程序的许多地方就可能出现问题。常常是,出现新问题的地方与改动的地方并没有概念上的关联。牢固性牢固性是指,设计中包含了对其他系统有用的部分,但是要把这些部分从系统中分离出...

2019-10-12 21:46:27 74

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷开发(二)

本文对应原书第3章 ~ 第6章。计划初始探索在项目开始时,开发人员和客户会尽量确定出所有真正重要的用户用例。但,他们不会试图去确定所有的用户用例。注意用例的大小,过大或过小都不利于工作量的评估。发布计划根据开发速度,客户选择下面2-4个月需要完成的用户用例,并排列这些用例的优先级。发布计划可以调整。迭代计划根据开发速度,客户选择下面2周需要完成的用户用例,并排列这些用例的...

2019-10-11 22:12:09 51

原创 敏捷软件开发 - 原则、模式与实践 —— 敏捷开发(一)

本文对应原书第1章和第2章。敏捷软件开发宣言个体和交互 胜过 过程和工具可以工作的软件 胜过 面面俱到的文档客户合作 胜过 合同谈判响应变化 胜过 遵循规则敏捷开发原则我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势经常性的交付可以工作的软件,交付的间隔可以从几周到几个月...

2019-10-11 22:04:21 161

原创 hls视频生成及加密方案研究

工作中的一个项目需要实现视频在线播放并防止下载。研究目前主流方案以后,决定采用HLS生成视频分片并手动加密的方案。这篇文章记录了研究过程中遇到的问题,以及最后的结果。仅供以后参考。采用ffmpeg生成HLS原始视频分片ffmpeg是一个强大的媒体文件处理工具,用它可以方便的生成HLS视频分片。生成未加密的视频分片命令ffmpeg -i demo.mp4 -codec copy -f seg...

2019-09-22 22:55:06 1200

原创 区块链研究总结 —— HyperLedger Fabric

本文为区块链技术总结及发展展望一文的子章节。HyperLedger Fabric是Linux基金会的顶级项目Hyperledger下面的一个子项目,是目前最活跃的基于区块链的企业级分布式账本开源系统,由IBM贡献最初代码,现在大量企业都在研究和使用。Fabric版本更新很快,并于最近发布了第一个长期维护的版本1.4,被很多联盟链项目使用。同公链系统相比,HyperLedger Fabric有其...

2019-09-16 23:04:56 95

原创 区块链研究总结 —— FISCO BCOS

本文为区块链技术总结及发展展望一文的子章节。FISCO BCOS平台是金融区块链合作联盟(深圳)(以下简称:金链盟)开源工作组以金融业务实践为参考样本,在BCOS开源平台基础上进行模块升级与功能重塑,深度定制的安全可控、适用于金融行业且完全开源的区块链底层平台。金链盟开源工作组的首批成员包括以下单位:微众银行、深证通、腾讯、华为、神州数码、四方精创、博彦科技、越秀金科、亦笔科技等9家单位。FI...

2019-09-16 23:03:53 2598

原创 区块链研究总结 —— EOS

本文为区块链技术总结及发展展望一文的子章节。业内对于谁是第三代区块链系统代表还没达成一致,不过EOS绝对是个不可忽视的竞争者。EOS致力于解决以太坊使用过程的一系列痛点,推动去中心化应用的发展。EOS由BM(GitHub账号ByteMaster)通过史上最大规模ICO项目发起,目标是成为区块链世界的底层操作系统,用户可以基于它开发运行商业级的去中心化应用。EOS已于2018年6月正式启动主网,并...

2019-09-16 23:02:04 67

原创 区块链研究总结 —— 以太坊

本文为区块链技术总结及发展展望一文的子章节。Vitalik于2013年发布了以太坊白皮书,并于2014年中通过ICO(首次代币发行)的方式募集到大量资金推动以太坊项目开发。目前以太坊还没有完成最终阶段,但主要功能均已上线。它是比特币后又一重量级产品,引爆了第二代区块链应用 - 智能合约。以太坊的目标是运行用户自己开发的智能合约,除了上述比特币的大部分特点外,它还有自己显著的特点。以太坊的特点...

2019-09-16 23:00:17 125

原创 区块链研究总结 —— 比特币

本文为区块链技术总结及发展展望一文的子章节。中本聪(化名)于2008年在互联网上公开发表了一篇介绍一种去中心化货币比特币的论文,并于2009年启动开发项目,到2010年整个比特币网络搭建完成。区块链的概念来源于比特币项目,做为业内公认的第一个区块链系统,学习比特币已经成为进入区块链世界的第一步。比特币创造性的将多种已有技术结合在一起,成功地实现了第一代区块链系统 - 数字货币。比特币的特点...

2019-09-16 22:58:43 89

原创 Hyperledger Fabric 1.4 产品链搭建教程 (三) —— MyFabric Demo Java SDK访问示例

本文为Hyperledger Fabric 1.4 产品链搭建教程系列第三篇,介绍如何使用Hyperledger Fabric Java SDK访问MyFabric Demo链。本篇代码可以从Github上下载 - myfabric-demo-java-clientcertificate目录certificate目录包含项目运行需要的身份证书。CA证书文件。org0-ca-chain...

2019-09-11 21:45:49 674

原创 Hyperledger Fabric 1.4 产品链搭建教程 (二) —— MyFabric Demo链节点启动及合约部署调用

本文为Hyperledger Fabric 1.4 产品链搭建教程第二篇,介绍MyFabric Demo链的启动和合约部署以及调用本篇代码可以从Github上下载 - myfabric-demo-chain代码目录结构如下myfabric-demo-chain├── org0 ├── org0-orderer //org0 orderer 目录...

2019-09-11 21:43:40 359

原创 Hyperledger Fabric 1.4 产品链搭建教程 (一) —— MyFabric Demo链组织及身份生成

本文为Hyperledger Fabric 1.4 产品链搭建教程系列第一篇,介绍MyFabric Demo链的各种组织和身份如何创建。本篇代码可以从Github上下载 - myfabric-demo-chain代码目录结构如下myfabric-demo-chain├── chaincode├── org0 //org0组织目录├── org0-ord...

2019-09-11 21:41:21 803

翻译 Solidity开发模式 - 紧密变量打包

目的优化存储加载定长变量的gas消耗动机这个模式的主要目的就是节约gas。这种特殊模式很容易应用,它不会影响任何合约逻辑。所要做的就是按照正确顺序声明状态变量。我们利用EVM分配存储的方式,减少合约部署gas,以及方法调用成本。以太坊存储是一个键值存储,键值都为32字节。分配存储时,所有定长变量(除了映射和动态数组)都会按声明顺序从位置0开始依次写下。最常用数据类型(例如byte32, ui...

2019-09-10 22:41:21 57

翻译 Solidity开发模式 - 内存数组构建

目的高效地使用gas从合约中汇总或提取数据动机与区块链合约的存储进行交互是EVM最昂贵的操作之一。因此,只应保存必要的数据,果可能,应避免冗余。这与传统的软件架构形成鲜明对比,传统的软件架构存储成本低,数据存储用来优化性能。虽然大多数情况下,传统系统查询的唯一成本就是时间,但在以太坊中,即使最简单的查询也会花费大量具有货币价值的gas。降低gas成本的一个方式是声明变量为public,后台会...

2019-09-10 22:40:16 106

翻译 Solidity开发模式 - 安全转账

目的确保安全转账以太币动机和比特币相比,转账不是以太坊的主要应用,但它仍是一个必要的、大量使用的功能。外部账户转账可以很容易的通过网络交易完成,但合约账户的转账不是那么直接。Solidity早期,从合约转账到另一个地址,无论它是外部账户或合约账户,都是<address>.send(amount)方法,它发送指定以太币给指定地址。然而,send方法不能返回错误且只使用少量gas。...

2019-09-10 22:38:44 206

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除