自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

钱立清的博客

浙江大学软件学院硕士研究生,专注Java开发。

  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 Spring Cloud构建微服务架构(二):路由网关(Zuul)

上一篇博客简单介绍了Spring Cloud,微服务的架构,如何解决服务治理中服务统一管理的问题,以及搭建基础的Spring Cloud的教程 。今天则主要介绍Spring Cloud的另一个服务治理组件——服务网关,或者说路由网关。1. Zuul简介Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到user服务,/api/shop转发到shop服务。...

2018-10-01 23:31:11 2937

原创 Spring Cloud构建微服务架构(一):服务注册与发现(Eureka)

1. Spring Cloud简介Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud 全家桶:-Spring Cloud服务注册中心Spring Cloud...

2018-09-29 17:10:15 6006

原创 Java 设计模式(十四):责任链模式

参考链接:职责链模式-Chain of Responsibility Pattern1. 模式概述很多情况下,在一个软件系统中可以处理某个请求的对象不止一个,例如我发起审批流程,需要先后经历项目经理、部门经理、技术总监、财务、CEO,他们可以构成一条处理审批的链式结构,审批单沿着这条链进行传递,这条链就称为责任链。责任链可以是一条直线、一个环或者一个树形结构,最常见的责任链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,责任链模式可以将请求的处理者组织成一条链,并让请求沿着链传递

2020-05-11 11:04:23 544

转载 关于 Dubbo 的重要入门知识点总结

转载自https://mp.weixin.qq.com/s/5LJUK8gjsS6GZ5ud5sO65Q目录:一、重要的概念1.1 什么是Dubbo?1.2 什么是RPC? RPC原理是什么?1.3 为什么要用 Dubbo?1.4 什么是分布式?1.5 为什么要分布式?二、Dubbo 的架构2.1 Dubbo 的架构图解2.2 Dubbo 工作原理三、Dubbo...

2019-03-02 12:36:40 1797

转载 Spring 中使用到哪些设计模式

转载自itxxz.com/a/javashili/tuozhan/2014/0601/7.html1. 简单工厂模式简单工厂模式又叫做静态工厂方法(StaticFactory Method)模式,它不属于23种GOF设计模式之一。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识...

2019-02-21 12:48:42 1717

原创 Java 设计模式(十三):代理模式

参考链接:代理模式-Proxy Pattern近年来,代购已逐步成为电子商务的一个重要分支。代购简单来说就是找人帮忙购买所需要的商品,代购网站就是其中一种产物,它为消费者提供在线的代购服务,如果看中某国外购物网站上的商品,可以登录代购网站填写代购单并付款,代购网站会帮助进行购买然后通过快递公司将商品发送给消费者。商品代购过程如图所示:在软件开发中,也有一种设计模式可以提供与代购网站类似的功能...

2019-02-06 09:20:55 2949

原创 Java 设计模式(十二):享元模式

参考链接:享元模式-Flyweight Pattern1. 模式概述定义:运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。当一个软件系统在运行时产生的对象数量太多,将会导致运行代价过高,带来系统性能下降等问题。例如在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间,那...

2019-01-04 20:28:47 2497

原创 Java 设计模式(十一):外观模式

参考链接:外观模式-Facade Pattern1. 模式概述定义:定义一个高层接口作为为子系统中一组接口的统一入口。外观模式通过引入一个新的外观类(Facade)为子系统提供一个统一的入口,简化了类与类之间的交互。下图可以直观的表达外观模式的作用:外观模式没有一个一般化的类图描述,下图所示的类图可以作为描述外观模式的结构图。外观模式包含如下两个角色:Facade(外观角色):在...

2018-12-22 13:48:16 1867

原创 Java 设计模式(十):装饰模式

参考链接:装饰模式-Decorator Pattern1. 模式概述定义:动态地给一个对象增加一些额外的职责。装饰模式是一种用于替代继承的技术,它通过使用对象之间的关联关系取代类之间的继承关系来给对象动态增加职责。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。在装饰模式中,我们通常会定义一个抽象装饰类,而将具体的装饰类作为它的子...

