使用lombok简化代码

lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。减少了代码行数,不会看到一大堆的get、set干扰视线

官网地址:https://projectlombok.org/ 首页有一段几分钟的演示视频,看完就明白是怎么回事了。

@Data
public class Something {
....
}

加上Data注解以后就不用在类中添加get、set方法了

各种注解的详细用法,请参考:https://projectlombok.org/features/index.html

IDEA下使用时,可以通过插件的形式安装,插件下载地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases

然后 Plugins -> Install plugin from disk… 选择下载的zip包安装,重启idea即可。

另外,还有一个关键设置:27612-20160217115233300-1759134314

中国是怎么玩一带一路的(段子)

非洲:我有石油和矿产。
欧美日:我给你开采!
非洲:被你们剥削上百年了,我现在要自己建厂,自己加工原材料。
欧美日:你们没钱、没路、没水、没电、没头脑,建个毛?!
中国:非洲兄弟,我来帮你!
中国:你看啊,矿区上游正好有条河,咱把这一拦,就是个大型水电站。
中国:有了电,就得把路也跟上:我们直接电气化铁路打通矿区和港口,让资源好挖又好卖!质量你放心,我们家的中铁和中铁建修高铁都是世界第一, 建大港口全球前十咱家占七个,中国交建集团和招商局专门干这个。大英国建航母都买的咱的龙门吊。
在铁路沿线和港口附近,我们再给建两个工业园区,专门往欧美日出口零关税的消费品。这个我们经验十足,中信集团、华夏幸福、泰达集团都是老油条了。
非洲:太够哥们了!可是我没钱……
中国: 没事儿,我借给你!中国亚投行和进出口银行有优贷(优惠贷款)、优买(优惠买方信贷),国开行有中非发展基金,工行、中行有商贷、随你挑。很简单,只要拿矿产、石油和国家主权担保一下就行。实在不行,你们的可可,芝麻,也能运到中国还款(注:中国吃的香油,很多是埃塞俄比亚出产)。利率吗,肯定感觉比日本和美国优惠……
非洲:那,那我美元外汇储备不够咋办?
中国:这太好了啊!咱两个央行抓紧弄个货币互换,以后咱哥俩交易,直接用人民币结算,利润都是咱哥俩的。用什么美元?!欧美日百年的剥削、歧视早受够了!
非洲:太好啦,就这么办!
中国:对了,既然通了电,那过去用不上的电视机、微波炉啥的也得配一下吧。我们这TCL、美的都是全球第一;给你修水电的中国电建还能拉着美的电器 给你把各种家电都送货上门。价格嘛,好商量,我们现在搞家电下乡,买一批送一批。

非洲:我们这儿电视台没什么节目,天天就是看新闻和广告,要电视没什么用吧

中国:正好!北京有个四达公司,华谊兄弟,专门把我们特别好看的电影、电视剧翻译成豪萨语、斯瓦希里语等当地语言。以后你们看广告看烦了,就看我们非洲版的《不见不散》,《甲方乙方》,《三生三世》,《亮剑》,《射雕英雄传》,《还珠格格》,《甄嬛传》。兄弟之间,好东西,要分享!

非洲:哇塞!!

中国:还有啊,现在都4G了,上网嗖嗖地。你这2G网络得让华为、中兴给升级一下,价格是欧美的1/3。绝对亲兄弟,剁手价。

非洲:这个我喜欢啊!

中国:你看,咱们现在把贫穷落后的家乡改变的这么好,保不齐有人会眼红,会羡慕嫉妒恨。所以咱得保卫胜利果实啊。

非洲:这个,咋保卫啊?

中国:不如团购点枭龙战机?再来批 99坦克?红箭导弹? 这可是好东西,物美价廉还抗造,中国陆军指挥学院包教、包会、包分配。(注:南京陆军指挥学院的外国学员中,已经出了5位总统、1位副总统、1位总理、8位国防部长 )。这事儿你就交给出门右拐的保利公司和中航技集团就行。

非洲:成了!兄弟一生一起走!

图解java String的不变性

1. 声明一个字符串

String s = “abcd”;
s存储的字符串的引用,下面的箭头就是存储引用的意思1

2. 把这个字符串变量分配给另一个变量

String s2 = s;

s2存储相同的引用值

2

3. 连接字符串

s = s.concat(“ef”);
s现在存储新字符串对象的引用

3

总结

字符串一旦在内存中创建,就不能改变。我们应该知道字符串的所有方法都不能改变它自己,而是返回一个新的字符串。

