读《腾讯传》后感

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

阅读更多

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

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

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

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

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

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

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

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

阅读更多

Go 的单元测试小结

Go 下有几种单测方法:

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

Go 语言学习汇总

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

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

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

阅读更多

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

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

阅读更多

Java 8 中的函数式编程与流之总结

还记得在上一份工作面试时,被问到了是否熟练 Java8Scala, 我说不会。

Java 8 本已是一项不新的技术,虽然不复杂,却没掌握,的确是我不该。入职新东家后,纯正的互联网基因给了我短时间掌握和使用的机会。在学习了 《Java 8 in Action》,并经过一段时间实践后,在此做一次后知后觉的总结。

Java 8 于 2014年 3月发布,主要的新特性我认为就是两个:流处理、函数式编程。

函数式编程是一个古老而久远的话题。一句话总结,就是函数被作为一等公民,方法可以直接传递函数,函数只有输入输出,而不对外界造成影响(无共享的可变数据)。例如方法 getBetterApple(Apple A, Apple B, Comparator<Apple> comp) 中的 Comparator<Apple> 就是一个函数,此处定义了一个方法实现获得一个更好的苹果,但具体什么是“好”的这个评判标准,则可以通过传入函数来改变,例如按照大小、颜色、水分等等来比较。为了适应函数式编程,Java 8 对原有的接口做了相应改变,允许了在 interface 中定义 default 默认方法

,是针对日常工程中最为常见的集合制造与处理过程,其基础是函数式编程。Java8 提供了过滤、映射、循环等常用操作的 Stream API,并支持开发者自定义实现。并在流基础上,提供了多线程封装,只需要将 stream() 改为 parallelStream() 就完成了从单线程向多线程的转变,非常简单,不过其中也有些细节(坑),下文会展开介绍。

除了以上两点,Java 8 还提供了 Optional 、异步 API、新的时间处理API 等。

阅读更多

读《代码整洁之道(Clean Code)》后感

《Clean Code》是一本不太厚的书,在大学时就拜读过,工作一段时间后又重拾读了一遍,又有了些新的感悟,再次略做随笔。

如果时间退回到大学,包括《Clean Code》,《重构》,《设计模式》此类书必然被我奉为神书,战战兢兢地写着代码,生怕哪里违反了什么什么准则,什么什么约定。

工作几年后看,并不是这样。更多了一些淡然,或者说破罐子破摔?大误。

例如书中强调对类、方法、变量的最合理的命名,而减少注释。事实是,即使在当下这家不错的互联网公司,对英语的理解力都是不足的,更别说前几家东家中还存在着大量的技艺勉强,英语更不敢评价的外包员工。连命名都困难的话,如果仅仅依靠代码理解业务逻辑,更是不敢想象。因此实践中,前 TL 也是强制对代码注释提了需求,也是可以理解的。

Coding 进入实际工程,准则和约定都多了不少妥协。但程序员,或者是工程师们,在当代即是一类工匠。工匠们不仅产出手艺成品,也产出智力产品。工匠需要工匠精神,对程序员而言,就是整洁高效的代码。

这是一种哲学理念。所谓 “格物致知”,从代码就能看出一个程序员对自己技术的追求。

在书中,也提到了对代码的 5S 哲学,包括:

  • 整理(Seiri),理清事物本质,并善于设计
  • 整顿(Seiton),系统化,物皆有其位,而后物尽归其位
  • 清楚(Seiso),命名注释清晰,无废弃代码
  • 清洁(Seihetsu),标准化
  • 身美(Shitsuke),自律、持续迭代、重构

一个优秀的程序员,必定会对自己的技艺不断的追求精进,格物致知,码品如人品。

阅读更多