自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 pt-online-schema-change 修改大表结构

percona-toolkit 简称pt,是一组数据库高级命令行工具的集合,用于执行复杂、麻烦的mysql任务。常用的pt工具比如pt-table-checksum:检测主从数据一致性pt-heartbeat:监测主从同步延迟pt-table-sync:同步表数据,常用于主从数据不一致时进行数据修复pt-online-schema-change:在线修改表结构。

2023-07-19 07:30:00 210

原创 哈希表 基础理论

哈希冲突是否会导致一个bucket中存储多个元素,这要看哈希冲突的解决方式,比如链表法则会在一个bucket中以链表形式存储多个哈希地址相同的元素,开放地址法则不会,会重新寻找新的空桶(哈希地址)。按哈希表地址位数将关键字key分成位数相等的几部分,最后一部分较短的可以舍弃,然后将这些分段对齐相加,舍弃多余的高进位,即得到对应的哈希地址。也叫作再散列法,同时构建多个哈希函数,使用第一个哈希函数计算得到的地址存在冲突时,使用第二个哈希函数计算,以此类推,直到计算得到的地址不发生冲突。p

2023-07-11 07:30:00 166

原创 Lua使用指南

lua 是一种开源、轻量的脚本语言,其设计目的是嵌入应用程序中,为应用程序提供灵活的扩展功能。lua 特性轻量级:解释器使用标准c语言编写,编译后仅仅一百余K,可以很方便的嵌入到应用程序中;提供了易于使用的扩展接口、机制,扩展性强;自动内存管理功能丰富,支持闭包、协程、文件IO、数据库访问;支持面向过程编程、面向对象编程、函数式编程。lua提供了通用类型的表(table),用它可以实现数组,哈希表,集合,对象以及实现面向对象编程。Lua 应用场景游戏开发独立应用脚本。

2023-07-07 07:30:00 713

原创 spring-retry 异常重试

spring-retry 和spring的事务管理一样,有声明式(注解)、编程式(自行写代码)2种使用方式,更推荐使用声明式,不侵入原有业务逻辑。声明式是基于aop实现的,还需要引入aop相关依赖,同样具有aop相关的坑,比如以下几种情况 spring-retry 不生效。@Recover 方法可选,返回值类型和@Retryable方法保持一致,第一个参数和@Retryable指定的异常类型保持一致,后续参数和@Retryable方法形参表保持一致(末尾的参数可以省略,但参数顺序不能乱)。

2023-07-04 07:30:00 207

原创 SpringBoot yaml配置文件

在创建springboot项目时,可以勾选 Developer Tools -> Spring Configuration Processor,或手动添加依赖

2023-03-07 15:52:12 957 1

原创 集合 常用工具类

BidiMap继承自Map,一个key唯一对应一个value,一个value也唯一对应一个key,常用实现类有 DualHashBidiMap、DualLinkedHashBidiMap、UnmodifiableBidiMap。ListUtils、SetUtils的一些相似方法,比如 isEqualList()、isEqualSet(),入参都是公共父类Collection,但提供的实现分别是针对list、set的,使用时尽量传入对应类型的实参。key由多个部分组成,有一定顺序。

2022-12-09 11:48:58 1518 1

原创 数组 常用工具类

增删元素会引起数组元素数量改变,都是先创建容量正好的新数组,再拷贝、添加需要的元素,返回新数组。各个基本类型、引用类型的空数组。

2022-11-24 19:30:00 525

原创 MapStruct的使用

其它常见的bean copy框架,往往需要字段名、数据类型相同,才会复制;mapstruct默认字段名相同就会复制,如果字段名相同,但mapstruct编译生成代码时无法实现对应数据类型的转换,编译时会报错,通不过编译//可以用uses引入需要的类型转换mapper,值是Class[],同名字段会自动使用引入的转换mapper中对应的方法进行转换 @Mapper(uses = {}/*** 转换mapper。

2022-11-18 17:15:49 1569

原创 Java @FunctionalInterface 函数式接口

