自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

西木风落

在饱经沧桑的路上,独行如我

  • 博客(204)
  • 资源 (4)
  • 收藏
  • 关注

原创 基于snowflake的Id序列号生成器

背景在分布式微服务系统中,通常需要全局唯一的序列号,需求实现简单高效,通常的做法可以用数据库的自增id,UUID生成等。但数据库自增id局限在于依赖于数据库表,在效率上有所折扣,尤其是高并发量的场景。而UUID一般比较长,关键是无序的。twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,...

2018-11-17 11:42:15 1365

原创 java 非常好用的反射框架Reflections

Reflections通过扫描classpath,索引元数据,并且允许在运行时查询这些元数据。使用Reflections可以很轻松的获取以下元数据信息:1)获取某个类型的所有子类;比如,有一个父类是TestInterface,可以获取到TestInterface的所有子类。2)获取某个注解的所有类型/字段变量,支持注解参数匹配。3)使用正则表达式获取所有匹配的资源文件4)获取特...

2018-10-17 18:03:30 15290 5

原创 springboot项目启动抛: java.lang.NoClassDefFoundError: javax/el/ELManager

借助外部tomcat7, 启动springboot(2.0.5.RELEASE)项目,抛出错误Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.validation.beanvalidation.LocalValidatorFa...

2018-09-29 09:47:54 10457 5

原创 开发第一个基于以太坊的dapp

在开发第一个dapp之前,需要做一些准备工作。1、了解什么是以太坊、智能合约?2、了解solidity语言,知道如何用solidity写一个只能合约3、对truffle脚手架有一定了解4、对node.js有一定了解 一、安装开发环境   truffle是一个帮助我们快速开发dapp的工具框架,它的安装依赖于node.js。 1、直接在nodejs官网下载nodejs...

2018-09-19 17:14:23 2801

转载 IPFS——下一个Http取代?

IPFS,(InterPlanetary File System)星际文件系统的缩写,是一种内容可寻址、版本化、点对点超媒体的分布式协议。IPFS是点对点的超媒体协议,可以让网络更快、更安全、更开放。它是一个面向全球的、点对点的分布式版本文件系统,试图将所有具有相同文件系统的计算设备连接在一起。其工作原理: 每个文件及其中的所有块都被赋予一个称为加密散列的唯一指纹。 IPFS通过网...

2018-09-15 18:40:35 338

翻译 solidity 以太坊智能合约语言(六)

1、solidity中的变量定义在solidity中,变量声明后都会默认赋值为初始值。对于引用类型,声明后还需要显示分配内存。 对于映射类型,不显示初始化也可以使用,不过里面没有任何值。 枚举如果没有初始化,默认取顺位第一个值; 结构体没有初始化,里面所有变量是初始值。非常关键的一点:变量无论在函数什么位置定义,作用域都是这个函数。2、solidity中的delete操作符...

2018-09-07 17:41:16 646

转载 区块链--默克尔树(Merkle Tree)

Merkle Tree默克尔树是一种二叉树,由一个根节点、一组中间节点和一些叶子节点组成。形状如下:D0、D1、D2和D3是叶子节点包含的数据,也就是叶子节点的value。继续往上看,N0、N1、N2和N3就是叶子节点,它是将数据(也就是D0、D1、D2和D3)进行hash运算后得到的hash值;继续往上看,N4和N5是中间节点,它们各是N0和N1经过hash运算得到的哈希值以及N2和...

2018-09-07 16:15:25 6262

原创 solidity 以太坊智能合约语言(五)

对数据结构的进一步深入理解1、数据位置变量的存储位置有三种:memory, storage和calldata。calldata比较特殊,一般只有外部函数的参数被强制指定为这种类型。memory存在EVM的内存中,storage将会被存放在链中block。函数参数的默认位置是memory,状态变量是storage。2、数据位置的相互转换2.1 storage转storage时,只...

2018-09-06 18:14:23 329

原创 solidity 以太坊智能合约语言(四)

1、UXTO是什么?UXTO是Unspend Transaction Output,字面意思就是不需要花费的交易输出。有几个典型缺点: 价值盲(Value-blindness)。UTXO脚本不能为账户的取款额度提供精细的控制。例如,预言机合约(oracle contract)的一个强大应用是对冲合约,A和B各自向对冲合约中发送价值1000美元的比特币,30天以后,脚本向A发送价值1000...

