- 博客(45)
- 收藏
- 关注
转载 Spring4-容器9-定制bean特性
Spring提供了几个标志接口(marker interface),这些接口用来改变容器中bean的行为;它们包括InitializingBean和DisposableBean。 实现这两个接口的bean在初始化和析构时容器会调用前者的afterPropertiesSet()方法,以及...
2017-03-26 21:39:00
179
转载 Spring4-容器8-Bean作用域
1 简介 Spring支持以下几种开箱即用的作用域: 作用域 描述 singleton (默认的) 每个 String IoC 容器作用域中一个 bean 定义只对应一个对象实例。 ...
2017-03-26 18:06:00
147
转载 Spring4-容器7-方法注入
方法注入主要是用在Singleton的Object中使用非Singleton的Bean时,通过lookup-method的那个方法来取得非Singleton的Bean。一般用的不多,在用这种定义之前最好想明白你的需求。 1 使用Java代码实现方法注入 1.1 用法示例 //...
2017-03-26 12:05:00
160
转载 Spring4-容器6-延迟初始化和depends-on
1延迟初始化bean ApplicationContext实现的默认行为就是再启动时将所有singletonbean提前进行实例化。 通常这样的提前实例化方式是好事,因为配置中或者运行环境的错误就会被立刻发现,否则可能要花几个小时甚至几天。如果你不想 这样,你可以将单例bean定义为延...
2017-03-26 11:52:00
134
转载 Spring4-容器5-依赖配置详解
1直接变量 (基本类型, String类型等) <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- result...
2017-03-24 22:17:00
148
转载 Spring4-容器4-依赖注入
依赖注入有两种方式:构造器注入和Setter注入。 1构造器注入 1.1构造器参数解析 1.1.1 按照定义顺序解析 如果构造器参数的类型定义没有潜在的歧义,那么构造器会按照bean定义中构造器参数的定义顺序依次进行匹配。看下面的代码: package x....
2017-03-24 15:32:00
130
转载 Spring4-容器3-实例化bean
1 简介 实例化bean有三种方式: (1)通过构造函数实例化 (2)使用静态工厂方法实例化 (3)使用实例工厂方法实例化 2 通过构造函数实例化 2.1 准备bean-User类 package com.ws.edu.spring;public class U...
2017-03-24 14:05:00
85
转载 Spring4-容器2-bean的命名
1 命名规则 (1)每个bean都有一个或多个标识符,这些bean的标识符在它所在的容器中必须唯一。 (2)基于xml的配置元数据中,你可以使用id或(和)name属性来指定bean的标识符,用name属性指定的值通常又称为别名。 (3)id属性只允许指定一个值,name属...
2017-03-24 13:59:00
161
转载 Spring4-容器1-容器概述
1 准备Bean类-User package com.ws.edu.spring;public class User { private int id; private String name; public int getId() { return id; } publ...
2017-03-23 22:36:00
72
转载 SpringBoot实战教程1-快速入门
1 HelloWorld示例 1.1 新建maven工程 1.2 编写pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchem...
2017-03-23 08:50:00
58
转载 触发JVM进行Full GC的情况及应对策略
堆内存划分为 Eden、Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK...
2017-03-10 15:15:00
169
转载 数据库性能优化详解
1数据库访问优化法则 要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件时硬盘可能会是瓶颈点,为什么这些一般的工作我们能快速确认瓶颈点呢,因为我们...
2017-03-10 14:28:00
672
转载 JVM总结5-JVM调优工具使用总结
常用的JVM调优工具有:Jconsole,jProfile,VisualVM Jconsole :jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里 JProfiler:商业软件,需要付费。功能强大。详细说明...
2017-03-10 11:01:00
97
转载 JVM总结4-内存溢出相关的异常
1年老代堆空间被占满 异常:java.lang.OutOfMemoryError: Java heap space 说明: 这是最典型的内存泄漏方式,简单说就是所有堆空间都被无法回收的垃圾对象占满,虚拟机无法再在分配新空间。 如上图所示,这是非常典型的内存泄漏...
2017-03-10 10:40:00
100
转载 使用Redis实现分布式锁
1 Redis命令介绍 1.1SETNX命令 语法: SETNX key value 功能: 当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给定的 key 已经存在,则 SETNX 不做任何动作,并返回0。 例子 ...
2017-03-09 21:48:00
68
转载 分布式延迟队列设计
1 背景 延迟队列,顾名思义它是一种带有延迟功能的消息队列。 那么,是在什么场景下我才需要这样的队列呢? 我们先看看以下业务场景: 当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存? 如何定期检查处于退款状态的订单是否已经退款成功? 新创建店铺,N天内没...
2017-03-09 21:26:00
1056
转载 电商防止库存超卖解决方案
1 悲观锁解决方案 悲观锁,也就是在修改数据的时候,采用锁定状态,排斥外部请求的修改。遇到加锁的状态,就必须等待。可以采用redis队列+mysql事务控制的方案,下面是流程图: mysql的执行代码: beginTranse(开启事务)try{ ...
2017-03-09 19:36:00
1856
转载 下单以及订单处理流程描述
1下单过程 预订者浏览某个已发布的会议; 进入会议的详情页面,该页面显示了所有可预订的座位分类信息; 预订者选择好要预订的座位分类,录入每个分类的预定数量; 预订者点击提交按钮,提交下单请求到Server端; 2Server端订单处理过程 Server...
2017-03-09 19:18:00
3595
转载 谈谈数据库的ACID
1 事务 定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 准备工作:为了说明事务的ACID原理,我们使用银行账户及资金管理的案例进行分析。 // 创建数据库 create table account( id...
2017-03-08 22:37:00
72
转载 Spring 事务管理高级应用难点剖析: 第 3 部分
1概述 对于应用开发者来说,数据连接泄漏无疑是一个可怕的梦魇。如果存在数据连接泄漏问题,应用程序将因数据连接资源的耗尽而崩溃,甚至还可能引起数据库的崩溃。数据连接泄漏像黑洞一样让开发者避之唯恐不及。 Spring DAO 对所有支持的数据访问技术框架都使用模板化技术进行...
2017-03-08 21:57:00
116
转载 Spring 事务管理高级应用难点剖析: 第 2 部分
1联合军种作战的混乱 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋。像 Hibernate 是非常优秀的 ORM 实现方案,但对底层 SQL 的控制不太方便;而 iBatis 则通过模板化技术让您方便地控制 SQL,但没有 Hibernate 那...
2017-03-08 20:00:00
68
转载 Spring 事务管理高级应用难点剖析: 第 1 部分
1概述 Spring 最成功,最吸引人的地方莫过于轻量级的声明式事务管理,仅此一点,它就宣告了重量级 EJB 容器的覆灭。Spring 声明式事务管理将开发者从繁复的事务管理代码中解脱出来,专注于业务逻辑的开发上,这是一件可以被拿来顶礼膜拜的事情。但是,世界并未从此消停,开发人员...
2017-03-08 19:30:00
78
转载 JVM总结3-垃圾回收
垃圾收集 Garbage Collection 通常被称为“GC”,它诞生于1960年 MIT 的 Lisp 语言,经过半个多世纪,目前已经十分成熟了。 jvm中,程序计数器、虚拟机栈、本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动...
2017-03-06 14:57:00
55
转载 JVM总结2-Java类加载机制
1什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内...
2017-03-03 16:21:00
98
转载 JVM总结1-JVM内存结构
Java虚拟机在执行Java的过程中会把管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,而有的区域则依赖线程的启动和结束而创建和销毁。 1JVM内存结构布局 先看一张图,这张图能很清晰的说明JVM内存结构布局...
2017-03-03 16:20:00
56
转载 Java并发编程15-FutureTask详解
Future接口和实现Future接口的FutureTask类,代表异步计算的结果。 1FutureTask简介 Future接口和实现Future接口的FutureTask类用来表示异步计算的结果。当我们把Runnable接口或Callable接口的实现类提交(sub...
2017-02-28 23:12:00
267
转载 Java并发编程14-ScheduledThreadPoolExecutor详解
ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。它主要用来在给定的延迟之后运行任务,或者定期执行任务。ScheduledThreadPoolExecutor的功能与Timer类似,但ScheduledThreadPoolExecutor...
2017-02-28 23:08:00
182
转载 Java并发编程13-ThreadPoolExecutor详解
ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadPool和CachedThreadPool。 下面分别介绍这3种Thr...
2017-02-28 22:46:00
112
转载 Java并发编程12-线程池
1 使用线程池的好处 (1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 (2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 (3)提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以...
2017-02-24 09:26:00
109
转载 Java并发编程11-异步执行框架Executor
1 Executor框架的简介 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦。要执行任务的人只需把Task描述清楚,然后提交即可。这个Task是怎么被执行的,被谁执行的,什么时候执行的,提交的人就不用关心了。具体点讲,提交一个Callable对象给Execu...
2017-02-23 16:50:00
229
转载 Java并发编程10-Java中的并发工具类
1等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 假如有这样一个需求:我们需要解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都...
2017-02-23 16:27:00
141
转载 Java并发编程9-Fork/Join框架
1什么是Fork/Join框架 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解一下Fork/Join框架。Fork就是把...
2017-02-23 12:51:00
193
转载 数据库触发联合索引的几个条件
本文主要总结查询语句触发联合索引(索引定义中至少包含两个索引列)的几种条件。 示例如下。首先创建表: CREATE TABLE E (e1 INT, e2 VARCHAR(9), e3 INT, PRIMARY KEY(e1, e3)); 这样就建立了一个联合索引:e1,e3 触发联合索...
2017-02-23 07:43:00
104
转载 Java并发编程8-并发队列
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用...
2017-02-22 18:11:00
174
转载 Java并发编程7-循环删除集合元素
1 异常情况举例 先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例。 使用的数据集合: List<string> myList = new ArrayList&l...
2017-02-22 14:43:00
425
转载 Java并发编程6-CopyOnWrite容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWr...
2017-02-22 13:52:00
72
转载 Java并发编程5-ConcurrentHashMap
java.util.concurrent.ConcurrentHashMap是java.util.concurrent.ConcurrentMap接口的实现类。 1 为什么要使用ConcurrentHashMap (1)线程不安全的HashMap 在多线程环境下,使用...
2017-02-22 12:33:00
66
转载 Java并发编程4-Java中的锁
1 synchronized的好处 隐式获取释放锁,简化了同步的管理,十分便捷。 2 锁的优势 (1)拥有锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字所不具备的同步特性。 (2)扩展性和灵活性好。例如,针对一个场景,手把手进行锁获取和释放...
2017-02-21 09:15:00
165
转载 Java并发编程3-线程间通信
1volatile关键字 Java支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个变量的拷贝(虽然对象以及成员变量分配的内存是在共享内存中的,但是每个执行的线程还是可以拥有一份拷贝,这样做的目的是加速程序的执行,这是现代多核处理器的一个显著特性),所以程序...
2017-02-20 21:21:00
88
转载 Java并发编程2-理解中断
1thread.interrupt()方法 该方法实际上只是设置了线程的中断状态为true,并不像stop方法那样会中断一个正在运行的线程,如果设置一个已经处于中断状态的线程,则不会做任何操作,否则设置状态的过程如下: (1)如果要中断的线程不是当前线程,则会调用要中断的线程的chec...
2017-02-20 16:28:00
126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人