Java实现区块链小实例

通过本文,你将可以做到:

创建自己的区块链
理解 hash 函数是如何保持区块链的完整性的
如何创造并添加新的块
多个节点如何竞争生成块
通过浏览器来查看整个链
所有其他关于区块链的基础知识
但是,对于比如工作量证明算法(PoW)以及权益证明算法(PoS)
这类的共识算法文章中将不会涉及。同时为了让你更清楚得查看
区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 
网络比如“对等网络”等内容将在将来的文章中讲解。

让我们开始吧!

设置

我们假设你已经具备一点 Java 语言的开发经验,以及maven项目构建经验。
在安装和配置 Java 开发环境后之后,我们新建maven项目,在pom中增加一些依赖:
<!--超小型web框架-->
  <dependency>
    <groupId>com.sparkjava</groupId>
    <artifactId>spark-core</artifactId>
    <version>${spark.version}</version>
  </dependency>
Spark-web Framework是一个基于jetty的超小型框架,我们用它来写http访问的请求处理。
 <dependency>
   <groupId>commons-codec</groupId>
   <artifactId>commons-codec</artifactId>
   <version>${commons.codec.version}</version>
 </dependency>
这个通用包拥有几乎所有加解密算法及常规操作
 <dependency>
 <groupId>com.google.code.gson</groupId>
 <artifactId>gson</artifactId>
 <version>${gson.version}</version>
 </dependency>
Google的json包,当然你可以使用你喜欢的其他json包。

最后,增加log相关的包
<!--log start-->
<dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>${log4j.version}</version>
 </dependency>
<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-api</artifactId>
 <version>${slf4j.version}</version>
 </dependency>
<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
 <version>${slf4j.version}</version>
 </dependency>
<!-- log end -->
 相关版本属性设置
<properties>
<commons.codec.version>1.9</commons.codec.version>
<spark.version>2.6.0</spark.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<gson.version>2.8.2</gson.version>
</properties>

数据模型 read more

try-finally中return的执行先后顺序

关于try-finally中return谁先执行,刚开始只记得是一个面试题;
今天遇到了较类似的情况,于是写了个小的事例进行测试
public String getString() {
    try {
      System.out.println("try");
      return "try中return";
    } finally {
      System.out.println("finally");
      return "finally中return";
    }
}
以上是try和finally都有return的情况;
执行结果为:

try
finally
finally中return

如果注释掉finally中的return,执行结果为:

try
finally
try中return

总结:
无论try中是否有return语句,finally内的语句都会执行

Idea自定义类注解

1.点击左上角file找到Settings...并点击
2.搜索file and Code Templates
3.选中file选项卡,找到Class并点击,可看到当前生成类的model
4.在public class ..这行上面添加自己想要的注解model
下面是我的当前model
/**
 * 描述:
 *    ${DESCRIPTION}
 * @author ${USER}
 * @create ${YEAR}-${MONTH}-${DAY} ${TIME}
 */
由于本人方法注解一直使用系统默认样式,所以并没有对方法注解进行自定义处理