自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lkforce

记录自己解决的小困难和小经验

  • 博客(180)
  • 资源 (2)
  • 收藏
  • 关注

原创 MySQL8.0新特性学习笔记(五):JSON格式简介和JSON函数详解

目录JSON格式简介定义用户变量JSON格式的规范化JSON的路径表达式JSON的比较和排序JSON的函数一,创建JSON格式数据1,JSON_ARRAY([val[, val] ...])2,JSON_OBJECT([key, val[, key, val] ...])3,JSON_QUOTE(string)二,JSON的查询1,JSON_CONT...

2019-11-07 10:49:57 15311

原创 SpringBoot启动流程的源码分析

前言:文章很长,一万多字,如果不关注细节的话只看目录就可以。目录设置了缩进,代表了启动流程中方法的调用和包含关系。目录基本上概述了SpringBoot启动的基本流程。目录main方法启动初始化SpringApplication|----|设置ApplicationContextInitializer和ApplicationListener|----|----|读取配...

2019-07-11 16:18:10 5393 2

原创 Hashmap实现原理及扩容机制详解

目录HashMap基础HashMap实现原理Node和Node链拉链法关于Node数组 table散列算法HashMap和红黑树关于TreeNode红黑树基础HashMap扩容机制JDK1.7下的扩容机制JDK1.8下的扩容机制HashMap基础HashMap继承了AbstractMap类,实现了Map,Cloneable,Serializa...

2019-04-25 19:04:32 116067 56

原创 Java反射——Type接口详解

目录Type的简介Type的获得Type的分类1,Class2,ParameterizedType3,GenericArrayType4,WildcardType5,TypeVariableType的简介java.lang.reflect.Type接口及其相关接口用于描述java中用到的所有类型,是Java的反射中很重要的组成部分。在API文档中,Typ...

2018-09-06 19:59:42 18713 6

原创 java同步锁优化方案学习笔记(偏向锁,轻量级锁,自旋锁,重量级锁)

目录一,概述二,CAS算法三,Java对象的对象头,以及Mark Word四,偏向锁 Baised Lock五,轻量级锁六,自旋锁 SpinLock七,重量级锁八,在应用层提高锁效率的方案一,概述什么是java的锁?为什么java要有锁?java的锁为什么需要优化?怎么优化的?1,java中使用synchronized关键字来实现同步功能...

2018-07-20 11:03:10 2081 1

原创 实例浅析JVM内存模型和对象引用

JVM的内存模型有以下的设定:1,有一块内存空间当做主存,叫做堆内存。2,线程各自有各自的本地内存,叫线程栈,也叫调用栈。3,线程栈里包含了当前线程执行的方法调用相关信息,还有当前方法的本地变量信息。4,各线程只能访问自己的线程栈,不能访问其他线程的线程栈。5,所有原始类型(boolean,byte,short,char,int,long,float,double)的本地...

2018-06-28 11:08:13 1210

原创 Java的类加载器(ClassLoader)简介

目录一,java提供的加载器1,BootstrapClassLoader2,Extention ClassLoader3,AppclassLoader二,各种加载器之间的关系三,加载器的加载顺序四,查找class和双亲委托五,自定义ClassLoader六,重新加载class,热替换ClassLoader是Java的类加载器,用于把class文件加载到JVM...

2018-05-09 15:18:24 3198

原创 使用Memory Analyse Tool分析内存溢出(非Eclipse插件)

Memory Analyse Tool是Java的dump文件分析工具,可以作为Eclipse的插件,也可以作为一个Windows下运行的软件单独使用,下面介绍一下MAT作为Windows软件的使用方式。 其实java的jvisualvm也可以用来分析dump文件,但是jvisualvm本身可以使用的系统内存不太好调,貌似需要.Net环境,我dump了一份1.5G的堆转储文件,用jvisualvm...

2018-04-18 16:49:44 7740 3

