自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MongoDB事务最大限制大小

MongoDB事务最大限制大小记录一次MongoDB的事务处理事件原因是否发生了写冲突?确定是事务异常?对比两侧环境差异为啥我一个事务操作的大小超过了16M?记录一次MongoDB的事务处理事件原因MongoDB在4.0开始引进事务,因业务的某个场景需要用到MongoDB的事务操作,但在某次线上的某一条数据在修改时一直报`org.springframework.data.mongodb.UncategorizedMongoDbException: Command failed with error 1

2021-08-19 13:51:40 1969 1

原创 设计一个具有获取最小值(getMin)方法的栈

一、题目描述实现一个特殊的栈结构,该栈在具有一般栈的结构的基础上还具有获取栈最小元素的功能。二、题目要求1.栈的pop、push、getMin操作的时间复杂度均为O(1);2.设计特殊栈的时候可以使用现成的栈作为工具去完成。三、题目解析题目要求提醒我们可以使用现成的栈的数据结构,其实也就是告诉我们要使用其作为工具去构建我们的特殊的栈,因为其getMin操作是O(1),因此告诉我们其操作肯定不是在自己的栈里瞎折腾,因此我们需要两个栈,一个用来存储基本数据,另一个用来存储getMin操作

2020-05-17 15:27:44 1150

原创 使用记忆搜索方法优化暴力递归(通解)

题目:给定一个数组arr,arr中所有的值均为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有几种方法?一、暴力搜索方法一个案例:arr={5,10,25,1} aim = 1000解法思路:1.先用0个5,让[10,25,1]组下剩下的1000,最终的方法数记为 res12.用一个5,让[10,25,1]组下剩下的9...

2019-05-22 17:06:00 864

原创 约瑟夫环基本和进阶解法

问题抽象:其实就是一个环形单链表问题输入:一个头节点和报数的值m返回:最后生存下来的节点自己成环进阶:如果想在事件复杂度为O(N)的条件下解法/public class JosephusKill {/普通解法:1.如果链表为空或链表节点数为1或m的值小于1 就直接返回头节点2.环形链表中不断循环让每个节点不断的进行报数3.当报数为m删...

2018-12-06 14:28:07 1034

原创 如何删除ceph的一个pool

其实执行代码: ceph osd pool delete ecpool ecpool –yes-i-really-really-mean-it 就可以完成删除,但是此时有时候会报错: Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to tru...

2018-09-09 14:41:22 14999

原创 SpringBoot的优点

一、什么是SpringBoot在使用传统的Spring去做Java EE(Java Enterprise Edition)开发中,大量的 XML 文件存在于项目之中,导致JavaEE项目变得慢慢笨重起来,,繁琐的配置和整合第三方框架的配置,导致了开发和部署效率的降低。Spring Boot 并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring ...

2018-07-21 10:10:36 144977 18

原创 求斐波那契数列的三种方法

什么是斐波那契数列,1,1,2,3,5,8,13...这样一个数列就是斐波那契数列,求第n项的值。一、经典求法观察数列可得,除了第一项和第二项,所有的数列的值都是前一项和前一项的前一项的加和,转换成函数也就是f(n) = f(n-1) + f(n-2)public static int f1(int n) { if(n < 1) { return 0;...

2018-07-05 21:49:00 136090 15

原创 视图、存储过程和函数以及触发器

一、视图1.视图的定义视图是一种虚拟存在的表,它本身在数据库中并不存在,而是在我们出于某种目的想要去使用视图的时候,使用我们数据库中已经存在的表的行和列数据来自定义的一种动态生成的,便于检索的安全的数据独立的一种虚拟表。2.优点①简单。视图是一种已经经过过滤筛选之后的符合条件的结果集,因此,使用视图的用户不需要关心对应表的表结构、关联条件和筛选条件。②安全。使用视图的用户只能对视图相关的表的列进行...

2018-07-03 09:44:06 2109

原创 朴素模式匹配与KMP模式匹配算法

一、朴素模式匹配朴素模式匹配算法就是遍历主串,然后把待匹配字符串与子串进行比对,先把待匹配子串的第一个字母与主串进行匹配,若匹配成功,则两串的坐标依次 ++,匹配不成功时,主串坐标返回到开始匹配时的坐标,待匹配串坐标清零,若待匹配坐标等于待匹配子串长度,则证明匹配成功, 返回匹配完毕主串的第一个坐标,否则返回-1假设主串的长度为N,待匹配串的长度为M,因为需要遍历主串,每次匹配的长度都小于等于M,...

2018-07-02 10:15:42 4550 1

原创 进程池和线程池

一、进程池进程池中的所有子进程都运行着相同的代码,并具有相同的属性,比如优先级、 PGID 等。当有新的任务来到时,主进程将通过某种方式选择进程池中的某一个子进程来为之服务。相比于动态创建子进程,选择一个已经存在的子进程的代价显得小得多。至于主进程选择哪个子进程来为新任务服务,则有两种方法:1)主进程使用某种算法来主动选择子进程。最简单、最常用的算法是随机算法和 Round Robin (轮流算法...

2018-07-01 13:59:50 1571

原创 一句话记忆线程安全的集合类

一句话简单记忆线程安全的集合类: 喂!SHE!  喂是指  vector,S是指 stack, H是指    hashtable,E是指:Eenumeration

2018-06-27 18:49:54 273

原创 图的广度与深度优先遍历(Java)

一、图的广度(宽度)优先遍历定义:其实就是离源节点近的节点先输出,远的节点后输出。图的广度优先遍历是依靠队列来实现的。import java.util.HashSet;import java.util.LinkedList;import java.util.Queue;/** * 图的广度优先遍历(BFS): * 是使用队列这个数据结构来完成的 * 逻辑实现:我们先构建一个队列,先把源节点进入队列...

2018-06-19 18:50:47 3595 1

原创 图的代码实现(Java)

一、图的分类有向图和无向图二、图的表示方法邻接表法和邻接矩阵法还有边集数组法①邻接表法:就是对于每个节点记录到另外一个节点的信息以及权重②邻接矩阵法;就是用一个矩阵来记录各个节点之间的连接情况以及权重,用无穷来表示不可达③边集数组:边集数组是由两个一维数组构成的。一个是存储顶点的信息,另一个是存储边的信息,这个边数组是由每个数据元素的起始点坐标、终点坐标以及权重组成的。边集数组有一个特点,就是要查...

2018-06-19 18:47:03 2615

原创 二分查找的递归与非递归实现

二分查找是一个非常常用的查找方式,它的时间复杂度是O(log n)的,比顺序查找时间复杂度为O(n)要好的多,也非常简单,下面我们来讨论一下它的逻辑实现:狭义上的二分要求我们的元素要先有序才行,广义上的二分我们以后有机会再讲,其实它的思想就是,每次取数组的一半,看中间的元素是否使我们所要寻找的,是,则返回该元素所在下标,不是,则看该元素与中间元素的大小比较,要是该元素比中间元素小,则寻找范围的上界...

2018-06-19 09:53:55 435

原创 树、森林、二叉树的相互转化

一、树、森林、二叉树的定义①树:树是n个节点的有限集。当n=0时称为空树,在任意一个非空树中满足以下两个条件:<1>有且仅有一个特定的节点为根节点<2>其余节点可分为m个互不相交的有限集,这个有限集本身又是一棵树,并成为这棵树的子树。②二叉树:二叉树的定义和树的定义类似,二叉树是一由n个节点构成的有限集合,该集合为空集的时候称为空二叉树,当n不等于0时,它是由一个根节点(n...

2018-06-14 09:22:16 673

原创 单链表、静态链表、循环链表、双向链表

一、单链表单链表的插入与删除:假设我们有个节点ai,指向他的指针为p,有个节点为e,指向他的指针为s①插入:想要把e插入到ai的后面,只需要把s的next指向p的next,再把p的next指向e就可以了②删除:想要删除ai+1节点,只需要把p的next指针指向p的next的next就可以了二、静态链表就是用数组来描述的链表就叫做静态链表。用游标来代替指针,通常第一个和最后一个元素是不存放数据的,数...

2018-06-13 22:02:37 1176

原创 解决哈希冲突的三种方法(拉链法、开放地址法、再哈希法)

上篇博客我们说到了,什么是哈希冲突,其实就是再采用哈希函数对输入域进行映射到哈希表的时候,因为哈希表的位桶的数目远小于输入域的关键字的个数,所以,对于输入域的关键字来说,很可能会产生这样一种情况,也就是,一个关键字会映射到同一个位桶中的情况,这种情况就就叫做哈希冲突,解决哈希冲突的有三种方案,一种叫做拉链法(也叫作链接法、链地址法,一个意思),另外三种分别为开发地址法和再散列法。一、拉链法...

2018-06-12 10:16:57 64050 18

原创 哈希函数和哈希表(散列表)

哈希表的简单介绍:哈希表是一种实现字典操作的一种有效的数据结构,它是普通数组概念的推广,由于对普通数组可以直接寻址,使得其的查找的时间复杂度是始终为O(1)的。一、哈希函数:若一个函数为哈希函数其必然具有以下四个性质:①输入域无穷但对用的输出域是相对有限的②若输入确定,输出一定确定③输出相同,但输入并不一定相同,也就是输出不同,输入可能相同:哈希碰撞④其具有离散性。也就是每个输出数...

2018-06-12 09:17:41 1076

原创 Centos7 wget安装教程

1.查看是否安装wget:rpm -qa|grep "wget"2.安装wget:yum -y install wget如下显示安装完毕

2018-06-09 14:59:42 6825 1

原创 并查集

一、什么是并查集并查集:其实也就是满足两种结构的一种数据结构这两个结构分别为:①isSameSet结构,这个结构是用来查找两个元素是否属于一个集合②还有一个是union结构,完成的就是把两个集合合并成一个大集合 可以用Set和List来实现,但是需要对集合进行遍历,代价较高二、并查集的逻辑实现并查集的逻辑实现:对于每一个集合的每一个元素都有一个node,这个node含有自己的value和指向上级的...

2018-06-04 20:01:11 7320

原创 URI和URL的区别比较与理解

一、URI<1>什么是URIURI,通一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行定位的。<2>URI的结构组成URI通常由三部分组成:①访问资源的命名机制;②存放资源的主机名;③资源自身的名称。<3>...

2018-06-04 10:12:03 282593 66

原创 九大排序的相关记忆口诀(持续更新)

不分析,不解释,一句口诀送给你:不稳定:快选堆希稳    定:插冒归基

2018-06-03 11:23:43 16358 4

原创 卡特兰数及其使用典型例子

卡特兰数是一个常用在计数情况中使用的一种特殊的数列,其原理如下:一、原理若令h(0)=1,h(1)=1,catalan数满足递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n&gt;=2)(可以写成通式:)例:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h...

2018-05-31 19:20:29 3764

原创 Linux分区

一、分区分区--》用一个分区表来记录分区的详细信息,但是分区表只能记录四个分区硬盘分区分三种:主分区(一般是装操作系统的分区)、扩展分区、逻辑分区主+扩展做多只能有四个(但是一个分区还可以有另外的分区表,一般在扩展分区中有逻辑分区--)二、Linux如何对硬盘分区进行管理在Linux操作系统中,任何东西在Linux看来都是文件,而文件分为字符文件(字符设备)和二进制文件(块设备)字符设备:键盘等 ...

2018-05-30 20:28:42 236

原创 二叉树的先序、中序、后序遍历

二叉树的遍历是数据结构与算法非常重要也是非常基础的内容,首先讲什么是二叉树的先序、中序以及后序遍历:                 先序、中序、后序遍历其实都是对于根节点来说的。                                                                                                       先序遍历:其实...

2018-05-25 19:49:45 853

原创 数据库的脏读、不可重复读、幻读以及四种隔离级别

数据库的脏读、不可重复读和幻读脏读:也就是当数据库的一个事务A正在使用一个数据但还没有提交,另外一个事务B也访问到了这个数据,还使用了这个数据,这就会导致事务B使用了事务A没有提交之前的数据。不可重复读:在一个事务A中多次操作一个数据,在这两次或多次访问这个数据的中间,事务B也操作此数据,并使其值发生了改变,这就导致同一个事务A在两次操作这个数据的时候值不一样,这就是不可重复读。幻读:是指事务不独...

2018-05-15 20:43:38 1186

原创 事务控制和锁定语句

  MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定。默认情况下,表锁和行锁都是自动获得的,不需要额外的命令。但是在有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性,这样就需要使用事务控制和锁定语句来完成。一、LOCK TABLE 和 UNLOCK TABLE...

2018-04-23 21:38:38 539 3

原创 SQL语言基础

一、SQL语言简介结构化查询语言二、分类分为DDL(数据定义语言)、DML(数据操纵语言)、DCL(数据控制语言)DDL:这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象,常用的关键字包括create、drop、alter等;DML:用于对数据库表数据的增删改查操作,常用的关键字为insert、delete、update、selectDCL:用于控制不同数据段直接访问的许可和访问级别的...

2018-04-23 11:04:06 302

原创 如何实现有三个线程a,b,c,这三个线程都有一个方法分别打印A、B、C,问怎么能实现依次打印ABC的功能

今天有家电面(具体哪家就不提了)问了这样的问题:如何实现有三个线程a,b,c,这三个线程都有一个方法分别打印A、B、C,问怎么能实现依次打印ABC的功能。当时想着使用优先级或者join方法(肯定不行,因为你定的优先级不太听话不会按照你定的去依次执行,join方法去抢占时间片也不好使),其实就是利用线程池去解决这个问题:思路:其实就是让三个线程依次运行,运用的是线程池来完成的,创建一个只有一个线程的...

2018-04-10 20:00:40 8244

原创 java集合类深度解析

一、为什么要使用集合类我们想要装一些元素,首先想到的是数组,但是数组有局限性,一是必须装相同类型的数据,二是其长度是不可变的,在很多场合上,比如员工管理,假设我们需要一个容器来存储员工的基本信息,因为一个公司的员工可能有辞职跳槽新进的等等,所以要是选择数组来装这组数据就会非常麻烦,所以,为了解决这个问题,我们引出了集合这种容器,因为集合是专门用来解决引用类型的数据,所以其并不能装八种基本数据类型,...

2018-04-04 11:02:27 1673

原创 利用队列来实现栈和利用栈来实现队列

一、如何只使用队列来实现栈结构因为队列的结构是先进后出,而栈的数据结构特点是先进先出,所以我们可以搞两个队列,当一个队列进入另外一个队列的时候,只剩下一个元素,留着返回,然后这个队列再进入原来哪个队列只剩下一个元素等着返回,循环使用这个逻辑,即可完成。 /* * 两个队列实现栈结构 */ public static class TwoQueuesStack { //data队列和he...

2018-04-02 18:55:36 364

原创 java中利用数组实现大小固定的栈和队列

我们都知道栈和队列这两种最基本的数据结构,他们的特点分别为---栈:先进后出 队列:先进先出。那么,在java中如何利用数组来实现这两种数据结构的呢?一、实现栈:就是用一个数组来实现栈这个数据结构/** * 因为所有的数据结构必然是要落地的,所以在Java中如何去吧栈和队列这两个数据结构表现出来呢 * 我们用的是数组来实现的 * @author zhmm * */ //用数组来实现栈这...

2018-04-02 18:47:51 1476

原创 全面解析注解

一、为什么要学习注解①因为注解现在非常流行,在很多的时候都被应用,特别是框架相关代码,我们第一步也就是拿到别人用注解写的代码做到能看懂②让编程更简洁,代码更加清晰③逼格更高...二、什么是注解注解是在jdk1.5之后被引入的,Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法。三、Java中的常见注解1.jdk自带的注解@Override @Deprecated @Suppvis...

2018-03-29 14:24:51 336 1

原创 桶排序(计数排序)原理以及java实现

原来我所介绍的排序都是基于比较的排序,例如快排、堆、归并等等,而桶排序不是基于比较的排序,而是一种基于的是数据状况的排序,桶排序其实是已知要排序的数据所在的区间,把该区间均匀分成n个桶,这n个桶包含要排序的数的所有结果,我们把相应的结果放到相应的桶里,然后再按次序把每个桶里面的数据倒到一个数组里,这个数据就有序了。很明显,他的时间复杂度是O(n)和空间复杂度是O(n),因为桶排序的桶(就是一种容器...

2018-03-28 10:47:59 702

原创 单例设计模式与其线程安全

一、单例设计模式的定义单例设计模式,顾名思义就是用来保证一个类里只有一个实例化对象,且这个对象的实例化是自己进行的,而且容易被外界访问。二、单例设计模式的使用场景因为在单例设计模式中,系统只有一个实例化对象,所以其常用于系统中只允许一个实例化对象存在的场合,如窗口管理器、打印缓冲池、文件系统等等。三、单例设计模式的分类单例设计模式根据其使用的方法分为懒汉、饿汉、双重校验锁、静态...

2018-03-26 20:21:45 290

原创 SpringMVC应用的开发步骤以及SpringMVC的执行流程

一、SpringMVC应用的开发步骤1.在web.xml文件中配置前端控制器DispatcherServlet来拦截用户请求。&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/...

2018-03-19 21:39:32 2692

原创 快速排序原理以及Java实现

为什么要学习快速排序:我们知道,希尔排序相当于直接插入排序的升级版,他们同属于插入排序类,堆排序是简单选择排序的升级,同属于选择排序,快速排序则是最慢排序冒泡排序的升级,同属于交换排序类,就是通过不短的比较和移动交换来实现排序的,只不过他的实现增大了记录比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动交换次数。对于一个包含...

2018-03-18 16:26:57 721

原创 递归思想详解以及归并排序(java实现)

为什么引出归并算法呢,我们知道堆排序是利用完全二叉树的深度log2 n 向下取整再加一的特性,所以效率比较高。但是堆结构的设计相对比较复杂,但是又因为利用二叉树来进行排序的算法效率一般都比较高,所以我们引出利用二叉树特性的归并排序来进行数据的排序。什么是归并排序:归并排序就是利用归并的思想把一组数据,首先分解成n个长度为一的序列,其每个序列都是有序的,然后两两归并,得到n/2向上取整个长度为2或者...

2018-03-15 21:44:32 724 1

原创 选择排序和插入排序(Java实现)

1.选择排序选择排序就是进行n-1轮比较 每轮比较至多交换一次 先设最小值为本轮比较初始值 然后比这个值小的就变为最小值,最后那个肯定是本轮最小值的坐标,然后看初始最小值和最后的最小值得坐标是否相同,若不同则交换位置,相同则不交换代码如下:int i,j,min;for(i = 0;i&lt;a.length-1;i++){ min = i; for(j=i+1;j&lt;a.length-i-1...

2018-03-14 20:01:33 863 1

原创 冒泡算法以及其改良(java实现)

冒泡排序是一种非常简单的排序算法,核心思想就是相邻的两个记录进行两两比较,如果不满足排序条件就交换,满足就不交换,例子:给定一个数组aint i,j;for(i=0;i&lt;a.length-1;i++){ //要注意的是-i是因为最下面的i个数已经排好了没必要再排了 for(j=0;j&lt;a.length-i-1;j++){ //注意判断条件,这个与我们想要的结果相反 if(a[j]&...

2018-03-14 19:58:56 203

空空如也

空空如也

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

TA关注的人

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