mac下安装mat

1、下载地址

https://www.eclipse.org/mat/downloads.php

mat

2、打开弹出下面对话框

error

3、查看日志如下:

java.lang.IllegalStateException: The platform metadata area could not be written: /private/var/folders/js/9_2jl105695f5tqf4pfl7xzr0000gn/T/AppTranslocation/F356ED05-60E9-4756-B644-EB4670F5B797/d/mat.app/Contents/MacOS/workspace/.metadata. By default the platform writes its content
under the current working directory when the platform is launched. Use the -data parameter to
specify a different content area for the platform.
at org.eclipse.core.internal.runtime.DataArea.assertLocationInitialized(DataArea.java:70)
at org.eclipse.core.internal.runtime.DataArea.getStateLocation(DataArea.java:138)
at org.eclipse.core.internal.preferences.InstancePreferences.getBaseLocation(InstancePreferences.java:44)
at org.eclipse.core.internal.preferences.InstancePreferences.initializeChildren(InstancePreferences.java:209)
at org.eclipse.core.internal.preferences.InstancePreferences.<init>(InstancePreferences.java:59)
at org.eclipse.core.internal.preferences.InstancePreferences.internalCreate(InstancePreferences.java:220)
at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:349)
at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:337)
at org.eclipse.core.internal.preferences.PreferencesService.createNode(PreferencesService.java:393)
at org.eclipse.core.internal.preferences.RootPreferences.getChild(RootPreferences.java:60)
at org.eclipse.core.internal.preferences.RootPreferences.getNode(RootPreferences.java:95)
at org.eclipse.core.internal.preferences.RootPreferences.node(RootPreferences.java:84)
at org.eclipse.core.internal.preferences.AbstractScope.getNode(AbstractScope.java:38)
at org.eclipse.core.runtime.preferences.InstanceScope.getNode(InstanceScope.java:77)
at org.eclipse.ui.preferences.ScopedPreferenceStore.getStorePreferences(ScopedPreferenceStore.java:225)
at org.eclipse.ui.preferences.ScopedPreferenceStore.<init>(ScopedPreferenceStore.java:132)
at org.eclipse.ui.plugin.AbstractUIPlugin.getPreferenceStore(AbstractUIPlugin.java:287)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:609)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:597)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.mat.ui.rcp.Application.start(Application.java:26)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:656)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:592)
at org.eclipse.equinox.launcher.Main.run(Main.java:1498)

4、解决办法

这是eclipse的一个bug,记录地址:https://bugs.eclipse.org/bugs/show_bug.cgi?id=339647#c5

解决办法: 右键mat显示包内容,进入Contents->MacOS下面,会有一个MemoryAnalyzer的命令。

打开终端,进入此路径找到MemoryAnalyzer,运行

./MemoryAnalyzer -data dump文件所在文件夹路径

即可启动成功

java技术图谱

java是现在互联网公司使用最广泛的语言,除了要掌握基本的语法和工具类以外,还要掌握许多相关技术,下面是一些相关的技术图谱

1、设计模式与框架

常见设计模式

2、持续集成

持续集成

3、分布式

分布式

4、微服务

微服务

5、性能优化

性能优化

6、底层知识

底层知识

mysql大数据分页查询优化

mysql数据量大时使用limit分页,随着页码的增大,查询效率越低下。
实验
1.直接使用用limit start, count分页语句:

select * from order limit start, count

当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条), 如下:

select * from order limit 10, 20 0.016秒
select * from order limit 100, 20 0.016秒
select * from order limit 1000, 20 0.047秒
select * from order limit 10000, 20 0.094秒

我们已经看出随着起始记录的增加,时间也随着增大, 这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下

select * from order limit 400000, 20 3.229秒

再看我们取最后一页记录的时间

select * from order limit 800000, 20 37.44秒

显然这种时间是无法忍受的。

从中我们也能总结出两件事情:
1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。

2.对limit分页问题的性能优化方法

利用表的覆盖索引来加速分页查询
我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这种情况会查询很快。

因为利用索引查找有优化算法,且数据就在查询索引上面,不用再去找相关的数据地址了,这样节省了很多时间。另外Mysql中也有相关的索引缓存,在并发高的时候利用缓存就效果更好了。

在我们的例子中,我们知道id字段是主键,自然就包含了默认的主键索引。现在让我们看看利用覆盖索引的查询效果如何:

这次我们之间查询最后一页的数据(利用覆盖索引,只包含id列),如下:
select id from order limit 800000, 20 0.2秒
相对于查询了所有列的37.44秒,提升了大概100多倍的速度

那么如果我们也要查询所有列,有两种方法,一种是id>=的形式,另一种就是利用join,看下实际情况:

SELECT * FROM order WHERE ID > =(select id from order limit 800000, 1) limit 20
查询时间为0.2秒,简直是一个质的飞跃啊,哈哈

另一种写法
SELECT * FROM order a JOIN (select id from order limit 800000, 20) b ON a.ID = b.id
查询时间也很短

mysql Error Code: 1175. You are using safe update

在使用mysql执行update的时候,如果不是用主键当where语句,会报如下错误,使用主键用于where语句中正常。
异常内容:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Queries and reconnect.

这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令,执行命令SET SQL_SAFE_UPDATES = 0;修改下数据库模式

如果想要提高数据库安全等级,可以在恢复回原有的设置,执行命令:SET SQL_SAFE_UPDATES = 1;

这个社会在极严厉地惩罚不好好读书的人

