自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

至宝屠夫的博客

一起成长,一起进步,RUA.

  • 博客(33)
  • 收藏
  • 关注

原创 spring代码类继承层次结构深度解析之BeanFactory

上面是我截图自IDEA,主要是DefaultListableBeanFactory的继承结构。为啥选DefaultListableBeanFactory呢?熟悉spring源码的人一般都知道,这个类已经是BeanFactory组件的最底层的实现了。虽然他下面还有个XmlBeanFactory,但是已经是过时的了。所以我们最底层选择的是他,就能看到整个BeanFactory的功能的扩展体系。还请注意,ApplicationContext不在本次的讨论之内。这个图大致可分为3部分吧。红色框的部分;Ser..

2021-02-20 15:15:03 1181 4

原创 spring中的代码编写技巧大全第一期

1.多个重载方法,底层实现是某个doXXX的方法.如下图所示,红框中3个方法均实现自BeanFactory中的getBean方法,是重载了3个getBean。具体实现则调用了自己的doGetBean方法。因为:虽然是3个重载的getBean方法,参数不一样,但是作用都是获取Bean。所以他们内部的逻辑几乎是一样的,所以抽取到doGetBean中。而不同的参数差异,例如requiredType , rags typeCheckOnly则体现在doGetBean中的一些if分支中。...

2021-02-20 14:34:48 142

转载 java中的CAS

本篇的思路是先阐明无锁执行者CAS的核心算法原理然后分析Java执行CAS的实践者Unsafe类,该类中的方法都是native修饰的,因此我们会以说明方法作用为主介绍Unsafe类,最后再介绍并发包中的Atomic系统使用CAS原理实现的并发类。无锁的概念在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小...

2019-05-05 17:09:30 369

原创 java并发编程小案例(十一)

