下面选取在实际项目中应用较多的排序方式作一个性能比较,并会对各个方式作一个分析总结。
排序性能比较
测试方案
- 随机生成10万个整型数字,作为待排序数据。
- 逐个应用各个排序算法,通过计算开始至结束时间来获得算法执行时间,然后对其进行排序。
测试结果
排序算法 | 耗时(ms) |
---|---|
直接插入排序 | 769 |
希尔排序 | 10 |
冒泡排序 | 18,557 |
*快速排序 | 9 |
直接选择排序 | 3,811 |
*堆排序 | 10 |
归并排序 | 20 |
通常一个分布式系统是由许多相互依赖的服务所组成的,这些被依赖的服务极易出现故障或响应延迟的问题。如果其中某个服务失败则会影响其他服务并进一步降低整体性能,并导致应用程序其他功能无法正常访问,在最坏的情况下,整个应用程序将崩溃。
Hystrix框架通过提供熔断和降级来控制服务之间的交互依赖,通过隔离故障服务并停止故障的级联效应以提高系统的总体弹性。
2011年Netflix API团队开发了Hystrix,2012年Hystrix不断发展和成熟,并且Netflix内的许多团队都采用了它。如今,每天在Netflix上通过Hystrix执行数以千亿计的线程隔离和数以千计的信号隔离调用。
复杂分布式体系结构中的应用程序具有数十种依赖关系,每种依赖关系不可避免地会在某个时刻失败(因为不可预知的故障)。如果应用程序未与这些外部故障隔离开来,那么外部的错误会影响到自己,以至于将自己拖垮。
源码
C:\ProgramFiles\Java\jdk1.8.0_181\jre\lib\rt.jar!\java\util\Hashtable.java
本类是java.util.Map
接口的一个线程安全实现,自JDK1.0时就被添加进来。任何非空对象都可以用作键或值。为了保证从哈希表存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。
下面介绍一下它里面这些内部类的情况:
目前绝大多数项目用apache maven做java应用依赖管理,当我们缺少某个jar包,只需要在maven中央仓库查找它的GAV坐标,然后在POM文件中声明,在构建时这个jar包会被下载。但有时候也会遇到一个情况,别人给你一个jar包,这个jar包在中央仓库、公司私有仓库和本地仓库都不存在。既然这个jar包都不在仓库里面,那还怎么使用maven管理依赖呢?
在根目录下创建一个libs目录,并把这个别人给你的jar包放到其中,然后在POM文件中像下面这样声明依赖。
1 | <dependency> |
这个jar包也可以放在本地其它位置,在<systemPath>
元素中配置即可。
Apache Maven本身实际上只是一个插件驱动引擎。换句话说,真正干活的是插件,例如:创建jar文件,创建war文件,编译代码,单元测试代码,创建项目文档等。
<yourplugin>-maven-plugin
这种方式。maven-<yourplugin>-plugin
这种命名方式,因为它是由Apache Maven团队维护官方Apache Maven插件的保留命名模式。官方有明确指出使用这种命名模式是对Apache Maven商标的侵犯。我们将构建一个简单的插件,其目标是不带任何参数,并且在运行时仅在屏幕上显示一条消息。
项目POM文件内容如下,注意packaging属性与普通应用的区分: