自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大白

Go on and just Do !

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

原创 从《大话设计模式》看JDK及框架中常用的设计模式(四)

观察者模式1.介绍模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应。在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。模式定义观察者模式(Observer Pattern):定义对象间...

2019-09-11 11:40:18 1399 2

原创 从《大话设计模式》看JDK及框架中常用的设计模式(三)

文章目录适配器模式1.介绍2. 角色分配3.实例4.应用场景适配器模式1.介绍适配器模式(Adapter Pattern):将一个类的接口转换成希望的另一个接口,让那些接口不兼容的类可以一起工作。如果需要复用已有的类,但是接口不兼容,不能或者不愿修改原有的类或者需要的类。可以使用适配器,用户在调用适配器的方法时在适配器的内部会调用适配者的方法。又称包装器模式。2. 角色分配角色包...

2019-09-11 11:01:54 1521 1

原创 从《大话设计模式》看JDK及框架中常用的设计模式(二)

文章目录一 工厂模式1.1 工厂模式的分类1.2 工厂模式的定义1.3 工厂模式优点二 简单工厂模式一 工厂模式1.1 工厂模式的分类简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory Method Pattern)。工厂方法(Factory Method)模式,又称多态性工厂(Polymorphic Factory)模...

2019-09-11 10:29:34 1826 1

原创 从《大话设计模式》看JDK及框架中常用的设计模式(一)

最近阅读了《大话设计模式》,本人感觉书中讲的简单易懂,并对书中的Demo做了Java实现,下面我将从这本书中总结一下几种常用的设计模式,首先看最常用的单例模式:单例模式(Singleton)定义保证类仅有一个实例,并提供一个访问它的全局访问点。优点在内存中只有一个对象,节省内存空间。避免频繁的创建销毁对象,可以提高性能。避免对共享资源的多重占用。可以全局访问。实现单例模式的实...

2019-09-10 23:30:23 1409

原创 分布式事务详解

文章目录数据库事务分布式理论CAP定理BASE理论什么是分布式事务分布式事务的产生的原因数据库分库分表应用SOA化事务的ACID特性原子性(A)一致性(C)隔离性(I)持久性(D)分布式事务的应用场景支付在线下单常见的分布式事务解决方案基于XA协议的两阶段提交消息事务+最终一致性TCC编程模式总结数据库事务在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也...

2019-09-10 20:14:44 2224

原创 Nginx详解

文章目录Nginx介绍负载均衡服务器反向代理服务器Nginx用途一、静态代理二、负载均衡三、限流四、缓存五、黑白名单Nginx介绍Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月...

2019-09-10 19:54:34 1661

原创 分布式锁详解

文章目录什么是锁什么是分布式什么是分布式锁需要怎样的分布式锁实现方式基于数据库做分布式锁基于表主键唯一做分布式锁基于表字段版本号做分布式锁基于数据库排他锁做分布式锁基于 Redis 做分布式锁基于 Redis 的 SETNX()、EXPIRE() 方法做分布式锁基于 Redis 的 SETNX()、GET()、GETSET()方法做分布式锁基于 REDLOCK 做分布式锁基于 REDISSON 做...

2019-09-10 19:43:04 2099

原创 Docker

认识容器什么是容器官方解释一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。容器镜像是轻量的、可执行的独立软件包 ,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于Linux和Windows的应用,在任何环境中都能够始终如一地运行。容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于...

2019-09-10 17:21:47 1661

原创 初学shell编程(二)

shell 基本运算符算数运算符下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:运算符说明结果+加法expr $a + $b 结果为 30-减法expr $a - $b 结果为 -10*乘法expr $a * $b 结果为 200/除法expr $b / $a%取余expr $b % $a 结果为 ...

2019-09-10 16:43:06 1907

原创 初学shell编程(一)

什么是 Shell?简单来说:Shell编程就是对一堆Linux命令的逻辑化处理。首先让我们从下图看看 Shell 在整个操作系统中所处的位置吧,该图的外圆描述了整个操作系统(比如 Debian/Ubuntu/Slackware 等),内圆描述了操作系统的核心(比如 Linux Kernel),而 Shell 和 GUI 一样作为用户和操作系统之间的接口。GUI 提供了一种图形化的用户接...