2018-09-06 16:27:36 1006

原创 solidity 以太坊智能合约语言(二)

Solidity的完整语法:Solidity源文件结构:语法版本 引入外部源文件 注释Solidity智能合约文件结构状态变量 函数 函数修饰器 事件Events 结构体类型Struct 枚举类型Enum值类型:类型 布尔(Booleans) 整型(Integer) 地址(Address) 字节数组(byte arrays) 小数 字符串(String...

2018-09-06 10:29:15 215

原创 solidity 以太坊智能合约语言(三)

ABI(Contract Application Binary Interface)详解ABI是以太坊合约间相互调用的一种消息格式,包括从链外部调用链,或者合约之间的相互调用,类似于常见的rpc协议一样,也就是定义操作函数签名,参数编码,返回结果编码等。1、函数使用ABI协议的时候,必须要求在编译的时候知道类型,不支持动态类型编译。同时,协议假设编译期间知道另一个合约的接口定义,所以协...

2018-09-05 19:00:03 358

原创 solidity 以太坊智能合约语言(一)

关于以太坊以及智能合约的一些基本概念,LZ在这里不做介绍。此系列blog的主要目的是智能合约编写语言solidity的学习。1、Solidity语言Solidity是一种接近JavaScript语法的程序语言,也是这一种面向对象的语言,作为一种真正运行在网络上的去中心合约语言,有一些特点:以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的Address的类型。用于定位用户,定位合约...

2018-09-05 16:16:34 1858 1

原创 SpringMVC 项目启动的加载顺序(一)父类容器的启动

最近在研究Spring MVC项目的启动加载顺序,做一个具体说明:一、web容器的启动1、web项目启动的时候,容器会优先读取web.xml文件,并且先找到<listener></listener>和<context-param></context-param>两个节点;2、容器会创建一个ServlextContext上下文,并解析<conte...

2018-07-15 19:27:34 9256 1

原创 java工具类——Collections.unmodifiableList

有时候,我们希望对list中对象具有不可变性,尤其是对list的add或者remove操作。普通的list不能满足这个需求,用到工具类Collections.unmodifiableList方法,传入一个list,返回的是list的一个视图,之后对list进行add、remove等改变其内容的操作将导致编译不通过。...

2018-07-13 15:04:39 312

原创 springMVC HandlerMapping和HandlerAdapter以及数据绑定器DataBinder

方法

2018-07-05 15:56:03 172

原创 spring中BeanFactoryPostProcessor和BeanPostProcessor

反反复复

2018-07-04 20:22:42 236

原创 java web请求三大器——listener、filter、servlet

一、servlet1、什么是servletJava Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。2、servlet与tomcatTomcat 是Web应用服务器,是一个Servlet/JSP容器.Tomcat 作为Servlet容器,将http请求文本...

2018-06-26 11:44:16 1751 1

原创 http中getParameter和getAttribute的区别

最近项目中有用到从HttpServletRequest中获取参数的用法,通过request.getParameter()和request.getAttribute()都能获取到request中的参数,这两种有何区别?request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回Strin...

2018-06-26 09:38:27 2389

原创 java 中System.gc和finalize方法

 1.finalize()介绍finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 finalize()与C++中的析构函数不是对应的,但Java中的finalize的调用具有不确定性。 finalize方法在垃圾回收器准备垃圾回收前被调用,但是不一定会被调用 finalize()其实是用来释放不是通过jav...

2018-06-18 19:36:53 2441

原创 Redis基础使用(三)——高可用集群

Redis高可用Redis主从模式Redis哨兵模式Redis集群模式

2018-06-10 18:45:39 308 1

原创 Spring中的事件机制

1、先理清楚几个基本概念:    1)事件驱动模型    当事件被触发的时候,将事件加入一个事件队列,然后通过主程序不断轮训事件队列,处理目标函数。常见的事件驱动如鼠标点击事件、IO事件等,观察者设计模式就是事件驱动的一个很好实现。    2)消息驱动模型/发布订阅模型    本质上讲,事件驱动和消息驱动相当,只是各自应用在不同的场景下。事件模式耦合高,同模块内好用;消息模式耦合低,跨模块好用。2...

