- 博客(41)
- 资源 (1)
- 收藏
- 关注
单例模式
一、概述 单例模式,在设计模式中,是一个比较重要的设计模式。在开发中,如果某个实例的创建需要消耗很多资源,那么我们通常会选择使用懒性加载机制。何谓懒性加载机制呢?说白了,就是在使用到这个实例的时候,才去创建这个实例。这个机制在单例模式中,得到了很广泛的应用。这个机制在单线程的环境下实现非常简单,但是在多线程的环境下存在安全隐患。二、单例模式下的懒加载机制 我...
2018-04-24 17:54:29 142
分布式锁之基于Redis的分布式锁
一、简述 分布式锁一般有三种实现方式:第一,数据库乐观锁;第二,基于Redis的分布式锁;第三,基于Zookeeper的分布式锁。目前,在项目中有需要用到分布式锁的场景,因此学习并总结了。今天,咱们先来聊聊基于Redis的分布式锁。 要保证基于Redis的分布式锁可用,必须同时满足以下四个条件:1、互斥性:在任何时刻只能有一个客户端持有锁;2、避免死锁:即使有一...
2018-03-26 16:24:47 483
SQL Joins图解
一、背景 在做业务系统服务端开发的时候,数据表之间经常需要join,吐出数据。下面是小弟在工作中对sql joins的总结,希望能帮到有需要的小伙伴。 二、sql joins简介 sql中join常用的有left join、inner join、right join,另外full join(full outer join)在实际工作中用的比较少。 ...
2017-01-23 10:34:50 491
原创 Metrics:JVM的实时监控工具
一、背景 最近两个月的工作中,一直在监控线上应用的情况,并且在排查线上问题的时候,发现线上的机器十分之多,为了能够自动化、平台化的监控线上应用,选择了Metrics。Metrics是给Java服务的各种指标提供监控的一种工具包。 二、简介 结合项目组使用的是SpringBoot的应用部署方式和Maven的项目管理方式,引入Metrics的方式如下: ...
2017-01-03 14:31:28 2385
原创 Spring事务:声明式事务管理
一、背景 在Spring事务:编程式事务管理这一篇中简单的介绍了Spring中的编程式事务管理,本篇介绍下Spring中声明式事务管理。 二、声明式事务管理1、Spring中声明式事务管理概述 Spring中的声明式事务管理在底层是建立在AOP的基础上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或加入一个事务,在执行完目标方法之后,根据...
2016-12-30 14:09:33 203
原创 Spring事务:编程式事务管理
一、背景 在上一篇Spring事务:事务属性和API简介中,初步地介绍了关于Spring事务的一些属性和主要的API,这一篇主要论述的是Spring事务中的编程史事务管理。 二、编程式事务管理1、Spring的编程式事务管理概述 在Spring出现以前,编程式事务管理对基于POJO的应用来说是唯一选择。之前学习过Hibernate,这里面的事务管理是...
2016-12-30 11:17:56 158
Spring事务:事务属性和API简介
一、背景 Spring这款开源框架自从诞生后,一直收到企业级应用的喜爱。应该这么说,只要是从事过Java开发的小伙伴,或多或少,都会了解一些关于Spring的知识。最近在工作中,负责一个服务治理平台的搭建,用到了Spring中的事务,因而学习了一下。下面是小弟在工作之余,总结的一些关于Spring事务的点,希望能帮到有需要的小伙伴。 二、Spring事务属性 ...
2016-12-30 10:38:52 258
MySQL事务隔离级别
一、四类隔离级别SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。Read Uncommitted(读取未提交内容)在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用,因为它的性能也不比其他级别好多少。读取未提交的数据,也被称之为脏读(D...
2016-12-29 17:22:03 106
git常用命令
此篇文章只是为了总结小弟在工作中用到的git命令,希望可以帮到有需要的小伙伴。1、从origin/master分支上新建分支git checkout -b 分支名称 origin/master 2、将新建的本地分支推送到远程分支git push -uf origin 分支名称 3、查看分支状态git status 4、查看分支git branch:-...
2016-12-29 17:02:59 141
Maven常用命令
maven是一个很棒的项目管理框架,并且是开源的,所以很受开发小伙伴们的喜爱。下面是小弟在工作中总结的一些常用的命令,希望能帮到各位看官。1、打包命令mvn install -Dmaven.test.skip 2、发布二方库命令(自动打包到nexus库)mvn deploy -pl XXX-client -am -X 3、更新jar命令mvn clean ins...
2016-12-29 16:48:35 102
异常统一处理
一、背景在实际的工作中,在服务与服务之间的交互中,异常是一个很重要的点,这里的异常有的是正常的业务异常,而有些确实程序本身抛出的异常,例如:服务A依赖服务B,服务B出现了NullPointerException,作为调用方,一定要做好异常的处理。下面是小弟在工作过程中,总结出来的一个统一处理异常的工具。二、代码实现1、定义服务返回结果DemoResultpublic class ...
2016-12-28 17:30:56 185
脚本化的Web应用服务管理
这篇文章只是自己学习的东西,有兴趣的同学,可以看看。#!/bin/bashif [ $# -lt 1 ];then echo "USAGE: $0 classname opts" exit 1fiJAR_PATH=`ls *.jar`if [[ ! "$?" == "0" || ! -e $JAR_PATH ]]; then echo "Do you...
2016-12-28 14:46:16 159
Java8之简单流操作
一、Java8中的Stream Java8之所以被广大的Java爱好者所喜爱,是因为它提供了一系列的关于集合的Stream操作。集合API是Java API中最重要的部分。基本上每一个java程序都离不开集合。尽管很重要,但是现有的集合处理在很多方面都无法满足需要。 一个原因是,许多其他的语言或者类库以声明的方式来处理特定的数据模型,比如SQL语言,你可以从表中查询...
2016-09-21 14:54:15 154
Java编程之数组转换列表的陷阱
一、基本数据类型数组不能作为asList的入参,否则会引起程序的逻辑混乱。 这段时间在熟悉新的项目,在看项目代码的时候,发现以前的同事很喜欢用Arrays和Collections这两个工具类,实现数组与列表之间的转换。应该说,很多开发的童鞋在实现数组与列表之前转换的时候,都钟情于这两个工具类。鄙人为了理解这两个工具类,特意写了一个demo学习一下。import java.u...
2016-03-24 16:16:08 155
Java编程之数组扩容
一、背景 数组在实际的系统开发中用的越来越少了,我们只有在阅读某些开源项目时才会看到数组的使用。在Java中,数组与List、Set、Map等集合类相比,后者使用起来方便,但是在基本数据类型处理方面,数组还是占优势的,而且集合类的底层也都是通过数组实现的。 我们大家都知道,在Java中数组是定长的,一旦初始化以后,就不可以改变其长度,而这在实际应用中是不方便的。...
2016-03-22 13:46:03 642
Java编程之构造代码块
最近工作不忙,闲来无事,就看看书,今天遇到了构造代码块让我一顿好奇。构造函数倒是了解一些,构造代码块还是第一次听说,那么到底什么是构造代码块? 其实,构造代码块是代码块的一种类型。代码块是指用大括号把多行代码封装在一起,形成一个独立的数据体,实现特定算法的代码集合。一般来说,代码块是不能单独运行,必须要有运行主体。在Java中一共有四种类型的代码块,即: ...
2016-03-16 16:35:16 181
Java编程之脚本语言的使用
一、背景 利用Java语言编写系统的时候,经常会遇到业务需求的变更而导致修改代码,甚至有些时候还需要修改核心代码(如果整个系统架构设计的不合理的话)。为了避免这种问题,在Java编程的时候,我们应该将易变业务使用脚本语言编写。 Java世界一直在遭受着“异族”的入侵,比如PHP、Ruby、Groovy、JavaScript等,这些入侵者都有一个共同的特征:全是同...
2016-03-15 16:28:18 245
Scala编程之归并排序
在排序算法中,归并排序比插入排序的效率更高,下面通过Scala语言实现归并排序。/** * Created by user on 2016/1/22. */object MergeSort { def mergeSort[T](less: (T, T) => Boolean)(xs: List[T]): List[T] = { def ...
2016-01-25 15:34:27 182
Scala编程之插入排序
一、总述 排序,这是一个十分经典且实用的算法。不论,你学习的何种编程语言,排序算法都是作为软件工程师或研发工程师所必须掌握的东西。最近一直在学习Scala,下面就通过Scala语言实现插入排序算法。 二、插入排序算法 定义一个名为InsertSort的object对象/** * Created by user on 2016/1/22. *...
2016-01-22 14:46:16 287
Scala编程之Option
一、总述 在《Scala编程之样本类与模式匹配》的文章中,鄙人以一个实例介绍了样本类与模式匹配,本篇介绍一个更有趣的东西:Option。 Scala为可选值提供了一个标准类型:Option。这种类型有两个值:Some(x)和None,其中x表示实际值,而None对象代表缺省值。 下面通过编写一个简单的实例实现两种功能:Option类型的两种值;解析...
2016-01-21 17:18:53 157
Scala编程之样本类与模式匹配
一、总述 在今天的Scala编程的学习过程中,发现了Scala语言中十分有趣的东西:样本类、模式匹配。对于样本类和模式匹配的概念,鄙人通过一个自己编写的实例给出对应的说明。 二、实例展示 1、定义一个抽象类Expr,并且在该类的内部定义了几个不同的类,如代码中所示:/** * Created by user on 2016/1/21. *...
2016-01-21 14:51:26 118
证明Java不是纯面向对象语言
一、论述 在我们刚接触Java语言的时候,所有的教材或老师都会和你讲这样一点:Java是一门面向对象的编程语言。用2015年比较流行的网络语就是:Java是一门面向对象的编程语言、Java是一门面向对象的编程语言、Java是一门面向对象的编程语言,重要的事说三遍!!! 那Java到底是怎样的一门面向对象的编程语言呢,鄙人给出的结论是Java不是纯面向对象的。也许...
2016-01-20 15:39:52 428
Scala编程之螺旋
一、概述 今天在《Scala In Programming》中学习了关于Scala的组合与继承,下面通过一个实例作为知识的巩固。 二、实例展示 1、实例名称: 根据给定的边界值,画出一个螺旋。 2、实例描述: a、首先给出四个类:Element、ArrayElement、UniformEl...
2016-01-18 16:35:41 307
Scala编程之打印标准乘法表
在阅读了《Scala InProgramming》一文中学习了Scala语言的内建控制结构,为了巩固学习的内容,特意以写了一个小程序:打印标准乘法表,作为这一部分的完结。 1、打印标准乘法表的实现类class PrintMulTable(start: Int,end: Int) { val begin = this.start val finis...
2016-01-14 16:51:01 537
Scala编程之分数的四则运算
在前面一篇关于Scala编程的文章中简单的介绍了Scala语言,关于Scala语言的一些语法及规则,如有感兴趣的朋友可以自己阅读相关书籍,鄙人诚挚推荐《Scala In Programming》,下面利用Scala语言实现简单的分数四则运算。 1、分数的四则运算类class Rational(n: Int,d: Int) { //分母不能为0的校验 ...
2016-01-14 14:47:53 864
Scala编程之文件操作
一、简述 Scala语言的名称来自于“可伸展的语言”。之所以这样命名,是因为他被设计成随着使用者的需求而成长。用Scala语言编写应用程序可以有很大的范围:小到写脚本,大到建立大系统。 Scala是很容易进入的语言,它跑在标准的Java平台上,可以与所有的Java库实现无缝交互。它也是用来编写脚本把Java控件链在一起的很好的语言,但是用它来建立大系统和可重用控件...
2016-01-14 14:30:33 216
原创 Web容器Jetty
一、Jetty简介 Jetty 是一个开源的servlet容器,它为基于Java的web容器(例如JSP和servlet)提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。 开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。 二、Jetty...
2015-09-07 14:32:28 239
原创 设计模式之抽象工厂模式
抽象工厂模式 工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。附件中的类图说明了抽象工厂模式各部分之间的关系。示例代码如下: publ...
2015-07-22 15:29:46 86
原创 设计模式之工厂方法模式
工厂方法模式 本篇中将设计模式中的工厂方法模式分为两种: 1、简单工厂方法模式:就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。附件中简单工厂模式类图说明了这类设计模式的关系。示例代码如下: public interface Product { public void product();} public class Pr...
2015-07-22 14:46:18 77
原创 设计模式之概述
一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种...
2015-07-22 11:49:35 73
Hessian学习笔记之HessianRPC
一、总述 在Hessian学习笔记之上传文件这一篇中,通过一个实例讲解了如何通过Hessian实现上传文件。Hessian最主要的特征之一就是远程过程调用(Remote Procedure Call,RPC)。下面通过一个简单的实例说明。 二、实例展示 1、环境搭建 开发工具:eclipse + tomcat。 服...
2015-07-15 10:52:54 154
Hessian学习笔记之上传文件
在Hessian学习笔记之Hessian实例这一篇中简单介绍了Hessian的一个入门实例,本篇主要是深入学习Hessian,即利用Hessian实现文件上传。 1、服务端接口 import java.io.InputStream;/** * 文件上传服务接口 * */public interface FileUploadServ...
2015-07-14 14:58:24 217
Java线程池学习笔记二
一、背景 在Java线程池学习笔记一中,理解了几个常用的常用的线程池创建的静态工程方法。本篇就Java线程池中的核心:ThreadPoolExecutor,作深入的学习。 二、ThreadPoolExecutor的详细分析 ThreadPoolExecutor是java.util.concurrent包中一个类,它实现了Executor和Ex...
2015-07-10 14:32:11 93
原创 Java线程池学习笔记一
一、什么是线程池 线程池是一种多线程处理技术。在处理线程的过程中,先将任务(作业)添加到队列,然后在创建线程后自动启动这些任务(作业)。 线程池是由以下几部分组成的: 1、线程池管理器(ThreadPoolManager):用于创建并管理线程池 2、工作线程(WorkThread):线程池中线程 3、任务接口(Ta...
2015-07-09 17:13:09 122
原创 Apache对象池插件common-pool学习小结
一、背景 对于使用面向对象语言开发软件的童鞋们都知道,对象是一个十分重要的概念,用Thinking in Java绪论里面的话说:一切皆是对象。 因为对象的重要性,所以在某些大型的应用系统中,对象会被频繁的创建并使用,这就会导致开发人员需要对系统的性能进行调优,特别是在系统耗时方法更是需要着重优化。幸好,有Apache这样一个组织,给奋斗在第一线的广大IT民工提...
2015-07-08 15:57:06 245
原创 对象池、连接池、线程池
在绝大多数的JavaWeb的应用系统开发过程中,经常会听到或见到这样的三个专业名词:对象池、连接池、线程池。下面就这三个专业知识做一个简单的小结:1.对象池 对象池技术通常是在服务器端开发使用的技术,使用该项技术的主要原因是减少从头创建每个对象的系统开销,提高系统性能。其主要做法是:创建一个对象池,将一定数量的对象缓存到这个对象池中,需要使用时直接从对象池中取出对象,使用完后将对象扔...
2015-07-07 15:27:48 535
原创 编写自己的Exception
在实际的工作中,通常需要定义自己功能模块相关的异常,下面一个实例可以实现定义自己的异常: 1.定义一个异常码抽象类作为基类public abstract class BaseExceptionCode { private String errorMessage ; private int errorCode ; private final BaseExcept...
2015-07-07 14:24:17 246
Zookeeper学习笔记一
1.前言 由于在开发产品的过程中接触到了Zookeeper,业余时间学习并开发了一个利用Zookeeper实现分布式锁的实例。 2.Zookeeper简介 大家对于分布式架构,可能比较熟悉Hadoop,而Zookeeper是Hadoop的一个子项目。Zookeeper本身包含一个简单的原语集,并且是一个分布式的、开源的应用程序协调服务架构。...
2015-07-06 18:05:08 98
Hessian学习笔记之Hessian实例
1.简介 Hessian是一个轻量级的remoting on http工具,通过简单的方法提供了RMI的功能。 与WebService相比较而言,Hessian更简单、快捷。 Hessian采用的是二进制的RPC协议,正是因为它采用的是二进制协议,所以它很适合于发送二进制数据。 2.实例讲解 服务端: a.下载hessian...
2015-06-24 17:04:29 234
利用lucene对文件内容进行关键字检索
在具体实现之前,请根据自己的要求,建立对应的路径及文件。例如,我这边创建的路径及文件是: D:/tools/LearningByMyself/lucene/source/demo1.txtD:/tools/LearningByMyself/lucene/source/demo2.txtD:/tools/LearningByMyself/lucene/index 第一步,建...
2015-06-24 12:54:16 305
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人