自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

转载 java设计模式-外观模式(门面模式)

针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。一、概念介绍  外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 二、角色及使用场景  简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的...

2018-04-02 09:38:56 194

转载 Tomcat中定制阀门

我们说管道机制给我们带来了更好的扩展性,Tomcat中在扩展性方面具体如何体现,这便是本节讨论的内容。从上节了解到基础阀门是必须执行的,假如你需要一个额外的逻辑处理阀门,可以添加一个非基础阀门。我的需求是对每个请求访问进行IP记录,打印到日志里面,详细操作如下:① 自定义一个阀门PrintIPValve,只要继承ValveBase并重写invoke方法即可,ValveBase是Tomcat抽象的一...

2018-03-30 16:57:11 474

转载 Tomcat的管道

Tomcat中按照包含关系一共有四个容器——StandardEngine、StandardHost、StandardContext和StandardWrapper,对这四个容器的详细解析后面会涉及,请求对象及响应对象将分别被此四个容器处理,请求响应对象在四个容器之间通过管道机制进行传递。如下图,请求响应对象先通过StandardEngine的管道,期间经过若干个阀门处理,基础阀门是Standard...

2018-03-30 16:56:37 391

转载 管道模式-pipeline与valve

在一个比较复杂的大型系统中,假如存在某个对象或数据流需要被进行繁杂的逻辑处理的话,我们可以选择在一个大的组件中进行这些繁杂的逻辑处理,这种方式确实达到了目的,但却是简单粗暴的。或许在某些情况这种简单粗暴的方式将带来一些麻烦,例如我要改动其中某部分处理逻辑、我要添加一些处理逻辑到流程、我要在流程中减少一些处理逻辑时,这里有些看似简单的改动都让我们无从下手,除了对整个组件进行改动。整个系统看起来没有任...

2018-03-30 16:56:04 545

转载 设计模式-观察者模式

设计模式--观察者模式初探和java Observable模式初步认识观察者模式  观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明:    报社方负责出版报纸.    你订阅了该报社的报纸,那么只要报社发布了新报纸,就会通知你,或发到你手上.    如果你不想再读报纸,可以取消订阅,这样,报社发布了新报纸就不会再通知你.  理解其实以...

2018-03-30 11:54:35 184

转载 Java NIO

Java NIO是一个用来替代标准Java IO API的新型数据传递方式,像现在分布式架构中会经常存在他的身影。其比传统的IO更加高效,非阻塞,异步,双向NIO主体结构Java NIO的主要构成核心就是Buffer、Channel和Selector这三个对于Channel我想要提醒的是,Channel中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入使用Selector,得...

2018-03-29 09:36:24 143

转载 Java NIO 详解(一)

NIO即新的输入输出,这个库是在JDK1.4中才引入的。它在标准java代码中提供了高速的面向块的IO操作。12一、基本概念描述1.1 I/O简介I/O即输入输出,是计算机与外界世界的一个借口。IO操作的实际主题是操作系统。在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过stream对象一次移动一个字节。流IO负责把对象转换为字节,然后再转换为对象。关于J...

2018-03-29 09:34:14 143

转载 Java IO

1. Java IO概述1.1. 相关概念Java IO即Java输入输出系统,不管我们编写何种应用,都难免和各种输入输出相关的媒介打交道,其实和媒介进行IO的过程是十分复杂的,这要考虑的因素特别多,比如我们要考虑和哪种媒介进行IO(文件、控制台、网络),我们还要考虑具体和它们的通信方式(顺序、随机、二进制、按字符、按字、按行等)。Java类库的设计者通过设计大量的类来攻克这些难题,这些类就位于j...

2018-03-28 10:39:03 134

转载 ClassLoader详解

ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解ClassLoader的加载机制,也有利于我们编写出更高效的代码。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。想想也是的,一次性加载那么多j...

2018-03-26 20:29:28 174

原创 java设计模式-模板方法模式

1. 什么是模板方法模式概念: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 通俗的讲,模板方法模式是通过把不变行为搬到超类,去除子类里面的重复代码提现它的优势,它提供了一个很好的代码复用平台。当不可变和可变的方法在子类中混合在一起的时候,不变的方法就会在子类中多次出现,这样如果摸个方法需要修改则需要

2018-01-29 16:50:31 188

转载 Java线程详解

