11 2018 档案
摘要:指针的本质是:内存(地址)+ 类型 指针只是将变量对应的内存装包; *P是解包的操作。
阅读全文
摘要:理解指针的关键是明确要修改哪块内存的内容, 然后获取目标内存的地址,并使用指针协助完成。 指针本身的内存 vs 指针指向的内存。 1、修改指针的值:修改指针指向的内存地址; 2、修改指针指向的内存中的内容:修改内容; 3、指针的传递:地址的不变性、地址赋值;
阅读全文
摘要:public class func pending() -> (promise: Promise<T>, resolver: Resolver<T>) { return { (0.box)) }(Promise<T>(.pending)) }
阅读全文
摘要:let firstHighScore = ("Mary", 9001)firstHighScore.0 firstHighScore.1
阅读全文
摘要:Pipeline模型最早被使用在Unix操作系统中。据称,假设说Unix是计算机文明中最伟大的发明,那么,Unix下的Pipe管道就是尾随Unix所带来的还有一个伟大的发明【1】。我觉得管道的出现,所要解决的问题,还是软件设计中老生常谈的设计目标——高内聚,低耦合。它以一种“链式模型”来串接不同的程
阅读全文
摘要:响应式编程是一种面向数据流和变化传播的编程范式 https://www.cnblogs.com/feng9exe/p/9019773.html https://www.cnblogs.com/feng9exe/p/8602889.html
阅读全文
摘要:内聚性是模块之所以成为模块的原因--一个中心、单一职责。 内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量,一个内聚成都高的模块(在理想情况下)应当制作一件事 内聚的目的在于降低通信的消耗;
阅读全文
摘要:所谓系统集成(SI,System Integration),就是通过结构化的综合布线系统和计算机网络技术,将各个分离的设备(如个人电脑)、功能和信息等集成到相互关联的、统一和协调的系统之中,使资源达到充分共享,实现集中、高效、便利的管理。 系统集成实现的关键在于解决系统之间的互连和互操作性问题,它是
阅读全文
摘要:编程是把需求打碎然后按照编程思想的指导进行重组的过程; 就和机器的拆分和组装一样; https://www.cnblogs.com/feng9exe/p/6804824.html https://www.cnblogs.com/feng9exe/p/9955152.html https://www.
阅读全文
摘要:协议的传统实现: 定义接口+实现协议 由抽象到具体; 协议的逆向实现(使用扩展): 由已存在的类型抽离部分功能作为协议,并让原体符合协议; 由具体到抽象; 向上抽离; 向上生成; 协议的缺省实现: (使用扩展)协议遵从的从无到有。 本质是协议于具体:先有谁,后有谁 及 怎么结合的问题; 协议的生成律
阅读全文
摘要:swift的特性:扩展、协议、泛型 扩展与继承:对象的生长方式; 协议:支持 协议->类型、类型<-协议 的双向抽象; 泛型;
阅读全文
摘要:相信大家都封装过网络层。 虽然系统提供的网络库以及一些著名的第三方网络库(AFNetworking, Alamofire)已经能满足各种 HTTP/HTTPS的网络请求,但直接在代码里用起来,终归是比较晦涩,不是那么的顺手。所以我们都会倾向于根据自己的实际需求,再封装一个更好用的网络层,加入一些特殊
阅读全文
摘要:数据访问分为两种: 1、位置(索引)访问; 2、遍历访问; 基于比较的二叉树; 基于位置的数组; 基于位置和比较的hash表。 结构维护: 增删; 及访问与维护的效率。
阅读全文
摘要:常见的时间复杂度量级有: 常数阶O(1) 字典查找、数组索引 对数阶O(logN) 二分查找 线性阶O(n) 循环 线性对数阶O(nlogN) 循环+分而治之 平方阶O(n²) 双重循环 立方阶O(n³) 多重循环 K次方阶O(n^k) 指数阶(2^n) 常数阶O(1) 字典查找、数组索引 对数阶O
阅读全文
摘要:有关字符串的匹配问题,有很好的算法,即KMP算法,但是还有一种其实经常使用到的算法是Rabin-Karp算法,它是使用hash的原理来进行字符串匹配的。具体的做法如下。 Rabin-Karp算法是由Rabin和Karp提出的一个在实际中有比较好应用的字符串匹配算法,此算法的预处理时间为O(m),但它
阅读全文
摘要:算法一:快速排序算法 算法二:堆排序算法 算法三:归并排序 算法四:二分查找算法 算法五:BFPRT(线性查找算法) 算法六:DFS(深度优先搜索) 算法七:BFS(广度优先搜索) 算法八:Dijkstra算法 算法九:动态规划算法 算法十:朴素贝叶斯分类算法 算法一:快速排序算法 快速排序是由东尼
阅读全文
摘要:前言:当您在读该文章的时候,我认为您已经知道HashMap的底层实现原理,如果您还不清楚HashMap是如何实现的,请先去了解,再回来看本文章。 1.HashMap什么时候扩容? HashMap的容量是有限的。当经过多次元素插入的时候,使得HashMap达到一定的饱和度,Key映射位置的几率不断变大
阅读全文
摘要:HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 HashMap 非线程安全 TreeMap 非线程安全
阅读全文
摘要:平衡二叉树的平衡稳定是通过查找最低不平衡节递归实现的; 自平衡二叉树的平衡是通过局部不平衡的动态优化最终达到全局优化的。
阅读全文
摘要:字符串匹配是字符串的一种基本操作:给定一个长度为 M 的文本和一个长度为 N 的模式串,在文本中找到一个和该模式相符的子字符串,并返回该字字符串在文本中的位置。 KMP 算法,全称是 Knuth-Morris-Pratt 算法,以三个发明者命名,开头的那个K就是著名科学家 Donald Knuth
阅读全文
摘要:因为红黑树需要进行左旋,右旋操作, 而单链表不需要,以下都是单链表与红黑树结构对比。如果元素小于8个,查询成本高,新增成本低如果元素大于8个,查询成本低,新增成本高 https://bbs.csdn.net/topics/392346931
阅读全文
摘要:3、旋转 在进行插入和删除之前需要先了解AVL树的旋转操作。旋转操作主要包括LL(左左)旋转、LR(左右)旋转、RR(右右)旋转、RL(右左)旋转,LL旋转与RR旋转对称,LR旋转与RL旋转对称。旋转操作是在插入结点或删除结点导致原AVL树不平衡时进行的。我的理解是当二叉树失衡的原因出现在“最低失衡
阅读全文
摘要:unsigned int SDBMHash(char *str){ unsigned int hash = 0; while (*str) { // equivalent to: hash = 65599*hash + (*str++); hash = (*str++) + (hash << 6)
阅读全文
摘要:模式匹配算法的本质就是:扫描+特征比较; 特征提取:核心是目标特征分析 1、整体特征:整体hash; 2、边界特征:忽略中间量,仅对首尾做特征提取; 3、分析特征:适合有重复字符的匹配模式; 4、统配特征:边界特征+限制特征+位数; 扫描: 1、逐位扫描; 2、边界特征扫描; 3、
阅读全文
摘要:递归与循环的共同点:同一计算被执行多次; 递归与栈的共同点:递归依靠栈帧来存储先进后出的计算,栈存储先进后出的数据;共同点是存储。 或者可以这么理解:递归解决的是有依赖顺序关系的多个问题。 递归与栈的关系 因为程序中的栈结构是顺序栈,因此,如果递归的次数过多,程序中的数据过大,在不断的压栈过程中造成
阅读全文
摘要:Attributes provide more information about a declaration or type. There are two kinds of attributes in Swift, those that apply to declarations and thos
阅读全文
摘要:运行时系统包含两个系统: 1、运行时类型系统:内省、反射; 2、运行时派发(调用、绑定、消息路由、上下文绑定)系统; 动态派发体统依赖于运行时类型系统; 对数据结构+算法 分别作出了规范; 运行时系统是一个解释系统。
阅读全文
摘要:所谓反射(Refection),其实就是程序自己能够检查自身信息,就像程序会通过镜子反光来看自己本身一样。反射使得 Java语言具有了“动态性”,即程序首先会检查某个类中的方法、属性等信息,然后再动态地调用或创建该类或该类的对象 一、反射的基石——Class类 Class类用来描述Java中的一切事
阅读全文
摘要:动态语言关于类型和结构的功能,是的该语言天然具有解释器的功能。 将平凡数据解释为语言兼容结构--类型映射; 将功能字符串解释为函数执行--功能热更新; 将功能字符串桥接为寄生语言执行--oc<->js; 将已有的第三方(不可物理修改)功能重新解释执行--方法修改; 将已存在的类型解释为新的类型 is
阅读全文
摘要:反射:类型信息的增删查改; 内省:类型信息的查; 结构、变量、函数、属性、继承等信息。
阅读全文
摘要:https://www.cnblogs.com/feng9exe/p/8323536.html 动:运行时; 态:结构、类型、行为; 将编译时的类型检查放到运行时; 类型、结构、行为可以在运行时改变。 是指程序在运行时可以改变其结构。
阅读全文
摘要:晚绑定是继承机制的根源
阅读全文
摘要:松耦合即软绑定; 松耦合即少信息; 松耦合即小接口; 耦合无法消除,只能转移。
阅读全文
摘要:软件的组织形式:什么东西放到什么地方 软件架构的本质: 控制混乱:使用结构和秩序控制混乱 简化复杂:使用分解、分离、分类简化复杂。 监督生长:监督软件的生长方式,防止畸形发展;
阅读全文
摘要:定义了软件生长的规则和约束; 和标准; 不尊从相应约束的单元,无法在已有的软件上完成生长。 满足了本体的稳定性和扩展的多样性。
阅读全文
摘要:关注点分离; 单一职责; 分而治之; 目的是建立结构与秩序。 分:代表生成; 合:代表生长;
阅读全文
摘要:软件开发的分离与分解不同; 分解关注于功能的划分; 分离注重于不变与可变; 软件的最大分离是头文件与实现文件的分离; 头文件代表抽象; 实现文件代表具体; 分离与绑定是相对应的概念; 软件变化的根源在于两个方面: 1、结构的变化;2、算法的变化; 接口与实现的分离; 抽象与具体的分离; 本质上是稳定
阅读全文
摘要:软件开发的三次转化: 1)将需求转化为程序模型;业务学习+建模; 2)将程序模型转化为代码;软件的分与合 3)将代码转化为机器码; 软件开发的三次转化 https://www.cnblogs.com/feng9exe/p/7598285.html 没有银弹-软件工程中的根本和次要问题 二、根本困难
阅读全文
摘要:接口描述: 接口,即对实现类的一种规范,当一个具体实现类实现这个接口的时候,应当实现接口所定义的所有规范。 那为什么要面向接口编程呢? 答案和使用spring是一样的,降低代码耦合度,提高可扩展性,即规范与实现分离。当我们要使用一个组件的时候,只是直接面向这个组件的接口,并不关心接口的具体实现,这样
阅读全文
摘要:关键词:变化、分离、解藕; 面向接口: 契约与履行; 一致性; 机制复用;代码复用; 接口的双重性: 接口与接口之间:定义机制; 接口与实现之间:定义扩展;定义标准; 面向接口编程是面向分离编程, 面向抽象编程; 面向联系编程; 面向标准编程; 面向接口编程具有更大的稳定性; 接口就是规划标准,有了
阅读全文
摘要:复用即重用。 软件复用的内容: 1、机制复用: 包含:框架、设计模式、面向接口编程、依赖注入等; 本质是面向抽象(契约、约束)编程。侧重于软件的生长方式。 关键词:抽象与实现的分离、可扩展可替换。 2、功能复用: 定制的通用的功能代码; 通过继承或继承或直接引用; 思想:相同功能的代码不要分散在程序
阅读全文
摘要:软件的分离与分解 分离:解决数据与调用的硬编码问题; 分解:解决系统的功能划分问题。
阅读全文
摘要:Dependency and Coupling 抽象层是规则的制定者 面向抽象机制编程; 抽象机制是规则的制定者; 接口代表可变的参与者。 面向接口编程的核心是:分离与可变。 https://blog.csdn.net/jj_nan/article/details/70161086 一个接口可以从三
阅读全文
摘要:“控制反转(Inversion of Control)的一个著名的同义原则是由Robert C. Martin提出的依赖倒置原则(Dependency Inversion Principle),它的另一个昵称是好莱坞原则(Hollywood Principle:不要调用我,让我来调用你)”[Pico
阅读全文
摘要:面向接口编程即面向头文件编程。 头文件代表着模块或类的签名; 头文件是签名的集合,本身也是签名; 签名即抽象。 头文件即是接口、即是抽象。
阅读全文
摘要:头文件标志着抽象与实现的分离,头文件的消失是编程语言的倒退
阅读全文
摘要:业务决定功能,功能决定技术 业务是系统; 功能是模块; 技术是支持;
阅读全文
摘要:元类型(0阶类型);nullary type, data types 一元类型(一阶类型):unary adj. [数] 一元的 二元类型: is the kind of a binary type 高阶类型::关注类型的变换; a kind is the type of a type constr
阅读全文
摘要:设计问题:谁来构造、构造什么、怎么添加新功能 关键词:本体、客体、构造、映射、功能。 别名:桥接变量、型变变量、容器变量、适配变量,构造变量; 目的:添加命名空间、添加新功能。 原则:不修改本体的实现。 原始版本: 在本体的扩展中,直接构造客体;客体的构造器输入参量为主体; 客体为具体类,直接完成本
阅读全文
摘要:布鲁纳认为,学习的实质是一个人把同类事物联系起来,并把它们组织成赋予它们意义的结构。学习就是认知结构的组织和重新组织。知识的学习就是在学生的头脑中形成各学科知识的知识结构。简言之,按照布鲁纳的观点,知识的学习就是在学生的头脑中形成一定的知识结构。这种知识结构是由学科知识中的基本概念、基本思想或原理组
阅读全文
摘要:http://vdisk.weibo.com/s/z5GRhild197JV
阅读全文
摘要:事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行。事务的典型实例是转帐。 事务的范围 事务由3个命令控制:BEGIN、COMMIT和ROLLBACK。BEGIN开始一个事务,之后的所有操作都可以取消。COMMIT使BEGIN后的所有命令得到确认;而ROLLBACK还原
阅读全文
摘要:SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。1. 数据查询语言DQL数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2 .数
阅读全文
摘要:数据库管理系统(DBMS)是指数据库系统中对数据进行管理的软件系统,它是数据库系统的核心组成部分,对数据库的一切操作(增删改查)都是通过DBMS进行的 DBMS的工作模式如下: 1>接受应用程序的数据请求和处理请求 2>将用户的数据请求(高级指令)转换为复杂机器代码(底层指令) 3>实现对数据库的操
阅读全文
摘要:什么是数据库? 数据库是一个以某种有组织的方式存储的数据集合。也就是:保存有组织数据的容器(一个文件或一组文件) 为什么我们需要数据库? 毫无疑问,数据库是用来存储数据的。我们对excel肯定不会陌生,excel也是用来存储数据。那既然有excel这样非常好用的软件了,为什么需要数据库呢?? exc
阅读全文
摘要:只会写代码的是码农;学好数据库,基本能混口饭吃;在此基础上再学好操作系统和计算机网络,就能当一个不错的程序员。如果能再把离散数学、数字电路、体系结构、数据结构/算法、编译原理学通透,再加上丰富的实践经验与领域特定知识,就能算是一个优秀的工程师了。 计算机其实就是存储/IO/CPU三大件; 而计算说穿
阅读全文
摘要:相对于其它存储方式,存储只是数据库的一个功能,数据的组织和管理才是数据库的核心。 J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务;数据的存储独立于使用它的程序;对数据库插入新数据,修改和检索原有数据均能
阅读全文
摘要:为了能搞明白以太坊钱包的私钥、公钥和账户地址的概念得先补充点密码学的基本知识。 非对称加密 对称加密算法在加密和解密时使用的是同一个秘钥;与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进
阅读全文
摘要:原 理 以太坊数字签名和比特币的关系 以太坊数字签名,几乎完全沿用了比特币的数字签名算法ECDSA-secp256k1。只有哈希的生成方式不一样,这个之后会说。ECDSA-secp256k1是一种非对称加密算法。 什么是ECDSA 以太坊数字签名算法使用的是椭圆曲线数字签名算法,英文简称ECDSA。
阅读全文
摘要:这些字段的详细解释如下: AccountNonce:此交易的发送者已发送过的交易数(可防止重放攻击) Price:此交易的 gas price GasLimit:本交易允许消耗的最大 gas 数量 Recipient:交易的接收者地址,如果这个字段为 nil 的话,则这个交易为“合约创建”类型交易
阅读全文
摘要:以太坊的Transcation结构如下: // 以下为交易本身数据信息 let accountNonce: UInt64 let price: BigInt let gasLimit: BigInt let recipient: Address let amount: BigUInt var pay
阅读全文
摘要:A smart contract is a computer code running on top of a blockchain containing a set of rules under which the parties to that smart contract agree to i
阅读全文
摘要:智能合约(smart contract)这个术语至少可以追溯到 1995 年,是由多产的跨领域法 律学者尼克·萨博(Nick Szabo)提出来的。他的定义是“一个智能合约是一套以数字形式 定义的承诺(promises) ,包括合约参与方可以在上面执行这些承诺的协议。” 承诺 一套承诺指的是合约参与
阅读全文
摘要:(Smart Contract)是时下非常热门的概念,但是它在 20 多年前就已经被非著名计算机科学家 Nick Szabo 提出了,它将智能合约描述为一种以信息化方式传播、验证或者执行合约的计算机协议,能够允许在没有第三方的情况下进行可信的交易,并且这些交易是无法被追踪、同时也是不可逆的。 A s
阅读全文
摘要:锁定脚本:这笔钱发送给A(包含A的共钥); 解锁脚本:我是A,这笔钱是我的; 锁定脚本:我要验证你的身份; 解锁脚本:这个是我用我的私钥签名的上一笔交易信息的签名; 矿工: 1、使用解锁脚本关联的公钥的地址的hash信息与锁定脚本的地址hash比较; 2、如果一致; 3、获取共钥,使用公钥+上一笔交
阅读全文
摘要:First of all two matching scripts are used in two different transactions, one that transfers funds to an address (Transaction A) and one that spends t
阅读全文
摘要:bitcoin 源码解析 - 交易 Transaction(三) - Script 之前的章节已经比较粗略的解释了在Transaction体系当中的整体运作原理。接下来的章节会对这个体系进行分解,比较详细描述细节的构成。 本章将要详细分析bitcoin交易中的交易脚本-script到底是什么东西。
阅读全文
摘要:先张骨头再长肉 软件架构是什么:以什么样的形式(结构)来组织要素,以更好维护软件长期质量和解决应用问题。 软件的组织结构,什么东西放到什么地方 软件架构的核心问题是: 结构、组织、依赖、扩展。 软件架构关注核心功能的技术组织。
阅读全文
摘要:是类型与算法是否为可变的问题,及相互结合的问题。 类型的变化方式; 算法的变化方式; 数据+算法、数据+数据、算法+算法的结合问题。 编程语言的核心问题是: 数据与算法的结合; 数据扩展与修改;同一算法接口对类属数据的处理。 算法与算法的结合; 三个问题。 数据与算法的结合; 数据的类属化; 同一签
阅读全文
摘要:软件的内核和灵魂是软件提供的服务,是软件实现的业务。 软件本身只是这个内核和灵魂的外壳。 软件是信息服务产品;软件开发的最初动力是原始股票市场的信息版,大学校园的信息版,通信,计算。 软件的基础材料有操作系统和编程语言提供,使用计算机硬件的能力; 相对于硬件,软件的开发具盒修改具有灵活性,和在画板上
阅读全文