自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap动态扩容解析

因为hashCode是int类型,虽然能映射40亿左右的空间,但是,HashMap的table.length毕竟不可能有那么大,所以为了使hash%table.length之后,分布的尽可能均匀,避免哈希冲突,就需要对实例的hashCode的值进行扰动,就是将hashCode的高16和低16位,进行异或,使得hashCode的值更加分散一点。(2)、当数组容量大于64时,hash冲突链表大于8时,会把链表转成红黑树,如果数组容量小于等于64时,hash冲突时链表大于8时,会先扩容数据,每次扩容为2的倍数。

2024-08-29 15:09:09 608

原创 redisson watchdog 原理

1、reddison中维护了一个ConcurrentHashMap EXPIRATION_RENEWAL_MAP,key是uuid+锁名。value是ExpirationEntry对象,其中threadIds是Map,key是线程号,value是线程获取锁的次数。如果是重入锁value会大于1。会有延迟任务开新线程获取threadIds中线程,判断锁有没有释放,没有释放则重置有效时间,继续调用延迟任务,如果释放了则不会执行延迟任务。

2024-08-26 17:11:18 735

原创 ArrayList 动态扩容

1、创建ArrayList集合时,可以设置默认长度,如果不设置默认长度为10。2、ArrayList扩容时,会以原数组长度的1.5倍进行扩容,当扩容后的长度大于Integer.MAX_VALUE - 8时,会判断数组中已有元素的长度,当已有元素长度大于Integer.MAX_VALUE - 8时,扩容后的数组长度为Integer.MAX_VALUE,否则是Integer.MAX_VALUE - 8。3、使用Arrays.copyOf把原数组拷贝到扩容后的新数组。

2024-08-13 14:03:02 408

原创 spring事务失效原因

②、protected方法到是可以被代理,但是CGLIB是基于继承关系来实现的,生成的代理类中对于protected的代理方法,也是protected的,访问范围受限制。,调用目标方法时,会先执行代理方法,代理类方法对方法增强然后使用子类调用父类的方式调用目标类方法。④、调用static方法,因为这类方法是属于这个类的,并不是对象的,所以无法被AOP。③、final修饰的方法不能被代理,因为final修饰的方法不能被子类重写,会报错。③、调用目标方法时,先执行代理类C中方法用于增强目标方法,再使用。

2024-07-26 18:25:37 498

原创 Spring如何管理Mapper

在Controller中使用Service,一般是实现Service接口类上添加@Service注解,让实现类注入到SpringIoc容器中,Controller通过@Autowired 从容器中获取,但是在Service实现类中使用@AutoWired 获取Mapper的时候,没有看到Mapper的实现类,带着疑问查看Spring是如何把Mapper接口类型的类注入到Ioc容器中。把生成的bean实例放入Spring容器中由此步骤可见,要想生成bean对象,首先需要有BeanDefinition。

2024-07-18 17:53:34 741

原创 springboot2.x AOP 默认使用Cglib 源码

在 SpringBoot 2.x AOP中会默认使用Cglib来实现,但是Spring5中默认还是使用jdk动态代理。Spring AOP 默认使用 JDK 动态代理,如果对象没有实现接口,则使用 CGLIB 代理。也可以强制使用 CGLIB 代理。springboot默认使用cglib实现代码逻辑来记录一下。

2024-07-17 18:05:25 782

原创 一棵B+树可以存放多少行数据

非叶子节点内可以存放多少指针呢?假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,所以就是一个键值指针占用8+6=14字节,一个内部节点中存储的指针个数为 16KB/14B = 16 * 1024B / 14B = 1170。同理一棵高度为3的B+树,能存放 1170 *1170 *16 = 21902400,大概两千万左右的记录。如果B+树的高度为2,即有一个根节点和若干个叶子节点,则这棵B+树的存放总记录数为:根节点指针数 * 单个叶子节点记录行数。

2024-07-01 14:45:58 346

原创 springboot中抽象类无法注入到ioc容器

