![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
_G_T
小小码农
展开
-
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 · 3114 阅读 · 0 评论 -
原型模式(创建型)
定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式会要求对象实现一个可以“克隆”自身的接口。这样就可以通过拷贝或者克隆一个实例对象本身来创建一个新的实例。如果把这个方法定义在接口上,看起来就像是通过接口创建了新的接口对象。结构说明Prototype:声明一个克隆自身的接口,用来约束想要克隆自身的类,要求它们都要实现这里定义的克隆方法。ConcretePrototype:实现Prototype接口的类,这些类真正实现了克隆自身的功能。Client:使用原型的客户端,首先原创 2020-10-20 15:33:04 · 141 阅读 · 0 评论 -
单例模式
单例模式是一种常见的设计模式,其主要特点为1、单例类智能有一个实例2、单例类必须自己创建自己的唯一实例3、单例类必须给其他对象提供这一实例单例模式确保某个类只有一个实例,并且自行实例化并向整个系统提供整个实例。单例模式主要有懒汉式和饿汉式懒汉式在第一次调用的时候,实例化自己public class Singleton { private Singleton(){ } private static Singleton singleton = null;原创 2020-10-19 17:09:41 · 84 阅读 · 0 评论 -
抽象工厂模式
概念抽象工厂模式的功能抽象工厂的功能是为一系列相关对象或相互依赖的对象创建一个接口。一定要注意,这个接口内的方法不是任意堆砌的,而是一系列相关或相互依赖的方法。从某种意义上讲,抽象工厂其实是一个产品系列,或者产品族。实现成接口AbstractFactory在java中通常实现成接口。当然如果需要为这个产品族提供公共的功能,可以可以将AbstractFactory实现成为抽象类,不过一般不这么做。使用工厂方法AbstractFactory定义了创建产品所需要的接口,具体的实现是在实现类里面,通常在原创 2020-10-19 17:03:00 · 73 阅读 · 0 评论 -
工厂模式
工厂模式工厂模式根据抽象程度的不同分为三种:简单工厂模式(也叫静态工厂模式)、工厂方法模式,以及抽象工厂模式。工厂模式是编程中经常用到的一种模式。它的主要优点有:可以使代码结构清晰,有效地封装变化。在编程中,产品类的实例化有时候是比较复杂和多变的,通过工厂模式,将产品的实例化封装起来,使得调用者根本无需关心产品的实例化过程,只需要依赖工厂即可得到自己想要的产品。对调用者屏蔽具体的产品类。如果使用工厂模式,调用者只关系产品的接口就可以了,至于具体实现,调用者根本无需关心。即使变更了具体的实现,对调用者原创 2020-10-19 17:02:19 · 103 阅读 · 0 评论 -
设计模式原则
设计模式是一套被反复使用、多数人只晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解、保证代码的可靠性。毫无疑问,设计模式于己于人于系统都是多赢的。设计模式使代码编制真正工程化,设计模式是软件工程的基石脉络,如同大厦结构一样。单一职责原则单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。其定义如下:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因单一职责原则告诉我们:在软件系统中,一个类(大到模原创 2020-10-19 17:00:08 · 98 阅读 · 0 评论 -
建造者模式 / 生成器模式(创建型)
定义将一个复制对象的构建与表示分离,使得同样的构建过程可以创建不同的表示生成器者模式解决问题的思路要实现相同的构建过程可以创建不同的表示,那么一个自然的思路就是先把构建过程抽象独立出来,在建造者模式中称其为指导者,由他来指导装配过程,但是不负责每步具体实现。当然,光有指导者是不够的,必须要有能具体实现每步的对象,在生成器模式中称这些具体的实现对象为生成器。这样一来指导者就可以重用构建过程,而生成器是可以被切换的具体实现。生成器模式角色说明Builder:生成器接口,定义创建一个Product对象原创 2020-10-19 16:45:12 · 124 阅读 · 0 评论 -
八皇后问题(递归回溯求解)
该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果,如下是一种:本算法的思路是按行来规定皇后位置,第一行放置一个皇后,第二行放置一个皇后, 第N行也...原创 2019-04-08 15:25:17 · 397 阅读 · 0 评论 -
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 · 504 阅读 · 3 评论 -
【转载】缓存穿透,缓存击穿,缓存雪崩解决方案分析
前言设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。缓存穿透缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。解决方案有...转载 2019-04-26 18:35:04 · 289 阅读 · 0 评论 -
代理模式
Java的三种代理模式转自博客园:https://www.cnblogs.com/cenyu/p/6289209.html1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如...转载 2019-04-28 21:55:41 · 234 阅读 · 0 评论 -
循环队列的实现
循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。/** * 循环队列 */public class MyC...原创 2019-09-29 16:06:40 · 427 阅读 · 0 评论 -
适配器模式(结构型)
适配器模式:将一个类的接口转换成客户客户希望的另一个接口。适配器模式使得原本由于接口不能兼容而不能在一起工作的那些类可以在一起工作适配器模式的主要功能是进行转换匹配,目的是复用已有的功能,而不是来实现新接口。也就是说,客户端需要的功能应该是已经实现好了的,不需要适配器模式来实现,适配器模式主要负责把不兼容的接口转换成客户端期望的样子就可以了。package pattern.adapter...原创 2018-11-22 11:03:38 · 264 阅读 · 0 评论 -
计算一颗树的宽度
/** * 获取JSON树的宽度 * @param jsonObj * @returns {Number} */function getJSONWidth(jsonObj){ var children = jsonObj.children; if (children === undefined) { return 0; } else { ...原创 2018-11-14 15:27:53 · 686 阅读 · 0 评论 -
简单工厂(创建型)
简单工厂:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类Api.classpackage pattern.simpleFactory;public interface Api { public void test();}ApiImpl.classpackage pattern.simpleFactory;p...原创 2018-11-20 10:47:44 · 109 阅读 · 0 评论 -
软件设计模式概述(摘自《研磨设计模式》)
设计模式概述:设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。具有如下特点:1、设计模式是解决某些问题的办法2、设计模式不是凭空想象出来的,是经验的积累和总结3、设计模式并不是一成不变的,而是在不断发展中4、设计模式并不是软件行业独有的,各行各业都有自己的设计模式设计模式的组成:模式名称:就是每个设计模式的名字,好记忆,...原创 2018-11-19 16:59:44 · 388 阅读 · 0 评论 -
冒泡排序
冒泡排序是排序算法中最简单,最基本的一种。冒泡排序的思路是交换排序,通过相邻数据交换的来达到排序的目的。实现过程冒泡排序算法通过多次比较和交换来实现排序,其排序流程如下通过对数组中的各数据,依次比较相邻的两个元素的大小。 如果前面的数据大于后面的数据,则交换这两个元素。经过一轮的多次比较排序之后,就可以把最小的数据排好。 再用同样的方法把剩下的数据进行逐个比较,最后便可安装从小到达...原创 2019-04-04 16:58:20 · 103 阅读 · 0 评论 -
选择排序
选择排序是比较简单的排序算法,思路也比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。实现过程选择排序算法通过选择和交换来实现排序,其排序流程如下从原始数组中选取最小的1个数据,将其和位于数组起始位置的元素进行交换。 接着从剩下的n-1个元素中依次选择最小的元素,将其和位于数组第2个位置的元素进行交换。 然后不断的重复,知道最后两个数据交换完成。至此,便完成...原创 2019-04-04 17:08:59 · 104 阅读 · 0 评论 -
插入排序
插入排序通过对未排序的数据执行逐个插入至合适位置而完成排序工作。插入排序的思路比较简单,使用比较多实现过程首先对数组的前两个元素进行大小的比较 接着将第三数据与排序好的两个数据比较,将第三个数据插入到合适的位置 然后,将第四个元素插入到已排好序的前三个元素中 不断重复前面的过程,知道把最后一个数据插入到合适的位置插入排序在对N个数据进行排序时,无论是否有序,都需要进行N-1步的中间...原创 2019-04-04 17:17:35 · 121 阅读 · 0 评论 -
Shell排序
Shell排序严格来说是基于插入排序思想,其又称为希尔排序或缩小增量排序,在对大量数据需要进行排序时,是不错的选择。实现过程将n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为一对,第2个数据和第n/2+2个数据为一对。。。 一次循环使每一个序列对排好序 然后再变为n/4个序列,再次排序 不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序在进行插入排序...原创 2019-04-04 17:34:00 · 190 阅读 · 0 评论 -
快速排序
快速排序和冒泡排序算法类型,都是基于交换排序思想。快速排序对冒泡排序算法进行了改进,从而具有更高的执行效率实现过程快速排序通过多次比较和交换来实现排序,其排序流程如下首先设定一个分界值,通过该分界值将数组分成左右两部分 将大于等于分界值的数据集中到数组右边,小于分界值的数据集中到数组左边,此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。 然后,左边和右边...原创 2019-04-04 17:51:05 · 163 阅读 · 0 评论 -
堆排序
堆排序是基于选择排序思想的,其利用堆结构和二叉树的一些性质来完成数据的排序。实现过程摘自:博客园https://www.cnblogs.com/chengxiao/p/6129630.html什么是堆?堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结...原创 2019-04-04 18:00:40 · 264 阅读 · 0 评论 -
归并排序
转自博客园:https://www.cnblogs.com/chengxiao/p/6194356.html基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。...原创 2019-04-04 18:05:43 · 222 阅读 · 0 评论 -
排序算法概要
排序是将一组数据按照一定的规则进行排列的,一般按照递增或递减的顺序来进行排列。排序算法是一种最基本算法。排序虽然看似是一个很简单的问题,但是在实际的应用场合往往面临一些困难。这是因为实际应用中的数据量往往很庞大,这样算法的效率和排序的速度就是一个很大的问题,我们往往需要寻求一种高效的排序算法,因此便演变出了多种排序算法。 最基本的排序算法包括:交换排序、选择排序、...原创 2019-04-04 18:21:44 · 217 阅读 · 0 评论 -
折半查找(二分查找)
折半查找又称为二分查找,其要求数据序列呈线性结构,也就是经过排序的。这般查找可以明显地提高查询效率。其算法的操作步骤如下:实现过程首先需要设定三个变量lownum、midnum、highnum,分别保存数组的起始、中间和结束的序号。接着进行如下判断:如果序号为midnum的数组元素的值与x相等,则表示查找到了数据,返回midnum。 如果x<a[midnum],则表示要查找的元...原创 2019-04-04 22:18:48 · 594 阅读 · 0 评论 -
java 通过数据库映射生成thrift实体类
最近由于公司使用了thrift框架去做rpc,在生成thrift的实体类的时候,发现一个字段一个字段的去写非常麻烦和繁琐,在研究了thrift的代码生成方式之后打算通过数据库映射.thrift文件再通过执行thrift命令的方式来生成thrift实体类。下面是详细代码:ThriftGenerate.javapackage generate;import oracle.jdbc.O...原创 2018-08-06 18:32:48 · 1030 阅读 · 0 评论 -
外观模式(结构型)
外观模式:为子系统中的一组接口提供一个一致的界面,外观模式(Facade)定义了一个高层接口,这个接口使得这一子系统更加容易使用package pattern.facade;public interface AModuleApi { public void testA();}----package pattern.facade;public class AModule...原创 2018-11-20 15:55:59 · 90 阅读 · 0 评论 -
计算手机锁屏界面所有手势密码的组合
最近闲来无事,在网上翻看各种面试题,无意中发现了这道题,计算所有手势密码的组合可能,觉得挺有意思的,简单写了一下,与小伙伴们分享下。题目如下:以下是代码实现package test.gesture;import java.util.ArrayList;import java.util.List;import java.util.Scanner;public clas...原创 2018-11-11 15:41:36 · 2772 阅读 · 0 评论