使用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时间,应为每次都会创建新的字符串对象。

Mac下通过sshfs挂载linux远程目录

之前的电脑使用的是linux,想把之前的一些文件拷贝过来,直接ssh操作起来又不是太方便

SSH Filesystem(简称 SSHFS)是一个以 SSH为基础的文件系统,它可以让你直接通过 SSH 挂载远程 Linux 服务器上的硬盘,由于现在的 Linux 服务器几乎都支持 SSH,所以只要安裝 SSHFS client 之后,对于任何可以使用 SSH 登录的服务器,都可以直接挂载上面的硬盘。

安装时,先下载OSXFUSE 和 SSHFS 两个文件,先安装 OSXFUSE ,再安装 SSHFS。

https://osxfuse.github.io/

执行命令

sshfs -p port ranger@xx.xx.xx.xx:/ /Users/ranger/share

卸载时要使用 umount:

umount remote_disk

 

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、中国的竞争力:以前靠自然资源,后来靠制度,现在正切换成靠文明;

8大实用又重要Mac使用技巧

一、区分App Store、iTunes Store、Apple Store

【App Store】是苹果公司经营的应用商店,供iPhone、iPod Touch、iPad以及Mac等设备的用户下载各种应用程序。用户可以购买收费项目和免费项目,让该应用程序直接下载安装到iPhone或iPod touch、iPad、Mac等设备。

【iTunes Store】是苹果公司经营的音乐商店,需要使用iTunes软件连接,供用户购买和下载正版音乐。由于版权保护的原因,目前iTunes Store在中国大陆地区尚未开放。

【Apple Store】是苹果公司经营的线下实体连锁零售商店,以展示和销售iPhone、iPod Touch、iPad以及Mac等电脑和消费电子产品为主,并提供各种售后服务。

二、常用的快捷键之——顶行快捷键、空格键

Mac的快捷键辣么多,全部记住是不太可能的。但是如果能记住几个常用键,可以大大提高使用效率。

在一些Apple自己的键盘上,通常顶行会有特殊案件,有音量图标、显示屏亮度图标和其他功能图标。按图标建可执行相应功能,或者将其与Fn键组合使用,来作F1、F2、F3或其他标准功能键。

至于空格(space)键,这是一个神奇的按键。在Mac系统里,这个键几乎可以预览所有格式文件。如视频、图片、音乐、页面、文档、PDF等等。

拿图片举例,只要点选文件夹里某张图片,点击空格键就打开了,再点击上上下下左右键即可切换浏览其他图片,而不用每次都双击打开、再关闭、再双击打开另一张、再关闭……

绳命诚可贵,space大法好。

三、常用的快捷键之——通用快捷键

以下都是小编编觉得最为常用的Mac快捷键,背下来不如多多实操,自然就熟悉了哦~

Command+H——隐藏窗口

Command+M——最小化窗口

Command+N——新建

Command+O——打开

Command+S——保存

Command+shift+S——另存为

Command+W——关闭

Command+Q——退出(小编编最喜欢用的快捷键,关一堆应用不能更爽)

四、常用的快捷键之——文件管理器

让我们告别鼠标,快速管理自己的所有文件~

空格键——快速查看(查看照片时非常有用哦!)

Command+A——选择全部

Command+I——显示简介

Command+N——新建文件夹

Command+F——搜索

Command+C——复制

Command+V——粘贴(用习惯windows的宝宝,应该能看出来Command就相当于Ctrl~)

Command+delete——删除

Command+shift+delete——清空回收站

五、常用的快捷键之——截屏、切换

Command+shift+3——截取整个屏幕(这个非常有用~截图在“Finder-我的所有文件”就能找到,从此告别QQ截图)

Command+shift+4——截取选择区域

Command+shift+4+空格——截取选择窗口(注意和上条的区别,手动操作试试吧!)

Command+tab——在应用程序间切换

Command+ ~(左上角那个键)——在应用程序中的窗口间切换

六、常用的快捷键之——系统控制

Control+shift+↑——关闭显示器

Command+option+esc——强制退出程序

Command+option+↑——睡眠

Command+control+↑——关闭所有应用程序并重新启动

Command+shift+Y——用当前选中的文字生成便签

Command+空格——切换输入法(Mac切换输入法有多坑爹大家都懂,这个快捷键必须记住啊~)

七、修改快捷键的正确姿势

屏幕左上角的【→系统偏好设置→键盘→快捷键】,列表里可以修改系统的快捷键,想要给特定的App设置快捷键的话,直接点击“+”号就可以设置了。

每个App左上角都有菜单栏,理论上所有功能都会列在菜单栏里的。不记得快捷键可以在菜单栏里找~

八、还有一些隐蔽又帅气的快捷小技巧

 QQ新开一个账号的快捷键是Command+N,虽然这个功能并没有放在菜单列表里。

 给Finder增加一个路径显示底栏是Command+option+P

 快速关机:按住右上角电源键5秒

 快速睡眠(马上要去开会or如厕):按住右上角电源键3秒

 想要了解更多Mac快捷键可以访问官网:https://support.apple.com/zh-cn/HT201236

 以及对快捷键有需求,又记不住的话,可以百度一发 KeyCue,这是一个长按Command就会出现快捷键列表的小型App

 想要帅气地打出的快捷键是:shift+option+K

