- 博客(27)
- 收藏
- 关注
原创 设计模式之原形模式
定义指通过拷贝原型来创建新的对象,不需要知道原型对象创建的细节,不调用构造函数优点原型模式性能比直接new一个对象性能高简化创建过程缺点原型对象必须有克隆方法对克隆复杂对象或克隆出的对象进行改造时,容易引入风险代码实现如下面的代码,我们通过原型模式来克隆一个User对象。@Datapublic class Address implements Cloneable{...
2019-03-04 23:02:01
226
原创 设计模式之建造者模式
定义将一个复杂对象的构建与它的表示分离,使得同样的创建过程可以有不同的表示方式,用户只需要建造具体的类型就可以,而无需知道建造的具体细节。例如现在有个类有A、B、C三个属性。这个对象的构造顺序可以是A->B->C,或者是B->A->C等等优点封装性好,创建和使用分离扩展性好,解耦缺点类中会多于出Builder类建造的产品内部更改,建造者也
2019-03-04 22:02:56
200
原创 设计模式之抽象工厂模式
定义抽象工厂模式提供一个创建一系列相关产品的接口,抽象工厂模式通常通过工厂模式来实现优点与工厂模式类似,抽象工厂模式客户端无需关注具体的产品生产细节将一系列的产品族统一到一起创建缺点规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要扩展抽象工厂接口代码实现在上篇的博客中,我们通过了Nike/Addidas的鞋工厂来举例说明了工厂模式。这次我们进行些扩展,众所周知...
2019-03-04 21:10:27
301
原创 设计模式之工厂模式
定义定义一个创建对象的接口,但由实现这个接口的子类来决定具体实例化哪个类。工厂方法让类的实例化推迟到子类。优点客户端不关注产品类的创建细节提高扩展性,符合开闭原则缺点类的个数容易过多代码实现假设现在有个鞋厂可以生产鞋,鞋的种类有Nike/Addidas。我们可以建个鞋厂,鞋的生产过程由具体的Nike/Addidas鞋厂来指定。后续鞋的种类如果新增一个NewBalance,那...
2019-03-04 20:32:02
242
原创 数据结构之堆
堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。堆分为两种,最大堆和最小堆,两者的区别在于排序方式上。堆的常用方法:构建优先队列支持堆排序快速找出一个集合中的最小值(或者最大值)最大堆...
2018-12-24 20:43:53
358
原创 数据结构之线段树
简介线段树是一种二叉查找树,它将一个区间划分为1个个单元,树的每个节点都是1个单元。如下图的树就是一颗区间树。性质对于线段树中的每一个非叶子节点[a, b],它的左节点为[a, (a+b)/2],右节点为[(a+b)/2+1, b]。线段数是平衡二叉树,子节点的个数等于整个区间的长度。实现建树在这里,我们使用数组来实现简单的线段树,树的结构如下。public class Se...
2018-12-16 21:27:20
175
原创 RocketMQ安装
RocketMQ下载本文使用的是Apache RocketMQ的4.3.2版本,可以通过Apache RocketMQ官网下载源码包。打包RocketMQ在RocketMQ的工程下通过Maven命令进行打包,打包好的安装包在distribution工程的target目录下mvn -Prelease-all -DskipTests clean install -U上传安装...
2018-12-01 22:42:43
170
原创 数据结构之Trie
简介Trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。——摘自维基百科基本性质简单来说Trie是利用字符串的公共前...
2018-12-01 12:51:30
306
原创 数据结构之AVL树
在上一篇博客中,向大家介绍了二叉搜索树这一种数据结构。下面,我们来看一个问题。假设现在有一棵空树,我们先向树中添加一个根节点5,然后再添加6,然后再按顺序添加7、8。我们来看下生成的二叉搜索树是什么样子。从上面的图中我们可以看出,二叉搜索树退化成了链表,大大的降低了查询效率。为了解决这个问题,我们引入一种新的数据结构——AVL树。概述AVL树是一种带有平衡条件的二叉搜索树。它的左右子树的高...
2018-11-25 19:31:09
198
原创 BTrace快速入门
概述btrace是sun的一款java动态诊断工具。可以在运行中的java类中动态的注入trace代码,这样我们就可以在不停机的情况下获取方法的入参,返回值,等信息,从而达到监控调试的目的。但是使用btrace可能导致jvm崩溃,所以才生产环境使用btrace必须要在本地验证脚本的正确性。配置安装:去https://github.com/btraceio/btrace下载btra...
2018-09-09 12:06:27
4451
1
原创 jvm调优之jps
概要jps [ options ] [ hostid ]options:命令行选项。hostid:主机标识,可以是ip地址或者域名。用于查看虚拟机进程,如果未指定hostid,则查看本地的jvm进程。如果指定hostid,将查看指定主机上的jvm进程。options不添加options的时候,默认输出进程ID,简单的class名称或者jar名称。 -q:仅输出进程I...
2018-09-03 20:03:35
316
原创 jvm调优之jstack
概述jstack [ options ] pidoptions:命令行选项pid:进程IDjstack命令可以用来查看线程堆栈。根据堆栈信息我们可以定位程序出现的问题,例如CPU偏高等问题。本文使用的是JDK10,不同版本间可能存在差异。optionsl:输出有关锁的其他信息。[root@izbp1chtb8a3vd2mzvuawlz target]# jst...
2018-09-02 21:59:40
391
原创 jvm调优之jmap
概要jmap [options] pidoptions:命令行选项pid:进程IDjmap命令可以查看堆内存的详细情况,以及生成heap dump文件等。本文使用的是JDK10,不同版本间可能存在差异。optionsclstats:查看Java堆的类加载器统计信息。[root@izbp1chtb8a3vd2mzvuawlz /]# jmap -clstats 11...
2018-09-02 20:16:59
513
原创 jvm调优之jstat
概要jstat -outputOptions [-t] [-hlines] vmid [interval] [count]]outputOptions:命令行选项t:输出时间戳(以jvm启动开始从0统计)hlines:每输出lines数量的数据后,输出一次header信息vmid:进程IDinterval:输出的时间间隔,秒或者毫秒count:输出次数jstat命令可以查...
2018-09-02 00:17:52
735
原创 jvm调优之jinfo
概要jinfo [ options ] [ pid]options:命令行选项。pid:进程ID。用于输出JAVA配置信息,配置信息包括Java System属性和JVM的参数。也可以在运行时修改部分参数。...
2018-09-01 13:02:58
395
原创 数据结构之二叉搜索树
在前面的几章中,介绍了几种线性数据结构,主要包含数组、栈、队列、链表等。从本节开始,给大家介绍树这种数据结构。在数据结构中,包括很多的树结构,像二叉树、二叉搜索树、线段树、字典树、红黑树等。本小节介绍的是二叉树和二叉搜索树,其余的树结构,会在后面的文章中再进行介绍。树在介绍二叉树之前,我们先准备些预备知识。首先来看先什么是树。一颗树可以看做是由根节点(root)和以及0个或多个...
2018-08-26 00:12:51
2228
1
原创 数据结构之链表
在前面的博客中,我们知道了数组这种数据结构的随机访问能力强,但是因为创建数组后,数组的容量时固定的。过大,容易造成空间浪费,过小,又不能满足存储需要。本篇文章给大家介绍另一种线性数据结构——链表。链表与数组不同,链表在物理存储上是非连续的。链表中的节点可以分为两部分,一个是存储的元素值,另一部分是指向下一个节点的指针。单链表单链表中的每个节点分为两个部分,一个是存储的数据值,另...
2018-07-25 19:30:17
370
原创 数据结构之队列
队列简介队列简单来说就是一种允许再一段进行插入,再另一端进行删除操作的线性表,就像排队取票一样。插入的一段我们称之为队尾,删除的一端我们称之为队首。队列具有FIFO(先进先出)的特性。队列的结构图如下所示。队列的简单实现使用上一篇文章的动态数组实现了队列,代码非常简单,不多讲了。public class ArrayQueue { private Array<E&
2018-07-17 18:03:41
26723
3
原创 数据结构之栈
栈的简介栈简单来说就是一种只允许在一端进行插入和删除操作的线性表,这一端我们通常称作栈顶,而另一端称作栈底。插入和删除也被称为入栈和出栈。因为栈只允许在一端进行操作,所以它具有FILO(先进后出)的特性,栈的结构图如下所示。栈的简单实现使用上一篇文章的动态数组实现了栈,代码非常简单,不多讲了。public class ArrayStack<E>{ pr...
2018-07-17 16:54:50
201
原创 数据结构之数组
数组简介首先我们来简单的了解下什么是数组,数组是在内存中开辟出一段连续的空间用来存储数据,如下图所示。既然是用来存储数据,就涉及到寻址问题,我们来看下数组是如何寻址的。因为是一段连续的空间,那么只要知道首地址和数组下标就可以计算出要查询数组元素的内存地址。比如说数组的首地址0x0001,数组中每个元素占4个字节,那么下标为1的地址为0x0005。也就是因为这个原因,在数组中查询元素...
2018-07-12 16:21:35
2122
原创 Redis的持久化方式
在Redis中,有2种持久化方式rdb 三种方式 save命令(同步,阻塞客户端命令) bgsave命令(fork出子进程,生成RDB,消耗内存) 自动配置 文件策略:如果存在老的RDB文件,新老替换。aof 写命令 追加到aof文件中 3种aof策略 先写入缓冲区 再刷新缓冲区写入磁盘 aof重写...
2018-06-18 23:52:43
162
原创 浅谈Redis Cluster
数据分区方式:节点取余、一致性哈希、虚拟槽节点取余:根据key的hash值和节点数取模的方式计算出节点ID,然后向对应的节点提交数据,如下图所示。 一致性哈希:虚拟槽:...
2018-06-18 22:22:25
8615
2
原创 浅谈Redis Sentinel
什么是SentinelRedis Sentinel是一个用来监控redis集群中节点的状态,不用来存储数据。当集群中的某个节点有故障时,可以自动的进行故障转移的操作。通常为了保证sentinel的高可用,sentinel也会部署多个。sentinel的结构图如下所示:在redis sentinel中,一共有3个定时任务。Redis中的复制方式在redis中有两种复制方式,分别为AO...
2018-06-16 15:25:56
3908
1
原创 Linux安装Redis
1. 下载安装包访问redis官网,下载redis的安装包,[https://redis.io/download]2. 解压redis安装包执行命令解压命令:tar -zxvf /usr/local/redis-4.0.5.tar.gz3. 编译进入到redis/src目录中,执行make & make install4. 启动redis执行redis-serv...
2018-06-14 21:11:39
198
原创 replace into和insert into on duplicate key update的区别
在项目中,我们经常会遇到当数据库存在某条记录时,则更新数据,若不存在则插入数据的情况。在mysql中,replace into ...和insert into ... on duplicate key update ... 都可以实现,那么这两种有什么区别呢?replace into和on duplcate key update都是只有在primary key或者unique key冲突的时候才会...
2018-06-02 15:25:33
15893
原创 CentOS安装MySQL(YUM源安装)
安装mysql主要分为两种方式,本次简单介绍使用YUM源进行安装mysql。1. docker环境准备在安装mysql之前,请先确认使用的centos版本,本文中使用的是centos 7.5.1804,使用cat /etc/redhat-release查看系统版本号。从centos 7.x开始,centos开始使用systemd服务来代替daemon,原来管理系统启动和管理系统服务的相关命令全部由...
2018-05-28 19:51:04
18169
5
原创 CentOS安装MySQL(安装包安装)
因为是使用docker,所以先创建一个容器,注意如果需要使用systemctl启动服务的话,需要在docker run的时候运行/usr/sbin/init
2018-05-26 20:29:27
1598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人