自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 问答 (1)
  • 收藏
  • 关注

原创 synchronized-锁总结

在 JDK1.6 之前,只有传统的锁机制(重量级锁),因此给开发者留下了synchronized关键字相比于其他同步机制性能不好的印象。在 JDK1.6 引入了两种新型的锁机制:偏向锁和轻量级锁,它们的引入是为了解决在没有多线程竞争或基本没有竞争的场景下因使用传统锁机制带来的性能开销问题。

2022-10-20 22:20:09 760 1

原创 Java实现2+2=5

今天在网上看到一篇文章,以前没看过类似的题目,引起了我的好奇心,于是仔细看了看文章,知道原来是利用了Java包装类型的实例池(也就是缓存数组)特性才实现 2+2=5。

2022-09-29 10:39:08 497

原创 Happens-before原则

FutureTask借用Happens-before原则保证了返回结果的可见性,可参考。后面(运行时间上的先后)volatile变量规则。后面(运行时间上的先后)具体测试实例,可参考。

2022-09-25 10:59:19 331

原创 Java的编码方式、单个char类型存储大部分中文字符、getBytes()、new String()的转换流程

char存储中文,getBytes()、UTF-8、UTF-16、UTF-32、GBK、ASCII、ISO8859-1、Unicode

2022-09-19 18:04:08 4348

原创 Mysql、Oracle的Varchar类型的区别

在工作中,由于之前交接的项目中使用的是Mysql数据库,而在生产环境中,使用的是Oracle数据库,然后相同表结构,测试发现了插入到表时,中文字符超过了字段的长度。查看了Mysql和Oralce的表结构,超过长度的字段类型都是字符类型,Mysql的字段类型是Varchar(2000),Oracle的字段类型是Varchar2(2000)。插入相同中文字符个数为900个,Mysql和Oracle都是UTF-8编码,Mysql环境下没报错,而Orcale环境就爆长度超过。

2022-09-18 22:39:07 993

原创 Java-原码、反码、补码、位运算

位运算 > >> & | ^ ~

2022-09-06 23:28:08 2272

原创 HashMap-链表与红黑树转换触发条件

JDK1.8对HashMap进行了很多优化。例如当一个槽位slot上的链表个数达到转换成红黑树的条件,则会将链表转换为红黑树。当一个槽位slot上的红黑树节点个数低至转换成链表的条件,则会将红黑树转换为链表。访问节点方式:先找到节点所在的数组slot位置,然后判断节点是什么结构进行遍历。链next红黑树nextprevroot。

2022-09-04 11:46:22 7741 2

原创 Java-内部类详解

成员内部类定义在外部类的成员位置,且没有使用static修饰。如同成员一样,可使用任意访问修饰符(public,protected,默认(default),private)修饰,因为它的地位就是一个成员。成员内部类可以直接访问外部类的所有成员、方法,包括私有的。作用域:同外部类的其他成员一样为整个类体。成员内部类依赖于外部类(外部类、外部其他类访问内部类,则需要先通过外部类对象创建内部类对象,再访问内部类)。2.2 成员内部类访问外部类访问方式:直接访问。

2022-09-02 23:49:09 1867

原创 ThreadLocal

ThreadLocal

2022-08-29 11:13:09 60

原创 集合转数组的toArray()和toArray(T[] a)方法

集合转数组的toArray()和toArray(T[] a)方法

2022-08-27 11:29:18 125

原创 Java-访问修饰符

