自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(83)
  • 问答 (3)
  • 收藏
  • 关注

原创 【啃啊啃 Spring5 源码】细碎四:核心类总结

阅读spring源码时,有许多 “核心类” 的作用我们了解了,才会阅读的更顺畅。这里总结下我阅读源码时认为比较重要,需要了解的一些 “核心类”注:本文前三节 为参考【Spring4揭秘 基础2】PropertySource和Enviroment系列文章,进行的总结扩展1. 资源配置相关1.1 Resourcepublic interface Resource exten...

2018-09-09 22:33:34 602

原创 【啃啊啃 Spring5 源码】细碎三:AOP两种动态代理的区别

spring 中 AOP是基于 “动态代理” 实现,其采用了两种方式:java代理:采用java内置的代理API实现cglib代理:采用第三方API实现本文主要阐述这两种方式的区别动态代理和静态代理静态代理:编译时将增强代码植入class文件,因为是编译期进行的增强,所以代码运行时效率比动态代理高。使用Aspect可以实现静态代理。动态代理:运行时生成代理类并加载,效...

2018-08-19 13:38:30 891

原创 【Java并发学习五】图解ThreadLocal

简单整理下ThreadLocal的原理,以及它需要注意的内存泄漏。ThreadLocal原理ThreadLocal不多介绍,可看作线程内的局部变量(这个比喻很贴切)。我们平时声明的局部变量的范围一般是方法内的,而ThreadLocal变量的范围是整个线程。我们先来看一段代码demo:public class Test { //可看作线程内声明的局部变量 st...

2018-07-29 19:36:56 1493 1

原创 【啃啊啃 Spring5 源码】细碎二:bean的循环依赖

循环依赖所谓循环依赖,是指在spring中,类A中有一个成员变量为类B,而类B中也有一个成员变量为类A。这会造成在spring初始化容器中的bean时,bean A的初始化需要bean B的初始化的完成,而bean B的初始化又需要bean A初始化的完成。A与B间形成了循环依赖: 循环依赖的解决spring中,循环依赖的解决是有条件的:仅限于singleton(单例)作用域...

2018-07-29 19:36:32 696 1

原创 【Java并发学习四】如何实现一个定时线程池

在【Java并发学习一】如何实现一个线程池上进行扩展,我们想一下如何实现一个定时任务线程池呢?所谓 “定时任务线程池” 就是指放入线程池的任务,可以按照指定的等待周期循环执行。Java里面ScheduledThreadPoolExecutor这个类实现了这种功能。Spring里面的定时任务也是在ScheduledThreadPoolExecutor的基础上扩展而来。如何实现我们...

2018-07-18 07:48:34 6163

原创 @Async、@Transational、AOP 方法内部调用失效的解决方法

遇到过 方法A 内调用Aop修饰的方法B 失效、方法A 内调用@Async修饰的方法C 失效,百度谷歌都没看到一个好的解决,这里分享一个我的解决方案。为什么失效这个百度上很多解答,分析的也很好,其实就是Spring代理机制造成的。简单的说,就是通过spring容器获取的类对象,很多情况下并不是原类,而是被spring修饰过了的代理类。例如你执行 A类对象的方法A.invoke(...

2018-07-16 23:32:27 3705 1

原创 【啃啊啃 Spring5 源码】细碎一:spring 事件机制

学习spring源码时,看到ApplicationEvent相关的代码觉得熟悉又困惑,深入了解了一下,发现原来是spring事件机制(原谅我之前没用过……)。 这里在【Spring4揭秘 基础1】监听器和事件的基础下进行一下扩展,感谢这篇博文的作者,他的spring基础系列文章让我在阅读源码时,轻松了不少。注:源码部分根据spring-5.0.7版本分析spring事件机制sprin...

2018-07-06 08:48:23 839 1

原创 【Java并发学习三】内存屏障与synchronized、volatile的原理

注:本文内容会有部分涉及上节的硬件知识:【Java并发学习二】多线程编程的硬件基础知识总结1. 内存屏障上一节讲过,为了解决写缓冲器和无效化队列带来的有序性和可见性问题,我们引入了内存屏障。内存屏障是被插入两个CPU指令之间的一种指令,用来禁止处理器指令发生重排序(像屏障一样),从而保障有序性的。另外,为了达到屏障的效果,它也会使处理器写入、读取值之前,将写缓冲器的值写入高速缓存,...

2018-06-27 23:08:36 2486 4

原创 【Java并发学习二】多线程编程的硬件基础知识总结

这篇简单梳理下与多线程相关的硬件知识,了解它们能够让我们更清晰的了解多线程工作的本质,以及关键字synchronized、volatile、final的实现原理。我们会发现,每一个硬件部件的引入都是为了解决某些问题,然后它们又诞生了新的问题。(程序员就处在这样的永无止境的循环中……)高速缓存1. 缓存概念先来说说缓存的概念,现在的处理器运行速度远大于内存的读写速度的,为了填...

2018-04-22 13:58:49 546

原创 Simple Java—Compiler and JVM(二)为什么域不能被“重写”

为什么域不能被重写这篇文章解释了Java中的一个基础概念——隐藏域1. Java中域能被重写吗?让我们看一下下面的例子package oo;class Super { String s = "Super";}class Sub extends Super { String s = "Sub";}public class FieldOverri...

2018-04-16 12:41:56 247

原创 【Java并发学习一】如何实现一个线程池

前言和设计模式一样,打算花三个月的时间,结合《Java并发编程实战》一书,来总结下并发方面的知识。第一章从线程池的原理开始总结,希望自己能坚持下来,加油!1. 如何实现一个线程池?线程池的概念这里不多说,在讲它的原理前,我们先自己想一下,如果我来写,那如何实现一个线程池?1.1 线程池的重要变量首先要定义一个存放所有线程的集合; 另外,每有一个任务分配给线程池,我们就

2018-01-17 23:27:43 12688 2

原创 分布式基础-RMI原理简单通俗版

RMI原理

2017-10-10 12:28:28 607

原创 Head First 设计模式(十)状态模式

状态模式,状态模式与策略模式的区别

2017-06-14 08:44:47 1470 5

原创 Head First 设计模式(九)迭代器与组合模式

迭代器模式定义组合模式

2017-04-24 21:08:50 1141

原创 Head First 设计模式(八)模板方法模式

模板方法模式

2017-04-17 23:28:17 966

原创 Head First 设计模式(七)适配器模式和外观模式

适配器模式和外观模式的实例模式

2017-04-13 20:54:44 394

原创 Head First 设计模式(六)命令模式

用例子说明命令模式

2017-04-11 23:20:04 398

原创 Head First 设计模式(五)单件模式

单件模式总结

2017-04-08 15:32:28 587 1

原创 Head First 设计模式(四)装饰者模式

装饰者模式

2017-04-06 23:54:44 393

原创 Head First 设计模式(三)工厂模式

工厂模式详解

2017-04-02 22:47:38 517

原创 Head First 设计模式(二)观察者模式

Head First,观察者模式

2017-03-22 21:20:14 903

原创 Head First 设计模式(一)策略模式

《Head First 设计模式》——策略模式

2017-03-07 08:09:24 1104 3

原创 Java.util包简单总结

java.util包粗略总结

2017-02-28 00:30:13 54505 5

原创 Spring学习笔记(二)后处理器与AOP

Spring 后处理器和AOP

2016-09-27 21:37:59 1886

原创 Spring学习笔记(一)IOC与Spring基础xml配置

Spring 基础配置以及IOC

2016-09-09 14:38:41 414 1

原创 String拼接符"+"在编译期做了什么?

String拼接符"+"做了啥?

2016-09-08 16:59:11 1452 1

原创 MyBatis学习总结(二)表的关联以及动态SQL

表的关联和动态sql

2016-09-03 21:43:34 1717

原创 MyBatis学习总结(一)配置以及增删改查

MyBatis配置以及基本增删改查

2016-09-03 17:31:54 615

原创 浅析Java中的装箱和拆箱

Java中包装类的装箱和拆箱

2016-07-15 22:23:47 347

转载 SSL协议会话建立过程解析

本文转自:SSL协议会话建立过程解析

2016-07-01 14:58:57 757

原创 数据结构基础(六)排序

排序算法集锦

2016-03-20 21:04:07 615

原创 数据结构基础(五)图以及DFS、BFS

概念定义图是一种较线性表和树更为复杂的数据结构

2016-03-09 11:26:44 2050

原创 Java虚拟机工作过程学习总结

java 内存结构,虚拟机工作过程

2016-03-06 14:23:32 644

原创 Java中的静态绑定和动态绑定

Java静态绑定和动态绑定

2016-03-05 13:56:16 514

翻译 Simple-Java—Collections(二)Java中如何把数组转换为ArrayList

Java中如何把数组转换为ArrayList

2016-02-18 22:24:58 3096

原创 Java迭代foreach原理解析(java.util.ConcurrentModificationException的原因)

java.util.ConcurrentModificationException、Java迭代器

2016-02-16 19:34:33 4593 1

翻译 Simple-Java—Collections(一)Java高效计数器

Translate from Efficient Counter in JavaJava中的高效计数器你可能经常需要统计一段文本或数据库中某些东西(例如单词)的出现频率。在Java中,使用HashMap可以很简单的实现这么一个计数器。 这篇文章将会比较几种实现计数器的方法,最后,得出最有效率的一个。1. 简单计数器String s = "one two three two three three"

2016-02-04 15:23:56 430

翻译 Simple Java—Compiler and JVM(一)Java对象运行时的内存结构

Java中的动态绑定,多态实现机制

2016-01-31 15:31:51 733

翻译 Simple Java—Strings and Arrays(六)Java中的null值是什么?

Java中的null值是什么?

2016-01-28 17:52:51 327

翻译 Simple Java—Strings and Arrays(五)如何在java中有效率的检查一个数组中是否有某值?

如何在java中有效率的检查一个数组中是否有某值?

2016-01-28 17:50:15 512 1

空空如也

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

TA关注的人

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