Java线程:概念与原理一、进程与线程        进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,即进程空间或(虚空间)。进程不依赖于线程而独立存在,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。        线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运

2018-01-25 13:40:57 318

转载 我是一个线程

趣文:我是一个线程第一回 初生牛犊我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴。我身边的同伴 0x6900 待的时间比较长,他带着沧桑的口气对我说:“我们线程的宿命就是处理包裹。把包裹处理完以后还得马上回到这里,否则可能永远回不来了。”我一脸懵懂,“包裹,什么包裹?”“不要着急,马

2018-01-25 10:28:35 203

转载 Java反射机制详解

Java反射机制详解     Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。1、关于Class    1、Class是一个类,一个描述类的类(也就是描述类本身),封装了描述方法的Method

2018-01-24 17:09:31 190

转载 jvm-基本结构

类加载子系统:类加载子系统负责从文件系统或网络中加载class信息,加载的类信息存放于方法区中,方法区中除了存放类信息之外,可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是class文件中常量池部分的内存映射)。java堆:java堆在虚拟机启动的时候建立,它是java程序最主要的工作区域,几乎所有的java对象实例都存放在java堆中。堆空间是所有线程共享的,这是一

2017-10-24 16:25:41 227

转载 jvm-方法区(常量池)

常量池主要涉及到常量池里的内容和常量池解析这两块。在方法区中,每个类型都对应一个常量池,常量池中存储了如:文字字符串,final变量值,类名,方法名等常量。jvm把常量池组织为入口列表的形式,可通过索引来访问常量池中的各个入口,每个常量池入口的第一个字节都是个标志,用这个标志来表示该入口中存储的常量类型,如:CONSTANT_Long表示里面存储的是Long类型的字面值,CONSTANT_Cl

2017-10-24 13:22:54 1791

转载 jvm-方法区

当jvm使用类装载器装在某个类时,它首先要定位到对应的class文件,然后读入这个class文件,最后提取该文件的内容信息,并将这些信息存储到方法去,最后返回一个class实例。方法区是系统分配的一个内存逻辑区域,用来存储类型信息(类型信息可以理解为类的描述信息(类的全限定名,访问修饰符,字段,方法等)),方法去特点:1.方法区是线程安全的,由于所有的线程都共享方法区,所以方法区里的数据访

2017-10-23 14:43:08 5277

转载 log4j配置详解

################################################################################ #①配置根Logger,其语法为: # #log4j.rootLogger = [level],appenderName,appenderName2,... #level是日志记录的优先级,分为OFF,TRACE,DEBUG,IN

2017-09-13 19:35:44 227

转载 Externalizable

控制序列化就是有选择的序列化对象,而不是把对象的所以内容都序列化,前篇我们的例子中介绍了transit变量和类变量(static)不被序列化,现在我们还有一种更为灵活的控制对象序列化和反序列方法,可以在序列化过程中储存其他非this对象包含的数据 我们现在再来介绍一个接口 java.io.Externalizable 。当对象实现了这个接口时,就可以灵活的控制它的序列化和反序列过程

2017-09-11 22:10:38 411

原创 Java transient关键字使用小记

1. transient的作用及使用方法我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化

2017-09-11 21:56:19 181

原创 java基本数据类型

java语言提供了八种基本类型。六种数字类型(四个整数型(默认是int型),两个浮点型(默认是double型)),一种字符型,一种布尔型。byte:byte占1个字节取值范围:(-2^7)-(2^7-1),即-128-127默认值:0byte类型用在大型数组中节约空间,主要替代整数,因为byte变量占用的空间只有int类型的四分之一例子:byte a = 100,byte

2017-09-11 18:43:40 198

转载 Nginx搭建反向代理服务器过程详解

一、反向代理:Web服务器的“经纪人”1.1 反向代理初印象反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。从上图可以看出:反向代理服务器位于网站机房,代理网站Web服务器接收Htt

2017-05-22 20:37:15 560

转载 端口映射

先说下什么是端口。我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念。服务器可以向外提供多种服务,比如,一台服务器可以同时是WEB服务器,也可以是FTP服务器,同时,它也可以是邮件服务器。为什么一台服务器可以同时提供那么多的服务呢?其中一个很主要的方面,就是各种服务采用不同的端口分别提供不同的服务,比如:WEB采用80端

2017-05-16 21:49:14 649

转载 内网和外网