接口中的抽象方法(函数)有且仅有1个;允许同时存在默认方法等其它类型的方法。jdk8 新增的 @FunctionalInterface 注解,用于标记函数式接口;java编译器会把满足函数式接口定义的任何接口都视为函数式接口,不管这些接口上是否标注了 @FunctionalInterface。

2022-10-09 20:00:00 1149

原创 Java Reflect 反射

反射:通过类的class对象来获取类的元信息,动态操作类中的字段、调用类中的方法。常见的应用场景开发通用框架时,从外部(配置文件)加载类的配置,动态创建对象、设置属性值,比如spring实现动态代理,动态创建代理对象,对原功能进行扩展、增强实现注解。优缺点优点:动态操作,可以根据传入的参数或从配置文件中读取的配置,动态创建对象、设置属性,十分灵活。缺点:①通过反射可以操作类的私有成员,破坏了类的封装性,存在安全隐患;②开销大,使用频率低时性能还行,频繁使用时严重影响性能。

2022-08-19 20:00:00 361

原创 Assert 断言常用工具类

jdk的内置断言 assert 默认关闭,可以用命令行参数 -ea 启用内置断言,ea即enable assertions。鸡肋,忘记加-ea时断言不起作用,有风险,不推荐此种方式。以上方法,当参数自身为null时,抛出NPE;当参数自身不为null、但不满足要求时,抛出 IndexOutOfBoundsException。以上方法,当参数自身为null时,抛出NPE;当参数自身不为null、但不满足要求时,抛出 IllegalArgumentException。不满足时也是抛异常,可以起到断言作用。

2022-08-16 20:30:54 1809 3

原创 Object 常用工具类

【代码】Object 常用工具类。

2022-08-16 20:22:25 521

原创 IO常用工具类 commons-io

都是先调用openOutputStream()打开文件,进行写入,再关闭文件;未指定字符集时,默认使用jvm默认字符集,jvm默认字符集由jvm启动时根据操作系统设置的地区、字符集确定。commons-io 是apache开源的io工具类库,封装了很多IO工具类,使用方便。打开文件后,如果已经读取了所有内容,后续再次读取时游标已经在文件尾了,读不到任何内容。copy()、copyLarge() 底层都是调用相同的方法,区别在于。,用 \ 转义字符串中的 \,所以写成 \\,实际返回、输出的是 \。...

2022-08-11 20:15:00 1646

原创 Number 常用工具类

此处都是双闭区间 [start,stop]

2022-08-11 19:30:00 2141

原创 Boolean 常用工具类

toBoolean()、toInteger() 只是camel命名方式,返回的是基本类型 boolean、int;toBooleanObject()、toIntegerObject() 返回的才是包装类型Boolean。Boolean自带的2个常量。

2022-08-10 22:39:12 416

原创 char 常用工具类

第二个参数指定字符集,参数个数不定,可以现写字符集,也可以使用预定义常量的toString(),eg.这些char常量都是继承子父接口 CharPool,也可以通过 CharPool 来引用。此处的CharSet是commons-lang3中的类,不是java.nio中的类。......

2022-08-10 22:27:48 601

原创 数据库假数据插入 template-db-faker

一个向db中插入假数据的模板,基于 springboot + mybatis 构建。随机数据生成组件:使用国人开源的1、创建数据表,并在entity包下创建对应的实体类2、在mapper包下创建对应的mapper接口,并在 resources/mapper 下编写对应的xml映射文件//继承DbFakerMapper,泛型指定对应的实体类,无需定义方法-- 需要实现 DbFakerMapper 的2个方法:①批量插入,②清空表 -->

2022-04-17 22:49:41 1121

原创 Mockito使用指南

目录依赖mockito常用的静态方法mock对象的创建、初始化注入其它mock对象mock、spy的区别when...then...do...whenArgumentMatchers 参数匹配 java常见的mock框架easy-mock:已停止维护mockito:主流,功能强大、使用方便,推荐 依赖如果是 springboot 项目,test 中已经包含了 mockito-core,无需额外引入<dependency> <groupId&g

2022-04-16 17:29:24 2623

