自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

warybee

诗和远方...

  • 博客(91)
  • 收藏
  • 关注

原创 SQLServer和Oracle复制表结构及数据

SqlServer目标表存在INSERT INTO 目标表 SELECT * FROM 原表;目标表不存在SELECT * INTO 目标表 FROM 原表;Oracle目标表存在INSERT INTO 目标表 SELECT * FROM 原表;目标表不存在CREATE TABLE 目标表 AS SELECT * FROM 原表;...

2021-07-27 11:37:46 190

原创 SqlServer 复制表结构及数据

目标表存在INSERT INTO 目标表 SELECT * FROM 原表;目标表不存在SELECT * INTO 目标表 FROM 原表;

2021-07-05 18:15:51 568

原创 SQL Server 只有mdf文件没有ldf文件如何附加

执行如下语句CREATE DATABASE AdventureWorks2012 ON (FILENAME = N'C:\ProgramData\Homefront\Database\test.mdf') FOR ATTACH_REBUILD_LOG GO

2021-06-25 16:05:20 1579 1

原创 数据结构与算法(12)基数排序算法

1、基数排序介绍基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾 名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序(Radix Sort)是桶排序的扩展基数排序是使用空间换时间的经典算法基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同

2021-02-22 17:14:11 275

原创 Spring bean构建和依赖注入的方式

bean构建的4种方式1、基于className<bean class="com.warybee.spring.HelloSpring"></bean>2、基于构造方法<bean class="com.warybee.spring.HelloSpring" id="helloSpring"> <constructor-arg name="name" value="123"/></bean>3、静态工厂方法 &lt

2020-12-25 16:10:56 286

原创 数据结构与算法系列(9)希尔排序算法

排序原理希尔排序(Shellsort),也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位希尔排序是把记录按下标的一定增量分组, 对每组使用直接插入排序算法排序; 随着增量逐渐减少, 每组包含的关键词越来越多, 当增量减至 1 时, 整个文件恰被分成一组, 算法便终止。我们来看下希尔排序的基本步骤,在

2020-12-24 20:31:06 220 1

原创 Java CountDownLatch介绍

本文目录1、CountDownLatch介绍2、CountDownLatch主要方法1、CountDownLatch介绍CountDownLatch(同步工具类)允许一个或多个线程等待其他线程完成操作。在使用CountDownLatch 时,需要指定一个整数值,此值是线程将要等待的操作数。当某个线程为了要执行这些操作而等待时,需要调用 await 方法。await 方法让线程进入休眠状态直到所有等待的操作完成为止。当等待的某个操作执行完成,它使用 countDown 方法来减少 CountDownLa

2020-12-16 16:23:31 395

原创 数据结构与算法系列(5)数据结构之栈详解

