Ant Array Collection Cryptography Formal Specification Go Gradle Https JDBC JDK JVM Java License Markdown Maven MyBatis Quartz RSA Reading SHA Spring TLA+ ivy 最佳实践
2018-04-23

读《腾讯传》后感

花了两天时间,读完了吴晓波的《腾讯传》。最初了解此书,是去年听吴晓波频道时,吴晓波自己推荐过的。当时便产生了兴趣,只是家中未读的书实在有些多,租房不易,便没急着买。恰巧抓抓公司多了一批赠书,便向他低价买本,托他邮寄给了树懒。树懒作为产品经理,这本书对其有着莫大的参考价值,但这女人两个月才看了不足 1/3,着实不似一个爱书之人,便让她带回家给我看了。



2017-12-26

密码学入了个门,总结一下

在深入学习区块链时,不可避免的需要了解密码学。区块链算是对密码学的一次整合运用,虽然并无太多创新的密码算法,但也值得深入了解一下。

之前对密码学并无太多的研究,因此买了两本简单的书学了学,在此做一个汇总。

密码,最初的目的是用于对信息加密,计算机领域的密码技术种类繁多。但随着密码学的运用,密码还被用于身份认证、防止否认等功能上。

最基本的,是信息加解密分为对称加密(Sysmmetric Cryptography)和非对称加密(Public-Key Cryptography,Asymmetric Cryptography),这两者的区别是是否使用了相同的密钥。

除了信息的加解密,还有用于确认数据完整性(Integrity)的单向散列(One-Way Hash Function)技术,又称密码检验(Cryptographic Checksum)、指纹 (Fingerprint)、消息摘要 (Message Digest)。

信息的加解密与信息的单向散列的区别是,对称与非对称加密是可以通过密钥解出明文,而单向散列是不可逆的。信息的加解密,密文必定是不定长的,而单向散列可以是定长的。

结合密码学的加解密技术和单向散列技术,又有了用于防止篡改的消息认证码技术,防止伪装的数字签名技术以及认证证书



2017-11-26

聊聊 Formal Specification, 举个验证并发的例子

在 17 年 11月 20日那篇文章中,拉开了 TLA+ 的序幕。终于从无到有,了解了 TLA+ 的面貌。

但对于 TLA+ 真正的威力,前一篇文章,并没有感性的认识。在学习的过程中,找到了一个网上比较好的例子,可以 帮助对 TLA+ 有更深入的理解,例子摘自 Learn TLA+ 网站


在交易系统中,转账是最为常见的业务需求。

设想有这样一个普遍场景,甲的账户有 10元,乙账户有 10元,此时甲将 5元转至乙账户,那么甲账户金额变为 5元,乙账户金额变为 15元,转账完成。

但是,事情往往并没有我们所想象的那么简单。



2017-11-20

聊聊 Formal Specification, 从 TLA+ 讲起

第一次听到 TLA+ 是自大丰哥与德国慕尼黑参加数据库大会时,听了 Microsoft 所做汇报时,了解到的。处于大家对此新生事物的好奇,他遍将此作为一项课题,安排于我,因此有幸对 TLA+ 做进一步的研究。
在研究过程中,随着对 TLA+ 的了解的逐步加深,我见识到了 Formal Specification (以下简称 Spec)这个更为广阔的领域。
Spec 是一个有着半个世纪历史的研究领域,自从大型机时代,便有了其雏形。那时的软件开发手段并不如现在那样丰富,也缺乏系统性的理论知道,数学家、计算机科学家等致力于为软件系统开发提供更为安全、可靠、HA 的软件系统,在此摸索过程中,遍诞生了 Spec 这的研究。



2017-10-31

Go 的单元测试小结

Go 下有几种单测方法:

  1. 基础测试 basic test,只使用一组参数和结果来测试一段代码
  2. 表组测试 table test,多组参数和结果测试一段代码
  3. 模仿 mock,模拟网络和数据库环境,进行测试



2017-10-23

Go 语言学习汇总

在区块链的研发过程中,无法避开对 Go 语言的学习,Go 对并发的支持是其最重要的特性之一,也是区块链这样的分布式系统所钟爱 Go 的原因之一。

Go 语言是一门静态类型的,面向过程的非解释性的语言,其内置并发机制,自带垃圾回收器,编译与开发速度都极快。

学习语言最快的方法,便是在应用中学习,并深入了解其底层的原理。通过对代码的学习以及对 《Go 语言实战》一书的学习,在此文中对 Go 作一些总结。



2017-05-17

深入理解 JVM(一)Java的内存区域

JVM 作为 Java 学习的核心概念,承载了 Java,compile once run everywhere 的理念。理解 JVM 是每一个 Java DEV 的必修课。
Java 的虚拟机会在执行 Java 程序的过程中,把其所管理的内存划分为若干不同的数据区域。在本篇文章中,通过对《深入理解Java虚拟机 JVM高级特性与最佳实践》一书的阅读,做以下知识点的梳理与总结。



2016-12-23

HTTPS 原理与实现

在日常互联网浏览网页时,我们接触到的大多都是 HTTP 协议,这种协议是未加密,即明文的。这使得 HTTP 协议在传输隐私数据时非常不安全。因此,浏览器鼻祖 Netscape 公司设计了 SSL(Secure Sockets Layer) 协议,用于对 HTTP 协议传输进行数据加密,即 HTTPS 。

HTTPS 和HTTP 协议相比提供了:

  • 数据完整性:内容传输经过完整性校验
  • 数据隐私性:内容经过对称加密,每个连接生成一个唯一的加密密钥
  • 身份认证:第三方无法伪造服务端(客户端)身份

SSL 目前版本是 3.0,之后升级为了 TLS(Transport Layer Security) 协议,TLS 目前为 1.2 版本。如未特别说明,SSL 与 TLS 均指同一协议。



2016-12-23

Spring Scheduler 与 Quartz 进阶

在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一段时间检查下网络状态并发送邮件等诸如此类的定时任务。

定时任务本质就是一个异步的线程,线程可以查询或修改并执行一系列的操作。由于本质是线程,在 Java 中可以自行编写一个线程池对定时任务进行控制,但这样效率太低了,且功能有限,属于重复造轮子。

事实上,当前实现定时任务已经有了比较好的解决方案,大致有以下几种:

  1. Spring Scheduler 框架
  2. Quartz 框架,功能强大,配置灵活(自然更繁琐 =。=)

本文将总结 Spring 定时任务。Let’s Begin



2016-11-20

如何选择各类开源许可证,有何异同?

IT 行业诞生初期,开源精神极大的推动了计算机行业的飞速发展。对于人类影响深远的例如 Internet 协议,邮件,FTP 服务,都是免费的。

计算机科学家们,无私共享出他们智慧结晶的产物。随着行业的发展,越来越多的从业者加入了这个行业,可如果秉持着开源免费的思想,缺乏市场足够的资金支持,行业也难以走的长远。因此,正是基于这个目的,开源社区衍生出了诸多的协议许可证。要使用开源自然可以,但使用者就必须遵守开源所附带的协议,只在许可范围内行事。

许可证是为了保护作者的合法权益(包括合理的知识产权和专利权力以及避免因开源惹火烧身的免责的权力),开源使软件开发者避免了重复造轮子,让后来者可以站在巨人的肩膀上做更多的事。有的许可协议宽松,有的协议严格,在此对这些协议进行一次梳理。

协议,当前有 开源许可证知识共享协议(Creative Commons, CC) 。开源许可证主要针对软件领域,知识共享协议主要针对文化产出,例如文章、数据、视频等。



1%