原创 Java Stream流式处理

findFirst()、findAny() 返回 Optional,但选取的元素是null时,这2个方法会直接抛出NPE,后续也就没必要用 Optional 的 orElse()、orElseGet() 来设置为 null 时的默认值。stream 流,是jdk8新增的一种集合处理方式,可以将集合转换为流,进而对集合中的元素进行排序、过滤、聚合等⼀系列的操作。相比于map(),mapToXxx() 还提供了该种类型的流的特有方法,比如数值型求和、平均数、最值。将流中的元素映射为对应的流(列表)

2022-04-15 13:06:18 4163

原创 抓包工具 Fiddler 使用指南

可能是关闭fiddler时 fiddler权限不够,不能关闭fiddler的系统代理,可以尝试以管理员身份重新运行、关闭fiddler。会拦截所有http请求的响应,偏死板,而我们通常只需要修改其中一两个http请求的响应,不太方便,不推荐使用。可以使用预定义的响应码,十分方便,推荐使用。3、手机打开wifi,连接到同一局域网(手机、电脑必须在同一局域网,不然抓不到手机的数据包)。4、操作后需要将第一步中的断点设置为 Disabled 禁用,不然会一直拦截所有的请求。1、设置断点为从服务器获取响应后。

2022-04-12 22:41:53 2537

原创 Groovy使用指南

目录groovy简介groovy类的基本特点在java项目中引入groovy定义变量groovy中的常见类型字符串数组 、列表 list元祖 tuple映射 | 字典 | map范围运算符 ..切片方法定义、调用闭包类的定义IO控制台输出File类文件读文件写遍历文件树说明单元测试 groovy简介Groovy是一种基于 JVM 的编程语言,结合了 python、ruby 和 Smalltalk 的许多强大的特性,面向对象,Groovy 可以与 Java 代码很好地结合,可以直接在groo

2022-04-08 22:17:32 4513

原创 drl规则脚本语法

目录drl脚本基本结构drl脚本常见组成package 包import 导入global 全局变量rule 规则常见属性(attribute)enabled 是否启用当前规则dialect 指定方言salience 设置优先级date-effective、date-expires 规则有效期no-loop 是否循环匹配lock-on-active 增强版的no-loopactivation-group 激活组LHS 规则条件多个条件drools内置的判断运算符接收Fact对象绑定变量名RHS 规则计算内置对

2022-04-07 23:28:19 2011

原创 Drools的使用

目录说明单独使用drools2种ksession的区别spring整合drools缺省 kmodule.xml 文件从数据库加载drl脚本 以 订单满减打折、用户签到得金币 为例。 说明drools规则引擎类似于网关zuul、gateway,引入类库写成服务,不是nginx、mysql这种单独的软件。drools可以单独使用,也可以搭配spring使用;IDEA默认安装了drools插件,支持drools。 单独使用drools1、pom.xml引入

2022-04-07 21:43:14 3121 3

原创 规则引擎简介

目录概述优缺点应用场景引入方式常见的规则引擎 概述规则引擎,全称 Business Rule Management System(BRMS)业务规则管理系统,主要思想是将业务决策|业务规则从应用程序中分离出来,使用预定义的语义模块编写业务决策|业务规则,在需要时进行配置、管理。引入规则引擎后,业务规则不再以硬编码在业务处理代码中,而是完全独立于应用程序,存储在规则库|知识库(常见的比如drl文件、数据库)中。业务规则被加载到规则引擎中供应用系统调用,业务人员可以像管理数据一样对业务规则进行

2022-04-07 21:21:32 2101

原创 Java 集合源码分析

集合用于存储指定类型的元素,部分集合还实现了栈、队列、树等数据结构。集合的两个根接口Collection 单列集合Map 双列集合/*** 存储map中所有的key*//*** 存储map中所有的value*/Map内置了2个单例集合分别存储key、value,key唯一标识一个键值对,使用Set存储,不可重复。集合的实现类都重写了toString()方法。

2021-11-02 13:31:56 938

原创 Java String、StringBuilder、StringBuffer