在写代码时,发现service接口有两个实现类,并且两个实现类中没有对类名重命名,属性注入的时候也没有使用byName或@Qualifier,正确情况下会。

2024-05-31 10:43:54 475

原创 spring 使用多线程,保证事务一致性

大体思路,就是所有子线程在各自线程内开启事务,执行业务逻辑后,判断是否抛错,一旦抛错,会把全局AtomicBoolean置为false,因为其具有原子性所以不会有线程不安全问题。所有子线程完业务代码会等待主线程,全部子线程执行业务结束后,主线程等待结束,判断AtomicBoolean是什么状态,一旦false,所有子线程回滚,否则提交。

2024-05-30 18:12:52 449 2

原创 shiro Filter加载和执行 源码解析

在使用若依框架(前后端不分离包含shiro安全框架)时,发现作者添加了验证码、登录帐号控制等自定义过滤器,于是对自定的过滤器加载和执行流程产生疑问。下面以验证码过滤器为例,对源码解析。

2023-12-10 00:35:29 1140 1

原创 mybatis和mybatisplus中对 同namespace 中id重复处理逻辑源码解析

同事在同一个mapper.xml (namespace相同),复制了一个sql没有修改id,正常启动项目。但是我以前使用mybatis的时候如果在namespace相同情况下,id重复,项目会报错无法正常启动,后来看代码发现,是mybatisplus处理了id重复,项目也能正常启动。

2023-12-08 18:08:30 1233

原创 ThreadLocal+TaskDecorator实现父子线程 参数传递

线程参数共享

2023-12-06 18:04:36 554

原创 spring @Autowired 和 @Qualifier 配合使用实现按名称属性赋值源码

(1)、接着上篇博客AutowiredAnnotationBeanPostProcessor中postProcessPropertyValues -> metadata.inject -> element.inject -> beanFactory.resolveDependency -> doResolveDependency -> findAutowireCandidates -> isAutowireCandidate,

2023-12-01 17:26:33 611

原创 Spring之@Autowired 属性多实现和单实现源码解析

使用@Autowired注解,当给属性赋值时,单个实现和多实现区别,源码分析。

2023-11-27 16:03:17 1136

原创 mybatis 使用if 判断数值型

mybatis 中 动态if 使用ognl表达式判断。当对象是Number类型,当传值为0时会被解析成false,否则为true

2023-06-16 11:16:14 1735

原创 RocketMq 同组消费者 自动设置InstanceName

此方法的切入点是DefaultRocketMQListenerContainer类创建过程中,使用后置处理器设置instanceName。

2023-06-13 14:50:50 1859

原创 IF ELSE 替代方案,让代码更加优雅

1、枚举 2、工厂模式 3、策略模式。来替代if else,使代码更加优雅

2023-04-11 16:21:41 810 1

原创 Spring 循环依赖代码分析

一、说明:1、当组件是单例并使用setter给属性赋值时不会出现循环依赖。如果组件不是单例或用构造器赋值都会出现循环依赖错误。2、一级缓存:singletonObjects二级缓存:earlySingletonObjects三级缓存:singletonFactories二、代码:代码执行流程:contextLoader->configureAndRefreshWebApplicationContext->wac.refresh();->finishBeanFactory

2021-04-23 17:26:21 268

原创 git 从远程分支下载到本地分支

以从http://git.xxx.com/test.git上拉去fast分支为例:1、新建空文件夹2、初始化gitgit init3、与远程仓库建立连接命令:git remote add origin <远程git地址>例如:git remote add origin http://git.xxx.com/test.git4、把远程分支拉去到本地命令:git fetch origin <分支名称>例如:git fetch origin fast5、在本地建立

2021-03-17 09:57:49 8779

原创 vue 路由跳转到同一个页面,页面刷新问题

问题:在当前页面,添加参数再次跳转当前页,两个**不同参数**的请求,跳转到同一个页面,第二次请求出的数据不刷新,还是显示第一次的数据。解决办法:在页面中添加 watch :{ '$route': function (to, from) { this.loadData(); } },...

