图解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!

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

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

有趣的经济学段子

段子一

中国房地产就像无肩带胸罩,一半人在疑惑:是什么支撑了它?另一半人则在盼着它掉下去,以抓住机会。

谁知这个女人,永不可能让它掉下来。就算快掉下来了,提一提还是又上去了…..

段子二

某专家称:现在房价并不贵,胸罩比房子贵多了。好胸罩600元,面积仅为0.02平米。即一平米胸罩超过3万元。

按全国二三线城市商品房均价4000元计算,胸罩相当于房价7倍多。如考虑胸罩使用期限只有一年,而商品房平均寿命约40年,胸罩实际价格相当于房价300倍。

可见,房价并不贵…

段子三

经济上行时股市惨跌,经济下行时股市却暴涨,一位村长解释:在我们村,经济形势好的时候大家都出去搬砖挣钱,形势不好的时候都聚村口赌钱……

段子四

有人将财务自由分成5个等级:一级财务自由,菜市场买菜不看贵贱;二级财务自由,商场购物不看贵贱;三级财务自由,珠宝奢侈店血拼不看贵贱;四级财务自由,楼盘买房不看贵贱;五级财务自由,买公司不看贵贱。

段子五

甲有5套房,不上班,靠收房租生活;乙有1套房,上班赚工资;丙无房,租房子住,菜场卖菜,忽然有天要收房产税了。

丙说:“太好了,我没房,收那帮炒房人的税,我全力支持,房价大跌了,我就可以买房了。”

乙说:“没关系,我只有一套,收那帮炒房人的税,我支持,房价大跌了,我可以再买一套。”

甲说:“哦,房.产.税收多少?1%对吧,下个月房租涨5%。”

房租上涨了,丙很郁闷,想换个房子,发现大家房租都涨了,只好忍。不过也不能吃亏,明天菜价也涨5%,恩,就这么干。乙和甲去买菜,发现菜价涨了,很郁闷,想换个菜场,发现菜价都涨了,只好少吃点了。

于是乎,生活水平就这样下降了,但是房价和租金都涨了,直观的道理,反而很多人都不懂!

段子六

一个北京人,1984年为了圆出国梦,卖了鼓楼大街一个四合院的房子,凑了30万,背井离乡到意大利淘金…

风餐雨宿,大雨送外卖,夜半学外语,在贫民区被抢7次被打3次…辛苦节俭,如今已两鬓苍苍,30年了,终于攒下100万欧元(人民币768万)打算回国养老享受荣华!

一回北京,发现当年卖掉的四合院现中介挂牌8000万,刹那间崩溃了……

或许,人一生多半是瞎忙…有些时候,选择比努力更重要!

段子七

一个小伙子用2000元其中的1500元给MM买了部手机,留500元吃饭开房,骑着电瓶车去找MM,MM说:你是一个好人,可是我们真的不合适。

改善方案:

一个小伙子用700元租了一辆BMW5,然后去批发市场300元买了99朵玫瑰,告诉MM他喜欢手牵手去那些浪漫的小吃店,最多消费100元。

当晚MM就跟他睡了,而且是因为爱情……

这告诉我们商业模式才是决定项目成败的关键,而不是成本!

段子八

男:老板,你这儿洗澡多少钱?
店老板:男浴池10元,女浴池100元

男:你抢钱啊…
店老板:你想去男浴池还是女浴池?

男:…果断交了100块。
进去女浴池一看,全是男的

浴池里的兄弟:…尼玛,又来一男的!

点评:营销从来不是靠低价,关键是引导客户需求。

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

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

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

业务系统技术要求有多高

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

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

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

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

如何靠挖矿比特币致富?

比特币

什么是比特币?

2009年,一个叫中本聪的日裔美国人发明了比特币,它是一种开源代码的数字货币。大多数人听到数字货币这个概念第一反映就是太虚了,既不是黄金本位,也没有政府背书,万一突然有一天所有人都不认了,我买进去的钱不是日了狗了?

要解决这个困惑,就得了解比特币最重要的三大属性。

第一是总量有限,比特币从代码被设计出来的第一天就已经确定,它一共有2100万枚。考虑到夜报粉丝的阅读能力,我没法把详细原理在这里讲清楚,但可以告诉大家比特币的代码是开源的,全世界每一个人都可以下载,到目前为止没有任何一个人对2100万的总币数提出质疑,所以你即便对自己没信心,也应该对全世界的码农有信心。

限量是有价货币的核心属性,我们持有人民币最怕的就是央行瞎印钞票,美元其实也一样,为什么每次一打仗黄金就暴涨,因为黄金作为稀有金属全世界一共就16万吨,大家手里拿着金子心里塌实。

第二就是知名度,虚拟货币很多,比特币是其中知名度最高的,而这对于互联网产品来说就是巨大价值。

举个例子,微信可能是现今中国商业价值最高的软件,但它的商业价值并不在于软件本身有多了不起,而是在于它有接近6亿的用户。比特币也是一样的道理,全球有几十亿人知道它,这就等于为它的价值背书。

第三是流动性,数字货币天然有优势,不多介绍了。

比特币谁在掌控?

并没有一个实际存在的实体在掌控比特币,这就好象问你,互联网是谁在掌控,google?facebook?中宣部?都不是,互联网是由千千万网民组成,比特币也是一个离散的状态存在。 阅读详细 »

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