2018-12-15 18:08:44 3470

原创 Java 设计模式(九):组合模式

参考链接:组合模式-Composite Pattern树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致性地处理树形结构中的叶子节点(不包含子节点的节点)和容器节点(包含子节点的节点)...

2018-12-15 10:31:10 2240

原创 Java 设计模式(八):桥接模式

参考链接:桥接模式-Bridge Pattern1. 模式概述定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建立一个抽象关联。桥接模式用一种巧妙的方式处理多层继承...

2018-12-12 10:16:27 2043

原创 Java 设计模式(七):适配器模式

参考链接:适配器模式-Adapter Pattern笔记本电脑的工作电压一般是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够在220V的电压下工作?答案是引入一个电源适配器(AC Adapter),俗称充电器或变压器。这个电源适配器使生活用电和笔记本电脑得以兼容,如图所示:1. 模式概述定义:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可...

2018-12-11 13:44:07 2679

原创 Java 设计模式(六):建造者模式

参考链接:建造者模式-Builder Pattern1. 模式概述定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是较为复杂的创建型模式,它将客户端与包含多个组成部分(或部件)的复杂对象的创建过程分离,客户端无须知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可。它关注如何一步一步创建一个的复杂对象,不同的具体建造者定义了不同的创建...

2018-12-04 13:39:51 2100

原创 Java 设计模式(五):原型模式

参考链接:原型模式-Prototype Pattern1. 模式概述定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。在使用原型模式时,我们需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。需要注意的是通过克隆方法所创建...

2018-12-01 14:36:26 2383

原创 Java 设计模式(四):单例模式

参考链接:单例模式-Singleton Pattern对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,如图所示:通常情况下,无论我们启动任务管理多少次,Windows系统始终只能弹出一个任务管理器窗口。为什么要这样设计呢?我们可以从以下两个方面来分析:其一,如果能弹出多个窗口,且这些窗口的内容完全一致,全部是重复对象,这势必会浪费系统资源...

2018-11-27 10:55:03 6487

原创 Java 设计模式(三):抽象工厂模式

参考链接:抽象工厂模式-Abstract Factory Pattern工厂方法模式解决了简单工厂模式存在的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。1. 模式概述定义:提供一个创建一系列相关或相互依赖...

2018-11-24 23:45:01 2206

原创 Java 设计模式(二):工厂方法模式

参考链接:工厂方法模式-Factory Method Pattern在介绍简单工厂模式时提到简单工厂模式存在一个很严重的问题,就是当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?工厂方法模式应运而生,本文将介绍第二种工厂模式——工厂方法模式。1. 模式定义定义一个用于创建对象的...

2018-11-22 15:56:51 3054

原创 Java 设计模式(一):简单工厂模式

参考链接:简单工厂模式-Simple Factory Pattern1. 模式定义定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,因此简单工厂模式又被称为静态工厂方法模式。2. 模式概述简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程...

2018-11-22 10:03:08 3247

原创 设计模式

1. 什么是设计模式设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。2. 设计模式的类型根据设计模式的参考书 Design Patterns - Elements of Reusable Object-...

2018-11-18 22:17:38 2600

原创 Java 中创建对象的方式

1. 使用new关键字创建对象Student stu = new Student();2. 使用Class类的newInstance方法(反射机制)// 调用无参的构造器创建对象Student stu = (Student) Class.forName("Student类全限定名").newInstance(); Student stu = Student.class.newInst...

2018-11-16 23:37:16 1813

原创 List 循环遍历中删除元素问题二