2019-09-10 16:04:58 1783 1

原创 ZooKeeper集群

典型集群模式Master/Slave 模式(主备模式)。在这种模式中,通常 Master服务器作为主服务器提供写服务,其他的 Slave 服务器从服务器通过异步复制的方式获取 Master 服务器最新的数据提供读服务。ZooKeeper集群在 ZooKeeper 中没有选择传统的 Master/Slave 概念,而是引入了Leader、Follower 和 Observer 三种角色。Z...

2019-09-10 15:52:02 1777

原创 Zookeeper特点及理解

ZooKeeper 特点顺序一致性: 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。原子性: 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。单一系统映像 : 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。可靠性: 一旦...

2019-09-10 15:47:57 5991

原创 Zookeeper核心概念

什么是ZooKeeper ?ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。Zookeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心(提供发布订阅服务)。 服务生产者将自己提供的服务注册到Zoo...

2019-09-10 15:40:13 1886

原创 MQ中消息重复消费及解决

重复消费原因因为在网络延迟的情况下,消息重复发送的问题不可避免的发生,如果非要实现消息不可重复发送,那基本太难,因为网络环境无法预知,还会使程序复杂度加大,因此默认允许消息重复发送。只要通过网络交换数据,就无法避免这个问题。所以解决这个问题的办法就是绕过这个问题。那么问题就变成了:如果消费端收到两条一样的消息,应该怎样处理?重复消费问题例子RabbitMQ、RocketMQ、Kafka,都...

2019-09-10 15:34:07 32180 2

原创 MQ常见消息丢失、消息堆积等问题及解决

1、消息丢失的问题当你系统需要保证百分百消息不丢失,你可以使用生产者每发送一个消息,Broker 同步返回一个消息发送成功的反馈消息。即每发送一个消息,同步落盘后才返回生产者消息发送成功,即生产者收到确认发送消息成功,才继续之后操作,这样只要生产者得到了消息发送生成的返回,事后除了硬盘损坏,都可以保证不会消息丢失。2、同步落盘怎么才能快使用 FileChannel + DirectB...

2019-09-10 15:30:31 24489

原创 RabbitMQ详解

RabbitMQ 简介RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。知道它是一个消息队列就行了。消息模型所有 消息队列从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(producer)创建消息...

2019-09-10 15:22:47 1852

原创 Redis常见问题

1. Redis的并发竞争问题如何解决?Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是由于客户端连接混乱造成。对此有2种解决方法:客户端角度,为保证每个客户端间正常有序与Redis进行通...

2019-09-10 15:05:47 1870

原创 Redis集群

什么是 Redis 主从同步?Redis 的主从同步(replication)机制,允许 Slave 从 Master 那里,通过网络传输拷贝到完整的数据备份,从而达到主从机制。主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据。一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库。第一次同步时,主节点做一...

2019-09-10 14:54:39 1748

原创 Redis持久化总结

Reis持久化redis提供了两种持久化的方式:RDB(Redis DataBase)【全量】RDB 持久化,是指在指定的时间间隔内将内存中的数据集快照写入磁盘。实际操作过程是,fork 一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。AOF(Append Only File)【增量】AOF持久化,以日志的形式记录服务器所处理的每一个写、删除操作指令...

2019-09-10 14:28:43 1961 1

原创 redis数据结构及使用场景

redis数据结构及使用场景1、字符串(String)String是最常用的一种数据类型,普通的k/v存储都可以归为此类。redis是使用C语言开发,但C中并没有字符串类型,只能使用指针或符数组的形式表示一个字符串,所以redis设计了一种简单动态字符串(SDS)作为底实现。SDS对象,此对象中包含三个属性:len buf中已经占有的长度(表示此字符串的实际长度)free buf中未使...

2019-09-10 10:35:39 2446

原创 redis总结

redis简介简单来说 redis 就是一个数据库,但是是一个非关系型数据库,而且 redis 的数据是存在内存中的,所以读写速度非常快,因此 redis 被广泛应用于缓存方向。redis处理的问题高性能假如用户第一次访问数据库中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据存在数缓存中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了。操作缓存就是直接操作...

