自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 spring doCreateBean

initializeBean:执行applyBeanPostProcessorsBeforeInitialization其中执行postProcessBeforeInitialization,再执行invokeInitMethods,其中执行afterPropertiesSet,后执行applyBeanPostProcessorsAfterInitialization,其中执行postProcessAfterInitialization(AOP关键)createBeanInstance:创建实例。

2024-01-23 15:02:51 436

原创 spring自定义RequestMappingHandlerMapping

【代码】spring自定义RequestMappingHandlerMapping。

2024-01-20 14:26:37 613

原创 spring refresh

invokeBeanFactoryPostProcessors:调用容器注册的容器级别的后置处理器,beanDefinition加载。postProcessBeanFactory:允许容器的子类注册postProcessor。registerBeanPostProcessors:向容器注册bean级别的后置处理器。finishRefresh:出发初始化完成的回调,发布容器刷新完成的事件。onRefresh:容器预留给子类初始化其他特殊bean的钩子。preareRefresh:刷新前的工作准备。

2024-01-19 23:15:09 430

原创 JAVA创建单例模式

给定一个数组arr,arr中的值均为数组起不重复,每个值代表一种面值的货币,每种面值的货币可以使用任意张数,给定一个整数money代表要找的钱,qiu'huan'qian

2024-01-04 16:30:03 429

原创 spring实现AOP的3种方式

- advice-ref为实现了org.aopalliance.aop.Advice 的实现类 myPointcat 切入点表达式-->@Before(value = "execution(* com.*.*.*(..))")//前置。-- 切面方法,切入点表达式-->在一个Bean上加入@Aspect代表这是一个切面类,该类方法上加入。-- 切点表达式-->@AfterReturning()//后置。-- 织入-->

2023-12-26 11:15:20 1027

原创 js判断对象是否存在某个属性

2.使用Object.keys(obj).includes(),可判断对象自有可枚举属性Object.getOwnPropertyDescriptor(obj,"属性")。1.使用obj.属性或obj[属性]方式,不可判断属行值为undefined的情况。3.obg.hasOwnProperty() 可判断对象自有属行。4. for(属行 in obj), 判断属行自有及原型链上属性。

2023-12-11 10:41:37 398

原创 MORRIS遍历

介绍一种时间复杂度O(N),空间复杂度O(1)的二叉树遍历方式。

2022-03-01 10:07:26 173

原创 单调栈结构

在时间复杂度O(N)内,查询出数组左右两边比任何位置大的且离他最近的数。准备一个栈,从栈底到栈顶从大到小排序。遍历数组1、如果栈为空,则将数组元素放入栈中2、如果栈不为空,如果所遍历的元素(X)小于栈顶元素,将其放入栈中3、如果栈不为空,如果所遍历的元素(X)大于栈顶元素,则将栈顶元素弹出,且弹出元素的右边比他大的离他最近的元素为X,左边比它大的元素为栈中栈顶的元素(因为他已经被弹出)4、再次比较栈顶元素与所遍历的元素(X),并进行第二和第三步。5、在数组遍历完成后,再次处理栈,一次

2022-02-28 10:38:23 192

原创 BFPRT算法

在一个无序数组中,查询第i大的数,时间复杂度O(N)思路一:根据荷兰国旗问题,随机选定一个数,小于放左边,等于放中间,大于放右边。如果 i 小于中间值的下标,则在左边再次选择第i大的数,如果大于就在右边选择第i大的数。思路二:1、将数组arr分组,每N个一组。2、每个小组排序。3、拿出每组的中位数组成一个新的数组。4、找到新数组的中位数N。5、用中位数N对arr进行划分,小于放左边,等于放中间,大于放右边。5、如果 i 小于中间值的下标,则在左边再次选择第i大的数,如果大于就在右边选择第i大的数

2022-02-18 22:00:42 135

原创 Manacher算法

在一个字符串中找到最长回文子串

2022-02-13 23:17:52 199

原创 KMP算法