如果我们想要一个可变的字符串,我们应该使用StringBuffer 或者 StringBuilder。否则会浪费gc时间,应为每次都会创建新的字符串对象。

2017年,中国即将发生的50个重大变化!【标记下明年验证】

1、一大批企业将倒闭,而同时一大批人将成为自由职业者;

2、2016年倒闭的是传统制造业,2017年倒闭的是互联网泡沫企业;

3、很多互联网企业开始抢占线下地盘、实体店开始复苏,并和线上深度融合;

4、供应链开始逆袭,消费者开始决定生产者,并且开始参与生产制造环节;

5、中国传统的暴利产品、暴富手段将彻底消失,而产品的厚利时代(增值)到来;

6、企业的核心竞争力不再是关系和资源,而是一个优秀的机制;

7、由于企业越做越纵深,外部竞争越来越少,内部创新的要求却越来越高;

8、美国强力维持传统全球贸易结构,进一步打压中国的电子商务;

9、一部分产品未来进入中国市场,开始被中国贴牌;

10、如何更快、更好的对接到到消费者的需求,成为各大平台的核心任务;

11、房价从三四线城市开始回落,但不是急落;

12、020、P2P等概念将彻底消失在人们视线;

13、融合、跨界、互联依然是企业征战的主题;

14、各地的产业园区开始萧条,特色小镇却迅速成长;

15、中国将进一步成为世界物流、贸易的重要节点;

16、白领这个职业将在中国彻底消失,未来只有创造者;

17、定制化、个性化、个体化是产品三大主题,并且附带着强烈的文化气息;

18、传统创业浪潮已经过去,但新个体时代正在来临;

19、社会分工进一步精细化,冒出更多的垂直领域;

20、2017年是工薪阶层最纠结的一年,是创业者最苦难的一年;

21、中国召开国际性会议的频率进一步增加;

22、中国的经济、金融体系开始和西方分道扬镳,进行自我探索;

23、金融产业开始大众化,让更多的人享受到金融的支持和红利;

24、90后将继续在各个领域引起社会各界的关注;

25、政府将打破选拔、提拔人才的传统惯例,让有才之人获得施展机会;

26、很多国际性快消品牌,将越来越不适应中国的市场;

27、外国的节日在中国欢迎程度开始降低

28、各种APP将大量消失,应用程序如雨后春笋般涌现,人们生活进一步便利化;

29、之前官员因为腐败问题而下台,2017年开始将有官员因为能力问题而下台;

30、2017年中国最大的红利,是重构人与人之间的信任关系。

31、中国会扶持部分二线城市,往一线城市去靠拢;

32、年轻人结婚的意愿越来越弱,老龄化会进一步加剧,养老产业进一步发展;

33、工厂数量在减少,大量蓝领将失业,同时服务业进一步兴起,吸纳大量服务业从业人员;

34、财富分化进一步加大,底层的人们为了出路,会不断的博出位;

35、健康问题、心理问题会越来越凸显,大健康产业会进一步扩大;

36、勤劳虽然不再致富,但勤劳一定能糊口;

37、我们将从自然资源的开发,转向文化资源的开发

38、人们不再研究如何竞争,而是研究如何合作;

39、舆论成为推动社会进步和政策导向的主动力;

40、大量劳动型人口转向智力型人口,因此社会的治理力度要加强;

41、中国北方的经济环境会进一步下降,优秀的人才和资源向南方输送;

42、大量农村的优秀产品,有了更多机会往城市输送;而大量城市的流量,更多的指向了农村;

43、农村的土地正在形成一个市场,农村的活力有一定提升;

44、将出现重组和并购的热潮,股权投资依然是2017年最好的投资;

45、有钱人的财富,将越来越趋向于虚拟,比如估值、市值;

46、一批国产的产品的国际地位将进一步提高;

47、在世界的新技术领域,中国崭露头角的机会越来越多;

48、人与人之间的独立性在增强,人们更加愿意追求内心的幸福;

49、中国的红利:将从制度红利、人口红利,转入到文化红利;

50、中国的竞争力:以前靠自然资源,后来靠制度,现在正切换成靠文明;

Java设计模式教程(二)——责任链模式(Chain of Responsibility)

责任链模式(Chain of Responsibility)是行为模式之一,该模式构造一系列分别担当不同职责的类的对象来共同完成一个任务,这些类的对象之间像链条一样紧密相连,所以被称作责任链模式。

一、应用场景:

例1:比如客户要完成一个任务,这个任务包括a,b,c,d四个部分。 首先客户Client把任务交给A,A完成a部分之后,把任务交给B,B完成b部分,…,直到D完成d部分。
例2:web开发中的filter和interceptor