2021-03-11 17:32:03 2829

原创 mybatis 在增量热加载

application.yml中mybatis: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: mybatis/**/*Mapper.xml typeAliasesPackage:**.domain mapper: reload: true本例子是在springboo

2021-03-05 09:32:50 331 3

原创 vue 子组件dialog如何每次打开的时候都重新create

一、问题描述父组件中包含dialog子组件,每次刷新父组件时,子组件create都会执行,当dialog弹出时,dialog中create不再执行。想达到的效果是,父组件刷新不影响子组件,当dialog弹出时,dialog中的create才执行。二、问题解决办法添加v-if如下所示:<image-dialog :imageSelectVisible.sync="imageSelectVisible" v-if="imageSelectVisible"></image-dialog&

2021-03-05 09:28:47 4986 4

原创 常用postProcessor及执行顺序

一、常用postProcessor1、BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor例子:MapperScannerConfigurer作用:扫描配置路径下bean,添加到IOC容器。invokeBeanFactoryPostProcessors执行 BeanDefinitionRegistryPostProcessor->postProcessBeanDefinitionRegistryMapp

2021-02-01 10:07:24 2453

原创 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for

1、出错内容开发时,遇到返回给前台一个JSON报错的问题。com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class xxx and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (th

2021-01-12 16:47:08 8787

原创 java8对 List集合常用处理方法

1.for循环list.forEach(item -> {list中的每个item元素做指定的操作//item.setState(0);//item.setRemark("");});2.去重List list = Arrays.asList(“AA”, “BB”, “CC”, “BB”, “CC”, “AA”, “AA”);long l = list.stream().distinct().count();// 3List newList = list.stream().disti

2021-01-08 10:15:25 974

原创 springboot中DispatcherServlet实例化

1.问题开发中我在找DispatcherServlet 中initStrategies里面initHandlerMappings执行时机,在spring+springMvc框架中时,发现在web容器启动的时候,DispatcherServlet中的initHandlerMappings 就会执行,但是在springboot中发现,在第一次请求的时候initHandlerMappings 才会执行,经过查阅发现,这与servlet配置有关。2.结论1.DispatcherServlet 看继承关系可以发

2021-01-08 09:25:18 1006

原创 spring @ConfigurationProperties的用法

如果有大量的参数配置在 application.properties 或 application.yml 文件中,通过 @ConfigurationProperties 注解,我们可以方便的获取这些参数值。具体使用方法如下:1.创建AutoConfigProperty类方法一:@ConfigurationProperties(prefix="auto")@Componentpublic class AutoConfigProperty { String name; public

2020-10-24 13:29:20 1287

原创 vue 父子控件 相互通讯

1、父组件可以使用 props 把数据传给子组件。2、子组件可以使用 $emit 触发父组件的自定义事件。3、兄弟组件可以使用vm.$emit( event, arg ) 一,父传子//父组件:parent.vue<template> <div> <child :vals = "msg"></child> </div></template><script>import chi

2020-10-22 21:10:37 221

原创 vue 代理解决跨越方法

一、什么是跨域跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。列子:#协议跨域http://a.abc.com访问https://a.abc.com;#端口跨域http://a.abc.com:8080访问http://a.abc.com:80;#域名跨域http://a.abc.com访问http://b.abc.com;二、本地开发解决跨域方法在 vue.config.js 中配置devServermodule.

2020-10-22 13:59:33 3067

原创 mybatis 的mapper.xml修改后无需重启 热部署

application.properties 中添加配置mybatis.mapper.reload=true。如果不想让热部署生效mybatis.mapper.reload=false@Componentpublic class MapperHotDeployPlugin { protected final Log log = LogFactory.getLog(getClass()); @Value("${mybatis.mapper-locations}") private

2020-10-21 13:59:59 4032

转载 Vue 中 Promise 异步和同步 的使用

<template> <div class="app-container"> <h1>商品信息</h1> <div class="block"> 测试Promise: <div> 操作人{{who}},改变了商品名称:{{merchandiseName}} <el-button @click="changeMerchandiseNameSync" type="prim

2020-10-20 21:36:35 1720

原创 vue 中 Promise 使用方法

1. Promise 基本概念:Promise是一个构造函数,所以可以 new 出一个Promise的实例;在Promise上有两个函数 resolve (成功之后的回调函数)和 reject (失败后的回调函数);在Promise构造函数的prototype属性上,有一个 .then() 方法。所以只要是Promise构造函数创建的实例,都可以访问到 .then()方法;Promise表示一个一步操作,每当我们new一个Promise的实例,这个实例就代表具体的 异步 操作。Promise创建

2020-10-20 21:23:56 30888 3

原创 vue router传参及接受参数方式

vue传参方法一1,路由配置{path: ‘/describe/:id’,name: ‘Describe’,component: Describe}2,使用方法// 直接调用$router.push 实现携带参数的跳转 this.$router.push({// 这个id是一个变量,随便是什么值都可以 path: /describe/${id}`, })3,获取方法(在describe页面)$route.params.id使用以上方法可以拿到上个页面传过来的id

2020-10-18 20:36:19 6474

原创 vue的数组循环和对象循环

数组循环:<!-- item值 index下标 --><div id="app"> <ol> <li v-for="(item,index) of arr"> {{item}} {{index}} {{item.name}} <!-- item是arr下的对象,取对象下对应值 --> </li> </ol></div>对象循环:&

2020-08-21 08:12:50 500

原创 maven 打包 出现 Please refer to XXXX for the individual test results

1、maven 打包的时候错误提示Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project XXXX: There are test failures.Please refer to D:\Others\XXXX\target\surefire-reports for the individual test results.2、解决办法添加

2020-08-21 08:08:12 5438

原创 vue router跳转页面后刷新 跳转后的页面

一、 背景点击按钮跳转到新页面,刷新新页面。 用vue-router 重新路由的时候到当前页面的时候是不进行刷新的。如果使用window.reload() 或者router.go(0) hisory.go(0) 刷新的时候整个浏览器进行刷新加载, 但是页面闪烁, 体验不好。二、解决办法使用:provide /inject 组合作用是: 允许一个祖先组件向其所有子孙后代注入一个依赖, 无论组件层次有多深,并在其上下游关系成立时间里始终生效。<template> <div id=

2020-08-06 08:18:52 11365 3

原创 janusGraph数据导入导出

导出数据g.io(’/opt/janusgraph-0.5.2/test.graphml’).with(IO.writer,IO.graphml). write().iterate()导入数据g.io(’/opt/janusgraph-0.5.2/test.graphml’).with(IO.reader, IO.graphml).read().iterate()

2020-07-31 16:04:31 1218 2

原创 vue 中 el-select 回显 再次选择不显示最新

添加@change="$forceUpdate()"<el-select size="small" v-model="dialogModal.gender" placeholder="请选择性别" @change="$forceUpdate()"> <el-option v-for="operation in genderList" :label="operation.name" :value="operation.value"></el-option&g

2020-07-28 07:57:25 885

原创 element-ui date-picker 日期格式化

添加属性:value-format=“yyyy-MM-dd” 如下:<el-form-item label="生日" prop="birthday"> <el-date-picker v-model="dialogModal.birthday" type="date" placeholder="选择日期生日" value-format="yyyy-MM-dd"> </el-date-picker>...

2020-07-28 07:53:22 1443

原创 javassist 生成对象属性

java动态生成代码涉及到了字节码操作,通常 java 动态性两种常用的实现方式1,字节码操作2,反射。运行时操作字节码可以实现如下功能1,动态生成新的类。2, 动态改变某个类的结构。字节码操作 通常比反射开销小,性能高。1.添加依赖<dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <ver

2020-07-21 13:48:26 325

空空如也

空空如也

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

TA关注的人

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