Pulpcode

捕获,搅碎,拼接,吞咽

0%

上周线上的一段排序的java代码出现了一个Comparison method violates its general contract,在解决这个问题的途中学到了一些知识这里总结分享一下。

异常原因

这个排序导致的异常将会在java7以上的版本出现,所以如果你的JDK从6升级到了7或者8,那一定要小心此异常。
在java7的兼容列表中,就有对此排序不兼容的说明:

1
2
3
4
5
6
Area: API: Utilities
Synopsis: Updated sort behavior for Arrays and Collections may throw an IllegalArgumentException
Description: The sorting algorithm used by java.util.Arrays.sort and (indirectly) by java.util.Collections.sort has been replaced. The new sort implementation may throw an IllegalArgumentException if it detects a Comparable that violates the Comparable contract. The previous implementation silently ignored such a situation.
If the previous behavior is desired, you can use the new system property, java.util.Arrays.useLegacyMergeSort, to restore previous mergesort behavior.
Nature of Incompatibility: behavioral
RFE: 6804124

我从资料中查阅到java7开始引入了Timsort的排序算法。我之前一直以为大部分标准库的内置排序算法都是快速排序。现在才得知很多语言内部都使用Timsort排序。随后我在wiki百科上找到了这样一句话:

阅读全文 »

锁的由来

并行的程序访问共享变量的时候,如果至少有一个访问是更新操作,就会出现问题。
书本上常常拿银行账户取款来举例子。我就不写了,因为我说道银行账户取款,你就知道我在说什么了,无非就是某个执行的上下文在执行的中途被修改了,解决这个问题的方式就是利用锁,来保证一次只允许一个线程执行该段代码。

锁的危害

n个相同的任务,如果每个任务执行的执行时间是t,那如果单线程一个一个的执行,那耗费的时间就是n*t。

阅读全文 »

如果你看过一些日本的武士片或者是玩过一些类似《怪物猎人》,《仁王》,《荣耀战魂》这样包含日本元素的游戏,那你一定见过那种长长的,被称为太刀的武士刀。这篇博客就来考据一下为啥这种刀这么长。

首先我查阅了一些资料发现普通的太刀并没有那么长,也就是 2尺(66cm)以上、3尺(约1m)之间。可以说差不多一米左右。所以这种刀经常会和另一种长度相近的打刀搞混。

阅读全文 »

洗牌

上学的时候,每次考试考砸了,我都在想这样一个场景,老师下节课抱着卷子进来说,这次的卷子我没时间批,就不批了,下次再重新考一次。我甚至还幻想过,那堆卷子被某个粗心的老师一个不小心烧掉还是什么的。类似的想法再比如打了一局dota,可能是对面太强了,可能是你的队友太不给力了,你就想,这局快点结束,重新开一局吧。当自己处于劣势的时候,都想希望洗牌。相反的,如果你在优势,你自然希望有人来稳固你的优势,而不是洗牌后让你重新来过,让你的努力最后都付诸东流。虽然早些年,毛爷爷打土豪分田地后,让大家都众生平等了。可惜改革开放后,第一批先富的人,变得越来越富,中国又慢慢的分层了。那么你幻想过一种洗牌么?那要看你现在是顺风局还是逆风局了。

阅读全文 »

写这篇博客的原因是最近在ps4上玩了重制版的《战神3》,打算系统性的整理希腊神话的相关知识,所谓的性价比,是想筛选出常见的神的故事,去了解学习它。这样在看相关的小说和影视资料的时候,就不会因为不知道其中的典故而一脸蒙逼了。同时也没必要去了解那么多不常见,太冷门,不实用的知识 。

主线故事

在希腊神话的一开始,世界是混沌的,这一点和中国古代神话中的盘古开天地差不多。然后诞生了第一位原始神,盖亚( Gaia )。她是大地之母,可以说希腊所有的神,都是她的后代。她先用无性生殖生出了乌拉诺斯 (Uranos)和其它两个原始神,然后又和乌拉诺斯结合生下了十二个泰坦巨神(没错,是和自己的儿子生的,希腊神话乱伦很常见)和其他一些神。所以一开始乌拉诺斯是众神之王,然而他变得狂妄自大,使得盖亚和他的孩子们(十二个泰坦巨神 )联合起来造反,并阉割了乌拉诺斯。随后十二泰坦巨神其中之一克洛诺斯(Kronos),成为新的众神之王。他的配偶也是他的亲姐姐: 瑞亚。但是他一直担心父亲乌拉诺斯 的诅咒,即自己会和父亲一样,被自己的孩子篡权,所以每有了一个孩子,就他吃了。之后瑞亚实在受不了了,就用石头掉包了一个孩子,这个孩子最后造反打败了他的父亲克洛诺斯,并救出父亲肚子里的其他同胞,当上新的众神之王,建立新的王朝,他就是宙斯。这就是宙斯诞生后,整个的故事主线。需要注意的是,从盖亚到克洛诺斯这一系列的神,都是泰坦系的。但是从宙斯开始王朝的时候,他的“帮派”就被称为奥林匹斯系的了。

阅读全文 »

前几天和同事一起看了《摔跤吧爸爸》这部电影,看完感觉自己还是能写一些东西的。再加上上周写了一篇关于游戏的博客,所以这周就来写一篇关于电影的博客。

敬业的演员

这位酷似 汤姆汉克斯的印度演员阿米尔·汗,可以说是印度的国宝演员了,他还有一部被广大中国人民熟悉的影片就是《三傻大闹宝莱坞》。
片中分别出现了,摔跤手爸爸的,青年时期,中年时期和老年时期。可以看到他的身材也发生了变化。

阿米尔·汗

阅读全文 »

前段时间有朋友推荐我一起玩《王者荣耀》,我说我不打算玩此游戏,然后被她当成“高冷,装逼,站在主机党的高塔上,鄙视pc党和手机党的那种玩家。”。其实原因是因为我太喜欢玩游戏了,也尝试过太多的游戏了,而且知道什么游戏适合我的胃口。 所以不局限于玩游戏就是为了“休闲放松”,这种浅层次的主观感受。

那我喜欢玩什么游戏呢?就是叙事性强的游戏,比如角色扮演类的RPG游戏,因为这种能自己演电影的感觉深深吸引着我。

小说和电影就是这样,想象一下你在读一本武侠小说的时候,就幻想过自己像男主角一样,惩恶扬善,儿女情长。而电影不但给你一个故事,还带来更多视觉和听觉的感官刺激。就像男人都希望自己是那个有豪车,有美女,有枪械,有正义感,又可以冒险的007一样。人生来就对故事如此痴迷,但是小说和电影的局限毕竟是看别人的故事。如果有一天你可以自己扮演主角呢?这就是角色扮演类游戏的魅力。

比如在《巫师3》中,你可以扮演一个生活一个中世纪世界里,以猎杀怪物赚取赏金,和女术士各种滥情,穿梭不同风格王国的魔猎人,这里有吸血鬼,狮鹫,骑士,难民,长寿的精灵,还有像维京人那样的野蛮人。

witcher3

阅读全文 »