————— 我是一条分割线 —————

其实,Mac使用中最重要的还是对触控板的熟练操作。不要再告诉我,你还在用鼠标操作你的Mac!

熟悉触控板的各种用法,比使用鼠标效率更高,什么三指拖移、四指滑屏…都超好用!

苹果内置很详细的演示教程【→系统偏好设置→触控板】,建议大家好好学习掌握~

做业务系统如何能成长为架构师

前段时间有个朋友找到我,问了个非常典型的问题。他说:『我现在在做偏业务开发方向的工作,在平时需要如何积累基础服务和系统架构方面的经验和知识。 』

很显然他意识到了两种系统的区别,而且正在试图转型。然而我知道,他也走进了一个让人难以反驳的认识误区,这就是,因为业务系统技术要求不高,所以开发人员在走向架构师的路上成长缓慢。

业务系统技术要求有多高

如果说从门槛来看,业务逻辑确实是最容易写的代码。产出好量化,功能又好测试。就算真的坏了,系统一般不会因此垮掉。只是,门槛低并不意味着容易做好。

有一种工作是API设计与实现,行话叫『包接口』,也是很多同学刚毕业的第一份工作。这事说起来简单,只要调用方跟被调用方协商一致即可,但是真正做的时候你会发现很多问题。

调用方首当其冲。如果命名混乱,找到想要的接口和参数就会变得很难。而如果你错误码定义得不够清晰,调通一个接口将会变成一个令人崩溃的事情。

被调用方也没有轻松到哪里去。如果没有遵循正交原则,那么你每个接口都可能涉及后端的很多资源调用和库的引用,导致服务不可避免得变大。一个资源的变化,都将有可能会影响到很多接口,这对回归测试和问题排查都将是一个灾难。 阅读详细 »

GIT报You have not concluded your merge (MERGE_HEAD exists) 解决办法

git merge 代码是报错 :You have not concluded your merge (MERGE_HEAD exists)

需要放弃本地的修改,用远程的库的内容就可以,应该怎么办?最笨的做法就是重新clone一个,正确的做法是什么?

正确的做法应该是:

git fetch –all
git reset –hard origin/master
git fetch 只是下载远程的库的内容,不做任何的合并git reset 把HEAD指向刚刚下载的最新的版本

参考链接:

http://stackoverflow.com/questions/1125968/force-git-to-overwrite-local-files-on-pull

Spring源码分析(一)——DelegatingFilterProxy

在开发web项目时,经常需要添加自己的filter,在web.xml文件中一般都这么定义自己的filter,filter的name是自己定义的beanName,class一般都是使用org.springframework.web.filter.DelegatingFilterProxy。 配置如下:

<filter>
    <filter-name>userInfoFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>userInfoFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

DelegatingFilterProxy 是Spring的一个类,它实现了GenericFilterBean,而GenericFilterBean又实现了javax.servlet.Filter接口,并对Filter的init方法进行了重写,而Filter的doFilter交给其子类去实现。而GenericFilterBean的init方法内部调用了GenericFilterBean的initFilterBean方法。该方法的默认实现为空,其采用了模板方法的设计模式交给其子类去实现initFilterBean的具体逻辑。

public final void init(FilterConfig filterConfig) throws ServletException {
    //...此处省略部分代码
    // Let subclasses do whatever initialization they like
    initFilterBean();
    //...此处省略部分代码
}

现在,来看看DelegatingFilterProxy的initFilterBean的现实代码

@Override
protected void initFilterBean() throws ServletException {
    synchronized (this.delegateMonitor) {
        if (this.delegate == null) {
            // If no target bean name specified, use filter name.
            if (this.targetBeanName == null) {
                this.targetBeanName = getFilterName();
            }
            // Fetch Spring root application context and initialize the delegate early,
            // if possible. If the root application context will be started after this
            // filter proxy, we'll have to resort to lazy initialization.
            WebApplicationContext wac = findWebApplicationContext();
            if (wac != null) {
                this.delegate = initDelegate(wac);
            }
        }
    }
}

该方法中有两处关键的地方this.targetBeanName = getFilterName()与WebApplicationContext wac = findWebApplicationContext()。前者得到web.xml中filter对应的名字,将其赋予为targetBeanName;后者 得到一个WebApplicationContex对象,这个接口大家应该很熟悉其续承了ApplicationContext,而通过其getBean方法我们便可以得到在application-context.xml配置文件中配置的bean。 先来看看 initDelegate对应的代码:

protected Filter initDelegate(WebApplicationContext wac) throws ServletException {
    Filter delegate = wac.getBean(getTargetBeanName(), Filter.class);
    if (isTargetFilterLifecycle()) {
        delegate.init(getFilterConfig());
    }
    return delegate;
}

Filter delegate = wac.getBean(getTargetBeanName(), Filter.class),便是利用我们在web.xml配置文件设置的<filter-name>userInfoFilter</filter-name>去application-context.xml配置文件中找到具体的实现类。 所以,在application-context.xml文件中bean对应的id一定要与web.xml中的filter-name一致。

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)角色:如果可以处理就处理请求,如果不能处理,就把请求传给下家,让下家处理。也就是说它处理自己能处理的请求且可以访问它的下家。 阅读详细 »