10 wangyan9110

尚未进行身份认证

我要认证

菜鸟网络,我的个人博客http://yywang.info/

等级
TA的排名 3w+

如何使用Kotlin开发微服务

谷歌在5月18号的I/O开发者大会上,宣布将Kotlin语言作为安卓开发的一级编程语言。可能很多人这时第一次听说这门语言。我了解这门语言时间也不长,在今年的一个内网帖子上第一次看到这门语言。今天我们来了解一下Kotlin这门语言和如何使用Kotlin开发微服务Kotlin简介 Kotlin是一种在Java虚拟机上运行的静态类型编程语言,它也可以被编译成为JavaScript源代码。它主要是由俄罗

2017-05-20 17:29:47

如何实现Builder模式

在构建大对象时,对象的属性比较多,我们可以采用一个构造器或者使用空的构造器构造,然后使用setter方法去设置。在使用者使用这些方法时,会很多冗长的构造器参数列表或者setter方法。我们可以使用Builder模式来简化大对象的构造,提高代码的简洁性,同时提高使用者的编码体验。下面我们将介绍在Java8之前、使用极简代码利器Lombok、Java8之后的Builder模式。Pre Java8我们先来

2017-05-06 18:46:53

如何保证微服务接口的幂等性

在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景:一个订单创建接口,第一次调用超时了,然后调用方重试了一次在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到

2017-04-29 15:48:21

一致性Hash算法的实现

一致性hash作为一个负载均衡算法,可以用在分布式缓存、数据库的分库分表等场景中,还可以应用在负载均衡器中作为作为负载均衡算法。在有多台服务器时,对于某个请求资源通过hash算法,映射到某一个台服务器,当增加或减少一台服务器时,可能会改变这些资源对应的hash值,这样可能导致一部分缓存或数据失效了。一致性hash就是尽可能在将同一个资源请求路由到同一台服务器中。本篇文章将模拟实现一个分布式缓存系统来

2017-04-15 17:20:00

你真的开始用JDK8了吗?(下)

上篇文章中,看到了JDK8中的Optional和Lambda Expressions带来编程上的改变,甚至编程思维的改变。接下来我们继续看JDK8的Stream和Interface default method给我们带来的改变StreamStream也是JAVA8的一大特点,这里的Stream和IO的那个Stream不同,它提供了对集合操作的增强,极大的提高了操作集合对象的便利性。下面我们就通过一个

2017-04-08 15:37:59

你真的开始用JDK8了吗?(上)

