自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (7)
  • 问答 (1)
  • 收藏
  • 关注

原创 java 通过数据库映射生成thrift实体类

最近由于公司使用了thrift框架去做rpc,在生成thrift的实体类的时候,发现一个字段一个字段的去写非常麻烦和繁琐,在研究了thrift的代码生成方式之后打算通过数据库映射.thrift文件再通过执行thrift命令的方式来生成thrift实体类。下面是详细代码:ThriftGenerate.javapackage generate;import oracle.jdbc.O...

2018-08-06 18:32:48 1026

原创 删除当前目录及其子目录下的重复文件

言归正传,直接看代码。

2023-12-12 09:06:43 79

转载 【无标题】

springboot quartz

2022-01-20 21:30:43 98

原创 JAVA读取文件指定的任意一行数据

通过RandomAccessFile读取文件指定的任意一行数据直接看代码/** * @Description 读取文件中指定的任意一行数据 * @Date 2020/11/9 13:31 * @Version 1.0 */public class RandomReadLine { public static final String FILE_NAME = "D:\\file\\test.dat"; /** 记录每一行开头的指针位置 */ public stati

2020-11-09 14:36:25 3113

原创 原型模式(创建型)

定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式会要求对象实现一个可以“克隆”自身的接口。这样就可以通过拷贝或者克隆一个实例对象本身来创建一个新的实例。如果把这个方法定义在接口上,看起来就像是通过接口创建了新的接口对象。结构说明Prototype:声明一个克隆自身的接口,用来约束想要克隆自身的类,要求它们都要实现这里定义的克隆方法。ConcretePrototype:实现Prototype接口的类,这些类真正实现了克隆自身的功能。Client:使用原型的客户端,首先

2020-10-20 15:33:04 138

原创 单例模式

单例模式是一种常见的设计模式,其主要特点为1、单例类智能有一个实例2、单例类必须自己创建自己的唯一实例3、单例类必须给其他对象提供这一实例单例模式确保某个类只有一个实例,并且自行实例化并向整个系统提供整个实例。单例模式主要有懒汉式和饿汉式懒汉式在第一次调用的时候,实例化自己public class Singleton { private Singleton(){ } private static Singleton singleton = null;

2020-10-19 17:09:41 81

原创 抽象工厂模式

概念抽象工厂模式的功能抽象工厂的功能是为一系列相关对象或相互依赖的对象创建一个接口。一定要注意,这个接口内的方法不是任意堆砌的,而是一系列相关或相互依赖的方法。从某种意义上讲,抽象工厂其实是一个产品系列,或者产品族。实现成接口AbstractFactory在java中通常实现成接口。当然如果需要为这个产品族提供公共的功能,可以可以将AbstractFactory实现成为抽象类,不过一般不这么做。使用工厂方法AbstractFactory定义了创建产品所需要的接口,具体的实现是在实现类里面,通常在

2020-10-19 17:03:00 69

原创 工厂模式

工厂模式工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、工厂方法模式,以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需要依赖工厂即可得到自己想要的产品。对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关系产品的接口就可以了,至于具体实现,调用者根本无需关心。即使变更了具体的实现,对调用者

2020-10-19 17:02:19 99

原创 设计模式原则

设计模式是一套被反复使用、多数人只晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解、保证代码的可靠性。毫无疑问,设计模式于己于人于系统都是多赢的。设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦结构一样。单一职责原则单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。其定义如下:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因单一职责原则告诉我们:在软件系统中,一个类(大到模

2020-10-19 17:00:08 97

原创 建造者模式 / 生成器模式(创建型)

定义将一个复制对象的构建与表示分离,使得同样的构建过程可以创建不同的表示生成器者模式解决问题的思路要实现相同的构建过程可以创建不同的表示,那么一个自然的思路就是先把构建过程抽象独立出来,在建造者模式中称其为指导者,由他来指导装配过程,但是不负责每步具体实现。当然,光有指导者是不够的,必须要有能具体实现每步的对象,在生成器模式中称这些具体的实现对象为生成器。这样一来指导者就可以重用构建过程,而生成器是可以被切换的具体实现。生成器模式角色说明Builder:生成器接口,定义创建一个Product对象

2020-10-19 16:45:12 120

原创 docker下安装nexus3,并通过maven打包springboot项目为docker镜像上传到nexus3

一、安装nexus3 docker pull sonatype/nexus3二、使用nexus3镜像启动一个容器 docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus3 -v /home/nexus/nexus-data:/nexus-data --restart=alw...

2020-03-08 16:53:56 1353

原创 centos下安装docker步骤

安装软件源(阿里镜像) yum-config-manager--add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker 依赖包 yum install -y yum-utils yum install -y device-mapper-p...

2020-03-07 17:26:21 306

原创 将sringboot打包上传到docker

开启docker远程调用 vim /usr/lib/systemd/system/docker.service 在 ExecStart 追加:-H tcp://0.0.0.0:2375 如:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.so...

2020-03-07 10:57:49 112

原创 centos下安装mysql

版本信息:centos:7.2 mysql:8.0.13下载mysql安装包,这里下载的是mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz 创建software 目录: mkdir -p /usr/local/software 将mysql安装包上传到/usr/local/software目录下 解压安装包: 首先将.xz解压为tart::...

2020-02-23 13:10:18 141

原创 windows 下安装WMware 及CentOs

虚拟机安装教程下载VMware软件安装包:https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/14_02.下载完成之后双击引用程序安装包进行安装3.进入安装向导点击下一步4.勾选接受许可协议中的条款,然后点击下一步5.选择...

2020-02-18 14:14:10 189

原创 循环队列的实现

循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。/** * 循环队列 */public class MyC...

2019-09-29 16:06:40 425

转载 docker 下安装rabbitmq

这里注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面。获查询镜像 docker search rabbitmq:management可以看到如下结果:[root@localhost ~]# docker search rabbitmq:managementINDEX NAME ...

2019-05-04 21:51:12 291

转载 代理模式

Java的三种代理模式转自博客园:https://www.cnblogs.com/cenyu/p/6289209.html1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如...

2019-04-28 21:55:41 230

转载 【转载】缓存穿透,缓存击穿,缓存雪崩解决方案分析

前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有...

2019-04-26 18:35:04 286

原创 Spring事务特性

事务属性的种类:传播行为、隔离级别、只读和事务超时a)传播行为定义了被调用方法的事务边界。 传播行为 意义 PROPERGATION_MANDATORY 表示方法必须运行在一个事务中,如果当前事务不存在,就抛出异常 PROPAGATION_NESTED ...

2019-04-22 17:05:49 115

转载 js Array 交集 并集 差集 去重

///集合取交集 Array.intersect = function () { var result = new Array(); var obj = {}; for (var i = 0; i < arguments.length; i++) { for (var j...

2019-04-22 13:40:17 120

转载 js中apply()和call()方法详解

转自简书:https://www.jianshu.com/p/80ea0d1c04f8定义 apply()方法: Function.apply(obj,args) obj:这个对象将代替Function类里this对象 args:这个是数组,它将作为参数传给Function(args-->arguments) call()方法: Function.c...

2019-04-20 13:19:28 133

转载 Jedis操作redis常用方法

转自:https://www.cnblogs.com/tengfly/p/9307373.html概述Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件,必须对Jedis熟悉才能写成漂亮的代码基本使用Jedis的基本使用非常简单,只需要创建Jedis对象的时候指定host,port, password即可。当然,Jedis对象又很多构造方...

2019-04-09 19:03:22 500 3

原创 八皇后问题(递归回溯求解)

该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果,如下是一种:本算法的思路是按行来规定皇后位置,第一行放置一个皇后,第二行放置一个皇后, 第N行也...

2019-04-08 15:25:17 394

原创 折半查找(二分查找)

折半查找又称为二分查找,其要求数据序列呈线性结构,也就是经过排序的。这般查找可以明显地提高查询效率。其算法的操作步骤如下:实现过程首先需要设定三个变量lownum、midnum、highnum,分别保存数组的起始、中间和结束的序号。接着进行如下判断:如果序号为midnum的数组元素的值与x相等,则表示查找到了数据,返回midnum。 如果x<a[midnum],则表示要查找的元...

2019-04-04 22:18:48 587

原创 排序算法概要

排序是将一组数据按照一定的规则进行排列的,一般按照递增或递减的顺序来进行排列。排序算法是一种最基本算法。排序虽然看似是一个很简单的问题,但是在实际的应用场合往往面临一些困难。这是因为实际应用中的数据量往往很庞大,这样算法的效率和排序的速度就是一个很大的问题,我们往往需要寻求一种高效的排序算法,因此便演变出了多种排序算法。 最基本的排序算法包括:交换排序、选择排序、...

2019-04-04 18:21:44 213

原创 归并排序

转自博客园:https://www.cnblogs.com/chengxiao/p/6194356.html基本思想  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。...

2019-04-04 18:05:43 218

原创 堆排序

堆排序是基于选择排序思想的,其利用堆结构和二叉树的一些性质来完成数据的排序。实现过程摘自:博客园https://www.cnblogs.com/chengxiao/p/6129630.html什么是堆?堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结...

2019-04-04 18:00:40 261

原创 快速排序

快速排序和冒泡排序算法类型,都是基于交换排序思想。快速排序对冒泡排序算法进行了改进,从而具有更高的执行效率实现过程快速排序通过多次比较和交换来实现排序,其排序流程如下首先设定一个分界值,通过该分界值将数组分成左右两部分 将大于等于分界值的数据集中到数组右边,小于分界值的数据集中到数组左边,此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。 然后,左边和右边...

2019-04-04 17:51:05 163

原创 Shell排序

Shell排序严格来说是基于插入排序思想,其又称为希尔排序或缩小增量排序,在对大量数据需要进行排序时,是不错的选择。实现过程将n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为一对,第2个数据和第n/2+2个数据为一对。。。 一次循环使每一个序列对排好序 然后再变为n/4个序列,再次排序 不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序在进行插入排序...

2019-04-04 17:34:00 185

原创 插入排序

插入排序通过对未排序的数据执行逐个插入至合适位置而完成排序工作。插入排序的思路比较简单,使用比较多实现过程首先对数组的前两个元素进行大小的比较 接着将第三数据与排序好的两个数据比较,将第三个数据插入到合适的位置 然后,将第四个元素插入到已排好序的前三个元素中 不断重复前面的过程,知道把最后一个数据插入到合适的位置插入排序在对N个数据进行排序时,无论是否有序,都需要进行N-1步的中间...

2019-04-04 17:17:35 117

原创 选择排序

选择排序是比较简单的排序算法,思路也比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。实现过程选择排序算法通过选择和交换来实现排序,其排序流程如下从原始数组中选取最小的1个数据,将其和位于数组起始位置的元素进行交换。 接着从剩下的n-1个元素中依次选择最小的元素,将其和位于数组第2个位置的元素进行交换。 然后不断的重复,知道最后两个数据交换完成。至此,便完成...

2019-04-04 17:08:59 98

原创 冒泡排序

冒泡排序是排序算法中最简单,最基本的一种。冒泡排序的思路是交换排序,通过相邻数据交换的来达到排序的目的。实现过程冒泡排序算法通过多次比较和交换来实现排序,其排序流程如下通过对数组中的各数据,依次比较相邻的两个元素的大小。 如果前面的数据大于后面的数据,则交换这两个元素。经过一轮的多次比较排序之后,就可以把最小的数据排好。 再用同样的方法把剩下的数据进行逐个比较,最后便可安装从小到达...

2019-04-04 16:58:20 98

转载 Centos 下安装git

在Linux下搭建Git服务器 正文环境:服务器 CentOS6.6 + git(version 1.7.1)客户端 Windows10 + git(version 2.8.4.windows.1) ① 安装 GitLinux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git服务器端:#yum install -y git安装完后,查看...

2018-12-10 10:55:40 120

原创 适配器模式(结构型)

适配器模式:将一个类的接口转换成客户客户希望的另一个接口。适配器模式使得原本由于接口不能兼容而不能在一起工作的那些类可以在一起工作适配器模式的主要功能是进行转换匹配,目的是复用已有的功能,而不是来实现新接口。也就是说,客户端需要的功能应该是已经实现好了的,不需要适配器模式来实现,适配器模式主要负责把不兼容的接口转换成客户端期望的样子就可以了。package pattern.adapter...

2018-11-22 11:03:38 263

原创 外观模式(结构型)

外观模式:为子系统中的一组接口提供一个一致的界面,外观模式(Facade)定义了一个高层接口,这个接口使得这一子系统更加容易使用package pattern.facade;public interface AModuleApi { public void testA();}----package pattern.facade;public class AModule...

2018-11-20 15:55:59 86

原创 简单工厂(创建型)

简单工厂:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类Api.classpackage pattern.simpleFactory;public interface Api { public void test();}ApiImpl.classpackage pattern.simpleFactory;p...

2018-11-20 10:47:44 105

原创 软件设计模式概述(摘自《研磨设计模式》)

设计模式概述:设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。具有如下特点:1、设计模式是解决某些问题的办法2、设计模式不是凭空想象出来的,是经验的积累和总结3、设计模式并不是一成不变的,而是在不断发展中4、设计模式并不是软件行业独有的,各行各业都有自己的设计模式设计模式的组成:模式名称:就是每个设计模式的名字,好记忆,...

2018-11-19 16:59:44 383

原创 计算一颗树的宽度

/** * 获取JSON树的宽度 * @param jsonObj * @returns {Number} */function getJSONWidth(jsonObj){ var children = jsonObj.children; if (children === undefined) { return 0; } else { ...

2018-11-14 15:27:53 684

原创 计算手机锁屏界面所有手势密码的组合

最近闲来无事,在网上翻看各种面试题,无意中发现了这道题,计算所有手势密码的组合可能,觉得挺有意思的,简单写了一下,与小伙伴们分享下。题目如下:以下是代码实现package test.gesture;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public clas...

2018-11-11 15:41:36 2763

shiro权限管理开发教程

Apache Shiro 是Java 的一个安全框架。目前,使用Apache Shiro 的人越来越多,因为它相 当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时 可能并不需要那么复杂的东西,所以使用小而简单的Shiro 就足够了。对于它俩到底哪个 好,这个不必纠结,能更简单的解决项目问题就好了。 本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用

2019-03-07

PL/SQL 详解

ORACLE 学习文档,总结,囊括常用过程,函数,游标,异常处理。。。,非常实用

2018-08-03

maven下添加oracle

java maven开发中在项目中添加oracle jdbc,使用本地jar包安装方式

2018-07-07

Lucene+Heritrix(搜索引擎开发)

Lucene+Heritrix(搜索引擎与信息检索),Lucene+Heritrix(搜索引擎与信息检索)

2018-07-01

docker入门到实践(清晰,非扫描版)

docker入门到实践非扫描版,基于最新的 Docker CE v18.X 特性进行讲解

2018-06-26

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

TA关注的人

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