本文目录1、栈介绍2、基于数组实现出栈、入栈逻辑1、栈介绍栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端, 为变化的一端, 称为栈顶(Top), 另一端为固定的一端, 称为栈底(Bottom)。下图是出栈和入栈逻辑示意图:2、基于数组实现出栈、入栈逻辑以下代码是基于数组,使用java语言,实现出栈、入栈逻辑。class ArrayStack{

2020-12-15 13:48:20 271

原创 数据结构与算法系列(4)数据结构之双向链表详解

数据结构之双向链表详解上一篇单向链表1、 双向链表介绍2、双向链表增删改思路2.1 在链表的最后添加节点2.3 将节点插入到指定的位置2.3 删除节点2.4、节点更新3、代码实现上一篇单向链表1、 双向链表介绍上一节介绍了单向链表,理解了单向链表,双向链表就简单对了。双向链表每个节点有两个连接:一个指向前一个节点,(当此“连接”为第一个“连接”时,指向空值或者空列表);而另一个指向下一个节点。下图是一个带有头节点的双向链表逻辑示意图:提示:头结点是为了操作的统一与方便而设立的,放在第一个元素结

2020-12-14 21:14:31 255

原创 数据结构与算法系列(3)数据结构之单向链表详解

数据结构之单向链表详解1、什么是链表2、单向链表增删改查思路2.1、在链表的最后添加节点2.2、将节点插入到指定的位置2.3、节点删除2.4、节点更新3、代码实现1、什么是链表链表是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必按照顺序存储数据,链表在插入的时候,比顺序存储结构的数组快得多。相比数组(顺序存储结构),链表(链式存储结构)可以充分利用计算机内存空间,实现灵活的内存动态管理。下图是一个单链表示意图,通过下图能更好的理解上面的一

2020-12-09 14:37:13 176

原创 数据结构与算法系列(2)数据结构之队列详解

1、概述队列(Queue)是一种常用的数据结构,队列(Queue)是一个有序列表,可以用数组或是链表来实现。队列(Queue)遵循先入先出的原则。即:先存入队列的数据,要先取出,后存入的要后取出。队列只允许在后端(tail)进行插入操作,在前端(head)进行删除操作。2、使用数组实现队列通过下面的动态图片...

2020-12-08 21:29:51 242

原创 数据结构与算法系列(1)稀疏数组详解

数据结构(1)稀疏数组

2020-12-07 21:31:59 684

原创 java itext html转PDF解决中文无法显示以及base64图片处理

引入POM

2020-12-03 15:54:41 8008 2

原创 如何处理ASP.NET MVC5 返回JsonResult DateTime类型格式化问题

1、问题ASP.NET MVC在返回JSON对象的时候,DateTime类型默认返回的是:/Date("xxxxxxxxxxxx")/。2、解决使用Newtonsoft.Json 日期进行格式化,首先在项目中安装Newtonsoft.Json 。2.1、自定义一个JsonResult的子类重写JsonResult的ExecuteResult方法using Newtonsoft.Json;using Newtonsoft.Json.Converters;using System;using

2020-06-24 16:42:49 1686 1

原创 Linux CentOS7二进制方式安装Mysql5.7

1 、准备安装软件1.1、下载mysql1.2、把下载的mysql上传到服务器并解压笔者这里把下载的文件上传到了 /usr/software 目录#解压安装包[root@iZ2zec74ta983l9lm1uu3dZ software]# tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz #创建mysql二进制文件存放目录[root@iZ2zec74ta983l9lm1uu3dZ software]# mkdir /applicat

2020-06-11 22:02:41 838

原创 spring 事务的传播机制类型

REQUIRED(默认传播机制,支持当前事务)如果当前没有事务,就新建一个事务,如果已经存在一个事务中,就加入到这个事务中。场景serviceA 无事务,serviceB 事务传播机制类型REQUIRED,serviceA调用serviceB,如果serviceB异常则serviceA正常提交,serviceB回滚serviceA 事务传播机制类型REQUIRED,serviceB 无事...

2020-01-19 14:51:11 452

原创 设计模式(一)详解单例设计模式

目录1、单例模式介绍2、饿汉式单例模式2.1、静态常量方式2.1.1、代码实现2.1.2、优缺点2.2、静态代码块方式2.2.1、代码实现2.2.2、优缺点3、懒汉式单例模式3.1、线程不安全方式3.1.1、代码实现3.1.2、优缺点3.2、synchronized 同步方法3.2.1、代码实现3.2.2、优缺点3.3、synchronized 同步代码块3.3.1、代码实现3.3.2、优缺点4、...

2020-01-08 15:03:30 212

原创 centOS7源码编译安装Nginx

目录1、下载Nginx2、安装编译环境3、编译源码3、编译安装4、常用命令1、下载Nginx在Nginx官网http://nginx.org/en/download.html选择需要的Nginx版本,然后复制地址进行下载wget http://nginx.org/download/nginx-1.16.1.tar.gz2、安装编译环境安装C/C++环境yum install gcc...

2020-01-02 18:33:57 534

原创 解决github下载/克隆速度太慢问题

查询地址使用这个网站https://www.ipaddress.com/ 查询github.com和github.global.ssl.fastly.net 对应的IP地址修改hostswindows的hosts在C:\Windows\System32\drivers\etc\hosts在hosts文件中添加如下配置PS:将IP地址修改为上一步查询到的IP192.30.253.113 ...

2020-01-02 15:30:12 3245

原创 快速入门MongoDB聚合查询

目录1、查询语法2、常见步骤(Stage)操作符3、常见步骤(Stage)中的运算符3.1、$match 过滤操作符3.2、$group 分组操作符3.3、$project 投影操作符3、查询示例1、查询语法MongoDB聚合运算过程称为管道(PipeLine),由多个步骤(Stage)组成,具体过程可理解为下图:管道接受原始文档每个步骤对文档进行一系列的运算结果文档输出给下一个步骤...

2020-01-02 14:36:17 421

原创 一看就懂,MongoDB极速入门

1、插入操作2、查询操作3、更新操作4、删除操作

2019-12-31 14:18:04 769

原创 centos7使用yum方式安装mongodb4.2

1、配置yum源在/etc/yum.repos.d/ 目录下 创建 mongodb-org-4.2.repo 文件vim mongodb-org-4.2.repo添加如下yum源[mongodb-org-4.2]name=MongoDB Repositorybaseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb...

2019-12-30 16:20:19 1126

原创 二分查找(Binary Search)算法

本文目录1、实现原理2、代码实现3、二分查找常见的变体3.1、查找第一个值等于给定值的元素3.2、查找最后一个值等于给定元素3.3、查找最后一个大于等于给定值的元素3.4、查找最后一个小于于等于给定值的元素4、二分查找算法的局限性1、实现原理二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。如下是二...

2019-12-23 18:49:58 521

原创 数据结构与算法系列(10)快速排序算法详解

如果要排序数组(`int[p--r]`)中下标从 p 到 r 之间的一组数据,我们选择 p 到 r 之间的任意一个数据作为 pivot(分区点),遍历 `p 到 r` 之间的数据,**将小于 `pivot` 的放到左边**,**将大于 `pivot` 的放到右边**,`将 pivot 放到中间`。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的,中间是 pivot,后面的 q+1 到 r 之间是大于 `pivot` 的。然后再使用递归,排

2019-12-08 19:08:58 315

原创 数据结构与算法(11)归并排序算法

1、排序原理归并排序使用的是分治思想(Divide and Conquer),分治,顾名思义,就是分而治之,是将一个大问题分解成小的子问题来解决。小的子问题解决了,大问题也就解决了。归并排序的核心思想是:如果要排序一个数组,先把数组从中间分成前后两部分,然后再分解,直到每个子序对中只剩一个元素,最后通过递归,层层合并。2、代码实现public static int[] mergeSort...

2019-12-08 11:24:25 266

原创 数据结构与算法系列(7)选择排序算法

1、排序原理选择排序算法的实现思路类似插入排序,也分已排序区间和未排序区间。选择排序每次会从未排序区间中找到最小(大)的元素,将其放到已排序区间的末尾。通过一张动态图,来直观感受一下,要排序的数组为:[4,5,6,1,3,2],正序排序伪代码实现:循环(元素个数-1)次 把第一个没有排序过的元素设置为最小值 循环(每个没有排序过的元素) 如果元素 < 现在的最...

2019-12-06 21:42:32 182

原创 数据结构与算法系列(8)插入排序算法

1、排序原理插入排序是将数组中的数据分为两个区间,已排序区间和未排序区间,其中已排序区间初始只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。重复这个过程,直到未排序区间中元素为空,算法结束。通过一张动态图,来直观感受一下,要排序的数组为:[4,5,6,1,3,2],正序排序1.1、排序过程详解...

2019-12-06 20:45:50 303

原创 数据结构与算法系列(6)冒泡排序算法

1、冒泡排序原理冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。如果我们要对一组数据 4,5,6,3,2,1从小到到大进行排序,第一次冒泡操作的详细过程就是这样:4和5比较,4小于5,不进行位置交换,结果:[4,5,6,3,2...

2019-12-06 15:15:03 1324

原创 RabbitMQ系列教程(十四)Spring Boot整合RabbitMQ

本文目录1、构建消息生产者2、构建消息消费者3、消息发送与监听3.1、消息生产者3.2、消息消费者4、Message 内容的JSON序列化与反序列化4.1、消费者MessageConverter配置4.2、生产者MessageConverter配置1、构建消息生产者创建一个Spring Boot消息生产者(mqproducer)项目,在POM文件中引入依赖<parent> ...

2019-12-01 21:49:50 1206

原创 RabbitMQ系列教程(十三)Spring AMQP API详解

Spring AMQP是基于Spring的核心概念,对RabbitMQ底层API的封装。Spring AMQP为发送消息和接收消息提供了一个高级抽象的 “模板”(RabbitAdmin、RabbitTemplate、SimpleMessageListenerContainer、声明性配置等)。

2019-11-27 14:35:40 2161

原创 Java常见面试题(二)Java虚拟机(JVM)相关,长期更新中....

1、谈谈 JVM 内存区域的划分?堆(Heap),它是 Java 内存管理的核心区域,是线程共享的一块内存区域,用来放置 Java 对象实例,几乎所有创建的 Java 对象实例都是被直接分配在堆上。堆被所有的线程共享,在虚拟机启动时,我们指定的“Xmx”之类参数就是用来指定最大堆空间等指标。方法区(Method Area)。这也是所有线程共享的一块内存区域,用于存储所谓的元(Meta)数据,...

2019-11-26 15:09:50 671

原创 Java常见面试题(一)多线程相关

1、一个线程两次调用 start() 方法会出现什么情况?谈谈线程的生命周期。Java 的线程是不允许启动两次的,第二次调用必然会抛出 IllegalThreadStateException,这是一种运行时异常,多次调用 start 被认为是编程错误。在第二次调用 start() 方法的时候,线程可能处于终止或者其他(非 NEW)状态,但是不论如何,都是不可以再次启动的。线程生命周期...

2019-11-26 14:00:19 357

原创 RabbitMQ系列教程(十二)RabbitMQ死信队列(Dead Letter Exchanges)

在死信队列(Dead Letter Exchanges)当消息在一个队列中变为死信后,它被重新发送到另一个Exchange。在什么情况下会出现死信消息未被签收,在消费端使用了 basic.reject 或 basic.nack ,并且requeue设置为false消息过期(TTL)消息队列达到了最大长度实际应用当RabbitMQ出现死信,可能会导致业务逻辑错误,比如下订单后修改库...

2019-11-20 17:52:11 2065

原创 RabbitMQ系列教程(十一)RabbitMQ队列/消息的生存时间(Time-To-Live)

概述RabbitMQ支持队列的过期时间设置,从消息入队列开始,只要超过了队列的超时时间配置,消息就会被自动清除。同时RabbitMQ也支持设置消息的生存时间,在发送消息时通过headers参数可以设置。设置队列的生存时间(TTL)在消费端声明队列时,指定x-message-ttl参数,设置生存时间Map<String, Object> args = new HashMap&lt...

2019-11-20 17:21:05 1578 1

原创 RabbitMQ系列教程(十)ACK确认机制保障消费端消息的可靠性

概述在实际项目中如果业务代码出现BUG,消费端进行消费的时候,我们可以记录错误日志,然后在消费端进行消息补偿。如果出现服务器宕机问题,那就需要手工ACK,然后在生产端进行消息补偿。生产端消息补偿可以使用RabbitMQ的confirm机制。ACK机制与消费端消息补偿机制把channel.basicConsume(...)方法的autoAck参数改为falsechannel.basi...

2019-11-20 16:48:31 2091

原创 RabbitMQ系列教程(九)RabbitMQ消费端限流

概述如果RabbitMQ服务器上有成千上万条未处理的消息,如果我们这时我们运行消费端,一瞬间就会有巨量的消息推送过来,这个时候接收者因为流量的剧增,超过了自己系统本身所能处理的最大峰值,如果没有对消息做限流措施,接收服务器可能就会内存溢出,造成服务器不可用。RabbitMQ限流机制RabbitMQ提供了QOS限流功能,在非自动确认消息的前提下,如果有一定数目的未被确认前,不消费新的消息。在...

2019-11-20 16:01:56 809

原创 RabbitMQ系列教程(八)RabbitMQ中ReturnListener的使用

概述ReturnListener用于处理一些不可路由的消息(比如因失误把routeKey或交换机名称写错)。开启Return消息机制basicPublish(...) 方法的参数mandatory 设置为true,当发送消息不可达时,会执行ReturnListener,如果为false则会删除该消息添加监听事件 channel.addReturnListener代码实现生产者...

2019-11-20 11:44:07 1493

原创 RabbitMQ系列教程(七)Confirm消息确认机制保障生产端消息的可靠性

概述消息确认是指当生成者发送消息后,如果Server接收到消息,则会给生产者一个应答。生产者接收应答,用来确认该消息是否正常发送到Server。在实际项目中,可以利用这一机制保障消息的可靠性投递,如果消息未发送成功,可以在监听事件中记录日志、重新发送消息等操作。开启Confirm消息确认机制在生产者的channel上开启确认机制: channel.confirmSelect();在c...

2019-11-20 11:27:33 4395

原创 RabbitMQ四种交换机(Exchange)类型

RabbitMQ常用的交换器类型有: fanout 、 direct 、 topic 、 headers 四种。

2019-11-18 18:06:28 750

原创 RabbitMQ系列教程(六)RabbitMQ Exchange类型之headers Exchange

headers Exchange介绍headers Exchange与Direct、topic、fanout不同,它时通过匹配AMQP消息的header而非路由键。headers Exchange与Direct Exchange类似,性能方面比后者查很多,所以在实际项目中用的很少,通过一张图来直观感受一下其工作流程Java代码实现生产者public static void main...

2019-11-18 17:52:20 3191 1

空空如也

空空如也

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

TA关注的人

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