public class Test11 { volatile int count = 0; void f(){ for(int i = 0 ; i < 10000 ; i ++ ){ count ++ ; } } public static void main(String[] args) { ...

2019-04-18 21:56:17 213

原创 java并发编程小案例(十)

```public class Test10 { boolean running = true; void f(){ System.out.println("f start "); while(running){ } System.out.println("f end"); } public ...

2019-04-08 21:58:59 1039

原创 java并发编程小案例(九)

```public class Test9 { int count = 0; synchronized void f(){ System.out.println(Thread.currentThread().getName() + " start"); while(true){ count ++ ; ...

2019-04-08 21:23:28 124

原创 java并发编程小案例(八)

```public class Test8 { synchronized void f(){ System.out.println("f start "); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { ...

2019-04-08 21:13:07 167

原创 java并发编程小案例(七)

```public class Test7 { synchronized void f1(){ System.out.println("f1 start "); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { ...

2019-04-08 21:09:13 118

原创 java并发编程小案例(六)

public class Test6 { private double account; private String name; public synchronized void set(double account , String name){ this.name = name; try { Thread.sl...

2019-03-29 21:37:08 112

原创 java并发编程小案例(五)

public class Test5 { public synchronized void f1(){ System.out.println(Thread.currentThread().getName() + " f1 start"); try { Thread.sleep(10000); } catch (Int...

2019-03-29 21:15:31 131

原创 java并发编程小案例(四)

public class Test4 implements Runnable { private int count = 10; @Override public /*synchronized*/ void run() { count -- ; System.out.println(Thread.currentThread().getNa...

2019-03-29 21:06:11 136

原创 java并发编程小案例(三)

public class Test1 { private static int count = 10; public synchronized static void f(){ count--; System.out.println(count); }}如果是静态方法的话,锁定的是当前的class对象:T.class对象。等同于如下写...

2019-03-29 20:43:47 138

原创 java并发编程小案例(二)

public class Test1 { private int count = 10; public void f(){ synchronized (this){ count--; System.out.println(count); } }}简单的写法,直接将Test1的对象作为锁对...

2019-03-29 20:31:47 166

原创 java并发编程小案例(一)

public class Test1 { private int count = 10; private Object o = new Object(); public void f(){ synchronized (o){ count--; System.out.println(count); ...

2019-03-29 20:29:31 302

转载 数据库并发的问题、隔离级别、并发控制。

摘要:  事务是最小的逻辑执行单元,也是数据库并发控制的基本单位,其执行的结果必须使数据库从一种一致性状态变到另一种一致性状态。事务具有四个重要特性,即原子性(Atomicity)、一致性(Consistency)、隔离性 (Isolation)和持久性 (Durability)。本文首先叙述了数据库中事务的本质及其四大特性(ACID)的内涵,然后重点介绍了事务隔离性的动机和内涵,并介绍了数据...

2019-01-31 15:07:12 873

转载 SpringBoot 启动流程

写在前面:       由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。       本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。总览:      ...

2018-12-06 15:53:54 179

转载 微服务小知识

01—什么是微服务  微服务的概念源于Martin Fowler所写的一篇文章“Microservices”。 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行...

2018-11-23 14:55:52 211 1

转载 redis

考虑到绝大部分写业务的程序员,在实际开发中使用Redis的时候,只会Set Value和Get Value两个操作,对Redis整体缺乏一个认知。所以我斗胆以Redis为题材,对Redis常见问题做一个总结,希望能够弥补大家的知识盲点。本文围绕以下几点进行阐述:为什么使用Redis使用Redis有什么缺点单线程的Redis为什么这么快Redis的数据类型,以及每种数据类型的使用场景Redis的过期...

2018-06-19 17:50:56 225

转载 spring context源码解析之@Async

背景大家项目中用到异步、多线程的场景很多,使用最多的场景还是主动对象模式,就是主线程开启一个线程池去任务分发,任务执行完成之后,关闭线程池,但是有的场景则需要部分代码异步执行的效果,简单的说就是有一个可以复用的线程池可以复用,直接new Thread当然也可以,不推荐,没有线程池的可靠性好,如果这个时候再创建一个线程池用完再关闭代码是不是有点重,维护性也不好,@Async这个注解就是为了解决这个问...

2018-05-28 11:58:32 1247

转载 Redis数据库底层源码剖析

按照Redis源码剖析–源码结构解析一文中给自己规定的六个阶段来学习Redis。目前前三个阶段的学习以及完成了,这些都是和系统的耦合性比较小的部分,所以看起来也比较轻松。从这篇博客开始,就进入到第四阶段的源码剖析了。Redis的各个功能的实现将会顺着我们的逐步深入而变得清晰明了,如果读者跟着我的步伐一起学习,到了这一刻,想必也是兴奋的。废话也不多说了,前面所有的数据结构都是为后面的功能实现做铺垫。...

2018-02-09 12:01:57 345

转载 Redis发布与订阅源码剖析

在分析Notify通知功能的时候讲到,Notify是用过订阅和发布功能来发送通知的。本来按计划是要分析持久化的代码的,可是对这个pubsub实在是有点感兴趣,所以先分析这方面的代码。订阅和发布,顾名思义,就是客户端可以订阅某个频道,也可以向某个频道发布消息,有点像收音机的功能一样。Pubsub概述Redis的发布和订阅功能由PUBLISH、SUBSCRIBE和PSUBSCRIBE等命令组成,要想理...

2018-02-09 11:56:06 263

转载 redis 消息通知

2018-02-09 11:53:15 806

转载 Java 基于红黑树的TreeMap,TreeSet实现原理

TreeSet and TreeMap总体介绍之所以把TreeSet和TreeMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说TreeSet里面有一个TreeMap(适配器模式)**。因此本文将重点分析TreeMap。Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大

2018-02-06 16:22:57 1134 1

转载 java类加载机制

1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“首次主动使

2018-02-05 18:43:46 131

原创 java线程的状态

线程的状态新建 MyThreadInfo 类,打印线程对象属性,代码如下:public class MyThreadInfo extends Thread { @Override // 可以省略 public void run() { System.out.println("MyThreadInfo 的线程实例正在执行任务");//

2018-02-01 15:46:22 207

转载 Golang Reflect反射

Go是静态类型语言。每个变量都拥有一个静态类型,这意味着每个变量的类型在编译时都是确定的:int,float32, *AutoType, []byte,  chan []int 诸如此类。动静类型     编译时就知道变量类型的是静态类型;运行时才知道一个变量类型的叫做动态类型。    1. 静态类型            静态类型就是变量声明时的赋予的类型

2018-01-29 17:49:35 13445 3

转载 Golang channel用法

一、Golang并发基础理论Golang在并发设计方面参考了C.A.R Hoare的CSP,即Communicating Sequential Processes并发模型理论。但就像John Graham-Cumming所说的那样,多数Golang程序员或爱好者仅仅停留在“知道”这一层次,理解CSP理论的并不多,毕竟多数程序员是搞工程 的。不过要想系统学习CSP的人可以从这里下载到CSP论

2018-01-29 17:48:19 565

转载 Atomic包

简介Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。 在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型,原子更新数组,原

2018-01-29 17:40:41 148

转载 Atomic包的使用

简介Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。 <br style="margin-top:0px">在Atomic包里一共有12

2018-01-29 17:37:49 330

原创 事务的回滚

事务回滚有两种:1. throw  new RuntimeException2.TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();下面我来说一下这两个有啥区别。第一种, 抛出一个异常,这种方法很简单粗暴,但是有一个很隐蔽的问题:如果不小心抛出去得异常又被自己catch住了,就不能进行回

2018-01-29 17:29:29 488

原创 finally中的return语句

finally中的return会影响到本方法中抛出得异常,请看下面代码:public class Test { public static void main(String[] args) { try { doMyTest(); }catch (Exception e){ System.out.println(

2018-01-29 17:16:04 436

原创 SpringMVC框架的一些底层

SpringMVC框架的一些底层

2017-08-26 01:12:02 440

原创 京东面试题

1.这里B类中可以插入哪个方法?只看方法名字和参数,这些方法名都是   a            a()  视为重写父类的方法, a(别的参数) ,视为与父类的方法重载             如果  是a() 则  是重写父类的方法,则返回值必须与父类一致,但是权限可以不一致,只能大于等于父类的权限。 所以 protected void a() public

2017-04-19 19:13:27 331

空空如也

空空如也

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

TA关注的人

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