自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 SpringBoot框架05-特性及常用注解

是Spring组件一站式解决方案,主要是简化了使用Spring 的难度,节省了繁重的配置,提供了各种启动器。如果@Autowired 和Map 集合一起使用,则将它的bean名称作为key,所有的bean 作为value;指定了type,则从上下文中找到类型匹配的唯一Bean进行装配,找不到或者多个,都会抛出异常。SpringBoot 会根据再类路径中的jar包、类,为jar包里面的类自动配置Bean。指定了name,则从上下文中查找名称(Id)匹配的Bean 进行匹配,找不到则抛出异常;

2023-10-16 08:59:47 57

原创 SpringBoot框架03-Spring循环依赖

因为A中构造器注入了B,那么A在关键的方法addSingletonFactory()之前就去初始化了B,而B中构造器中又同时注入了A,导致三级缓存中根本没有A,所以会发生死循环,Spring发现后就抛出异常。createBeanInstance:实例化,调用对象的构造方法实例化对象;Spring采用的是提前暴露对象的方法。initializaBean:Spring xml中的init 方法。populateBean:填充属性,依赖属性bean对象进行填充;当获得对象的引用时,对象的属性可延迟设置。

2023-10-13 09:10:26 67

原创 SpringBoot框架02-Spring事务管理

指当一个事务正在访问数据,并且对数据进行了修改,而修改数据还未提交到数据库中(可能提交或回滚)。一个事务先后读取同一条记录,而事务在两次读取之间,该数据被其他事务所修改,则两次读取的数据不同,称之为不可重复读。:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。保证一个事务修改的数据,在提交后才能被另外一个事务读取。Spring事务的本质是数据库对事务的支持,数据库不支持事务,则Spring无法提供事务功能。一个事务在执行的过程中,完全看不到其他事务对数据库所做的更新。否则,就创建一个新事务;

2023-10-13 09:04:45 72

原创 SpringBoot框架01-Spring IOC&AOP&MVC&Bean的生命周期

SpringIOC,AOP,MVC,Bean的声明周期

2023-10-12 09:13:32 50

原创 Java核心09-JVM性能调优

JVM性能调优,JVM性能调优工具,CPU飙升

2023-10-11 09:08:47 47

原创 Java核心08-JVM内存结构垃圾回收机制

JVM内存结构,JVM垃圾回收机制。G1,CMS收集器

2023-10-10 10:01:46 87

原创 Java基础07-多线程

Java 多线程,线程池,四种线程池,ThreadPoolExecutor,ThreadLocal,TransmittableThreadLocal

2023-10-09 09:15:19 22

原创 Java核心02-HotSpot 虚拟机对象

JVM在给线程中的对象分配内存时,首先在TLAB分配,当对象大于TLAB中的剩余内存,或TLAB的内存已用尽时,再采用上述的CAS+重试 进行内存分配。对象所需的内存大小在类加载完成后便可知,为对象分配空间的任务等同于把一块确定大小的内存,从Java堆中划分出来。比如这个对象是哪个实例、如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息,存放在对象头中。Java堆中将会划分出一块内存来作为句柄池,栈上的reference中存储的就是对象的句柄地址。

2023-10-08 09:25:27 26

原创 Java核心01-JVM内存区域

Java虚拟机栈,线程私有的,生命周期与线程一致。每次方法调用的数据都是通过栈传递;堆Java虚拟机所管理的内存中最大的一块。在虚拟机启动时创建,堆是线程共享的。唯一目的是存放对象实例,及数组的内存分配。JDK1.8后将运行时常量池也存放在堆中了。

2023-10-07 09:15:56 22

原创 Java基础05-类加载过程