上网也许已经成为生活的标配,每天打开网页看新闻看视频聊天等。也许很多人都不知道什么是内网什么是外网。今天和大家分享一下互联网的一些知识吧!内网。请看看下图:其实很多时候我们的电脑不是直接连到Internet(外网)的。下图可以看到有路由器(第一层),交换机(第二层)然后是自己的电脑。内网就是从路由器一下开始的,而且IP都是以192开头的IP。从图片可以看到电脑是经过交换

2017-05-16 21:33:38 349

转载 Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子。 请通过以下方式下载github源代码:git clone https://github.com/davenkin/jta-atomikos-hibernate-activemq.git 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据

2017-05-02 13:50:55 469

转载 Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)

在本系列的上一篇文章中,我们讲到了使用动态代理的方式完成事务处理,这种方式将service层的所有public方法都加入到事务中,这显然不是我们需要的,需要代理的只是那些需要操作数据库的方法。在本篇中,我们将讲到如何使用Java注解(Annotation)来标记需要事务处理的方法。 这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:Git clo

2017-05-02 13:49:47 325

转载 Java事务处理全解析(六)—— 使用动态代理(Dynamic Proxy)完成事务

在本系列的上一篇文章中,我们讲到了使用Template模式进行事务管理,这固然是一种很好的方法,但是不那么完美的地方在于我们依然需要在service层中编写和事务处理相关的代码,即我们需要在service层中声明一个TransactionTemplate。在本篇文章中,我们将使用Java提供的动态代理(Dynamic Proxy)功能来完成事务处理,你将看到无论是在service层还是DAO层

2017-05-02 13:49:04 465

转载 Java事务处理全解析(五)—— Template模式

在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理。 这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:Git clone https://github.com/davenkin/java_transact

2017-05-02 13:45:43 280

转载 Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的

在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的。在本篇文章中,我们将引入另外一种机制(ConnectionHolder)来完成事务管理。 这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:Git clone https://

2017-05-02 13:42:37 449

转载 Java事务处理全解析(三)—— 丑陋的案例

在本系列的上一篇文章中,我们看到了一个典型的事务处理失败的案例,其主要原因在于,service层和各个DAO所使用的Connection是不一样的,而JDBC中事务处理的作用对象正是Connection对象,所以不同DAO中的操作不在同一个事务里面,从而导致事务失败。从中我们得出了教训:要避免这种失败,我们可以使所有操作共享一个Connection对象,这样应该就没有问题了。 请通

2017-05-02 13:33:54 333

转载 Java事务处理全解析(二)—— 失败的案例

在本系列的上一篇文章中,我们讲到了Java事务处理的基本问题,并且讲到了Service层和DAO层,在本篇文章中,我们将以BankService为例学习一个事务处理失败的案例。 请通过以下方式下载github源代码:Git clone https://github.com/davenkin/java_transaction_workshop.git Bank

2017-05-02 13:30:52 353

转载 Java事务处理全解析(一)——Java事务处理的基本问题

Java中的事务处理有多简单?在使用EJB时,事务在我们几乎察觉不到的情况下发挥着作用;而在使用spring时,也只需要配置一个TransactionManager,然后在需要事务的方法上加上Transactional注解就行了。Java的事务处理之所以这么简单是因为框架在背后为我们做了太多的工作。这样,我们虽然可以快速地完成开发工作,但是一旦程序出现问题,在一阵google和stackoverf

2017-05-02 13:21:50 512

转载 常用正则表达式

一、校验数字的表达式数字:^[0-9]*$n位的数字:^\d{n}$至少n位的数字:^\d{n,}$m-n位的数字:^\d{m,n}$零和非零开头的数字:^(0|[1-9][0-9]*)$非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$正数、负数、和小数:^(\-|\+)?\

2017-03-13 13:37:51 203

转载 正则表达式语法

正则表达式 字符 描述 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\’ 匹配 “\” 而 “(” 则匹配 “(“。 ^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。 $

2017-03-13 13:36:35 228

原创 springmvc常用注解

springmvc常用注解 @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。 @Repository 用于将数据访问层的类标识为 Spring Bean @Service 用于将业务层的类标识为Spring Bean @Controller 负责注册一个bean到spring的上下文中 @Autowired 可

2017-02-23 11:54:26 277

空空如也

空空如也

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

TA关注的人

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