二、UML类图
责任链模式

抽象处理者(Handler)角色:定义一个请求的接口。如果需要可以定义个一个方法用来设定和返回下家对象的引用。
具体处理者(ConcreteHandler)角色:如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理。也就是说它处理自己能处理的请求且可以访问它的下家。 阅读详细 »

Java工程师应该读的几本书

《深入理解Java虚拟机:JVM高级特性与最佳实践》

深入理解Java虚拟机:JVM高级特性与最佳实践

《Java并发编程实战》

Java并发编程实战 阅读详细 »

你应该知道的 RPC 原理

现在互联网公司的系统都由成千上万大大小小的服务组成,各服务部署在不同的机器上,由不同的团队负责。这时就会遇到两个问题:1)要搭建一个新服务,免不了需要依赖他人的服务,而现在他人的服务都在远端,怎么调用?2)其它团队要使用我们的服务,我们的服务该怎么发布以便他人调用?下文我们将对这两个问题展开探讨。

[java]
public interface HelloWorldService {
String sayHello(String msg);
}

public class HelloWorldServiceImpl implements HelloWorldService {
@Override
public String sayHello(String msg) {
String result = "hello world " + msg;
System.out.println(result);
return result;
}
}

public class Test {
public static void main(String[] args) {
HelloWorldService helloWorldService = new HelloWorldServiceImpl();
helloWorldService.sayHello("test");
}
}
[/java]

1 如何调用他人的远程服务

由于各服务部署在不同机器,服务间的调用免不了网络通信过程,服务消费方每调用一个服务都要写一坨网络通信相关的代码,不仅复杂而且极易出错。

如果有一种方式能让我们像调用本地服务一样调用远程服务,而让调用者对网络通信这些细节透明,那么将大大提高生产力,比如服务消费方在执行helloWorldService.sayHello(“test”)时,实质上调用的是远端的服务。这种方式其实就是RPC(Remote Procedure Call Protocol),在各大互联网公司中被广泛使用,如阿里巴巴的hsf、dubbo(开源)、Facebook的thrift(开源)、Google grpc(开源)、Twitter的finagle等。

要让网络通信细节对使用者透明,我们自然需要对通信细节进行封装,我们先看下一个RPC调用的流程:
RPC调用流程

阅读详细 »

一个故事讲清NIO

假设某银行只有10个职员。该银行的业务流程分为以下4个步骤:

1) 顾客填申请表(5分钟);
2) 职员审核(1分钟);
3) 职员叫保安去金库取钱(3分钟);
4) 职员打印票据,并将钱和票据返回给顾客(1分钟)。
我们看看银行不同的工作方式对其工作效率到底有何影响。

1 BIO方式

每来一个顾客,马上由一位职员来接待处理,并且这个职员需要负责以上4个完整流程。当超过10个顾客时,剩余的顾客需要排队等候。

我们算算这个银行一个小时到底能处理多少顾客?一个职员处理一个顾客需要10分钟(5+1+3+1)时间,一个小时(60分钟)能处理6个顾客,一共10个职员,那就是只能处理60个顾客。

可以看到银行职员的工作状态并不饱和,比如在第1步,其实是处于等待中。

这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待 。
阅读详细 »

Dubbo简介

Dubbo是一个开源分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

dubbo用户指南:http://alibaba.github.io/dubbo-doc-static/User+Guide-zh.htm
开发指南:http://alibaba.github.io/dubbo-doc-static/Developer+Guide-zh.htm

String、StringBuilder、StringBuffer的区别

String、StringBuilder、StringBuffer三者都实现了CharSequence接口,所以它们在使用中可以相互替换,但是内部的实现是不同的

String

String是不可变的对象,一旦创建就不能改变。String被存放在字符串常量池中,Java中每一个不可变对象都是线程安全的,所以String也是线程安全的。

String  demo = ” a ” ; // 对象被放在常量池中,它的值不能被修改
demo=”b” ;     //新的b字符串在常量池中创建,被demo变量引用,a字符串在常量池中仍然存在,它的值没有被修改,但是没有变量引用它

StringBuffer

StringBuffer是可变的,我们可以改变它的值。new StringBuffer创建的对象被放在堆中,StringBuffer和StringBuiler有相同的方法,但是StringBuffer的每个方法都有synchronized,所以StringBuffer是线程安全的

正因为如此,StringBuffer的方法不能被两个线程同时访问,所以StringBuffer在性能上不如StringBuilder。 阅读详细 »