民主货币比特币

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

比特币

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

渴望旅行,到处走走

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

旅行

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

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

Git心得

Git用了多年,也该写点心得,梳理下知识。搬砖的码农肯定知道版本控制这个东西,而Git是一款老少皆知的分布式版本控制软件的代表,看看github的火爆程度就知道了。如果你是码农界的一员,要是没听过github,这么多年的代码估计都敲到狗身上了。

代码白写了

Git命令

关于Git的入门,《Pro Git》这本书挺不错的,当粗我看的就是,200多页,几天就翻完了。具体的命令,就不详细解释了,翻翻手册就可以了,这里贴出我常用的一些命令缩写,用到的频率非常高:

Gitlab使用手册

Groups还是Users

对于项目namespace,一般来说,团队项目,Groups更好一些,一个组内可以添加很多项目,更符合一般团队的开发习惯,而Users更适合私人的一些项目。当然,美中不足的是,Groups中成员权限一旦确定,就不能在项目中进行修改。

分支模型

一个中心库至少包含两个分支,即master,dev分支,作为基础分支,另外还有一些辅助分支的概念,常见的有feature、hotfix、release等,另外还有tag,一般也可替代release分支。

  • 基础分支

    • master:隔夜代码,定期将dev的代码合并到master
    • dev:开发主战场,一般任何修改都要合并进来
  • 辅助分支

    • feature:用于开发独立的模块,一旦跟dev合并,一般就删除
    • hotfix:一般是用于修改bug的临时分支,命运和feature类似
    • release:用于发布稳定版本

博客乱象

国内博客乱象,可谓是拿来主义横行,抄袭成风,很多文章甚至是不加排版,显得毫无节操。早些时候就想写一写关于国内博客圈的这些不良风气,但拖延症作怪,一直挤到现在,才勉强决发表一些自己的看法。

抄袭

好的东西,的确应该拿出来宣扬和传播,但是不加思辨的拿来即用,却弊远大于利。做技术的都对国内现状深有感慨,往往一篇技术文章,一个文章帖子,百度一搜(当然,有条件尽量还是谷歌吧,不禁让我想起了某大牛的话,身为IT人,使用百度是自甘堕落),往往有成百上千的翻版,而且雷同程度几乎100%,毫无羞耻可言。一个问题解决方案,第一个讲错了,后面的人不加验证,目测说的非常在理,转之,结果十传百,百传千,遭殃了一大帮人。

作为一名IT从业者,写文章总结知识是十分有必要,然而,内容更多的应该是一些自己挖掘的,当然,引用经典值得提倡,但也尽量避免大段落的抄来抄去。业内很多大牛都开博客,写文章,有深度和高度是一大特点,一个话题,可以做深入的挖掘,一个概念,写出自己独特的注解。 相比于早些年自己的部分文章,东拼西凑,大部分来自别人的文字,后面也就不了了之,不经细致推敲,即编造成章,漏洞频出,实在羞愧难当。

聊一聊Java中double精度去哪了(2)

继续先前的话题,double奇葩的精度。试完了C,为何不看看其他的语言,如python,毕竟基本上现在的编程语言基本采用IEEE754标准,存储方式相同,计算由CPU完成,结果为什么会不同?果然使用python得出的结论也是0.060000000000000005,不免怀疑之前C的结果。C的语句是这样的:

printf("%lf", 0.01 + 0.05);  #输出结果为0.060000。

是精度,保留的精度不对,于是设定保留小数点后18位,因为java的输出小数点后有18位:

printf("%.18lf", 0.01 + 0.05);  #输出结果为0.060000000000000005。

这才是真相,线索越来越多,0.01+0.05这道题,跟语言无关,而是跟IEEE754标准有关?

IEEE754 Double

这个实验当中,结果比预期的多,那么有没有比预期的少?

System.out.println(0.09 + 0.01);  #输出结果为0.09999999999999999。

但是,如果取小数点后10位以内,结果还是好的,而且一般现实也不需要那么高的精度,但是,倘若每次计算都做一次round,势必性能大打折扣!然而不做round,的确是不严谨的作法,如果是支付场景,0.09+0.01<0.1,那么这次交易就完成不了,这是绝对不能容忍的错误!

谈了现象,再谈谈原因,其实很简单,10进制的世界,对于0,1的世界的计算机来说,有点悬。

聊一聊Java中double精度去哪了(1)

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

lost

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

Java的@符号

java

刚接触Java变成,就经常碰到“@”这个符号,所谓的Java中的annotation。很多时候它都是跟@Override,@Deprecated,@SuppressWarnings,或者更见多识广一些,还有@Retention,@Target,@Documented,@Inherieted,但是,大多数情况下,很少会有人去过问为什么这么去写,只知道这是一种理所当然的写法,在这里推荐一篇非常详细的关于Java注解的博文Java注解annotation用法和自定义注解处理器

抛硬币也能抛出人生大赢家

抛硬币

抛硬币,玩家庄家概率对半开,怎么赢,关键看下注策略。资金管理领域,有两种不得不提的策略,等价鞅与反等价鞅,从表现形式看,使用等价鞅制度的资金管理方式,在出现亏损以后,倾向于使用增加投入金额的方式进行后来的游戏。一旦获得盈利后,资金投入比例会再次回到起始水平;使用反等价鞅制度的资金管理方式,在出现亏损以后,会倾向于减少投入金额的比例进行后来的游戏;而伴随盈利的增加,也会不断增加投入资金,更多相关的内容见等价鞅和反等价鞅,写的很精彩,不做赘述。在这里,抛硬币属于古典概型,理解起来,相对简单直观。

脱离低级趣味的写作

之前也写过一些博客,但内容终究是粘贴复制居多,几乎体现不出个人的成果,似乎是拿别人的口水吞咽了一遍,学知识,是要把知识学懂,学活,提炼出自己的观点,变成自己的积累。

写作

看过很多,也学过很多,但真正经得起时间冲刷,能长存记忆的,不多;学了那么久的技术,看的都是别人的观点,学的都是别人的想法,很多时候,都忘了回头看一看,自己到底学到了什么。作为一个研究生,的确应该写一些自己独立思考的文字,挖掘深层次的知识。

Previous Next
Fork me on GitHub