2018-06-10 17:00:19 2250

原创 单例模式介绍

1、什么是单例模式    保证一个类仅有一个实例,并提供一个访问它的全局访问点。2、单例模式有什么好处对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销;由于 new 操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻 GC 压力,缩短 GC 停顿时间。3、为什么不使用全局变量    如果对象非常消耗资源,并且程序某次的执行中一直没用,这样...

2018-05-27 18:13:33 281

原创 Spring实战学习(二)

Spring IoC容器的设计与实现1、什么是IoC容器  前一篇文章说到里spring IoC,什么是IoC容器?本质上是Spring IoC管理系统的一个抽象,所有符合IoC特性的对象都被纳入了进来,像容器一样存放,所以对像依赖关系的管理交给里IoC容器,解放里对像依赖关系的管理与系统运行状态的关联性。2、IoC的设计与实现  Spring IoC容器的设计实现分为两个系列,一个是实现Bean...

2018-04-22 23:02:09 178

原创 Redis基础使用(一)

Redis数据结构Redis过期策略和淘汰机制Redis持久化机制Redis事务实现

2018-04-21 18:58:17 434 1

原创 Java项目工程重构

重构是一个老生常谈的话题。1、什么是重构    重构是不改变项目现有的业务逻辑或者代码逻辑,对程序进一步提炼或者扩展,使其在结构上更容易理解,代码的规范性更强,耦合性更弱。非常重要的一点,重构与性能没有必然的关系。2、为什么重构    当看到一个函数上千行代码,有没有心累?当看到一个类巨大,改一行代码结果整个程序就运行不起来了,要不要崩溃?更关键的是,调用了很长一串函数,每个函数干了谁都不知道的逻...

2018-04-15 22:33:56 6467

原创 如何排查线上Java程序运行情况

项目上线后,不可能有debug模式,所以会长借助一些工具帮忙分线线上的运行情况,这些运行时信息包括但不限于运行日志、异常堆栈、堆使用情况、GC情况、JVM参数情况、线程情况等。主要介绍一些常见的分析命令:1. jpsjps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。非常关键的一点:jps会查找当前用户权限下的所有java进程。 jps -v 输出传递给J...

2018-04-07 19:04:08 1187

原创 跳槽二三事

在2017年末的时候,也对自己的第一份工作画上了句号!先预祝自己在新的一年里有更好的发展~~接下来说说找工作这事吧;1、确定自己是否要走?    如果确定好自己要走,那就果断一点,但走的时机需要好好把控,因为需要找到别的工作后才离职吧,裸迟风险很大。2、什么时候给老大说走?  确定好下家offer后,再和老大好好谈谈,不要过早,也不要过晚;过早的话(像LZ),公司很多人都知道了

2017-12-29 16:49:49 228

原创 二叉树的遍历

