民主货币比特币

比特币,2013之前还默默无闻,只是小众圈内流传,而到2013.11.19那天,价格一度飙升到8千左右,比特币就那么火了。后面央妈发大招,出台《关于防范比特币风险的通知》,价格更是坐了过山车,从6千多暴跌至2千,后又反弹到6千,多少无知小散接盘的接盘,割肉的割肉,我有幸亲身经历那段跌宕,真有一种末日来临的感觉,很多人谈币色变。

玩比特币玩了这么久,我自己归类自己应该是即是投机客,也是比特币信仰者。最初接触比特币也是师兄介绍,大概是在13年12月份左右,后面就开始自己写交易机器人,当然,效果不甚理想。陆陆续续也赚了一些钱,不过都是玩期货赚的,现货浮动太小,通过小资金进行原始资本积累过程过于缓慢。

很多人觉得现在入场玩比特币是不是太晚,这种观点很荒谬,就像有人想买股票,你告诉他,他应该在最低点买入,最高点抛出,鬼才知道什么时候是高点或低点。比特币刚出现的时候,你敢买吗,一块钱一个给你你都不一定敢要,因为你根本就不知道后面会怎么发展,你可能觉得一块钱已经是涨到顶了。很多持有比特币到现在的大户,不是忘记自己买币了,就是真心不差钱玩玩的。

渴望旅行,到处走走

如果不是室友安排的活动,恐怕很难接触到微旅行这种活动,宅久了,惰性就来了,懒得动!已经不记得多久没跟朋友一起出去玩了,那种全身心放松的感觉,最觉得可回忆的,其实还是一起跟朋友在杭州的那段时光,美好的人,美好的景,尤其是考上研之后的那种心情。

其实心里一直都渴望出去走走,看看世界的美好,很多时候缺的不是想法,而是说走就走的勇气。每天,看这个城市,行色匆匆,一张张陌生的面孔,孤独、思乡的感情油然而生,为什么此时此刻,我会出现在这个陌生的城市,行走在陌生的街,老家熟悉的小巷,屋后的树,午后门前的阳光还好吗?

旅行

这个城市到处充斥着嘈杂的引擎声,恐怕已经很难听见内心声音了;雾霾的天空,蓝天白云显得那么可爱;奔波在这个钢筋混凝土的城市,青山绿水已经变得有些遥远。大城市呆久了,厌倦了,向往平和、与世无争的世界,看看巍巍的山川,面对宁静的湖面,梳理自己复杂的内心,认识一个全新的自己。

聊一聊Java中double精度去哪了

前段时间, 因为要测试一个刚出炉的高频策略, 放实盘去跑吧, 怕出岔, 所以写了个简单的回测系统, 跑一遍历史数据. 其中有一部分是关于撮合系统, 简陋了点, 还算能跑得起来, 几个用例下来, 也没什么问题, 接着增加历史数据量, 居然出现了负数, 简直不可能发生的事情居然出现了, 虽然都是小金额的偏差, 但是毕竟跟钱打交道, 必须谨慎, 况且现在比特币那么贵, 丝毫偏差都是不允许的!

lost

当然, 后面就是苦逼的找bug, 逻辑没问题, 发狠的, 把所有的数据都打印出来, 日志一页一页没有尽头, 心里发麻, 硬着头皮一条条排查, 人品不错, 开头就发现一条异常数据, 0.05+0.01=0.060000000000000005, 瞬间明白, google it, 才发现Java的double原来精度那么蛋疼. 网上推荐BigDecimal代替double, 果然不错, 那就用BigDecimal替换. 等所有的double都换之后, 狗血的事情发生了, BigDecimal是如此的慢, 以至于跑一个用例花了之前N倍的时间, 怎么办, 只能用一个折中的办法, 数值表示仍然用double, 数值计算用BigDecimal, 于是乎, 有了如下的一个四则运算工具类MathUtil.java

脱离低级趣味的写作

国内博客乱象,可谓是拿来主义横行,抄袭成风,很多文章甚至是不加排版,显得毫无节操。好的东西,的确应该拿出来宣扬和传播,但是不加思辨的拿来即用,却弊远大于利。做技术的都对国内现状深有感慨,往往一篇技术文章,一个文章帖子,百度一搜(当然,有条件尽量还是谷歌吧,不禁让我想起了某大牛的话,身为IT人,使用百度是自甘堕落),往往有成百上千的翻版,而且雷同程度几乎100%,毫无羞耻可言。一个问题解决方案,第一个讲错了,后面的人不加验证,目测说的非常在理,转之,结果十传百,百传千,遭殃了一大帮人。作为一名IT从业者,写文章总结知识是十分有必要,然而,内容更多的应该是一些自己挖掘的,当然,引用经典值得提倡,但也尽量避免大段落的抄来抄去。业内很多大牛都开博客,写文章,有深度和高度是一大特点,一个话题,可以做深入的挖掘,一个概念,写出自己独特的注解。 相比于早些年自己的部分文章,东拼西凑,大部分来自别人的文字,后面也就不了了之,不经细致推敲,即编造成章,漏洞频出,实在羞愧难当。

聊一聊比特币找零

刚开始接触比特币的时候,一定很多人困惑于比特币的找零,幸好资料很多,随手从网上找了一篇,很详尽《详解比特币的找零机制》,大家可以做一个入门导读. 当然,要更加详细比特币的技术原理,推荐一本书《Master Bitcoin》,这本书从技术人员的角度,探讨比特币究竟是什么,通俗易懂,适合想进一步了解比特币技术实现的人员.当然,要深入挖掘,还是推荐阅读比特币源码.

好了, 针对原文的一些概念, 这里我做一些我的理解.

原文中,

比特币钱包交易100次以上时再次交易后要重新备份钱包.

值得一提的是, 这里的交易指的是支出, 而不包含接收. 其实, 这只是客户端的技术实现问题, 因为客户端将找零的比特币发送到了私钥池中的某一个相关公钥地址, 而私钥池大小只有一百个, 因此, 一旦多于100个, 就可能产生问题. 其实, 客户端也可以设计成将找零的比特币发送回原来的地址. 如blockchain. info网站的钱包, 就是将找零的货币原路返回, 这样做的好处就是交易过程清晰明朗. 不知道大家有没有注意到,原文中始终没有提到为什么要创建新地址接收余额,为什么?理论上,新地址和旧地址(支付地址)接收余额性质是一样的,技术上实现也是没有问题的,聪明的你不知道有没有注意到一个问题,比特币是匿名币,非常注重隐私,匿名不止体现在比特币地址上,还体现在找零机制,引用比特币官网上的一段话:

This is an anonymity feature – it makes tracking Bitcoin transactions much more difficult.

Java Multi-Threads Running in Sequence

最近看到一篇Java多线程顺序打印ABC的文章,用到了wait(), notify(), 感觉写的比较粗糙,这里写一写自己的看法,对他的第一段代码,在变量上稍微做了一些调整a->locka,b->lockb,c->lockc,其他的基本没改动。

预备知识
  1. wait是释放锁,不用等synchronized语句块执行完毕,阻塞,之后等待被重新notify
  2. notify是释放锁,但释放锁是在synchronized语句块执行完毕后,不阻塞,继续执行下去。
  3. yield不释放锁,阻塞,但释放cpu资源
  4. sleep不释放锁,阻塞,同时占用cpu资源

谈到线程阻塞,还可以参考Java Thread.join()

Previous Next