使用java.lang.reflect 包的方法对类进行反射时(如:Class.forName("...").newInstance()),如果类未初始化,需先初始化。如果父类加载器还存在其父类的加载器,则进一步向上委托,一直递归,直到请求到达顶层的启动类加载器。在JVM生命周期中,由JDK自带的类加载器负责加载的JDK提供的类,是不会被回收的。负责加载Java的扩展库(加载JAVA_HOME/jre/ext/*.jar中的类)。通过类的加载器,使用类的完全限定名,查找和导入class文件,加载到内存中;

2023-10-07 09:12:57 23

原创 Java核心07-并发包-java.util.concurrent.*

表示当某个任务执行完成后执行的回调方法,会将执行结果和执行期间抛出的异常传递给回调方法。回调方法对应的CompletableFuture 的result 和该任务一致,如果该任务正常执行,则get 方法返回执行结果,如果是执行异常,则get 方法抛出异常。执行awite() 方法时,其实同样采用CAS 方式,是去获取state 的值,当state=0时,跳出循环,执行结束。表示某个任务执行完成后执行的动作,即回调方法,会将该任务的执行结果即方法返回值作为入参传递到回调方法中,带有返回值。

2023-09-28 10:11:16 50

原创 Java基础04-集合类

如果扩容后的集合长度,大于最大的数组长度分配值 (Integer.MAX_VALUE - 8),则,大容量扩容到Integer.MAX_VALUE长度。a>b,则调用grow()进行扩容。当多个线程put值时,假如同时去获取同一位置上链表的头节点,当线程A写入新的头节点后,线程B写入新的头节点;主要原因是在于进行扩容时,会将数据从旧的Hash表迁移到新的Hash表中,同时会调转数组中链表的顺序。拉链法解决冲突:创建一个数组链表,数组中元素是一个链表,若遇到哈希冲突,则将冲突的值加到链表中即可。

2023-09-28 09:49:04 27

原创 Java核心05-AQS&ReentrantLock&Synchronized等锁原理

AQS的核心思想是,如果被请求的共享资源是空闲,则将当前请求资源的线程设置为有效的工作线程(exclusiveOwnerThread),并且将共享资源设置为锁定状态。AQS 使用state 同步状态字段(0代表无锁,1代表有锁),并暴露出 getState、setState 以及 compareAndSet 操作来读取和更新这个状态,使得仅当同步状态拥有一个期望值时,才会被原子地设置成新值。公平锁,多个线程等待同一个锁时,必须按照申请锁的时间顺序获得锁,synchronized 锁是非公平锁。

2023-09-27 09:57:46 50

原创 Java核心03-锁的升级

同步代码一直被一个线程所访问,锁总是由同一个线程多次获得,不存在多线程竞争,那么该线程会自动获取锁,降低获取锁的代价。轻量级锁适应的是线程交替执行同步块的情况,如果存在同一时间访问同一锁的情况,就会导致轻量级锁膨胀为重量级锁。访问Mark Word 中是否偏向锁的标识是否设置为1,且锁的标志位是否为01,是,则确认为可偏向状态。偏向锁只有遇到其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁,同时升级为轻量级锁,Mark Word 中存储的是指向重量级锁的指针,此时等待锁的线程都会进入阻塞状态。

2023-09-27 09:43:28 52

原创 Java核心04-乐观锁&悲观锁&自旋锁&可重入锁

Java锁-乐观锁&悲观锁&自旋锁&可重入锁

2023-09-26 10:01:09 36

原创 Java基础02-equals&hashCode&引用&拷贝&异常类

Java基础-equals&hashCode&引用&拷贝&异常类

2023-09-25 09:17:49 31

原创 Java基础06-反射和代理

Java反射和代理

2023-09-22 18:15:18 81

原创 Java基础01-封装、继承、多态、重载和重写、泛型

就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。new 出来的对象只是在内存重开辟了一个存储空间,可以存储任何类型对象,而真正设计类型检查的是它的引用,实质上是使用它引用来调用它的方法。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数。在步创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。类型检查是针对引用的,用这个引用调用泛型方法,就会对这个引用调用的方法进行类型检测,而无关它真正引用的对象。

2023-09-22 17:43:39 67

原创 SpringBoot框架04-SpringBoot启动执行过程

SpringApplication对象实例初始化: a.选择应用环境类型。如果是web环境,则创建StandardServletEnvironment对象,否则创建StandardEnvironment对象。 b.执行SpringFactoriesLoader.loadFactoryNames方法,加载所有类路径下的META-INF/spring.factories文件中...

2020-03-10 16:07:44 42 1

原创 Java基础03-String、StringBuilder和StringBuffer对象比较

String是不可变的对象,内部维护的char[]数组长度不可变,为final修饰,不存在扩容。在每次对String对象进行更新时,都是生成一个新的String对象,然后将指针指向新的String对象。StringBuilder类内部维护的是可变长度的char[]数组,初始化数组容量为16,存在扩容;由于在调用append方法拼接字符串和扩容时,没有用synchronize关键字修...

2020-01-20 18:01:20 207 1

原创 Java核心06-ReentrantLock类源码分析

ReentrantLock类,主要利用CAS+AQS(AbstractQueueSynchronizer)队列来实现,实现了Lock锁; 基本实现过程:先通过CAS尝试获取锁,如果此时已经有线程占据了锁,那就加入AQS队列并且挂起。当锁被释放之后,排在列队首的线程会被唤醒,然后CAS再次尝试获取锁。 ReentrantLock中包含内部类有: 1)继承了AbstractQ...

2020-01-20 14:57:22 105 1

原创 SpringBoot结合LoadTimeWeaver、AspectJ创建切面问题(addTransformer(),NoSuchMethodException:aspectOf())

1.问题描述:java.lang.IllegalStateException: ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specif...

2019-05-29 11:16:33 2602 1

原创 Json格式日期转换问题

一.@JsonFormat()注解1.需在对应日期属性上加上@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = “GMT+08”);2.需要在每个日期属性上都得加上该标签,比较繁琐二.@JsonSerializer()和@JsonDeserializer()使用 1. 自定义实现org.codehaus.jackson.map.JsonS

2017-03-02 11:18:45 2815

原创 web.xml加载顺序及Spring包扫描注意

一、web.xml文件中配置文件加载顺序web.xml文件中,我们一般会配置一些工程启动时需加载的配置文件.比如:SpringMVC工程开发时,我们一般是会有两个xml的配置文件。一个上下文配置文件applicationContext.xml,另一个就是springMVC的配置文件servlet-context.xml文件.加载顺序: 1. 服务器启动时,首先会找web.xml文件,加载web.

2017-03-01 15:33:41 4138

原创 欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

2017-03-01 15:25:07 228

MongoDB入门总结

本文档是本人学习Mongodb时的一些总结资料,主要是说明了Mongodb的基本语法及其简单操作使用,适合刚开始接触学习Mongodb的同仁。

2017-09-12

空空如也

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

TA关注的人

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