解决问题:在一个字符串str1中查看是否包含子串str2,并返回str1中str2的起始地址1、求str2的最长前缀和最长后缀最长前缀:在一个字符串中,某个字符的最长前缀为排除该字符和其前一个字符后与最长后缀字符相同的长度最长后缀:在一个字符串中,某个字符的最长后缀为排除该字符和其第一个字符后与最长前缀字符相同下标为0的位置最长前缀为-1 下标为1的位置最长前缀为0例:a b c a b c h h的最长前缀 a b c 最长后缀 a b c思路:根据已经求过的最长前缀来求,如下

2022-02-09 22:48:27 363

原创 递归问题整理打印子序列,求最小路径和

打印一个字符转的子序列,包括空字符串。

2022-01-25 22:11:37 200

原创 收益及花费

一块金条切成两半,是需要花费和长度一样的铜板,比如长度为20的金条,不管切成长度多大的两半,都需要花费20个铜板,一群人想分整块金条怎样分铜板致最省钱,例如给定数组10,20,30,代表一共三个人。整块金条长度为10+20+30=60,金条要分成10,20,30三个部分,如果先但是,如果先把长度为60的金条分成30和30,花费60,再把长度为30的增长分成10和20,花费30共花费90个铜板把长度为60的金条分成10和50,花费60再把50分成。20和30,花费50。一共花费110个铜板。...

2022-01-08 22:52:42 150

原创 前缀树笔记

前缀树是一种多叉树,可实现查询以某个字符串作为前缀的字符,有多少个字符串以某一个字符串开头,有多少个字符串以某个节点结尾等

2022-01-03 21:51:36 337

原创 并查集结构和岛问题

如有1、2、3、4、5个节点,它们的指针分别指向自身,如要将2节点放在1结点之后,则2的指针指向1节点。如何确定多个元素是否在同一个结合中。则查询该节点的头节点,如头节点相同,则在同一个结合中。实现结合融合时,将节点数少的集合的头结点指向节点数多的头节点。(多链表结构)优化:查询结点(A)的头节点时将该节点到头节点的节点分别指向头节点。岛问题:一个矩阵只有0和1两种结构,每个位置都可以和自己的上下左右相连,如果一片1连在一起,这部分叫一个岛,求一个矩阵有多少个岛。1 1 0 0 1 0 0

2021-12-31 22:19:20 235

原创 HashCode与布隆过滤器一致性Hash

设计一种结构,具有如下三种功能,insert(Key),将某个Key加入到该结构中,做到不重复加入。delete(Key)将该结构中的某个Key删除,getRamdom()随机等概率返回该结构中的任何一个Key,时间复杂度都为O(1)。思路:创建两张Hash表,一张存储Key和一个int值,一张存储int值和KeyHashMap<K,int> keyValue = new HashMap<K,int>();HashMap<int,K> valueKey=

2021-12-28 23:10:17 429

原创 已知一颗完全二叉树,求其节点个数

时间复杂度低于O(N),N为节点个数满二叉树节点个数:,K为树的高度1、先遍历书的左边界获取高度2、在遍历右子树的左边界获取其高度,如果高度与左子树高度一致,则表示左子树为满为叉树。否则左子树没有满。3、如果右子树的高度不等于左子树,则表示右子树是满二叉树。(因为完全二叉树左右子树的高度差最多只能为1)。...

2021-12-26 21:32:09 376

原创 判断一棵树是否为完全二叉树