JDK8正式版已经发布三年了,JDK9预计将于今年9月发布。很多应用都已经升级到了jdk8,java的大部分开源框架也早已支持jdk8,但是你真正开始使用jdk8了吗?jdk8给你的代码带来哪些改变?今天我们来梳理下,JDK8的特性给我们的代码带来哪些改变?OptionalNullPointerExceptions是在调用其他接口的时候,必须要考虑的问题。在业务代码中充斥着很多if(user!=nu

2017-04-08 15:35:18

聊聊RPC之Register

在前两篇文章中,我们多次讲到了注册中心。在Provider中,我们讲到在服务注册的过程中,需要注册到注册中心。在Consumer中,我们讲到从注册中心获取到Provider地址。可见注册中心是RPC中重要的组成部分。那么注册中心,担任哪些职责呢?注册中心需要有解决哪些问题呢?注册中心的基本功能我们先来看下注册中心在服务调用中的位置从以上可以看出,注册中心有以下两个基本职责:服务地址注册,服务提供者

2017-04-08 15:33:30

聊聊RPC之Consumer

在上一篇我们介绍了RPC的Provider,包括它的发布过程和在设计一个Provider时需要考虑的问题,本文将介绍做一个调用方,在这个Consumer调用过程中,RPC又帮我们做了哪些事情和在使用别人提供的Provider时需要注意哪些问题。(和上篇一样,我们仍以Dubbo为例)Consumer的调用过程作为Consumer调用别人提供的一个服务,一般需要如下工作引入client包 <

2017-04-08 15:31:33

聊聊RPC之Provider

RPC的全称是Remote Procedure Call,它是一个分布式系统必备的一个中间件,主要解决系统之间通信的问题。一般来说一个RPC中间件的由以下组成:Provider:服务提供者,提供服务给消费者调用Consumer:服务消费者,提供可以像调用本地方法一样的方式,调用远程的服务Register:注册中心,为提供者、消费者提供服务地址的注册服务,当提供者不可用时即时通知调用者Prot

2017-04-08 15:29:30

谈谈微服务

自从去年在一次上厕所的时候,翻开手机,看到微服务这一个概念,就认为这种架构的模式非常看好,自那以后,一直关注微服务相关的内容。目前微服务已经是一个非常火的概念,在Infoq几乎每条都有关于微服务的文章或者新闻。可见微服务已经像我们靠近。微服务的“微”:有一些观点体现在微服务的微在体现在代码量上,微服务的代码行数一定非常少。关于这个观点,个人并不认同,我觉得使用代码行数来衡量微服务的话,就像使用代码量

2015-06-03 17:39:17

如何做详细设计之序

详细设计是软件开发中非常重要的环节,无论你是工作几年的技术大牛,还是只有一两年工作经验的小菜。可能你看到设计两个字,就觉得非常高大上,然而你只要在用心写代码,在思考如何定义方法,如何定义类,你都在做着详细设计。至于做的怎么样,那就另说了。详细设计涉及哪些内容?首先详细设计不同于架构设计,架构设计主要关注系统的架构模型、系统开发语言选型、系统数据存储方式选型、系统模块的划分以及系统模

2015-01-05 21:29:16

设计模式学习–Decorator

WhatDecorator:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。WhyDecorator模式适用于可以动态的给对象增删职责,比如qq秀我们可以选择自己形象,并动态的添加衣服以及装饰,让自己的形象感觉高大上起来。Decorator适用于如下情况:1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职

2014-08-26 23:35:41

maven assembly plugin使用

使用场景在使用maven来管理项目时,项目除了web项目,还有可能为控制台程序,一般用于开发一些后台服务的程序。最近在工作中也遇到了这种场景,使用quartz开发一个任务调度程序。程序中依赖很多jar包,项目的启动时只需要初始化spring容器即可。使用方法使用一个简单的基于spring框架的demo来做程序示例,来介绍maven assembly插件的使用方法。项目中

2014-08-17 23:04:07

设计模式学习--Singleton

WhatSingleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。WhySingletion是我比较熟悉的设计模式之一,在平常的开发过程中,也曾几次用到,它主要适用于如下场景:1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。2、当这个唯一实例应该是通过子类可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。在系统

2014-08-14 23:30:32

设计模式学习--Prototype

WhatPrototype:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。WhyPrototype适用于在一个类的实例有几种不同的状态组合的一种时,建立相应的数目的原型并克隆她们,要比每次使用合适的状态创建它们方便一些,或者为了避免创建一个与产品类层次平行的工厂类层次时,要实例化一的类在运行时动态指定时。How假设如下场景:有一个复

2014-08-09 16:40:37

设计模式学习--Builder

WhatBuilder:将一个复杂的对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。WhyBuilder也是创建型模式的一种,它是一步一步的向导式的创建一个复杂的对象,Builder接口定义创建复杂对象的零部件,Director根据客户端端传入的builder按照一定的步骤创建完成复杂对象的创建。Builder适用于比较复杂的对象的创建,该对象的创建

2014-08-02 20:32:33

设计模式学习--Factory Method

WhatFactory Method:定义一个创建对象的接口,让子类来决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。WhyFactory Method是一个比较基础的创建型模式,它主要在于由子类决定实例化哪一个类。主要用于框架代码或者工具包中。适用于如下场景:1、当一个类不知道它所必须创建的对象的类的时候2、当一个类希望由

2014-08-01 00:20:24

设计模式学习--Abstarct Factory

WhatAbstarct Factory:提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体类。WhyAbstarct Factory是创建型设计模式的一种,主要在创建对象时解耦,避免对象的直接依赖,方便替换与定制。常见的比如:一个功能有两种不同的风格,需要根据配置来切换不同的风格时,或者在一个需要适用于多个数据库切换的程序中,都会使用Abstact Fac

2014-08-01 00:16:31

WPF使用Canvas绘制可变矩形

1、问题以及解决办法最近因为项目需要,需要实现一个位置校对的功能,大致的需求如下:有一个图片,有一些位置信息,但是位置信息可能和实际有些偏差,需要做简单调整,后面会对这张图片进行切割等,做些处理。(位置信息连接起来是一个个小矩形。)解决以上问题的大致思路如下:使用canvas进行绘制,把图片作为canvas的背景,在canvas上绘制矩形,类似于qq截图一样,矩形框可以使用鼠标拖动调整大小。然后在记下修改后的位置,提供给后面切割图片使用。目前的关键问题就是实现类似qq截图那样可以拖动的矩形。

2014-07-25 22:49:21

maven安装与创建多模块项目

maven是一个比较流行的项目管理工具,在最近参与的项目中,也使用了maven,本文主要对在项目中的使用做一个总结,主要涉及maven的安装于配置、maven创建多模块项目。1、maven安装与配置maven的安装与配置非常简单,具体步骤如下:  1、首先到http://maven.apache.org/download.cgi下载maven的包,可以选择下载:apache-maven

2014-07-21 15:15:33

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!