![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 78
wangyan9110
菜鸟网络,我的个人博客http://yywang.info/
展开
-
FastJson 自定义Serialize、Parser
FastJson 自定义Serialize、Parser今天在处理Json反序列化时,在C#传过来的JSON字符串中枚举类型为int类型,FastJson对于枚举的处理有两种类型,一种是字符串一种是int类型,但是它自带的解析int是按照枚举的顺序来解析的,但是有时候值不一定和顺序相对应,所以使用自定义解析器方式进行解决。在网上找解决方案,没找到详细的方法。通过查看源代码得出解决方案以原创 2014-07-16 23:47:01 · 22139 阅读 · 4 评论 -
如何实现Builder模式
在构建大对象时,对象的属性比较多,我们可以采用一个构造器或者使用空的构造器构造,然后使用setter方法去设置。在使用者使用这些方法时,会很多冗长的构造器参数列表或者setter方法。我们可以使用Builder模式来简化大对象的构造,提高代码的简洁性,同时提高使用者的编码体验。下面我们将介绍在Java8之前、使用极简代码利器Lombok、Java8之后的Builder模式。Pre Java8我们先来原创 2017-05-06 18:46:53 · 1857 阅读 · 0 评论 -
一致性Hash算法的实现
一致性hash作为一个负载均衡算法,可以用在分布式缓存、数据库的分库分表等场景中,还可以应用在负载均衡器中作为作为负载均衡算法。在有多台服务器时,对于某个请求资源通过hash算法,映射到某一个台服务器,当增加或减少一台服务器时,可能会改变这些资源对应的hash值,这样可能导致一部分缓存或数据失效了。一致性hash就是尽可能在将同一个资源请求路由到同一台服务器中。本篇文章将模拟实现一个分布式缓存系统来原创 2017-04-15 17:20:00 · 8661 阅读 · 2 评论 -
聊聊RPC之Provider
RPC的全称是Remote Procedure Call,它是一个分布式系统必备的一个中间件,主要解决系统之间通信的问题。一般来说一个RPC中间件的由以下组成:Provider:服务提供者,提供服务给消费者调用Consumer:服务消费者,提供可以像调用本地方法一样的方式,调用远程的服务Register:注册中心,为提供者、消费者提供服务地址的注册服务,当提供者不可用时即时通知调用者Prot原创 2017-04-08 15:29:30 · 1365 阅读 · 0 评论 -
你真的开始用JDK8了吗?(下)
上篇文章中,看到了JDK8中的Optional和Lambda Expressions带来编程上的改变,甚至编程思维的改变。接下来我们继续看JDK8的Stream和Interface default method给我们带来的改变StreamStream也是JAVA8的一大特点,这里的Stream和IO的那个Stream不同,它提供了对集合操作的增强,极大的提高了操作集合对象的便利性。下面我们就通过一个原创 2017-04-08 15:37:59 · 1417 阅读 · 2 评论 -
你真的开始用JDK8了吗?(上)
JDK8正式版已经发布三年了,JDK9预计将于今年9月发布。很多应用都已经升级到了jdk8,java的大部分开源框架也早已支持jdk8,但是你真正开始使用jdk8了吗?jdk8给你的代码带来哪些改变?今天我们来梳理下,JDK8的特性给我们的代码带来哪些改变?OptionalNullPointerExceptions是在调用其他接口的时候,必须要考虑的问题。在业务代码中充斥着很多if(user!=nu原创 2017-04-08 15:35:18 · 9089 阅读 · 1 评论 -
聊聊RPC之Consumer
在上一篇我们介绍了RPC的Provider,包括它的发布过程和在设计一个Provider时需要考虑的问题,本文将介绍做一个调用方,在这个Consumer调用过程中,RPC又帮我们做了哪些事情和在使用别人提供的Provider时需要注意哪些问题。(和上篇一样,我们仍以Dubbo为例)Consumer的调用过程作为Consumer调用别人提供的一个服务,一般需要如下工作引入client包 <原创 2017-04-08 15:31:33 · 1537 阅读 · 0 评论 -
设计模式学习--Singleton
WhatSingleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。WhySingletion是我比较熟悉的设计模式之一,在平常的开发过程中,也曾几次用到,它主要适用于如下场景:1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。2、当这个唯一实例应该是通过子类可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。在系统原创 2014-08-14 23:30:32 · 967 阅读 · 0 评论 -
设计模式学习–Decorator
WhatDecorator:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。WhyDecorator模式适用于可以动态的给对象增删职责,比如qq秀我们可以选择自己形象,并动态的添加衣服以及装饰,让自己的形象感觉高大上起来。Decorator适用于如下情况:1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职原创 2014-08-26 23:35:41 · 1307 阅读 · 0 评论 -
设计模式学习--Prototype
WhatPrototype:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。WhyPrototype适用于在一个类的实例有几种不同的状态组合的一种时,建立相应的数目的原型并克隆她们,要比每次使用合适的状态创建它们方便一些,或者为了避免创建一个与产品类层次平行的工厂类层次时,要实例化一的类在运行时动态指定时。How假设如下场景:有一个复原创 2014-08-09 16:40:37 · 1136 阅读 · 0 评论 -
设计模式学习--Builder
WhatBuilder:将一个复杂的对象的构建和表示分离,使得同样的构建过程可以创建不同的表示。WhyBuilder也是创建型模式的一种,它是一步一步的向导式的创建一个复杂的对象,Builder接口定义创建复杂对象的零部件,Director根据客户端端传入的builder按照一定的步骤创建完成复杂对象的创建。Builder适用于比较复杂的对象的创建,该对象的创建原创 2014-08-02 20:32:33 · 1090 阅读 · 0 评论 -
设计模式学习--Factory Method
WhatFactory Method:定义一个创建对象的接口,让子类来决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。WhyFactory Method是一个比较基础的创建型模式,它主要在于由子类决定实例化哪一个类。主要用于框架代码或者工具包中。适用于如下场景:1、当一个类不知道它所必须创建的对象的类的时候2、当一个类希望由原创 2014-08-01 00:20:24 · 1642 阅读 · 1 评论 -
设计模式学习--Abstarct Factory
WhatAbstarct Factory:提供一个创建一系列相关或相互依赖的接口,而无需指定他们具体类。WhyAbstarct Factory是创建型设计模式的一种,主要在创建对象时解耦,避免对象的直接依赖,方便替换与定制。常见的比如:一个功能有两种不同的风格,需要根据配置来切换不同的风格时,或者在一个需要适用于多个数据库切换的程序中,都会使用Abstact Fac原创 2014-08-01 00:16:31 · 1405 阅读 · 0 评论 -
android解析XML总结(SAX、Pull、Dom三种方式)
欢迎我的独立博客,博客地址http://yywang.info 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX、Pull、Dom解析方式。最近做了一个android版的CSDN阅读器,用到了其中的两种(sax,pull),今天对android解析xml的这三种方式进行一次总结。 今天解析的xml示例(channels.xml)如下原创 2014-07-21 15:13:14 · 912 阅读 · 0 评论 -
maven安装与创建多模块项目
maven是一个比较流行的项目管理工具,在最近参与的项目中,也使用了maven,本文主要对在项目中的使用做一个总结,主要涉及maven的安装于配置、maven创建多模块项目。1、maven安装与配置maven的安装与配置非常简单,具体步骤如下: 1、首先到http://maven.apache.org/download.cgi下载maven的包,可以选择下载:apache-maven原创 2014-07-21 15:15:33 · 1425 阅读 · 0 评论 -
ListView动态加载数据分页(使用Handler+线程和AsyncTask两种方法)
在android开发中,经常需要使用数据分页,比如要实现一个新闻列表的显示,或者博文列表的显示,不可能第一次加载就展示出全部,这就需要使用分页的方法来加载数据,在android中Handler经常用来在耗时的工作中,它接收子线程发送的数据,并使用数据配合更新UI,AsyncTask是在一个线程中执行耗时操作然后把结果传给UI线程,不需要你亲自去管理线程和句柄。一、使用Handler+线程方法原创 2014-07-21 15:13:29 · 933 阅读 · 0 评论 -
Quartz任务调度实践
最近在写一个任务调度程序,需要每隔几秒查询数据库,并取出数据做一些处理操作。使用到了Quartz任务调度框架。基本概念Quartz包含几个重要的对象,分别为任务(Job),触发器(Trigger),调度器(Scheduler)Job:一个接口只有一个方法void execute(),我们需要执行的任务就需要实现这个接口,在execute中实现我们要做的事情。JobDetai原创 2014-07-20 14:54:12 · 1320 阅读 · 0 评论 -
如何保证微服务接口的幂等性
在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次 一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到原创 2017-04-29 15:48:21 · 29262 阅读 · 3 评论