问题一可以看我之前写的博客 List 循环遍历中删除元素问题一。问题二主要讲的是博主在今天的开发中遇到的一个问题。先来看下是什么问题让博主继上次问题后又写了问题二。问题一中讲到通过Iterator的remove方法解决链表中循环删除元素的问题。来看下简单的代码:public class ListTest { public static void main(String[] args...

2018-11-09 23:03:21 2772

原创 Java Annotation(注解)

1. 概念Annotation 是 Java5 开始引入的特性。注解相当于是一种嵌入在程序中的元数据,可以使用注解解析工具或编译器对其进行解析,也可以指定注解在编译期或运行期有效。这些元数据与程序业务逻辑无关,并且是供指定的工具或框架使用的。元注解 Meta Annotation元注解的作用就是负责注解其他注解。Java5定义了4个标准的 Meta Annotation 类型,它们被用来提供...

2018-10-29 19:51:01 2871

原创 浅谈Java内部类

1. 定义内部类的定义十分简单,当我们将一个类的定义放在另一个类的定义内部时,这个类就是内部类。2. 为什么要使用内部类?利用内部类提供的继承多个具体的或者抽象的类的能力来解决使用接口无法解决的程序设计问题。注意:内部类是个编译时的概念,编译成功后,它就与外围类属于两个完全不同的类(当然它们之间还是有联系的)。对于一个名为OuterClass的外围类和一个名为InnerClass的内部类,...

2018-10-26 16:34:06 2803

原创 本地搭建以太坊(Ethereum)详细教程

一、以太坊开发环境搭建略。包括Go语言、以太坊Ethereum、包管理工具npm和智能合约编译器solc等。二、以太坊集成开发环境创建账户geth account new以太坊账户地址 528301230cb94d1649534b13e991be243780d3bd查看账户geth account list初始化创世块文件geth --datadir "./" init ...

2018-10-19 22:38:03 10859

原创 JVM逃逸分析 - JVM优化技术

概念逃逸分析,是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。在计算机语言编译器优化原理中,逃逸分析是指分析指针动态范围的方法,它同编译器优化原理的指针分析和外形分析相关联。当变量(或者对象)在方法中分配后,其指针有可能被返回或者被全局引用,...

2018-10-17 09:00:01 1883

原创 Java 中的原子操作

写这篇博客起源于一道面试题 i++ 是不是原子操作?那到底什么是原子操作?所谓原子操作,就是“不可中断的一个或一系列操作”。在确认一个操作是原子的情况下,在多线程环境里,我们可以避免仅仅为保护这个操作在外围加上性能昂贵的锁,甚至借助于原子操作,我们可以实现互斥锁。Java中有哪些原子操作呢?查询资料后我总结出了以下几个:原始类型:原始类型(long 和 double 的赋值操作在32位操...

2018-10-13 19:54:17 4148

转载 Synchronized 关键字原理

众所周知synchronized关键字是解决并发问题常用解决方案,有以下四种使用方式:修饰代码块,即同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象。修饰方法,即同步方法,其作用的范围是整个方法,作用的对象是调...

2018-10-13 00:07:04 65912 9

转载 为什么说Redis是单线程的?

1. 前言近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据” ,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在以前面试的时候还没有遇到过面试官问你:为什么说R...

2018-10-12 14:35:13 1978

原创 深入浅出Java并发包(会持续整理、更新)

Java 5添加了并发编程java.util.concurrent包。JUC大体结构:1. J.U.C.collections首先介绍并发工具包,这个包包含了一系列能够让 Java 并发编程变得更加简单轻松的类。阻塞队列 BlockingQueueBlockingQueue接口表示一个线程存放和提取实例的队列,通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。下图是对这个原理的...

2018-10-12 00:10:46 4069

原创 Java 类加载的过程和双亲委派机制

1. 类加载机制的层次结构加载:加载阶段会在内存中生成一个代表该类的Class对象,作为访问方法区该类各种数据的入口。加载阶段,虚拟机完成以下工作:通过一个类的全限定名来获取其定义的二进制字节流。将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。在Java堆中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。注意:虚拟机规范...

2018-09-28 23:56:43 5501

原创 Java 并发:volatile 内存可见性和指令重排

1. 正确认识 volatilevolatile变量具有synchronized的可见性特性,但是不具备原子特性。volatile变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用volatile还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end...

2018-09-26 19:09:16 2964

原创 线程生命周期以及线程创建的三种方式

1. 线程生命周期线程生命周期图新建状态(New)当线程对象创建后,即进入新建状态,如:Thread t = new MyThread();就绪状态(Runnable)当调用线程对象的start()方法时,线程即进入就绪状态。处于就绪状态的线程只是说明此线程已经做好准备,随时等待CPU调度执行,并不是说执行了start()方法就立即执行。运行状态(Running)当CP...

2018-09-25 18:54:31 4728

转载 Java 线程池全面解析

转载自 https://mp.weixin.qq.com/s/fFZfEe10bdVKBndrEFH4fA1. 什么是线程池?很简单,简单看名字就知道是装有线程的池子,我们可以把要执行的多线程交给线程池来处理,和连接池的概念一样,通过维护一定数量的线程池来达到多个线程的复用。2. 线程池的好处我们知道不用线程池的话,每个线程都要通过new Thread(xxRunnable).start(...

2018-09-23 22:42:55 33442 1

原创 Java 的四种引用类型

本篇主要介绍Java强软弱虚引用的区别以及GC对他们执行怎样的操作。首先介绍下为什么要有引用类型?我们对于一个对象的坚挺程度的要求是不一样的,这通常表现为我们希望的垃圾回收器对它的回收时机的不同。对于一些比较重要的对象,我们希望垃圾回收器永远不去回收它(即使是内存不足的情况)。其次介绍Java的四种引用类型强引用(Strong Reference)强引用就是我们平时写的新建对象的用...

2018-09-23 18:02:42 5302

转载 深入剖析Java中的装箱和拆箱

转载自 http://www.cnblogs.com/dolphin0520/自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。一、什么是装箱?什么是拆箱?Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不...

2018-09-20 23:34:50 2458

原创 String、StringBuffer、StringBuilder的区别(最好能自己读源码)

String、StringBuffer、StringBuilder区别。1. String首先要明确一点,String不属于Java的八大基本数据类型。String是不可变对象,因此每次在对String类进行改变的都会生成一个新的String对象,然后将指针指向新的String对象。String.intern方法(Native方法)会在运行时常量池中查找是否存在内容相同的字符串。pu...

2018-09-20 16:12:05 1856

原创 正向代理和反向代理

正向代理和反向代理。概念正向代理客户端向代理服务器发送请求,并且指定目标服务器,再由代理向目标服务器转交并且将获得的内容返回给客户端。反向代理客户端向反向代理发送请求,由反向代理根据访问内容将请求转发给内部网络上相应的服务器,并将内容转交给客户端。使用场景正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网...

2018-09-20 14:15:52 1919

原创 详解Object类中的方法

Object类中的方法。public final native Class<?> getClass()public native int hashCode()public boolean equals(Object obj)protected native Object clone() throws CloneNotSupportedExceptionpublic Str...

2018-09-20 12:46:00 2545

原创 MySQL 乐观锁与悲观锁

MySQL 乐观锁与悲观锁悲观锁悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作。乐观锁乐观锁是指操作数据库时(更新操作),认为此次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理,而是在进行更新后,再去判断是否有冲突。乐观锁2种方式:使用数据版本(version)记录机制实现,这是乐观锁最常用...

2018-09-20 08:06:15 1941

转载 JVM 内存溢出

JVM 内存溢出1. 堆内存溢出对象所占空间超过最大堆容量时,就会产生OutOfMemoryError的异常。堆内存异常示例如下:/** * 设置最大堆最小堆:-Xms20m -Xmx20m * 运行时,不断在堆中创建OOMObject类的实例对象,且while执行结束之前,GC Roots(代码中的oomObjectList)到对象(每一个OOMObject对象)之间有可达路径,...

2018-09-19 23:05:05 4482

Java 设计模式

Java 设计模式WORD版本,包含六个创建型模式,七个结构型模式和十一个行为型模式,要免费的给博主留言即可。

2018-11-24

空空如也

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

TA关注的人

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