- 博客(44)
- 收藏
- 关注

转载 常见的MySQL的一些优化技巧
一、索引优化索引的数据结构是 B+Tree,而 B+Tree 的查询性能是比较高的,所以建立索引能提升 SQL 的查询性能。1、建立普通索引对经常出现在 where 关键字后面的表字段建立对应的索引。2、建立复合索引 如果 where 关键字后面常出现的有几个字段,可以建立对应的 复合索引。要注意可以优化的一点是:将单独出现最多的字段放在前面。例如现在我们有两个字段 a 和 b 经常会同时出现在 where 关键字后面:select * from t where a = 1 and b =
2020-06-28 11:17:20
198

原创 SpringBoot集成Quartz,实现定时任务可配置化
一、什么是QuartzQuartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer,Quartz增加了很多功能:持久性作业 - 就是保持调度定时的状态;作业管理 - 对调度作业进行有效的管理;在我们实际的项目中,当Job过多的时候,肯定不能人工去操作...
2020-03-06 09:19:11
1187

原创 8 种方案解决表单重复提交问题
1.什么是幂等幂等:F(F(x))=F(x)多次运算结果一致在我们编程中常见幂等: 1、select查询天然幂等 2、delete删除也是幂等,删除同一个多次效果一样 3、update直接更新某个值的,幂等 4、update更新累加操作的,非幂等 5、insert非幂等操作,每次新增一条2.产生原因由于重复点击或者网络重发 eg:1、点击提交按钮两次;2、点击刷新按钮;3...
2020-01-07 19:58:49
1142
1
原创 设计模式-单例模式
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-02-22 23:01:30
97
转载 MySQL执行一条语句的过程
查询语句的执行顺序:1.客户端通过TCP连接发送连接请求到mysql连接器,连接器会对该请求进行权限验证及连接资源分配(max_connections,8小时超时)2.建立连接后客户端发送一条语句,mysql收到该语句后,通过命令分发器判断其是否是一条select语句,如果是,在开启查询缓存的情况下,先在查询缓存中查找该SQL是否完全匹配,如果完全匹配,验证当前用户是否具备查询权限,如果权限验证通过,直接返回结果集给客户端,该查询也就完成了。如果不匹配继续向下执行。(注意:此步并不做词法及语法分析,也就
2020-12-15 16:17:25
250
转载 每日一道leetcode-最大括号深度
题目描述有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。有效括号字符串类型与对应的嵌套深度计算方法如下图所示:给你一个「有效括号字符串」 seq,请你将其分成两个不相交的有效括号字符串,A 和 B,并使这两个字符串的深度最小。不相交:每个 seq[i] 只能分给 A 和 B 二者中的一个,不能既属于
2020-12-10 19:53:46
1573
原创 Spring Bean的生命周期
实例化实例化一个 Bean,也就是我们常说的 new。IOC 依赖注入2. 按照 Spring 上下文对实例化的 Bean 进行配置,也就是 IOC 注入。setBeanName 实现3. 如果这个 Bean 已经实现了 BeanNameAware 接口,会调用它实现的 setBeanName(String)方法,此处传递的就是 Spring 配置文件中 Bean 的 id 值BeanFactoryAware 实现4. 如果这个 Bean 已经实现了 BeanFactoryAware 接口
2020-12-09 22:49:10
99
原创 Java中线程池的原理
线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。他的主要特点为:线程复用;控制最大并发数;管理线程。线程复用每一个 Thread 的类都有一个 start 方法。 当调用 start 启动线程时 Java 虚拟机会调用该类的 run 方法。 那么该类的 run() 方法中就是调用了 Runnable 对象的 run() 方法。 我们可以继承重写Thread 类
2020-12-07 20:12:04
128
原创 Synchorized的实现原理
synchronized 它可以把任意一个非 NULL 的对象当作锁。他属于独占式的悲观锁,同时属于可重入锁。Synchronized 作用范围作用于方法时,锁住的是对象的实例(this);当作用于静态方法时,锁住的是Class实例,又因为Class的相关数据存储在永久带PermGen(jdk1.8 则是 metaspace),永久带是全局共享的,因此静态方法锁相当于类的一个全局锁,会锁所有调用该方法的线程;synchronized 作用于一个对象实例时,锁住的是所有以该对象为锁的代码块。它有多个
2020-12-06 22:20:46
537
原创 程序员常用十大算法之分治算法
分治算法在计算机科学中,分治法是构建基于多项分支递归的一种很重要的算法范式。字面上的解释是「分而治之」,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序)、傅立叶变换(快速傅立叶变换)。分治算法通常以数学归纳法来验证。而它的计算成本则多数以解递归关系式来判定。使用分治算法解决汉诺塔问题...
2020-08-04 17:34:08
237
原创 Kafka各个指标的性能测试
一、测试环境二、测试工具Kafka系统提供了测试工具kafka-producer-perf-test.sh和kafka-consumer-perf-test.sh,在kafka安装的bin目录下,通过该工具可以对生产者性能和消费者性能进行测试,获取一组最佳的参数值,进而提升生产者的发送效率和消费者的读取效率。三、生产者测试创建一个拥有3个分区、1个副本的topic,设置不同的线程数发送相同的数量,查看性能变化。脚本如下:./kafka-producer-perf-test.sh --topic
2020-08-03 09:50:18
1307
原创 MySQL中date_format函数引发的索引失效
索引失效场景我们平常在开发的过程中都会做一些历史数据通过时间去筛选数据的接口,当时是对一张历史数据表做查询,有一天突然发现页面查询变的非常缓慢,于是对这个接口进行排查,首先执行这个历史数据的查询SQL,SQL如下:...
2020-07-20 14:57:20
5802
4
原创 @Transactional注解的常见失效场景
1、@Transactional 应用在非 public 修饰的方法上如果Transactional注解应用在非public 修饰的方法上,Transactional将会失效。之所以会失效是因为在Spring AOP 代理时,如上图所示 TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截,DynamicAdvisedInterceptor(CglibAopProxy 的内部类)的 intercept 方法或 JdkDynamicAopProxy 的 invoke 方
2020-07-05 10:48:35
170
原创 Java实现赫夫曼树
一、概念给定n个权值作为n个叶子节点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,这样的二叉树称为最优二叉树,也称为哈夫曼树(HuffmanTree)。赫夫曼树是带权路径最小的树,权值较大的离根节点越近,赫夫曼树图片如下:二、构建赫夫曼树思路分析1)从小到大进行排序,将每一个数据,每一个数据都是一个结点,每个结点可以看成是一颗最简单的二叉树。2)取出根节点权值最小的两颗二叉树3)组成一颗新的二叉树,该树的二叉树的根节点的权值是前面两颗二叉树的根节点的权值。4)再将这颗新的二叉
2020-06-21 21:08:56
184
转载 Java实现堆排序
堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子:该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:arr[i] <= arr[2i+1] &&am
2020-06-12 23:17:39
147
原创 记录线上MySQL中的一次Deadlock
1、发生场景项目中集成了shiro做了一个权限系统,需要对当前在线用户做一次统计,所以每次都有一个异步的将当前在线用户信息更新到数据库中,如下图所示/** * 同步session到数据库 * * @param session 在线用户会话 * @return 任务task */ public static TimerTask syncSessionToDb(final OnlineSession session) { retur
2020-05-25 09:50:43
183
转载 Java实现斐波那契查找
public class FibonacciSearch {/**@description: 创建最大值刚好>=待查找数组长度的裴波纳契数组@param a: 待查找的数组*/private static int[] makeFiboArray(int[] a){int N = a.length;int first = 1,sec = 1,third=2,fbLength = 2;int high = a[N-1];while (third<N) { // 使得裴波那契数不断
2020-05-19 19:54:29
180
原创 Java实现折半查找和插值查找
/** * 折半查找算法(查找的前提是有序数组) * @param arr * @param left * @param right * @param value * @return */ public static int binarySearch(int[] arr,int left,int right,int value) { if (left>right || value<arr[left]
2020-05-17 19:04:59
144
原创 Java实现归并排序
public static void mergeSort(int[] arr,int left,int right,int[] temp) { if (left<right) { int mid=(left+right)/2; //向左进行分解 mergeSort(arr,left,mid,temp); //向右进行分解 mergeSort(arr,mid+1,ri.
2020-05-08 23:58:28
166
转载 Java实现快速排序
public static void quickSort(int[] arr, int low, int high) { if (low < high) { // 找寻基准数据的正确索引 int index = getIndex(arr, low, high); // 进行迭代对index之前和之后的...
2020-04-29 23:30:06
150
原创 Java实现希尔排序(两种方式)
/** * 希尔排序交换法(每次都得进行交换,执行效率比较低) * @param arr */ public static void shellSort(int[] arr) { if (Objects.isNull(arr) || arr.length<=1) { return; } ...
2020-04-28 22:49:15
186
原创 使用poi替换指定word模板中的数据
一、模板文件示例原始的模板示例是这样的二、代码进行替换import java.io.*;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import com.aimsphm.utils.StringUtils;import org.apache...
2020-04-27 19:14:19
1632
6
原创 Java实现插入排序
/** * 插入排序 * @param arr */ public static void insertSort(int[] arr) { if (Objects.isNull(arr) || arr.length<=0) { return; } for (int i=1;i&l...
2020-04-26 23:41:15
116
原创 Java实现选择排序
public static void selectSort(int[] arr) { for (int i=0;i<arr.length-1;i++) { //定义数组第一个值为最小值 int min=arr[i]; //定义最小值的下标 int minIndex=i; ...
2020-04-22 22:58:55
149
原创 Java实现冒泡排序
package com.dmj.admincommon.util;import java.util.Arrays;public class BubbleSort { public static void bubbleSort(int[] arr) { //数据只有一个大小的话不用进行排序 if (arr.length<=1) { ...
2020-04-20 23:10:23
134
转载 Java链表实现栈
用链表实现栈一、算法的思想用链表实现栈的先进后出,实现栈的push,pop,peak方法。主要就是利用链表的头结点作为栈顶的元素。1.当要push的时候,相当于新new一个头结点,然后让新节点指向单链表的头结点。以新节点作为单链表的头节点即可。2.当要pop的时候,只要将链表的头指针后移到它的next,将next作为新的头结点即可3.当要peak的时候,只要返回头结点的值就好了。二...
2020-03-27 12:23:40
369
原创 Java实现单链表的逆序
单链表反转思路1、先定义一个节点reverseHead=new HeroHead();2、从头到尾遍历原来的链表,并将每一个节点取出放在新的链表 的reverseHead的最前端3、让头节点指向 head.next=reversehead.next...
2020-03-14 21:07:27
566
原创 List列表转为树形结构
List转树形结构的封装工具类import lombok.extern.slf4j.Slf4j;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;impo...
2020-01-21 15:45:38
515
原创 SpringBoot集成mybatis-plus
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...
2020-01-20 16:27:33
257
原创 SpringBoot整合shiro
shiro原理一、shiro主要有三大功能模块:Subject:主体,一般指用户。SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件。(类似于SpringMVC中的DispatcherServlet)Realms:用于进行权限信息的验证,一般需要自己实现。二、细分功能Authentication:身份认证/登录(账号密码验证)。Authoriz...
2020-01-03 16:48:22
1023
10
转载 Hbase FilterList使用总结
我们知道Hbase的Scan经常需要用到filter来过滤表中的数据返回给客户端,单个的filter还好说,如果有多个呢,那么就需要使用FilterList,它也是继承于抽象类Filter,里面持久化了一个有序的order list来存储不同的filter对数据进行过滤.FilterList分为二种类型,如下FilterList allFilters = new FilterList(Fil...
2019-12-02 13:33:03
324
原创 多线程环境下的SimpleDateFormat引发的异常
1、一般我们使用SimpleDateFormat的时候会把它定义为一个静态变量,避免频繁创建它的对象实例,如下代码:public class SimpleDateFormatTest { private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public...
2019-11-30 15:00:56
193
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人