每当有人劝你努力读书,考个好大学,以后找个好工作的时候,你是不是嗤之以鼻?即使为了不忤逆家长做出口是心非的应允。

你心里是不是也在想:在这个金钱至上的社会中,大学生毕业连工作都找不到,更不用说买房买车、结婚生子的恢弘愿景了;在这个万众创业人人有机会改变自身阶层的时代中,大学生大多会把脑子读坏,连交际能力都堪忧,能有啥出息……

总之,在你的脑子里已经将读书无用奉为圭臬,将赚钱至上视为信条。甚至在网络上流传着各式各样的读书无用论段子,例如,XX初中辍学,然而他的小伙伴却最终考入了名牌大学,十年后,身为部门经理的XX,已经开始考虑到底要不要录用他名牌大学毕业的小伙伴……

千万不要拿这样个别的例子去忽悠那些还心智未开的年轻人。因为这样的人只是少数,大多数不爱学习的孩子,长大之后却发现,自己用几年疯狂的青春,换来了一生的卑微与底层!

记得朋友圈曾疯狂流传过这样一个帖子:两排名单,第一排列的有傅以渐、王式丹、毕沅等9人,第二排列的也是9人,分别是李渔、洪升、顾炎武、金圣叹、黄宗羲、吴敬梓、蒲松龄、洪秀全、袁世凯等9人。估计大部分朋友圈的人都不认识第一排,而熟知第二排上的人。帖子最后揭晓的答案是:前者全是清朝科举状元,后者全是当时落地秀才。因此结论是“读书无用论”。

这可是严重的偷换概念!第一排人你不认识,但不代表人家当时在社会上不知名,生活的不好;第二排人大家现在都知道,但在他们生活的那个社会,却并不招人待见的。

阅读详细 »

使用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

理财产品对比

说到理财方式,我们就要把市面上主流的理财方式罗列出来,一一对应看看孰优孰劣。

1.银行活期
银行活期的预期利率是0.35%(各银行不同,但量级相同),从银行的角度来说,这个资金是没有成本的。从我们的角度来说,这个收益等于没有收益。尽管流动性是满分,但是很遗憾这对于投资理财是没有任何意义的渠道。

2.银行定期
银行定期预期利率一般分 3个月1.1% ;6个月1.3% ;一年1.5% ;2年 2.1% ;3年2.75%。根据各个银行不同,一般小银行的预期利率会相对高一点,但是预期利率量级基本也就是这个状态。那么即使选择3年期定期,2.75%的预期年化预期利率也仅仅能跑赢政府公布的通货膨胀率。但是稳稳的跑不赢实际的通货膨胀率,你看看你身边的物价就知道现实的通货膨胀率有多高了。而且这还是牺牲掉流动性的前提下。

3.国债
国债的安全性也是没得说的,国家兜底,不过数量有限,具体预期利率也不一样。不过一般3年期的能够达到3.9%,5年期的能够达到4.32%。尽管预期利率和定期还是有相当提升的,很遗憾,依然牺牲流动性。

总结:上面基本把银行系的投资理财方式说完了,从安全性银行理财毋庸置疑,但是很遗憾,即使最高的预期利率也不能覆盖通货膨胀,你想靠银行理财资产翻倍是不可能的,而且严重牺牲了流动性。
阅读详细 »

混日子的人,下场都很惨

不管公司还是个人,长期来看,不管对方混不混日子,自己不混日子总是更为划算的。

混日子和不混日子

前几天一个朋友离职了。

我问他为什么,他说公司正在走下坡路,可能马上面临倒闭,覆巢之下焉有完卵,还是不要把青春耗在那里好。

我说你是怎么看出来公司快不行了的?他说每次老板不在,公司几乎所有人都打开《人民的名义》、《欢乐颂》……大家都知道公司近两年效益很不好,还人人爆米花+可乐混日子,这不等着倒闭么。

我这个朋友挺明智的,并没有随大流混日子,而是早早地跳脱了一个“眼前舒适”的职场环境。

职场是一个怎样的地方?职场是价值的交换中心。

在这里,每个人的价值都可以拿出来称一称,然后换到等值的自己想要的东西。

这类交换说是等值,其实是动态等值,对于某一个点来说,几乎总是错配的:有时候老板钱给多了,有时候给少了。

理论上来说,老板永远可以花更少的钱请到比你好的人,而你也永远可以找到比现在更适合自己,钱又更多的工作。

在市场信息没有全透明的前提下,你们谁先找到相应的信息,对谁就更有利。

而如果这中间有一方在混日子,停滞不前,那么显然价值错配的倾斜程度只会加剧,虽然短期看起来混日子的一方似乎是占了另一方的便宜。

很显然,不管公司还是个人,长期来看,不管对方混不混日子,自己不混日子总是更为划算的。

很多人可能会说,公司小,或者公司风气不好,也没见不混日子的有什么发展机会。

这是你把自己的眼睛给蒙住了,试着跳出自己的公司,从整个行业或整个职场的范围去俯视,会得到完全不同的结论。

混日子的焦虑

混日子的人总是不难找,我接触过大量混日子的人,他们大都知道自己和公司所处的状态,也大概知道不远后的结果,但就是能耗一天是一天。

这种情绪大脑和理性大脑不一致的状态,会让人产生焦虑。

是的,混日子并不是什么舒服的事情,大多数人内心是焦虑的。

如果不认为混日子是坏事,也不认为自己迟早会有什么不太如意的后果,混日子反倒不太容易引起焦虑。 阅读详细 »

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

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