2019-09-10 10:02:41 843

原创 DWR实现服务器端向客户端推送消息

客户端得到通知的方式定时刷新每个一段时间刷新一次页面优点:不需要服务器配置,只需在客户端配置即可缺点:不断的对服务器端发送请求,对服务器端压力太大Ajax轮询比定时刷新略好,不像定时刷新一样整个页面刷新,但是缺点也一样Comet长连接由客户端主动发送请求,建立一个长连接通道,服务器端可以向客户端推送消息优点:实时性好,性能也可以缺点:长期占用长连接的资源Dwr介绍基于...

2019-09-10 00:01:29 1096

原创 java中NIO,BIO,AIO详解

一、Java中IO模型简介在Java中,主要有三种IO模型,分别是:1.同步阻塞IO(BIO)2.同步非阻塞IO(NIO)3.异步IO(AIO)两个概念:1.同步与异步同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件...

2019-09-09 23:45:15 1471

原创 Java并发编程概念详解

线程和进程进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。线程线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不...

2019-09-09 23:20:26 1099

原创 悲观锁与乐观锁

悲观锁(多写场景)总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁,即共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁...

2019-09-09 22:59:33 724

原创 RPC常用消息中间件

一、消息中间件消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行–它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。总体来说,消息中间件有以下作用:降低耦合、流量消峰、异步通信、可靠性传输1.降低耦合:通过发布订阅的方式松耦合我们以注册业务为例,注册成功会发送短信、邮件给用户...

2019-09-01 22:40:38 7450

原创 RPC及分布式一读就懂

分布式及RPC出现的背景:1.我们传统的网站结构为单一应用架构,也就是把所有的功能都放在一个项目工程里,部署在一台服务器上。2.但是当访问量越来越大,我们需要通过不断添加服务器的方式来应对越来越大的访问量,产生了集群;或是将应用拆分成几个不相干的应用部署在不同的服务器上,产生了分布式系统。集群:将相同的程序、功能部署在两台或是多台服务器上,这些服务器对外提供的功能是完全一样的,集群就是通过不...

2019-09-01 20:56:45 4154 1

原创 面相切面的编程 AOP(动态代理)@Aspect

Spring支持面相切面的编程,并且把应用业务逻辑和系统分开,可以很方便的实现对程序进行权限拦截和运行监控等功能,AOP 适合那些具有横切逻辑的应用场景,比如性能监测 、访问控制 、事务管理以及日志记录等,尤其业务代码淹没在重复性的非业务性的代码之中时。相关注解@Aspect:作用是把当前类标识为一个切面供容器读取@Pointcut:Pointcut是植入Advice的触发条件。每个Poin...

2019-08-20 14:33:59 2402

原创 HttpClient使用之模拟post及get请求

整理http工具类方便以后进行http通信get请求 /** * get请求 * * @param url * @param uid * @param token * @return * @throws IOException * @Author gufeng */ public static ...

2019-07-11 14:28:02 1885

原创 深入理解JVM--堆栈内存溢出、内存泄漏问题以及相关异常信息

