V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  gam2046  ›  全部回复第 133 页 / 共 133 页
回复总数  2656
1 ... 124  125  126  127  128  129  130  131  132  133  
```java
protected static void test(int[] data, int size) {
int sum = 0;
long start = System.nanoTime();

for (int loop = 0; loop < size; loop++) {
for (int num : data)
if (num < 128) sum += num;
}
long end = System.nanoTime();

System.err.printf("Unsort\t%d\t%d%n", end - start, sum);
}

protected static void testBySort(int[] data, int size) {
int sum = 0;
long start = System.nanoTime();

Arrays.sort(data); // <- 取消这行注释,对比运行结果
for (int loop = 0; loop < size; loop++) {
for (int num : data)
if (num < 128) sum += num;
}
long end = System.nanoTime();

System.err.printf("Sort\t%d\t%d%n", end - start, sum);
}

public static void main(String[] args) {
int[] dataA = new Random().ints(0, 256).limit(65536).toArray();
int[] dataB = new Random().ints(0, 256).limit(65536).toArray();
final int size = 10000; //放大倍率
testBySort(dataA,size);
test(dataB,size);
}
```

这是我的测试代码,因为规模扩大了,我把 sum 改成 long 类型,原来计算大于 128 ,改成计算小于 128 ,在我已经淘汰的老电脑上跑( CPU E7300 ),多次结果差不多是这样的。之所以没有用同一个数组,是因为我试的时候发现用同一个数组,后测试的那个速度会明显加快(可能由于 JVM 内部有缓存或者其他什么优化之类的情况),因此使用了两组不同的数据源。

我觉得 @mind3x 说的也对。可能这个所谓的分支预测依赖于具体的硬件实现,不同的 CPU 上影响的效果差距较大吧。

无论怎样,这是有一个有意思的测试。

size -> 100000 (数字太大,计时单位为 currentTimeMillis ,其他几组都是 nanoTime )
Sort 15499 207147800000
Unsort 38274 207932200000

size -> 10000
Sort 1908208198 20769020000
Unsort 3788565998 20795440000

size -> 1000
Sort 191129828 2083522000
Unsort 443468946 2084494000

size -> 100
Sort 27209133 207403100
Unsort 39159150 206028200

size -> 10
Sort 21933511 20871060
Unsort 5386091 20815650
@mind3x 排序时间试过了,`Arrays.sort()`我记得是堆排序,当数据规模较小时,算上排序时间比不排序直接筛选慢,当数据规模扩大后,即使算上排序时间,依旧有序比无序快。这个可以用你顺手的语言测试一下,如果前面的人所说是分支预测的语言,应该不管什么语言都符合这个特征。
感谢各位的答复。 @SoloCompany @Xs0ul @mind3x 提的建议,我均用代码试过,其结果基本与我上面贴的一样,无序数据的基准用时在有序数据之后。甚至我尝试将数组长度设置为 2^16 ,随机数分布 2^32 ,只是运行结果用时更长,两者对比依旧无序要慢,而且随着数据规模扩大,无序相比有序数据之间的用时差距也变得更大了。因为结果基本吻合,就不贴代码了。

@jigloo 提到的,看了半天(其实是英语不过关),由于我对硬件上的东西不甚了解。也许真的是这个原因,只不过没有办法去考量。

其实 @jigloo 的链接中也提到了,先是用 C++,随后使用 Java 写同样的代码,其结果基本吻合。各位也可以用自己顺手的语言试试看( python 、 JavaScript 等脚本语言也可以丢上去),是否也符合这样的规律。即随机集合中选择一半的数据计算和(或者差、积等都可以),是否有序集合会比无序集合快一些。应该一共也没几行代码。

目前从实践来看,分支预测似乎是最合理的解释了。
2015-12-28 09:39:00 +08:00
回复了 yyx007 创建的主题 DNS 这个到底算不算 dns 劫持,投诉上海电信没有。下一部工信部?
全国的 DNS 都是劫持, 53 端口都是监控的,你设置 8.8.8.8 ,或者 OpenDNS 也没用,你可以考虑用 dns crypt ,基本原理是本地架设 DNS 服务,然后将请求通过非常规端口,转发出去解析,远程将结果返回。以逃避 DNS 挟持以及伟大的墙。
比如:
OpenDNS Crypt : https://www.opendns.com/about/innovations/dnscrypt/
或者: https://dnscrypt.org/
播放器推荐 VLC ,免费开源。我的个人做了一个类似于电视盒子的项目中就用到了 VLC ,内嵌到程序中作为播放器使用。
QQ 真的不招人待见,而且现在版本的 QQ 需要加载驱动才能启动,美其名曰“安全”,实在想不通一个聊天软件至于用得上驱动吗?