不同包下的Red想要访问msg属性,则只能通过继承Test类,然后通过this.msg访问,或创建Red对象red,通过red.msg访问。3、如果有不同包的类想访问调用它们,那么这个类必须是定义它们的类的子类。2、被protected修饰的成员,能在定义它们的类或同包的类被访问。在Red类中,创建Test对象test,不能通过test访问msg。通过this或者创建该类的对象访问它们,不能通过创建定义类对象访问。被调用,不管同包或不同包,是权限最大的一个修饰符。(默认权限,默认不写修饰符,就是默认权限,.

2022-08-26 17:17:40 508

原创 分析事件监听器注解:@EventListener、@TransactionalEventListener

@EventListener @TransactionalEventListener是用来标识在方法上,使得该方法可以监听事件,在事件发布时调用方法(作用与实现接口的事件监听器一样,参考)。@的注解上标识@注解,相当于继承了@注解的功能,并添加了新的特性。...

2022-08-20 11:21:44 8400 2

原创 Lambda表达式

Lambda表达式是一个匿名函数,Java在JDK1.8引入Lambda表达式。结构:(参数列表)->{Lambda体:代码块,也就是表达式要运行的功能},()包裹->{}例如:(int x, int y)->{return x + y;}

2022-08-15 23:45:05 259

原创 分析Spring-ApplicationListener监听器

ApplicationListener接口用来监听容器发布的事件,用来事件驱动模型开发。在方法上使用@EventListener注解,作用与实现接口一致,都可用来监听事件。

2022-08-14 19:31:35 1030 3

原创 解决通过后置处理器返回组件对象无法使用销毁后置处理器和销毁方法

接口的后置处理器返回的组件对象,则对象销毁时,销毁后置处理器不会处理该对象。,则需要我们手动配置销毁方法,将以组件名称为key和处理后置处理器后的生成的。销毁方法可参考源码跟配置销毁后置处理器一样配置即可。若是想通过自定义创建的组件对象也能使用销毁后置处理器。如果组件对象是通过我们自定义的。对象为value添加到容器的。......

2022-08-13 22:40:28 140

原创 分析-BeanPostProceesor后置处理器

接口主要是在bean创建初始化前后调用对应方法。例如1、:在创建组件对象之前,给bean后置处理器一个机会,返回该组件的代理对象2、:在组件创建之后,可对RootBeanDefinition进行操作参考3、:在组件初始化前后4、:在组件销毁之前。................................................

2022-08-11 23:09:27 504

原创 Spring-分析BeanFactoryPostProcessor后置处理器

BeanFactoryPostProcessor 实现类是在ioc容器进行标准初始化后,对容器的进行操作,此时bean还未实例化。

2022-08-08 23:29:20 173

原创 分析-ConfigurationClassPostProcessor原理

ConfigurationClassPostProcessor是用来容器启动时处理解析容器中标识了@注解的配置类,实现了、接口。当容器开启组件扫描或使用会默认注册到容器中,否则,将如同其他的BeanFactoryPostProcessor后置处理器一样手动被定义到容器中。...............

2022-08-08 17:00:52 419

原创 注解版本-分析Spring容器创建流程

以注解版本分析Spring容器创建流程。

2022-08-07 23:25:14 400

原创 解析@Import底层原理

Import是用来向ioc容器注册组件对象的功能注意点:@Import只是向容器注册组件的相关消息,组件还未创建实例化,后续由容器实例化value数组值可为组件或配置类、实现ImportSelector的实现类、实现ImportBeanDefinitionRegistrar实现类1、组件或配置类:直接向容器注册对象,组件id为全限定类名2、实现接口的实现类:通过实现方法返回注册对象的全限定类名数组,组件id为全限定类名/***......

2022-08-07 11:34:43 834

原创 注解版本-分析SpringAOP底层原理

1)AOP含义:面向切面编程,也就是动态代理,在程序运行期间,动态将增强(通知)方法切到运行方法中,在不改变原来代码的基础上对代码进行动态增强。2)相关注解@EnableAspectJAutoProxy:开启基于注解的AOP代理@Aspect:告诉spring容器标识该注解的类是切面类,里面包含了通知方法,后续spring容器会去扫描该类的通知方法。注意:切面类需要注册到spring容器中。@Before:前置通知@After:后置通知@Around:环绕通知,搭配Proceedin

2022-08-04 23:47:30 239

原创 注解版本-分析Spring事务底层原理

Spring事务原理解析

2022-08-04 11:25:21 228

原创 HTTP协议工具类-Java版本

该工具类可传输普通参数、文件等。pom文件 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.10</version> </dependency> <dependency> <

2022-05-25 16:24:13 2240

原创 红黑树-Java实现

一、定义红黑树是特殊的平衡二叉树,具有以下特性:1、根节点的颜色是黑色2、节点颜色要么是黑色、要么是红色3、如果一个节点的颜色是红色,则它的子节点必须是黑色,即不能有2个连续的红色节点4、每个叶子节点都是黑色(这里的叶子节点是为空的叶子节点)5、从一个节点到该节点的叶子节点的所有路径上都包含相同数量的黑色节点 通过上面的定义,可以看到红黑树本质上还是一颗二叉查找树,所以,对红黑树的插入删除操作都可以分为两阶段来完成,首先,将红黑树看成一颗普通的二叉查找树完成插入删除操....

2022-04-05 18:31:40 8955 3

原创 二叉树-相关方法(Java实现)

树节点package com.mzp.tree;/** * 平衡二叉树节点 */public class AVLTreeNode { private int data; //高度 private int height; //左子节点 private AVLTreeNode left; //右子节点 private AVLTreeNode right; public AVLTreeNode(int data) { .

2022-03-31 15:07:09 811

原创 平衡二叉树-插入、删除(java代码)

二叉树定义目录一、概念1、定义2、平衡因子3、最小不平衡子树二、旋转纠正1、旋转方式2、旋转纠正类型LL型LR型RR型RL型三、插入四、删除五、完整代码实现一、概念1、定义规定任意结点的左右子树高度差不大于1,左右子树也是平衡二叉树2、平衡因子定义:左子树和右子树高度差计算:左子树高度 - 右子树高度的值别名:简称 BF(Balance Factor)一般来说 BF 的绝对值大于 1,,平衡树二叉树就失衡,需要

2022-03-30 09:46:16 1603 2

原创 spring-bean生命周期

1、bean的创建,默认通过无参构造函数2、bean的属性初始化,属性注入3、通过BeanPostProcessor后置处理器的postProcessBeforeInitialization方法4、初始化方法1)Bean实现InitializingBean接口方法public class Dog implements InitializingBean{ public Dog(){ System.out.println("Dog Construct");

2022-03-15 11:22:14 220

原创 spring-注册组件的4种方法

通过@ComponentScan扫描指定包,将包下的标注@Controller、@Service、@Repository、@Component的bean注册到IOC容器中。在配置类中使用@Bean注解将方法返回值对象注册到IOC容器中,id默认是方法名称,可通过value参数指定id。通过@Import注解将Bean注册到IOC容器中。通过工厂bean将bean注册到容器中。实现FactoryBean接口。...

2022-03-15 10:47:18 904

原创 Spring注解

AnnotaionConfigApplicationContext指定配置类生成IOC容器@Test public void test1(){ ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Config.class); User user = applicationContext.getBean("user1", User.class);

2022-03-08 08:39:02 306

原创 Java-基本类型和包装类型总结

一、基本类型和对应的包装类型基本类型 包装类型 二进制位数 数据存储量 数据范围 boolean Boolean 1 2 false、true byte Byte 8 255(2^8-1) -128~127(-2^7到2^7-1) short Short 16 65536(2^16-1) -32768~32767(-2^15到2^15-1) char Character 16

2022-02-24 11:34:32 681

原创 spring-@AliasFor注解

目录1、注解内部的显性别名2、用于元注解属性的显性别名3、注解中的隐性别名@AliasFor是spring中的一个注解,可用来对注解属性声明别名。若想起到别名效果,需通过spring进行处理生成代理对象后才能有效果。1、注解内部的显性别名@Retention(RetentionPolicy.RUNTIME)public @interface TestAliasFor { @AliasFor("name") String value() default ""..

2022-02-22 10:04:23 1645

原创 java-注解

一、元注解@Target指定注解的使用范围,不写默认可使用在任何地方可通过ElementType来限制注解的使用范围public enum ElementType { /* 类、接口(包括注释类型)或枚举声明 */ TYPE, /* 字段声明(包括enum常量) 就是成员变量 */ FIELD, /* 方法声明 */ METHOD, /* 正式的参数声明 */ PARAMETER, /* 构造函数声明 */

2022-02-20 12:48:35 1076

原创 spring-复习03-事务

一、事务1 概念事务是数据库操作最基本单元,逻辑上一组原子操作,要么都成功,如果有一个失败所有操作都失败经典案例:银行转账lucy 转账 100 元 给 marylucy 少 100,mary 多 100spring事务有2种方式:编程式事务管理、声明式事务管理(使用)2 4个特性事务的4个特性(ACID)原子性一致性隔离性持久性二、事务管理-注解方式(使用)1 配置事务管理器spring提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同

2022-02-15 17:10:53 190

原创 spring-复习02-AOP

spring、aop

2022-02-15 10:43:47 329

原创 Spring-复习01

spring、IOC、属性注入

2022-02-15 09:39:45 320

原创 maven-groupId、artifactId含义

GroupId和ArtifactId被统称为“坐标”,是为了保证项目唯一性而提出的,如果把项目弄到maven本地仓库去,想要找到项目就必须根据这两个id去查找。 GroupId一般分为多个段,第一段为域,第二段为公司名称。域又分为org、com、cn等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的GroupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,ArtifactId(项目名称)是tomc.

2022-02-14 09:10:06 185

原创 算法与数据结构-桶排序、计数排序和基数排序

桶排序、计数排序和基数排序这三种算法的时间复杂度都为 O ( n ) O(n)O(n),因此,它们也被叫作线性排序(Linear Sort)。之所以能做到线性,是因为这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。1. 桶排序(Bucket Sort)1.1. 原理核心思想是将要排序的数据分到几个有序的桶里,每个桶的数据再单独进行排序。桶内排完序后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。1.2. 时间复杂度分析如果要排序的数据有 n 个,我们把

2021-10-23 20:52:38 152

原创 算法与数据结构-归并排序

思想:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。public class DemoApplication { public static void main(String[] args) { int arr[] = {6, 4, 20, 9, 44, 11, 0,2,23,10,17,3}; //归并排序 int[] tmp = new int[arr.l

2021-10-23 20:08:31 45

原创 算法与数据结构-堆排序

堆是一棵顺序存储的完全二叉树。其中每个结点的关键字都小于等于其孩子结点的关键字,这样的堆称为小根堆。其中每个结点的关键字都大于等于其孩子结点的关键字,这样的堆称为大根堆。举例来说,对于n个元素的序列{R0, R1, … , Rn}当且仅当满足下列关系之一时,称之为堆:Ri <= R2i+1 且 Ri <= R2i+2 (小根堆)Ri >= R2i+1 且 Ri >= R2i+2 (大根堆)其中i=1,2,…,n/2向下取整;思想:将序列构造成初始堆,交换a[0]和

2021-10-23 20:04:59 77

原创 算法与数据结构-快速排序

思想:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。以一个数作为基点,运动左右指针将数据分隔public class DemoApplication { public static void main(String[] args) { int arr[] = {6, 4, 20, 9, 44, 11, 0,2,23,10,17,3}; //快速排序 quickSort(arr,0, arr.len

2021-10-23 19:56:11 54

空空如也

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

TA关注的人

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