栈溢出(StackOverflowError)程序所要求的栈深度过大导致,可以写一个死递归程序触发。堆溢出(OutOfMemoryError:Java heap space)分清内存溢出还是内存泄漏泄露则看对象如何被 GC Root 引用。溢出则通过 调大 -Xms,-Xmx参数。直接内存溢出无法创建本地线程(OutOfMemoryError:unable to create nat...

2019-06-10 00:46:30 3173

原创 深入理解JVM--Java内存区域之栈,堆,方法区

介绍最近开始学习JVM,及时整理一下,Java虚拟机在执行Java程序的过程中会把其管理的内存分为若干个不同的数据区域。1、程序计数器(线程私有)程序计数器是一块较小的内存空间,他可以看作是当前线程所执行的字节码的行号指示器。如果正在执行的是java方法,计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是Native方法,计数器值为空。此内存区域没有OutOfMemoryEr...

2019-06-10 00:34:09 5249 2

原创 最详细类初始化的顺序,一看就懂

这方面知识一直没有整理,但大家经常讨论类的静态变量、成员变量、静态初始化块、非静态初始化块、构造器,及继承父类时,它们的初始化顺序都是怎样的,所以找了个机会认真整理一下,帮助大家脱坑:首先介绍一下这几个家伙,捋清它们是干嘛的:静态变量 / 成员变量: 是类的属性,静态变量属于类,被static修饰,成员变量属于对象实例。静态成员方法 / 普通成员方法: 静态成员方法属于类所有,类实例化前即可...

2019-06-06 15:31:25 2934

原创 Java8轻松地解决各种日期和时间问题

文章目录介绍LocalDate的使用LocalTime的使用JDBC中日期类型的映射代码实现格式转换介绍Java中新增了日期处理类——LocalDate,它是一种高效的日期类,比起Date的复杂具有相当高的简洁性,主要有三种:java.time.LocalDate ->只对年月日做出处理java.time.LocalTime ->只对时分秒纳秒做出处理java.time....

2019-06-05 20:02:33 2840

原创 算法小白--1.排序算法

文章目录一、十大排序算法分类及对比二、各算法原理及实现1.快速排序(Quick Sort)一、十大排序算法分类及对比稳定:排序前a位于b前,且a=b,排序完后a仍然位于b前。不稳定:排序前a位于b前,且a=b,排序完后a可能位于b后。内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费...

2019-06-04 23:32:06 1829

原创 数组存储压缩原理

文章目录1.存储单元2.存储方式3.数组存储压缩1.存储单元内存分为若干个存储单元,计算机记录着这些存储单元的首地址。一个存储单元的大小通常为4KB。2.存储方式计算机只保留每个存储单元的首地址。当我们声明两个变量时(这里假设两个变量的大小之和小于4KB),第二个变量必须放到第二个物理单元内(假如紧接着放在第一个物理单元的第一个变量之后,那么计算机将访问不到第二个变量)。3.数组存储压缩...

2019-06-03 20:28:38 3416

原创 数值类型乘除的优化位运算原理

位运算1.&(按位与)‘ & ’ 符号的作用是对运算符的两侧以二进制表达的操作符按位进行‘与’运算。规则:只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。举例:5 & 10 = ?10 的二进制为:10105 的二进制为:0101则 5 & 10 的二进制为 0000,完整的运算为 5 & ...

2019-06-03 11:18:42 2261

原创 javase学习--匿名对象

1、匿名对象 是指不给对象起名字,一般对象为 类名(例如Phone)对象名(自己起)=new 类名();则匿名对象为 new 类名();2、用处:单纯的创建匿名对象没有意义,因为由于没有引用会被当作垃圾回收处理(gc回收回收堆内存中对象的机制是,栈中没有变量指向该对象,那么该对象就是垃圾,可以被回收)所以匿名对象多用于传参,例如:method(new Customer(“dabai”,“...

2019-06-03 10:58:22 1760

原创 javase学习--stringbuilder原理

java有常用于字符串操作的三个类:1.基本含义:String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)2.性能比较:StringBuilder>StringBuffer>String3.原因每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 S...

2019-06-03 10:28:27 1836

原创 Linux学习--day5

touch [选项] 文件名:将文件的访问和修改时间更新为当前时间,文件不存在时创建他。-a:只更改存取时间-m:只更改变动时间-c:不建立任何文档(当touch后操作多个文件时,不存在的文件将不会被创建)-d/t:使用指定的日期时间(-t选项的时间格式为[[CC]YY]MMDDhhmm[.ss],-d可以使用各种时间格式)-r:把指定文档或目录时间,统统设置成和参考文档和目录...

2019-05-14 09:49:23 1828

原创 Linux学习--day4

1.type:显示指定命令属于什么类型命令的类型:内置命令(shell内置)外部命令:在文件系统的某个路径下有一个与命令名相同的可执行文件.2.printenv:显示环境变量3.hash:缓存,显示command的位置,及用过的次数。执行一个命令时,先找缓存中是否有,如果没有再在环境变量中path所列出的文件中找需要的命令。4.date:时间管理(显示系统时间,也可修改时间)...

2019-05-14 09:19:14 1562

空空如也

空空如也

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

TA关注的人

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