沈超琦的博客

STAY HUNGRY,STAY FOOLISH

文章

Effective JAVA -第一条:用静态工厂代替构造器

序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来实现对象的创建。 就像这样: Fragment fragment = new MyFragment(); // or Date date = new Date(); 不过在实际的开发中,我们经常还会见到另外一种获取类实例的方法: Fragment fragment = MyFragment.newIntance(); // or Calendar calendar = Calendar.getInstance(); // or Integer number = Integer.valueOf("3"); ↑ 像这样的:不通过 new,而是用一个静态方法来对外提供自身实例的方法,即为我们所说的 静态工厂方法(Static factory method)。 知识点:new 究竟做了什么? 简单来说:当我们使用 new 来构造一个新的类实例时,其实是告诉了 JVM 我需要一个新的实例。JVM 就会自动在内存中开辟一片空间,然后调用构造函数来初始化成员变量,最终把引用返回给调用....

Netty 那点事(一)概述

Netty 和 Mina 是 Java 世界非常知名的通讯框架。它们都出自同一个作者,Mina 诞生略早,属于 Apache 基金会,而 Netty 开始在 Jboss 名下,后来出来自立门户 netty.io。关于 Mina 已有 @FrankHui 的 Mina 系列文章,我正好最近也要做一些网络方面的开发,就研究一下 Netty 的源码,顺便分享出来了。 Netty 目前有两个分支:4.x 和 3.x。4.0 分支重写了很多东西,并对项目进行了分包,规模比较庞大,入手会困难一些,而 3.x 版本则已经被广泛使用。本系列文章针对 netty 3.7.0 final。3.x 和 4.0 的区别可以参考这篇文章:http://www.oschina.net/translate/netty-4-0-new-and-noteworthy?print。 起:Netty 是什么 大概用 Netty 的,无论新手还是老手,都知道它是一个 “网络通讯框架”。所谓框架,基本上都是一个作用:基于底层 API,提供更便捷的编程模型。那么 "通讯框架" 到底做了什么事情呢?回答这个问题并不太容易,我们不妨....

使用feignClient调用接口 报错Method has too many Body parameters]

1、报错 Method has to many Body parmeters ,feign多参数问题 1.1GET方式 错误写法 @RequestMapping(value="/test", method=RequestMethod.GET) Model test(final String name, final int age); 启动服务的时候,会报如下异常: Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract com.chhliu.springboot.restful.vo.User com.chhliu.springboot.restful.feignclient.UserFeignClient.findByUsername(java.lang.String,java.lang.String) 异常原因:当使用Feign时,如果发送的是get请求,那么需要在请求参数前加上@RequestParam注解修饰,Controller里面....

分布式锁之Redis实现

在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以 synchronized 、Lock来使用它。 但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢? 一、分布式锁 分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的: 加锁 在沙滩上踩一脚,留下自己的脚印,就对应了加锁操作。其他进程或者线程,看到沙滩上已经有脚印,证明锁已被别人持有,则等待。 解锁 把脚印从沙滩上抹去,就是解锁的过程。 锁超时 为了避免死锁,我们可以设置一阵风,在单位时间后刮起,将脚印自动抹去。 分布式锁的实现有很多,比如基于数据库、memcached、Redis、系统文件、zookeeper等。它们的核心的理念跟上面的过程大致相同。 二、redis 我们先来看如何通过单节点Redis实现一个简单的分布式锁。 1、加锁 加锁实际上就是在redis中,给Key键设置一个值,为避免死锁,并给定一个过期时间。 SET lock_key random_value NX ....

STAY HUNGRY,STAY FOOLISH

© 2020 沈超琦的博客

Powered by Solo
Theme solo-sakura by adlered
浙ICP备18010929号

主题 | Theme