4 LiQiyaoo

尚未进行身份认证

技术改变生活。

等级
TA的排名 7k+

Spring声明式事务的实现方式选择(JDK动态代理与cglib)

1、简介Spring声明式事务的具体实现方式是动态决定的,与具体配置、以及事务代理对象是否实现接口等有关。2、使用JDK动态代理的情况在满足下面两个条件时,Spring会选择JDK动态代理作为声明式事务的实现方式。(1)事务代理类必须实现接口且不能显式继承父类(Object这个父类不算)。(2)配置:springboot的启动类要加上@EnableTransactionManagement和@En...

2018-05-04 16:36:30

REQUIRES_NEW不起作用导致整个事务回滚——Spring事务传播机制

1、Propagation.REQUIRES_NEW的作用假设有个对象A,有a()方法,有个对象B,有b()方法。在a方法中调用了b方法,b方法被称为内嵌事务,不管a方法是否开启事务,只要b方法的事务的隔离级别为REQUIRES_NEW,则一定会在调用b方法时产生一个新的事务。2、一个场景A的a()方法:    @Transactional public void a() { ...

2018-05-03 10:38:08

Java面试题及回答集锦(基础篇)

1、问题:如果A和B对象循环引用,是否可以被GC?回答:可以,现在的虚拟机基本都是通过可达性分析算法来判断对象是否存活的,而不是通过简单的引用计数法来判断对象是否存活。可达性分析算法使用一系列的“GC Roots”对象(虚拟机栈中引用的对象、静态属性引用对象)作为起始点,这些节点向下搜索的路径称为引用链,当一个对象到GC Roots没有任何引用链连接,则证明对象是不可用的。2、Java中的内存溢出...

2018-03-16 13:46:19

数据库面试题

1、数据库有哪些索引?根据功能分类唯一索引(Unique):可单列也可多列组合,每个索引值对应唯一的记录,且索引的字段具有唯一性,最多只能有一个NULL。主键索引(Primary Key):可单列也可多列组合,其值唯一标识表中的一行,不能为NULL。聚集索引(Cluster):一个表只能包含一个聚集索引,表中行的物理顺序与键值的逻辑顺序相同,加快查询速度。根据实现方式分类B+树索引:平衡的树,不一...

2018-03-16 13:46:07

计算机基础之操作系统

1、进程进程是具有独立功能的程序在一个数据集合上的动态性:进程的一次执行,生命周期有创建、活动、暂停、终止等过程。并发性:多个进程实体同存于内存中,能在同一时间段内运行。独立性:进程实体能独立运行,独立获得自由,独立接收调度。异步性:进程按照各自独立的,不可预知的速度执行,异步性会导致执行结果的不可再现性。结构性:程序段、数据集合、PCB(描述进程运行状态,是进程存在的唯一标志)。进程映像是静态的...

2018-03-02 13:14:14

Redis原理知识点集锦

1、Redis有哪些数据结构?字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。高级数据结构HyperLogLog:基数统计GEO:地理位置PUB/SUB:订阅发布2、Redis是单进程单线程的吗?是的。Redis是基于内存的单进程单线程KV数据库,基于C语言编写,不比单进程多线程的Memcached差。快的原因:(1)完全基于内存。(2)数据结构简单、对数据...

2018-02-26 12:51:04

Dubbo实现原理浅析

一、电商系统架构演进1、单一应用架构当网站规模很小时,采用单一应用框架,把所有的服务集中在一个应用中,但随着网站规模增大,单一应用框架会越来越难维护。2、垂直应用架构把应用垂直的拆分开来,拆分成如支付、查询等垂直模块,每个模块都有从顶层显示层到底层数据持久层的业务逻辑,每个模块都是一个独立的子系统。虽然在一定程度上降低了开发成本和维护成本,但是会导致许多底层业务逻辑代码的重复。3、分布式应用架构把...

2018-02-25 17:23:38

Java动态代理讲解——深入浅出

一、代理模式        要讲解动态代理,就要先说代理模式,这是一种最常用的设计模式。该模式中有以下三个角色。        抽象角色:通过接口或抽象类声明真实角色实现的业务方法,即被代理类与代理类都要实现的接口。        代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。        真实角色:实现抽象角色,定义真实所要实现的业务...

2018-02-25 12:24:23

最通俗易懂的NIO讲解

一、NIO是什么?NIO的全称是New I/O,与之相对应的是Java中传统的I/O,这里都指的是Java的API包。传统的IO包提供的是同步阻塞IO,即当用户线程发出IO请求后,内核会去查看数据是否已经就绪,若未就绪,则用户线程会处于阻塞状态(让出CPU),当数据就绪后,内核会将数据复制到用户线程,并把结果返回给用户线程,同时接触用户线程的阻塞,同步体现在用户线程需要等待数据就绪后才能向后执行(...

2018-02-23 12:33:53

Java NIO:浅析I/O模型

也许很多朋友在学习NIO的时候都会感觉有点吃力,对里面的很多概念都感觉不是那么明朗。在进入Java NIO编程之前,我们今天先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,接下来介绍了5种IO模型,最后介绍了两种和高性能IO设计相关的设计模式(Reactor和Pr...

2018-02-23 10:09:30

设计模式集锦

1、简单工厂模式、工厂模式、抽象工厂模式的区别?简单工厂模式(静态工厂模式):简单工厂是一个类,其中一个静态方法,根据传入的参数来生成特定的对象。工厂模式:工厂模式提供了一个抽象的工厂类,该类有一个生产抽象产品的接口,程序员可根据需要继承抽象工厂实现生产特定产品的方法,并且自己实现特定的产品。工厂模式关注的是产品的生成,而不在于生成产品之间的关系,在最终使用时,使用产品本身。抽象工厂模式:由一个抽...

2018-02-21 11:23:01

分布式锁的作用及实现(Redis)

一、什么是分布式锁?要介绍分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果,因为线程锁的实现在根本上是依靠线程之间共享内存实现的,比如synchronized是共享对象头,显示锁Lock是共享某个变量(state)。进程锁:为了控制同一操作系统中多个进程访问某...

2018-02-19 15:29:38

最容易理解的Consistent Hashing讲解(一致性哈希算法使用场景及原理)

一、使用场景        考虑一个场景,有一个redis集群,那么我们如何分配不同的要缓存的数据,使之能够尽可能均匀的存储到各个redis服务器上呢?肯定有人会想到使用传统的hash + 取模 算法。        服务器ID = hash(object) % N                    (N为服务器个数)        举个例子,如果我们有4个redis服务器,编号分别为0,1,...

2018-02-16 17:17:02

SpringMVC 原理 (面试必备)

一、简介SpringMVC是Spring框架的一个子模块,类似于AOP,IOC等模块。也是通常所说的那层薄薄的Web层,也就是MVC架构中的C(Controller),负责接收分发用户请求。二、原理详细解释这幅图。1、用户发起请求,一般是HTTP请求,带有URL和参数。2、DispatcherServlet的匹配的URL与请求的URL相匹配,DispatcherServlet接收请求。3、把URL...

2018-02-14 13:21:15

Spring AOP 原理 (面试必备)

一、AOP是什么?    AOP的全称是AspectOrientProgramming,即面向切面编程。是对OOP(ObjectOrientProgramming)的一种补充,战门用于处理一些具有横切性质的服务。常常用于日志输出、安全控制等。      上面说到是对OOP的一种补充,具体补充的是什么呢?考虑一种情况,如果我们需要在所有方法执行前打印一句日志,按照OOP的处理思想,我们需要...

2018-02-13 16:02:26

Spring IOC 和 DI原理 (面试必备)

一、IOC是什么?IOC全称为“Inversion of Control”,即控制反转,不是一种技术,而是一种设计思想。在这种设计思想中,你设计好的对象交给容器管理,而不是在应用程序内部对对象进行管理。控制的含义是IOC容器控制了对象(也可以包括文件及其他外部资源);而反转的含义是IOC容器负责创建及注入依赖的对象,但在传统的应用程序中,我们需要在对象内部去创建(new)依赖的对象,这叫“正”,在...

2018-02-13 12:00:55

Java并发之ConcurrentHashMap详解

一、ConcurrentHashMap是什么?      ConcurrentHashMap是线程安全的并发容器,是用来替代在多线程环境下的HashMap,因为HashMap是线程不安全的,多线程环境下put操作可能会导致死循环,CPU利用率上升到100%。虽然有同步容器Hashtable和Collections.synchronizedMap方法使得容器同步,但是这些容器效率都非常低,因为它们锁...

2018-02-12 18:18:54

Java并发之ReentrantLock原理详解

一、ReentrantLock是什么?    ReentrantLock是Lock接口的默认实现,是一种独占锁。相对synchronized而言,ReentrantLock提供了更多的操作方式以及更细粒度的加锁方式。    主要特性:    (1)可重入。ReentrantLock是可重入锁,因为它会记录之前获得锁线程对象,保存在exclusiveOwenerThread变量中,当一个线程要获取锁...

2018-02-12 12:13:03

Java并发之AQS(AbstractQueuedSynchronizer)原理讲解

一、什么是AQS?    AQS的全称是AbstractQueuedSynchronizer,即抽象队列同步器,其底层是volatile与CAS,而其上层则是基于该抽象类构建的许多并发组件,如ReentrantLock、Semaphore等。AQS自身实现了一些基本方法,还剩余一些面向上层的方法,这些方法需要继承该抽象类的同步组件去实现。    volatile原理链接    CAS原理链接   ...

2018-02-10 17:51:31

Java并发之CAS与原子类实现原理讲解

一、CAS是什么?CAS的全称是Compare and Swap,即比较并交换。比较的是当前内存中存储的值与预期原值,交换的是新值与内存中的值。这个操作是硬件层面的指令,因此能够保证原子性。Java通过JNI(本地方法调用)来使用这个原子操作,也是乐观锁最常用的机制。CAS操作包含三个操作数——内存位置、预期原值和新值。在执行CAS操作时,先进行Compare操作,即比较内存位置的值与预期原值是否...

2018-02-10 12:40:29

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!