1、二叉树按层遍历2、如果一个节点有右孩子而无左孩子,则不是完全二叉树。3、如果一个节点有左孩子而无有孩子,或则左右孩子都没有,则其后面所遇到的节点都必须是叶节点。import java.util.LinkedList;import java.util.Queue;public class TreeNode { public static class Node { private String number; private Node le

2021-12-24 22:35:24 570

原创 判断一棵树是否为平衡二叉树

1、判断左树是否平衡,并返回左树高度2、判断右树是否平衡,并返回右树高度3、判断左右树高度差是否大于1,如果大于1,则不是平衡二叉树public class TreeNode { public static class Node { private String number; private Node left; private Node right; public Node(String number, No

2021-12-24 20:25:22 383

原创 判断一棵树是否为搜索二叉树

中序遍历为升序的树,一个节点的左孩子比它,右孩子比它大的二叉树。

2021-12-24 20:22:32 262

原创 二叉树的序列化

二叉树序列化:可以用先中后序遍历的方式,将每一个节点中的信息保存为一个字符串,每一个节点的信息用特殊的符号作为分隔,如果所遍历到的节点为空(NULL)也要将其用特殊的符号表示为字符串。反序列化:用什么方式序列化的就用什么方式还原。...

2021-12-23 23:01:10 453

原创 在一个二叉树中查找一个节点的后继节点

后继节点:在中序遍历中一个节点的下一个节点二叉树类型如下: public static class Tree { private int number; private Tree leftNode; private Tree rightNode; private Tree parent; public Tree(int number, Tree leftNode, Tree rightNode, Tree paren

2021-12-12 20:30:31 353

原创 实现一颗二叉树的先中后序遍历,使用递归和非递归方式遍历

递归版:public class TreeNode { public static class Tree{ private int number; private Tree leftNode; private Tree rightNode; public Tree(int number, Tree leftNode, Tree rightNode) { this.number = number;..

2021-12-08 22:38:41 272

原创 两个单链表相交问题

问题一:如何判断一个单链表是否有环思路一:使用HashMap,然后遍历,将一个链表放入HashMap中,之后遍历第二个链表,使用HashMap的containsKey()方法判断HashMap中是否有所遍历到的元素。如果出现重复元素,则返回true,表示此处开始相交。思路二:设置一个快指针和一个慢指针,快指针一次走两步,慢指针一次走一步,如果快指针最后为空,则表示无环。如果快指针和慢指针相遇,则表示有环。此时,将快指针从新指向头节点,然后快指针和慢指针一次走一步,快指针和慢指针一定会在第一个入环节点

2021-12-07 22:32:23 719

原创 复制含随机指针的链表

Node类的Next指针和正常链表的Next指针意义一样,而Rand指针时Node新增的指针,可能指向链表的任意节点,也可能指向NULL。思路一:HashMapimport java.util.HashMap;import java.util.Map;public class LinkCopy { static class Node { private int number; private Node next; priv.

2021-12-04 23:10:33 532

原创 判断一个链表是否为回文结构

要求链表长度为N,时间复杂度O(N),空间复杂度O(1)。思路1:先遍历一边链表,将链表放入栈中,再次遍历链表,用链表中的元素与栈中弹出的元素作比较,如果链表中的元素与栈中弹出的元素相等则是回文结构。空间复杂度O(N)思路2:申明两个快慢指针(A和B)指向头节点,然后A指针一次走两步,B指针一次走一步,当A指针的Next.Next(下一步的下一步,此处应判断下一步是否为NULL)为NULL时,B指针刚好到中点,然后将B指针以后的元素压入栈中,再一次进行遍历链表,使遍历到的链表元素与栈中弹...

2021-11-28 23:35:50 4702

原创 在有序二维数组中查找某数

思路:可以从数组右上角或从左下角开始查找,从右上角开始查找时,定义两个变量分别表示数组的X轴和Y轴,如果数组元素大于要查找的元素,则Y轴减一,如果数组元素小于要查找的元素时,则X轴加一。public class JZ { public static void creatArr() { int[][] arr = new int[4][]; arr[0] = new int[]{1, 2, 3}; arr[1] = new int[]{4

2021-11-27 13:29:33 225

原创 之字形打印数组

思路:1、设置一个boolean变量用来记录应该从哪个方向开始打印输出。2、

2021-11-27 11:48:40 246

原创 正方形数组顺时针旋转90°

只有正方形才能旋转90°,如长方形将会出现下标越界异常。

2021-11-21 12:37:36 240

原创 旋转打印矩阵

将一个数组旋转打印出来,public class JZ { public static void creatArr() { int[][] arr = new int[3][]; arr[0] = new int[]{1, 2, 3}; arr[1] = new int[]{4, 5, 6}; arr[2] = new int[]{7, 8, 9}; doWhile(arr); } ..

2021-11-20 13:55:27 4415

原创 数组和栈与队列

用数组实现固定大小的栈与对列栈:只在一端进行插入和弹出(先进后出)public class StackArray { private Object[] stack = null; private int indexPop = -1; public StackArray(int size) { this.stack = new Object[size]; } public Object pop() { if (index

2021-11-14 10:41:14 254

原创 桶排序问题

基数排序、计数排序都是桶排序。桶排序是一个非基于比较的排序,实际少用时间复杂度和空间复杂度都是O(N)的稳定排序,先生成一个给定的数组,用下标表示某个数,改下表对应的值表示出现的次数。列:给定一个数组,求其排序之后相邻元素的最大值,时间复杂度O(N),基于非比较的排序。创建一个长度为N+1的桶(0->N),收集每个桶的最大值和最小值,和是否确定该桶为空,,如果是空桶,则取前一个非空桶的最小值和后一个非空桶的最大值相减。用来否定最大差值一定不来自同一个桶内,而不是用来说明最大差值一定

2021-11-13 19:14:41 1365

原创 完全二叉树与数组

完全二叉树可以理解为数组,在数组中某个元素在二叉树中的左孩子为2*i+1,右孩子为2*i+2,(i为该元素的索引),一个元素的父节点为 (i-1)/2大根堆:父节点大于孩子节点的完全二叉树。小根堆:父节点小于孩子节点的完全二叉树。由于将一个元素插入到完全二叉树中时至于其父元素进行比较,比较次数为二叉树的高度,因此其调整代价为,当加入第i个节点时,前面i-1个节点已经形成完全二叉树,因此其调整代价为,i+1个为,所以N个节点调整代价为一个大根堆的元素被改变时,将其与左右孩子节点中的最大值进行.

2021-11-05 22:28:20 746

原创 快速排序理解

经典快排的时间复杂度:对于有序的数组,经典快排的时间复杂度为O()。因为每次只能找出一个与最后一个数相等或小于的数,最好的时候是将等于最后一个数的区域划分到中间的时候,时间复杂度为随机快排将随机选择一个数与最后一个数进行交换package com.company;public class QuickSort { public static int[] creatArr() { // 生成长度随机的数组 int[] arr = new .

2021-10-30 17:14:53 52

原创 荷兰国旗问题

给定一个数组(arr)和一个数,在此数组中将小于这个给定数的元素放左边,等于给定数的元素放中间,大于给定数的元素放右边。给定一个变量(Li)使其等于左边开头索引减1,在定义一个变量(Ri)使其等于数组右边索引加1,然后遍历整个数组,如果所遍历到的元素小于给定的元素。那么该元素与索引(++Li)元素交换(arr[++Li]=arr[i]),如果所遍历到的元素大于给定的元素。那么该元素与索引(--Ri)元素交换(arr[--Ri]=arr[i]),就是将等于区向数组右边推。由于从右边交换过来的数还没有与

2021-10-24 15:39:51 165

原创 归并排序理解

public class GBQuery { public static void fen(int[] arr, int L, int R) { if (L == R || arr.length == 0) { return; } //取数组的中间索引 int mid = (L + R) / 2; //将数组分为长度为一的数组 fen(arr, L, mi..

2021-10-24 12:40:56 94

原创 Centos8 安装 Mysql8

查看MySQL是否安装rpm -qa | grep -i mysql 2. 如果安装将其删除yum -y remove MySQL-* 3. 查找MySQL相关目录find / -name mysql 4. 删除相关目录下文件rm -rf 目录 5. 删除my.cnfrm -rf /etc/my.cnf 6. 删除.mysql_sercretrm -rf /root/.mysql_sercret 7. 更新y...

2021-10-23 14:42:32 116

空空如也

空空如也

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

TA关注的人

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