并不是,编译器会自动优化代码,把修改String的操作转换为:创建一个StringBuilder,使用StringBuilder进行字符串的(1个或多个)修改操作,修改完成后将StringBuilder转换为String返回。编译器会优化为:在循环体中,创建一个StringBuilder,使用StringBuilder进行字符串的修改,转为String返回。如果所需容量大于 原容量*2 + 2,则扩容为实际所需容量(将要存储的字符长度),否则扩容为 原容量*2 + 2。都是使用char[ ]来存储字符。

2021-10-26 14:30:39 268

原创 SpringBoot 优雅停机

目录linux常用的 kill 指令springboot 优雅停机/actuator/shutdown 端点不停机更新方案 linux常用的 kill 指令kill -15:kill指令默认就是-15,只是发送一个 SIGTERM 信号通知进程终止,由进程自行决定怎么做,即进程不一定会终止。kill -9:强制终止进程,进程会被立刻终止kill -2:类似 Ctrl+C 退出,会先保存相关数据再终止进程。一般不直接使用 kill -15,因为不一定能终止进程。kill -9 过于

2021-10-20 16:50:27 4021 1

原创 SpringBoot @Conditional系列注解

springboot 提供的 @Conditional 系列注解:校验是否满足指定条件,满足指定条件时 标注的@Component体系、@Bean注解才会创建对应的bean实例放到容器中。我们在用@Bean、@Component之类的注解配置bean时,可以加上@ConditionalOnMissingBean(Xxx.class) ,以避免重复创建bean。指定的bean已经存在于容器中,且只有单个实例(单个候选者)时,才会作为bean放到容器中。要是指定的web应用类型,才会作为bean放到容器中。

2021-10-20 12:33:58 2182

原创 SpringBoot 自动配置原理

目录@SpringBootApplication注解@EnableAutoConfiguration自动配置的实现原理 @SpringBootApplication注解包含了以下3个注解SpringBootConfiguration:标识为springboot的主配置类|引导类,本身具有@Configuration注解的作用@EnableAutoConfiguration:开启自动配置,可通过exclude属性排除不需要应用自动配置的类@ComponentScan:自动扫描并加载符合

2021-10-19 22:48:47 496

原创 SpringBoot ApplicationContext常用工具类,应用上下文引用的保存

目录ApplicationContext工具类 | bean的获取保存应用上下文引用在引导类中保存run()方法返回的应用上下文使用应用上下文初始化器 ApplicationContextInitializer使用应用监听器 ApplicationListener使用应用上下文的Aware接口 ApplicationContextAware ApplicationContext、ApplicationContextInitializer、ApplicationListener、Applicat

2021-10-14 22:23:16 888

原创 SpringBoot Banner,SpringApplicationRunListener,ApplicationContextInitializer,Runner,StopWatch

目录自定义 Banner文本banner图片banner自定义运行监听器 SpringApplicationRunListener自定义应用上下文初始化器 ApplicationContextInitializerRunner的使用StopWatch( 计时器)的使用 Banner、SpringApplicationRunListener、Runner是springboot提供的,ApplicationContextInitializer、StopWatch是spring提供的,此处以spri

2021-10-13 22:26:29 498

原创 SpringBoot 启动流程

目录SpringApplication的启动思路SpringApplication的构造方法整体流程设置基础资源 primarySources推断应用类型 WebApplicationType设置应用上下文初始化器、应用监听器推断主类 deduceMainApplicationClass()SpringApplication的实例run()方法整体流程运行监听器 SpringApplicationRunListener准备环境 prepareEnvironment()打印Banner printBanner

2021-10-13 16:45:03 892

原创 SpringBoot 静态资源处理

目录主要提供的bean静态资源的路径映射静态资源的位置静态资源的访问路径webjars的使用首页映射 springboot给webmvc提供的自动配置类是 WebMvcAutoConfiguration,这篇博文中涉及到的源码都是这个类中的。 主要提供的bean使用 @Bean 提供了一些webmvc常用的beanViewResolver 视图解析器RequestContextFilter 过滤器RequestMappingHandlerAdapter 处理器适配器