原创 dubbo远程调用源码分析(一):客户端发送请求

dubbo远程调用的源码分析,分成了三篇文章地址分别如下:dubbo远程调用源码分析(一):客户端发送请求dubbo远程调用源码分析(二):服务端接收请求dubbo远程调用源码分析(三):客户端接收反馈后的处理本文分为三部分,分别是:消费端注册部分消费端动态代理部分消费端事件处理器部分消费端注册部分在分析dubbo远程调用的时候,要从dubbo消费端(consumer)注册开始说起dubbo的co...

2018-04-04 15:25:54 2837

翻译 MySQL5.7官方文档翻译--优化器成本模型

成本模型,也有叫做代价模型,原文是Cost Model,下面翻译都使用成本模型。8.9.5 优化器的成本模型SQL查询的方式多种多样,MySQL的优化器使用基于对查询成本进行预估的成本模型来生成执行方案。优化器拥有一系列编译过的“成本常量”来决定使用怎样的执行方案。除了编译过的成本常量之外,优化器在构建执行方案的时候还会用到一个数据库,也是用来做成本评估的。这些成本评估用的数据保...

2018-01-23 19:16:21 1223

原创 关于B树的学习总结和B+树,B*树的简介

概念B树,英文是B-tree,是一种平衡多路树,这个不叫B减树,就是B树。B树是一种多路树。因为他的子节点不止2个,可以是多个。B树是一种平衡树。所谓平衡树,指的是他的左右两个子树的高度差小于等于1,而且左右子树的子树高度差也小于等于1。其实B树算是一种特殊的平衡树,因为B树的要求更高,要求左右子树高度相同,也就是说,根节点到每个叶子节点的距离都相同。约定1,ceil(

2018-01-12 11:33:56 7634 11

原创 从单例模式挖到内存模型(四)----java内存模型

java内存模型:Java内存模型即Java MemoryModel,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JDK1.5版本对java的内存模型进行了重构,开始使用新的JSR-133内存模型。JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个线程都有一个私有的本地内存(local me

2017-04-21 17:27:01 2033

原创 MyBatis源码学习(七)——从源码看MyBatis如何使用缓存

目录前言和总纲一,创建SqlSession二,创建CacheKey三,执行sql四,sqlSession的提交先上总结:1,创建sqlSession阶段。创建Executor执行器,其中有两个参数,localCache和localOutputParameterCache,localCache是一级缓存,localOutputParameterCache用于缓存存储过程的OUT和INOUT参数。Executor执行器首先会被CachingExecutor装饰,然后又被插件列表.

2020-12-27 22:56:20 1110

原创 MyBatis中单一简单参数判断null的方法

比如有这样一个方法:List<Order> selectListById(Integer id);只有一个数字类型的参数,而且id参数有可能是null。如果在xml文件里这样写:<select id="selectListById" resultMap="baseResultMap" parameterType="java.lang.Integer"> select * from `order` a where a.status=0

2020-12-01 15:04:48 5097 1

原创 java项目中获得resources目录下的文件或图片

要获得resources目录下的文件或图片,网上一查有很多种方法,试了一下如下方法可行:InputStream is = this.getClass().getResourceAsStream("/test.jpg");得到的是直接放在resources目录下的test.jpg图片文件流。...

2020-12-01 14:52:49 6993 2

原创 MySQL中YEAR_MONTH,HOUR_MINUTE等关键字的用法

MySQL中的时间单位有以下这些:MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH其中YEA

2020-11-06 19:32:02 14593

原创 Mysql的INTERVAL()函数和INTERVAL关键字

一,INTERVAL()函数INTERVAL()函数可以返回分段后的结果,语法如下:INTERVAL(N,N1,N2,N3,..........)其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。这个函数的返回值是段的位置:如果N<N1,则返回0,如果N1<=N<N2,则返回1,如果N2<=N<N3,则返回2。所以,区间是前闭后开的。举个例子:有这样的数据:然后执行以下sql:SELECT id,perce.

2020-11-06 19:26:19 95094

原创 Mysql的分段函数INTERVAL()和分值函数ELT()

一,INTERVAL()函数INTERVAL()函数可以返回分段后的结果,语法如下:INTERVAL(N,N1,N2,N3,..........)其中,N是要判断的数值,N1,N2,N3,...是分段的间隔。这个函数的返回值是段的位置:如果N<N1,则返回0,如果N1<=N<N2,则返回1,如果N2<=N<N3,则返回2。所以,区间是前闭后开的。举个例子:有这样的数据:然后执行以下sql:SELECT id,perce.

2020-11-06 19:14:00 3816

原创 关于maven编译找不到com.sun的问题

问题:maven编译时报错:[ERROR] D:\workspace\Test\Test.java:[3,25] 错误: 程序包com.sun.deploy.xml不存在另外,java本地编译没有报错。问题指向了Test.java类的三行import代码:import com.sun.deploy.xml.XMLNode;import com.sun.deploy.xml.XMLNodeBuilder;import com.sun.javaws.jnl.XMLUtils;.

2020-09-25 18:01:15 2629

原创 MySQL死锁日志的查看和分析

目录一,关于MySQL的死锁二,人造一个死锁的场景三,查看最近一次死锁的日志四,死锁日志的内容1,事务1信息2,事务1持有的锁3,事务1正在等待的锁4,事务2信息5,事务2正在持有的锁6,事务2正在等待的锁7,死锁处理结果五,关于mysql的八种锁1,行锁(Record Locks)2,间隙锁(Gap Locks)3,临键锁(Next-key Locks)4,共享锁/排他锁(Shared and Exclusive Locks)5,意向共享

2020-09-24 19:55:28 24490 2

原创 MySQL日志之redo log和undo log简介

目录redo log和undo log篇关于redo log一,redo log的文件二,redo log的写入三,redo log的删除四,查看redo log相关的配置关于undo log一,undo log的文件二,undo log的写入三,undo log的空间释放四,查看redo log相关的配置五,关于undo log的segmentredo log和undo log的协作关于XA关于binlog,redo log,undo log的操

2020-09-11 19:49:01 2703

原创 MySQL日志之binlog简介

MySQL中的日志类型:1,Error Log,错误日志。2,General Query Log,查询日志,记录了每条sql的信息,包括查询和修改等,对性能影响比较大。3,Slow Query Log,慢查询日志,记录查询比较慢的sql。可以设置阈值。4,Binary Log,也就是binlog,二进制日志,归档日志,记录了数据库改动。包括建表,删表,数据修改等。5,Redo Log,重做日志。用于恢复提交后的物理数据页。6,Undo Log,回滚日志。用于回滚行记录到...

2020-09-11 18:51:55 1097

原创 红黑树简介,以及ConcurrentHashMap如何平衡红黑树

ConcurrentHashMap基础1,ConcurrentHashMap维护了一个Node数组(JDK1.8),保存了各节点链表的头节点。2,当链表长度超过8时,ConcurrentHashMap会考虑把链表转为红黑树,但不一定真的转。3,当链表长度超过8,但Node数组长度小于64时,优先考虑数组扩容。如果Node数组长度大于64,则把链表转为红黑树。红黑树基础红黑树是一种近似平衡的二叉查找树,它并非绝对平衡,但是可以保证任何一个节点的左右子树的高度差不会超过二者中较低...

2020-07-29 12:02:57 1101

原创 对象添加到HashSet(或HashMap)后修改Hash值,无法remove的原因

目录一,一个例子二,一些基础知识三,HashMap的remove()方法四,下标变更的三种场景一,一个例子public static void test1() { Order o1 = new Order(); o1.setId(1); Order o2 = new Order(); o2.setId(2); Order o3 = new Order(); o3.setId(3); Order o4 = new Order()

2020-07-27 18:05:21 2142 2

原创 对象添加到集合之后再修改对象,会发生什么

把对象添加到集合中,然后再修改对象,会发生什么呢?下面分别看一下修改对象属性值和修改对象引用后的效果。案例一,修改对象属性值创建几个对象,添加到List中,然后修改对象的属性值,那么List中的元素的属性值会随之改变,比如下面的例子:public static void test1() { List<Order> list = new ArrayList<>(); for (int i = 0; i < 3; i++) { .

2020-07-27 17:43:44 6490 2

原创 手动调用指定Dubbo接口(三)----GenericService篇

我写了个方法,可以给方法传递指定的Dubbo接口名,方法名,参数值,方法来调用我们指定的Dubbo接口,并返回结果。这次用的是Dubbo的GenericService。示例代码:@Controller@RequestMapping("/test")public class TestController { /** * @param interfaceName Dubbo接口名 * @param methodName 方法名 * @para.

2020-06-23 18:40:11 3233

原创 手动调用指定Dubbo接口(二)----Reference篇

我写了个方法,可以给方法传递指定的Dubbo接口名,方法名,参数值,方法来调用我们指定的Dubbo接口,并返回结果。在SpringBoot中使用@Reference注解标识的Dubbo接口,比如:@ReferenceOrderService orderService;这种接口的动态代理没有被放到Spring的上下文中,而是放在了Dubbo的处理类AnnotationBean中。这种情况下使用WebApplicationContext wac = ContextLoader.g.

2020-06-23 18:34:50 3481 1

原创 Dubbo的GenericService简介和基本使用

简介GenericService是Dubbo提供的泛化接口,用来进行泛化调用。GenericService接口只有一个方法:Object $invoke(String var1, String[] var2, Object[] var3) throws GenericException;第一个参数是方法名。第二个参数是一个字符串数组,这是接口方法每个参数类型的全路径。第三个参数是Object数组,是传给方法的具体参数列表。Dubbo服务的提供者和消费者都可以使用这个接...

2020-06-23 18:06:45 8834

原创 Spring中InitializingBean和SmartInitializingSingleton的区别

目录一,InitializingBean简介:二,SmartInitializingSingleton简介三,InitializingBean和SmartInitializingSingleton的区别四,从源码观察InitializingBean和SmartInitializingSingleton调用时机的区别一,InitializingBean简介:InitializingBean的代码:package org.springframework.beans.factory;

2020-06-12 18:06:56 3399 1

原创 MyBatis源码学习(六)——在代码中调用Mapper接口时发生了什么

小结:1,开始,MapperProxy.invoke().2,创建MapperMethod。包括创建SqlCommand,封装sql,创建MethodSignature,封装方法参数。3,MapperMethod.execute()4,区分增删改查,查询时,统一调用DefaultSqlSession.selectList()5,CachingExecutor.query()6,SimpleExecutor.doQuery()。创建StatementHandler,确定statemen

2020-06-10 20:10:26 1130

原创 MyBatis源码学习(五)——MyBatis配置项的加载过程

先上小结:MybatisAutoConfiguration类的@EnableConfigurationProperties({MybatisProperties.class})注解被Spring激活,准备注入MybatisProperties类。 MybatisProperties类有@ConfigurationProperties(prefix="mybatis")注解,会被ConfigurationPropertiesBindingPostProcessor调用bind()方法来处理。 获得My

2020-06-10 18:05:48 1202

原创 MyBatis源码学习(四)——创建Mapper动态代理

先上小结:Spring标准代理创建流程,this.initializeBean()方法。 BeanPostProcessor对Mapper代理实例进行预处理。 执行MapperFactoryBean.afterPropertiesSet(),从MapperFactoryBean.SqlSessionTemplate.SqlSessionFactory.Configuration.MapperRegistry.knownMappers获得之前创建好的工厂代理,如果没有则重新创建一个。 继续Sprin

2020-06-10 17:16:22 844

原创 MyBatis源码学习(三)——创建SqlSessionFactory实例和Mapper代理工厂

先上小结:开始调用MybatisAutoConfiguration.sqlSessionFactory()方法。 构建SqlSessionFactoryBean类实例。 把数据源实例DataSource赋值给SqlSessionFactoryBean。 创建Configuration实例,赋值给SqlSessionFactoryBean。 读取mybatis配置文件,把mapperLocations参数赋值给SqlSessionFactoryBean。 SqlSessionFactoryBea

2020-06-10 16:45:44 1582

原创 MyBatis源码学习(二)——创建Mapper代理工厂的准备工作

先上小结:@Autowired注解生效。 Spring开始为@Autowired注解的Mapper创建动态代理。使用的是BeanFatory中注册的BeanDefinition。 Spring标准的创建动态代理流程,创建Mapper接口类的BeanWrapper,准备进行属性注入。 准备给Mapper代理注入sqlSessionFactory和sqlSessionTemplate。 Spring标准的创建动态代理流程,创建SqlSessionFactory的代理。使用的是SqlSessionFa

2020-06-10 15:56:32 393

原创 MyBatis源码学习(一)——@MapperScan注解扫描Mapper接口文件,创建BeanDefinition

先上小结:@MapperScan注解生效。触发@Import({MapperScannerRegistrar.class})注解。 @Import({MapperScannerRegistrar.class})注解生效。调用MapperScannerRegistrar.registerBeanDefinitions()。 MapperScannerRegistrar创建扫描工具类Scanner。 Scanner从@MapperScan注解中获取Mapper接口路径。 调用Scanner.doSc

2020-06-10 15:04:49 2653

原创 MyBatis源码学习(零)——准备

当我们使用MyBatis时,往往会有以下操作:1,添加@MapperScan注解,或者在配置文件中使用<mybatis:scan>进行设置。这一步设置的是需要扫描的Mapper文件路径,比如这样:@Configuration@EnableTransactionManagement@MapperScan({"com.macro.mall.mapper","com.macro.mall.dao"})public class MyBatisConfig {}2,编写Mapper.

2020-06-10 14:42:02 225

原创 用Swagger生成SpringBoot接口文档

目录一,原始项目说明二,引入Swagger三,Swagger首页四,Swagger注解使用1,@Api2,@ApiOperation3,@ApiImplicitParam和@ApiImplicitParams4,@ApiResponse和@ApiResponses5,@ApiModel和@ApiModelProperty6,@ResponseHeader...

2020-01-14 19:58:58 776

原创 在IDEA上创建SpringCloud常用组件

本文用IDEA创建简单的Spring Cloud的demo,主要涵盖Spring Cloud几种组件,包括注册中心Eureka,服务提供者provider,服务消费者consumer,断路器Hystrix,录音网关ZUUL,路由网关的过滤器Filter,配置中心config等。包含demo代码操作流程。

2019-12-31 18:42:08 2146 2

原创 了解RedisTemplate:从RedisTemplate和StringRedisTemplate的区别开始

从RedisTemplate和StringRedisTemplate的区别开始,逐渐深入RedisTemplate源码,了解RedisTemplate的代码结构,以及RedisTemplate如何完成对redis的操作。

2019-12-24 17:30:40 2765

原创 Jeecg-Boot前后端项目部署流程

Jeecg-Boot 是一款基于SpringBoot+代码生成器的快速开发平台,本文介绍的是从Jeecg-Boot官网下载的demo代码如何在Windows和Linux环境下部署。

2019-12-17 19:27:49 31122 15

Map下类的特点

Map下各种接口和类的特点,父子关系,实现方式等,vsd格式

2017-04-10

Collection下的类的特点汇总

vsd格式

2017-04-10

空空如也

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

TA关注的人

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