如果想要进行正则的处理操作,那么首先需要对常用的正则标记有所掌握,从JDK1.4开始提供java.util.regex开发包,这个包里面提供有一个Pattern程序类类,在这个程序类里面定义有所有支持的正则标记。

1、 【数量:单个】字符匹配

任意字符:表示由任意字符组成;
\:匹配 “\”;
\n:匹配换行;
\t:匹配制表符;

2、【数量:单个】字符集(可以从里面任选一个字符)

[……]

阅读全文

在调用三方API时,对某些特殊的接口要求响应时间比较高,如果响应超时后可继续执行其它逻辑的处理方法。

public class LimitedTimeExecutor {

    private static final ExecutorService THREAD_POOL = Executors.newFixedThreadPool(1);

    class Task implemen[......]

阅读全文

概述

分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID(java生成的UUID中间带”-“),但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。

有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。

而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cas[……]

阅读全文

前言

使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,分析springboot是如何帮我们简化这个过程的。

springboot帮我们做了什么

通常搭建一个基于spring的web应用,我们需要做以下工作:

1、pom文件中引入相关jar包,包[……]

阅读全文

疫情期间宅在家写了一个基于quartz及zookeeper写了一个简单的定时任务功能,实现了任务的统一管理,多节点部署,仅供学习研究。
开源地址:https://github.com/gbinb/rooster
Demo地址:https://rooster.fetosoft.cn:8000/task
运行效果如下:
[……]

阅读全文

1、实现序列化及反序列化的目的主要是为了实现网络中数据传输,hessian可以将对象序列化为二进制数据流,降低网络带宽,实现更高效的传输。
2、使用hessian实现序列化的对象要求必须实现java.io.Serializable接口,否则运行会报错。
3、我们来看一下具体的代码实现,首先自定义一个User对象:

public class User implements Serializable[......]

阅读全文

CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。它使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。可以说CAS是一种乐观锁,但它仍然存在一些缺点。如ABA问题,自旋锁消耗问题,多变量共享一致性问题

ABA问题:
问题描述:线程t1将它的值从A变[……]

阅读全文

协议概述

 两阶段提交协议(two phase commit protocol,2PC)可以保证数据的强一致性,许多分布式关系型数据管理系统采用此协议来完成分布式事务。它是协调所有分布式原子事务参与者,并决定提交或取消(回滚)的分布式算法。同时也是解决一致性问题的一致性算法。该算法能够解决很多的临时性系统故障(包括进程、网络节点、通信等故障),被广泛地使用。但是,它并不能够通过配置来解决所有的故[……]

阅读全文