2021-10-12 23:46:55 393

原创 SpringBoot 配置文件源码

bootstrap是在springloud中使用的,加载时机在application之前,应用启动时,会先加载解析bootstrap.yml,创建引导上下文,由引导上下文加载、解析application.yml,创建应用上下文。eg. 在IDEA中调试时,springboot能读取到项目根目录下的配置文件,但maven package时默认不会打包根目录下的配置文件,需要在pom.xml中修改maven的打包配置。指定额外的配置文件位置,这样修改外部配置文件的内容后,无需重新打jar包。

2021-10-12 19:38:15 950

原创 SpringBoot 基础理论

目录springboot的优点springboot的特性spring、springmvc、springboot、springcloud的联系与区别springboot 1.x和2.x的区别starter部署方式应用监控环境区分定时任务 springboot的优点相关问题springboot有哪些优点?你们项目为什么要使用springboot?springboot有什么特点? springboot的优点提供起步依赖,无需处理复杂依赖的关系提供大量的自动配置,无需编

2021-10-02 19:10:13 533

原创 BeanCopy 常用工具类

以上介绍的几种bean copy方式都是浅拷贝,通常处于性能考虑,也是使用浅拷贝,除非特殊情况。根类 Object 的 clone() 方法是 native 方法,速度快、性能高。拷贝都是新建目标类实例,浅拷贝、深拷贝的区别在于引用类型的成员字段的复制方式不同。反序列化是深拷贝的,这也是实现深拷贝最常见的方式。手动get、set,性能最高,但写起来麻烦。基于反射实现,性能极差,避免使用。

2021-09-30 21:03:25 1775

原创 lombok的使用

SneakyThrows是把整个方法体放到try中,对异常的处理是直接抛出,方法签名上不会用throws声明可能抛出的异常,调用这个方法的开发可能不会留意到这个方法会抛出异常,也就没对可能抛出的异常进行处理,因为IDEA没有报红、也能通过编译,导致运行时出现一堆没有捕获处理的异常。虽然@SneakyThrows可以让代码变得简洁、清爽,但十分容易遗漏异常的捕获处理,慎用,尤其是公司内部自行封装的、要提供给多个模块|项目使用的基础类库,一律禁止使用@SneakyThrows。一人使用,全组都得跟着用。

2021-09-30 14:47:40 593

原创 String 常用工具类

apache的 common-lang3 工具类众多、方法齐全, 推荐使用。老版本类库是 commons-lang,新版本是 commons-lang3,尽量用 lang3 代替 lang。工具类封装的方法,相比于原生方法,往往做了很多额外校验、兼容、处理,比如校验了输入是否合法、兼容了NPE、判断了从其它地方获取的数据,使用起来要方便些。empty、blank的异同点:都包含了null、空串,blank还包含了空格串。都是在副本上修改,返回副本,原串不变。

2021-09-30 12:40:12 9050

原创 Spring 容器的关闭流程

目录AbstractApplicationContext 中的相关源码关闭容器的2种方式核心方法 doClose()doClose() 流程图 AbstractApplicationContext 中的相关源码关闭容器的2种方式/** * 向jvm注册一个关闭钩子(shutdown hook),在jvm关闭(jvm shutdown)时自动做一些操作 */@Overridepublic void registerShutdownHook() { if (this.shutdown

2021-09-30 10:10:30 2075

原创 Spring Bean的那些事儿

目录bean的作用域beanName、aliasbeanName的默认生成策略AnnotationBeanNameGeneratorDefaultBeanNameGenerator创建bean实例的2种方式构造方法方式工厂方法方式静态工厂实例工厂FactoryBean单例bean的线程安全问题标注bean的注解组件扫描依赖注入的几种方式自动装配自动装配的注解问题答疑@Autowired的实现原理自动装配的贪婪原则自动装配常见报错 bean的作用域作用域描述生命周期优点缺点

2021-09-29 20:14:54 459

空空如也

空空如也

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

TA关注的人

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