自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码解析-AOP

1,什么是aop?aop指面向切面编程,即对代码原有结构不产生影响的情况下,动态的织入,完成功能的增强2,aop的实现方式都有哪些?spring中实现aop的方式主要有jdk原生动态代理实现以及cglib动态代理实现。jdk动态代理:利用拦截器加反射在编译期生成一个代理接口的匿名实现类,在调用具体方法前调用InvokeHandler来处理cglib动态代理:利用字节码框架ASM,在运行期动态将class加载进来,通过修改字节码继承代理类来实现,核心思想继承,并注入被代理对象,在切入的方法

2021-09-16 15:17:42 95

原创 Spring源码解析-Bean生命周期详解

1.调用构造器构造对象: 默认使用无参构造方法,若声明有参构造方法,则自动注入参数,调用有参构造方法(如果有多个有参构造方法,则会抛出无默认构造方法异常),如果参数在spring容器中无bean对象,即无法注入,则会抛出异常。若有多个有参构造方法,可使用@Autowired注解来标记默认使用的构造方法2.注入属性: spring会先扫描切入点(即被autowire注解标注的属性),然后跟字段类型,扫描容器中所有的bean,找出符合该类型的所有bean,然后根据bean...

2021-09-16 14:45:28 130

原创 多线程并发总结

1.实现多线程的几种方式?继承Thread类,实现Runable接口,实现callable接口,线程池。其本质都是实现callable接口,而后进行封装。继续往下看就会发现,最终会调用本地方法,来启动一个线程,由执行引掣在执行到该字节码指令时,去操作系统本地方法库中调用对应的方法启动一个线程,这也很好的解释了java中的线程本质是与操作系统上的线程一一对应的映射关系2.并发安全问题指的是什么?当多个线程操作同一个变量时,结果与预想的不一致,就会出现线程安全问题,本质原因时因为操作非原子性,如下面

2021-09-14 15:18:02 420

原创 数据库索引篇

B(B-)Tree索引与其数据在磁盘上的地址放在一起,所以同一节点上存放的索引数量有限,树的深度不可控B+Tree(一种有序的索引数据结构)数据(数据在磁盘上的地址)存放在叶子节点,其他节点只存放索引以及指向的下一索引位置信息,由于索引大小不超过8b,同时用来存储下一个索引位置的内存底层分配大小为6b,故一个节点可以存放1100多个索引,而叶子节点由于需要存放数据在磁盘文件上的地址,所以占用空间较大,约为1kb,故三层B+Tree结构可以存放1100*1100*16约为2000万数据。即只需要进

2021-09-13 11:13:17 76

原创 jvm虚拟机调优底层系列

jvm底层结构(对内存的分门别类)1、程序计数器(线程私有,记录当前线程字节码指令执行位置) 程序计数器为什么是线程私有的? java程序多为并发执行,多线程之间会争抢cpu资源,获取执行时间,cpu会不停切换线程,所以需要pc寄存器来记录当前线程字节码指令执行位置,以方便切换线程时能找到上次执行的位置。程序计数器为jvm内存中最小的一块内存,运行速度快,无垃圾回收,在字节码指令执行时,由执行引掣维护计数器的标记位置变量 2、方法区(用于存放程序运行时类或所有对象共有的一些变量,如静态变量,

2021-09-12 21:01:26 88

原创 JUC-Semaphore(信号量)

Semaphore常用来控制某一资源访问的线程数,类似现实生活中的停车场,车位是固定的,当有车开进来时,会先尝试获取车位,如果获取成功则可以成功停车,车位将会减少一个,当车开走之后车位就会被释放又会多出一个车位需要注意的是使用aquire方式获取位置时,如果没有位置了则会阻塞等待直到有位置位置,如果使用tryAquire方法,当没有位置时,则会执行else中的方法public class SemaphoreTest { public static void main(String[] args)

2021-05-16 13:01:09 70

原创 JUC-CyclicBarrie(环形栅栏)

CyclicBarrieCyclicBarrie与CountdownLatch相似,都可以用来模拟高并发场景,它可以用来阻塞每个线程,当满足某个条件之后释放线程,与CountdownLatch阻塞多个线程最后释放相似,例如显示生活中的开会,当所有人都到齐之后开始开会,每个线程都会执行阻塞之后也就是await方法之后的操作public static void main(String[] args) { final CyclicBarrier cyclicBarrier = new Cycl

2021-05-16 12:43:01 137

原创 JUC-集合线程安全类

copyOnWriteArrayList,copyOnWriteSet,ConcurrentHashMap其本质都是读方法不加锁,写方法加锁,同时在写之前会复制一份将老集合用来读,新集合在经过判断后用来扩容修改,其本质都是读写锁的实现方式。同时也可以使用集合工具类Collections来获取线程安全的集合...

2021-05-16 12:32:54 158

空空如也

空空如也

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

TA关注的人

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