服务器的远程管理个人推荐 xshell ,针对个人是完全免费的,师出同门的 xftp 也很不错。
2015-12-08 14:32:55 +08:00
回复了 xing393939 创建的主题 PHP 1000 个 4M 文件,如何计算合并之后的文件 MD5 值效率高?
建议你看一下 MD5 的算法,他是分组进行计算的,因此计算过程中不要求你文件的连续性,即使你是连续的文件,在计算散列值的时候,依旧要拆分成一个个块,分别计算。
据报道, 12306 的验证码只有 500 多种,尽管十分难识别,但这只是对于正常人而言,由于数据规模很小,我猜想可以实现采集验证码,对于 12306 这种验证码不太可能是随机生成(程序也无法识别图片中是橘子还是橙子),因此基本上都是人工输入验证码到一个验证码库,如果真的是这样,那么只要先采集好,用模式识别,这种验证码基本上就等同于虚设了。
2015-12-06 09:04:13 +08:00
回复了 ntgeralt 创建的主题 Amazon Web Services 请问 AWS 多开免费主机数会不会另收费
按运行时间计算,每月不超过 750 小时则不计费, AWS 不管你开多少主机,都是按运行时间 /网络流量 /IO 量计算费用。我有两个月都是因为硬盘超额,因此造成了收费
2015-12-01 09:06:23 +08:00
回复了 billlee 创建的主题 Linux 刚刚 apt-get upgrade 把 Ubuntu LTS 弄挂了
如果是准备 android 开发的话,什么系统关系不是太大,基本上也没有什么区别,只不过 Windows 上做 Android 开发,需要安装驱动,而 Linux 不需要,只需要把设备编号告诉系统就行了。其他几乎没区别(我使用 Android , Eclipse 不清楚是否有差异)。
而且我自己多数情况下是采用网络 ADB 调试,不适用 USB 线连接,觉得拖根线不方便,如果用网络 ADB 调试, Windows 也不需要安装驱动。如果你不适用物理机调试,而采用虚拟机,则强烈不建议使用 linux 系统,由于硬件驱动问题,很可能你的 android 虚拟机无法使用 GPU 加速,严重伤害你的学习热情。
2015-11-28 09:43:51 +08:00
回复了 Amorming 创建的主题 C 会使用别人的代码,不会自己写代码
其实我现在也是这样,需要什么功能,先去 github 上找找,找到了,看看说明咋用,然后。。。就没有然后了。通常自己没写几句话,都是第三方的库。
2015-11-28 09:40:13 +08:00
回复了 Andy1999 创建的主题 程序员 其实 前几天看到的一个关于 Alipay 定位问题 一点都不准
我只知道 Android 下的情况,我估计 iOS 应该是类似的。
基本的定位策略是是基于 GPS 的定位(需要有硬件支持,且软件具有读取 GPS 信息的权限,可以不需要网络,通常情况下需要)、基于基站的定位(不需要硬件支持,软件需要具有读取基站信息权限,理论上不需要联网,实际上往往需要联网查询基站 ID 对应的区域)、基于无线热点的定位(需要硬件支持,软件需要有相关读取 wifi 信息权限,理论上不需要联网,通常需要联网查询热点 ap 地址对应的物理地址)、基于 IP 地址的定位(不需要硬件支持,软件不需要特殊权限)

我猜测,以阿里的技术实力,基本上是以上几种方法混合定位,但是多数人默认情况下应该是不会开启 GPS 的,因此多依赖于基站与热点定位(这两种方式通常比 IP 定位精确度高),而这两种定位方式取决于服务端数据收集的详细程度与使用者所在城市的基站 /热点密集程度,一般来说像上海这种超大型城市,基于热点的位置服务,其定位精度基本可以在几十米以内。如果是中心商业区可能达到 GPS 级别的精度(因为热点密度大)
2015-11-27 09:46:15 +08:00
回复了 kyrre 创建的主题 Android 小米平板有啥好玩的系统可以刷刷?
据说可以刷 Windows10 了。
2015-11-26 22:03:06 +08:00
回复了 az 创建的主题 Docker Docker 真的好吗
如果是采用群集呢?你现有的方式就会很繁琐了,而且不利于后期维护。
2015-11-26 21:01:17 +08:00
回复了 gam2046 创建的主题 编程 如何用 Chrome 扩展实现网页内 video 标签全屏显示?
由于目前没有找到比较优雅的办法,暂时我的方法是直接修改了 chrome 的相关文件( chrome_child.dll ),将条件判断直接跳过了。如果各位有更好办法,希望可以告知于我。
2015-11-26 18:19:00 +08:00
回复了 vitovan 创建的主题 Java Emacs 能写 Java 么?
`AbstractJsonpResponseBodyAdvice`这种名字,本意上是为了帮助理解,你一看到这个名字就大致能猜测到这是一个 json 响应的一个抽象切面。同理,你知道你要用的类是干什么的,虽然名字会比较长,但是八九不离十你是能够写出来的。

正如上面的所讲,如果命名类名为 AJRBA ,你看到名字能知道这个类是干什么的吗?显然你是不知道。
1 ... 124  125  126  127  128  129  130  131  132  133  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   972 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 43ms · UTC 22:10 · PVG 06:10 · LAX 15:10 · JFK 18:10
Developed with CodeLauncher
♥ Do have faith in what you're doing.