`
文章列表
一、概述        单例模式,在设计模式中,是一个比较重要的设计模式。在开发中,如果某个实例的创建需要消耗很多资源,那么我们通常会选择使用懒性加载机制。何谓懒性加载机制呢?说白了,就是在使用到这个实例的时候,才去创建这个实例。这个机制在单例模式中,得到了很广泛的应用。这个机制在单线程的环境下实现非常简单,但是在多线程的环境下存在安全隐患。   二、单例模式下的懒加载机制        我们先来看看一个通常的单例模式的实现,如下所示: @Slf4j public class Demo { private static Demo demo = new Demo(); ...
一、简述        分布式锁一般有三种实现方式:第一,数据库乐观锁;第二,基于Redis的分布式锁;第三,基于Zookeeper的分布式锁。目前,在项目中有需要用到分布式锁的场景,因此学习并总结了。今天,咱们先来聊聊基于Redis的分布式锁。        要保证基于Redis的分布式锁可用,必须同时满足以下四个条件:1、互斥性:在任何时刻只能有一个客户端持有锁;2、避免死锁:即使有一个客户端在持锁阶段出现崩溃而没有主动释放锁,也要保证后续其他客户端能加锁;3、具有容错性:只要大部分Redis的节点能正常运行,客户端就可以加锁和解锁;4、唯一性:客户端在加锁和解锁的过程中,必须只能是 ...

SQL Joins图解

一、背景        在做业务系统服务端开发的时候,数据表之间经常需要join,吐出数据。下面是小弟在工作中对sql joins的总结,希望能帮到有需要的小伙伴。   二、sql joins简介        sql中join常用的有left join、inner join、right join,另外full join(full outer join)在实际工作中用的比较少。        1、left join        left join关键字:从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。语法如下: SELEC ...
一、背景        最近两个月的工作中,一直在监控线上应用的情况,并且在排查线上问题的时候,发现线上的机器十分之多,为了能够自动化、平台化的监控线上应用,选择了Metrics。Metrics是给Java服务的各种指标提供监控的一种工具包。   二、简介        结合项目组使用的是SpringBoot的应用部署方式和Maven的项目管理方式,引入Metrics的方式如下:   <dependency> <groupId>io.dropwizard.metrics</groupId> <artifactId> ...
一、背景        在Spring事务:编程式事务管理这一篇中简单的介绍了Spring中的编程式事务管理,本篇介绍下Spring中声明式事务管理。   二、声明式事务管理 1、Spring中声明式事务管理概述        Spring中的声明式事务管理在底层是建立在AOP的基础上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或加入一个事务,在执行完目标方法之后,根据执行情况再提交或回滚。        声明式事务最大的优点是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中加入事务管理代码,只需要在配置文件中做相关的事务规则声明,或者通过等价的基于标注的 ...
一、背景        在上一篇Spring事务:事务属性和API简介中,初步地介绍了关于Spring事务的一些属性和主要的API,这一篇主要论述的是Spring事务中的编程史事务管理。   二、编程式事务管理 1、Spring的编程式事务管理概述        在Spring出现以前,编程式事务管理对基于POJO的应用来说是唯一选择。之前学习过Hibernate,这里面的事务管理是需要在代码中显式调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。通过Spring提供的事务管理API,我们可以在代码中灵活控制 ...
一、背景        Spring这款开源框架自从诞生后,一直收到企业级应用的喜爱。应该这么说,只要是从事过Java开发的小伙伴,或多或少,都会了解一些关于Spring的知识。最近在工作中,负责一个服务治理平台的搭建,用到了Spring中的事务,因而学习了一下。下面是小弟在工作之余,总结的一些关于Spring事务的点,希望能帮到有需要的小伙伴。   二、Spring事务属性        Spring的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握。Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务 ...
一、四类隔离级别 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 Read Uncommitted(读取未提交 ...

git常用命令

    博客分类:
  • git
此篇文章只是为了总结小弟在工作中用到的git命令,希望可以帮到有需要的小伙伴。 1、从origin/master分支上新建分支 git checkout -b 分支名称 origin/master   2、将新建的本地分支推送到远程分支 git push -uf origin 分支名称   3、 ...
maven是一个很棒的项目管理框架,并且是开源的,所以很受开发小伙伴们的喜爱。下面是小弟在工作中总结的一些常用的命令,希望能帮到各位看官。 1、打包命令 mvn install -Dmaven.test.skip   2、发布二方库命令(自动打包到nexus库) mvn deploy -pl XXX-client -am -X   3、更新jar命令 mvn clean install -Denforcer.skip=true -Dmaven.test.skip=true -Dfile.encoding='UTF-8' -DuserProp=./antx.properties ...
一、背景 在实际的工作中,在服务与服务之间的交互中,异常是一个很重要的点,这里的异常有的是正常的业务异常,而有些确实程序本身抛出的异常,例如:服务A依赖服务B,服务B出现了NullPointerException,作为调用方,一定要做好异常的处理。下面是小弟在工作过程中,总结出来的一个统一处理异常的工具。 二、代码实现 1、定义服务返回结果DemoResult public class DemoResult<T> implements Serializable { private String errorCode; private String mess ...
这篇文章只是自己学习的东西,有兴趣的同学,可以看看。 #!/bin/bash if [ $# -lt 1 ]; then echo "USAGE: $0 classname opts" exit 1 fi JAR_PATH=`ls *.jar` if [[ ! "$?" == "0" || ! -e $JAR_PATH ]]; then echo "Do you forget ./package.sh ?" exit 2 fi JAVA_VERSION=1.8 PID ...
一、Java8中的Stream        Java8之所以被广大的Java爱好者所喜爱,是因为它提供了一系列的关于集合的Stream操作。集合API是Java API中最重要的部分。基本上每一个java程序都离不开集合。尽管很重要,但是现有的集合处理在很多方面都无法满足需要。       一个原因是,许多其他的语言或者类库以声明的方式来处理特定的数据模型,比如SQL语言,你可以从表中查询,按条件过滤数据,并且以某种形式将数据分组,而不必需要了解查询是如何实现的——数据库帮你做所有的脏活。这样做的好处是你的代码很简洁。很遗憾,Java没有这种好东西,你需要用控制流程自己实现所有数据查询的 ...
一、基本数据类型数组不能作为asList的入参,否则会引起程序的逻辑混乱。        这段时间在熟悉新的项目,在看项目代码的时候,发现以前的同事很喜欢用Arrays和Collections这两个工具类,实现数组与列表之间的转换。应该说,很多开发的童鞋在实现数组与列表之前转换的时候,都钟情于这两个工具类。鄙人为了理解这两个工具类,特意写了一个demo学习一下。 import java.util.Arrays; import java.util.List; public class BadWithAsList { @SuppressWarnings("rawtypes& ...
一、背景        数组在实际的系统开发中用的越来越少了,我们只有在阅读某些开源项目时才会看到数组的使用。在Java中,数组与List、Set、Map等集合类相比,后者使用起来方便,但是在基本数据类型处理方面,数组还是占优势的,而且集合类的底层也都是通过数组实现的。        我们大家都知道,在Java中数组是定长的,一旦初始化以后,就不可以改变其长度,而这在实际应用中是不方便的。举例来说,如果要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时有入学、退学、转学的学生),所以需要一个足够大的数组来容纳所有的学生(当然,在实际应用场景中,你可以用List或者其他的 ...
Global site tag (gtag.js) - Google Analytics