引言
这篇文章介绍了MerkleTree,MerkleTree被广泛的应用在比特币技术中,本文旨在通过代码实现一个简单的MerkleTree,并计算出Merkle tree的 TreeRoot
我有个朋友有算法强迫症,每次一看到别人写的算法,就有上去改的冲动,不然就会偏头疼,主要症结在于他认为别人写的算法不好,但是什么的算法可以评判为好,什么样的算法可以评判为不好?最近为了治愈他,我特地写了这篇文章。
算法的衡量从两个方向出发:时间复杂度和空间复杂度。本文主要是不讲具体算法,只将算法的衡量,重点讲解如何衡量算法的复杂度,解决平时见到的XX算法时间复杂是$O(\log^n)$,其中这个结果是怎么推导出来的?$\log^n$是个什么玩意儿?,大写的$O$是什么意思?为什么用这个符号表示等类似问题。
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。
在《一万字带您走进密码学的世界(上)》的文章中我们探讨了对称密码体系,哈希函数等技术,本文继续探讨密码学剩余的部分,本文的主要内容包括,非对称密码体系,签名算法等,因为本部分是区块链技术的基石,所以我会讲的更加详细一点,虽然我已经尽最大努力使思想简化,但是其中的数学理论对于很多人还是很晦涩,建议读者开始之前先读下数论的有关知识。本部分的主要结构如下:
软件工程是一门研究方法论且非常宏观的课程,对于与一个初级开发者来说,看到有些概念和定义觉得非常没有意义,感觉学这些是在浪费时间,可能做了多年开发之后才能真正理解其中的痛楚,有些前人总结的方法和教训我们还是要注意的。不要等吃亏了之后再回头。
今天在英国做的一个技术债务的分享,其中拿了阿里巴巴的数据库演进做了案例分析,其中的有些数据可能不够准确,毕竟之前没在阿里工作过,但是不影响对其中的讲解。下面引用维基百科技术负债的定义开始本文的分享。
技术负债(英语:Technical debt),又译技术债,也称为设计负债(design debt)、代码负债(code debt),是编程及软件工程中的一个比喻。指开发人员为了加速软件开发,在应该采用最佳方案时进行了妥协,改用了短期内能加速软件开发的方案,从而在未来给自己带来的额外开发负担。这种技术上的选择,就像一笔债务一样,虽然眼前看起来可以得到好处,但必须在未来偿还。软件工程师必须付出额外的时间和精力持续修复之前的妥协所造成的问题及副作用,或是进行重构,把架构改善为最佳实现方式。
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通信秘密的,称为编码学;应用于破译密码以获取通信情报的,称为破译学,总称密码学。
为了使读者对密码学有一个整体的认识,本文简述了常见的密码学的概念,其中本文包括对称密码,哈希函数。
《一万字带您走进密码学的世界(下)》包括非对称密码,数字签名,数字认证等,需要指出的是文中并没有深入探讨加密算法原理,关于此部分内容,后续的文章会详细阐述。本文的主要内容如下图所示:
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)