二叉树的基本遍历,包括前序、中序和后序,实现方式有递归和非递归;public static void preOrder(TreeNode root){ if(root != null){ visit(root); preOrder(root.left); preOrder(root.right);

2017-12-13 14:48:18 163

原创 Rotate ListNode In K Groups

K个节点一组,反转链表;private Node reverse(Node pre, Node next){ Node last = pre.next; Node cur = last.next; while(cur != next){ last.next = cur.next; cur.next = pre.next; ...

2017-12-12 11:10:47 225

原创 大顶堆排序

堆排序的思想借助了二叉排序树,时间复杂度:O(NlgN),空间复杂度O(N)。首先需要构建堆,堆分为大顶堆和小顶堆,如果是大顶堆,任意一个元素,满足arr[i] >=arr[2*i +1] && arr[i] >=arr[2*i+2];小顶堆满足arr[i] <=arr[2*i+1] && arr[i] <= arr[2*i+2];堆...

2017-12-12 10:46:46 767

原创 HashMap的简单实现

依据hashmap的原理,自己实现了一个简易版: public class MyHashMap&lt;K, V&gt; { private int capacity; private double loadFactor = 0.8; private Entry[] table= null; private int size; public...

2017-10-19 17:26:03 304

原创 zk实现分布式锁

利用zookeeper实现高效分布式锁

2017-10-18 20:53:39 1551 1

原创 java中的代理

对于java业务而言,通常会把主体业务和枝节性代码分开,比如做数据库更新的时候,会把事务的管理和真正的业务逻辑分开,这样既提高了管理类的使用效率,也降低了管理类和业务的耦合。类似的情况还有日志记录、信息监管等。代理模式:为其它对象提供一种代理以控制对这个对象的访问。代理模式的角色:抽象角色:声明真实对象和代理对象的共同接口代理角色:代理对象内部包含有真实角色的引用,从而可以操作真实

2017-10-18 10:26:03 632

原创 java 锁全面解析(二)

接着上篇java 锁全面解析(一)四、java.util.corrent包Lock接口及其实现提供了与synchronized关键字类似的同步功能,与synchronized关键字相比,缺少了隐式释放锁的便捷,但是拥有锁获取和释放的可操作性、可中断的获取锁以及超时获取锁等多种同步特性。1、Lock具备的特性1)尝试非阻塞地获取锁2)能被中断的获取锁3)超时获取锁常见的使

2017-09-06 20:25:16 376

原创 java 锁全面解析(一)

熟悉Java使用的coder都知道,Java程序离不开多线程,而涉及到多线程时,就需要考虑资源的共享性问题,最终这一切都逃不过锁的命运。本次主要对Java中的锁做一些总结,包括:一、Java内置锁synchronized二、JDK 5中提供的java.util.concurrent.lock包中的Lock对象三、Java ThreadLocal为什么需要锁,相信小伙伴们都知道了,所

2017-09-06 20:00:32 532

原创 Spark学习

RDD的创建方式1)从Hadoop文件系统输入创建,如HDFS,HIVE,HBase;2)从父RDD转换得到新的RDD,如常见的transformation3)通过parallelize或者makeRDD将单机数据转换为RDD4)基于数据流创建,如kafka流;从集合创建RDD1、利用parallelize,函数是def parallelize[T](seq: Se

2017-07-11 11:10:04 396

原创 AOP之二三事

AOP(Aspect-Oriented Programming),面向且面的编程,与OOP仅一字只差,但他是OOP编程的一个补充。通俗来讲,就像是刀切面,应用程序视为一团面,用刀横向切面,所以接下来需要说如何实现刀。1、写代码    写一个简单的接口public interface Hello { void say(String msg);}   接口的实现类publ

2017-07-09 18:06:56 193

转载 大数据学习七

SPARK1、Spark的生态系统    Spark Core:engine    Spark SQL :交互式查询    Spark Streaming:流式计算    MLLib:机器学习和数据挖掘    GraphX:图计算2、基本概念   RDD:分布式内存的一个抽象   DAG:有向无环图,反映RDD之间的依赖关系   Executor:运行在工作

2017-06-17 17:05:59 1040

转载 大数据Hadoop学习六

1、Hadoop的改进    Hadoop 1.0到2.0的改进分为MapReduce和HDFS架构的演进。另一方面,不断加入kafka,spark,pig,tez等新的组件。    Hadoop2.0 针对HDFS涉及了HDFS HA,提供名称节点的热备份;    设计了HDFS Federation管理多个命名空间;    涉及了新的资源管理框架YEAR。2、HDFS HA

2017-06-17 15:42:35 549

转载 大数据学习五

1、Hive是一个架构于Hadoop顶层的数据仓库工具,本身不具有存储处理数据的能力,某种程度上可以看作是编程接口。     Hive的存储依托于Hadoop底层的HDFS,数据处理依托于MapReduce,提供类似SQL的查询语句HQL。

2017-06-17 11:19:56 317

可直接运行的Java web jar 镜像

可以直接运行的Javaweb jar 镜像。先加载.tar压缩包为镜像,然后运行命令: docker run -d myapp:v1.0 -p 8088:8088 /bin/bash

2021-01-24

consumer.start.pdf

AA test consumer.start.pdf

2019-11-08

java -五子棋

界面人性化,五子棋算法经典,是参考很多文献后的结果

2013-09-17

Alarm.java

能获取系统当前时间,并在面板中画出了始终的动态走动图;可以实现闹钟的设置可取消任务,闹钟响后,可以选择stop功能。

2013-08-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除