All posts by dotte

开从首位 00 后 CEO 被指抄袭,聊聊开源协议

近日,一位自称『中国首位 00 后 CEO』的 17 岁少年,李昕泽因为一段专访短视频,一下在 IT 界火了。

而在昨日,李昕泽 所在的 崇才网络科技 发布的一款产品:猫桌面(智能电视桌面),被 CSDN 博客专家、Android 开发者『墨镜猫』所指抄袭。

原文地址在这里,大家有兴趣可以看看:http://blog.csdn.net/rain_butterfly/article/details/77847643

事情简单来说,崇才网络科技 发布的 TV端 App 产品 猫桌面,和『墨镜猫』之前在 Github 上开源的一款 AndroidTVLauncher (名称也叫 猫桌面),从UI到实现,都是一模一样的,才引发了现在的抄袭问题。

而在这件事情发生的当晚,我去看了下『墨镜猫』开源的 AndroidTVLauncher ,它在昨天已经将开源协议从 Apache License 2.0 修改成了 GNU GPL v3,并且在 commit 里表达了作者的愤怒。

从 commit 的记录来看,作者依然是在努力维护这个库的,最近才增加了对 kotlin 的支持。

而对于抄袭的事情,大多数同学都是声援的态度,但是在看了作者的开源协议之后,我有点犯难了。

从开源协议来看,这里涉及到两个协议:

  • Apache License 2.0
  • GNU GPL v3

下图是从 @GcsSloop 的博客中 Copy 出来的,可以清晰的说明这两个协议的特点。

Apache License 2.0 本身是一个比较宽泛的协议,使用者可以在需要的时候修改代码并且将它封装成产品发布/销售,而这只需要增加一个开源说明即可。

而 GNU GPL v3 就相对严格一些,它要求使用它的程序,也遵照 GNU GPL v3 协议。

说说我的看法

首先,代码最初使用的是 Apache License 2.0 协议,本身就可以让使用者修改并且商用,前提是在代码中附带一份原协议。

使用者不能打着作者的名号做商业宣传,并且原作者在不承担代码使用后的风险的同时,也放弃了这段代码被商用后的收益。也就是说,别人在原本代码的基础上,修改的好或者推广的好,那是别人能力的表现,这部分收益是可以不和原作者相关的(不排除使用者获益之后馈赠原作者的)。

到现在来看,撇来需要附带一份原协议这一点来看,使用者完全是遵循的 Apache License 2.0 的协议。(唯一可能有问题的是应该改改名称和图片资源,再上 PPT)

而原作者的代码,也并非 100% 原创的,它是一款基于 android.support.v17.leanback 的库来做的二次开发,而 Leanback 是 Google 为 Android TV 做的一款支持库,本身也是基于 Apache License 2.0 开源协议的。

Leanback 我自己也用过,并且用它开发过商业产品,现在已经上线盈利。AndroidTVLauncher 中的很多效果和实现,都是 Leanback 原生 Api 支持的,并没有做太多大的改动。所以这里对 AndroidTVLauncher 在原有库的基础上,改动的价值,就不太好做评判(毕竟我没有看过 AndroidTVLauncher 的代码)。

再来说说,作者昨天紧急修改了一波协议,这其实并没有什么实质的作用。因为本身 GPL 只是要求使用者也需要开源并且保持 GPL 协议,我想对于 崇才网络科技 的人来说,开源就开源呗。而且他们也是可以在之前代码的基础上进行修改,之前的代码依然保持 Apache License 2.0 的协议,这是一旦授予,无法撤销的。

做开源,先摆好心态

很多人将自己的代码放在 Github 上开源,本身就是为了推广自己,对于一些小而美的开源代码(例如:控件、动画等),其实心态还算平和,用就用了呗,而且应该是越多商业应用在用,作者就越高兴,觉得是一种认可。

可对于一些完整的 App 的开源。当发现别人使用自己的代码进行商用,并且推广的还不错,就心里有点不平衡了。

但是实际上,当你把代码放到 Github 上,等待被人 start 、fork 的时候,就应该做好开源的心态。而如果不想被商用,开源的那一刻就应该想清楚应该采用的协议,否者事后跳出来说使用者抄袭,这就有点不太厚道了。

正确的理解开源协议

最后还是在做开源之前,理解一下开源协议,选择一个适合自己的。

下图是 @阮一峰 博客里绘制的一个开源协议的中文分析图,供大家参考。

并且还有一个网站也非常的好,可以帮助开发者了解应该使用何种协议,推荐给大家。

http://choosealicense.online/

最后,还是说一句,做开源,心态一定要摆正。俗话说的好:孩大不由娘。你发布出去的开源代码,最终衍生发展成什么,真的不是你能控制的了的。

from:http://zhuanlan.51cto.com/art/201709/550631.htm

余额宝规模达到 1.43 万亿意味着什么?对银行的业务有哪些影响?

作者:万金油
链接:https://www.zhihu.com/question/61926374/answer/193032834
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

余额宝的规模越来越大,意味着活期存款乃至定期存款加速向货币基金转移,银行揽储越来越困难,导致银行贷款额度逐渐减少,利率逐渐升高,贷款难的现象越来越普遍。

这个问题其实之前我早已答过,还得了一千六百多赞,说明大家还是比较认可的,可以参考一下。那个回答很短,赶时间的看那个就可以了。zhihu.com/question/5959

但是,那个回答的评论区里,居然有不少人说看不懂!而我自己觉得已经讲得很通俗易懂了。好吧,那我试着说得再浅显一些。

这就不得不写得很长很长了。因为金融专业既然是大学里分数最高的专业之一,那它还是有些门槛的,不是金融经济相关专业出身,又没有专门去学习相关知识,的确不容易搞懂。

我尽量不用术语,不跳步骤,这样一来,答案就没办法简洁了。但是,如果大家看完了,就能顺便补上一些经济金融基础课,所以坚持看完还是有意义的。

言归正传,开始回答问题。

近两年是我国历史上利率最低的时期,没有之一!请看下图。利率是一个体系,市场上有很多很多利率。美国的利率是市场化的,以一年期国债利率为基准。

我国的利率没有实现完全市场化,基准利率是中国人民银行“规定”出来的,以央行存贷款基准利率为代表,基准利率里又以一年期存贷款基准利率为核心。

为什么近几年利率如此之低呢?那要从2008年金融危机说起。大家从图表里也可以看出,2007年末,是近十年来利率的最高点,是央行加息降息的分水岭。

金融危机以前,我国经济在高速增长。企业要扩大生产、老百姓要买房买车,钱不够了就向银行去借。股市和债市也能融资,这叫直接融资。但只有小部分大企业才可以,所以主要还是看银行,这叫间接融资。

银行的自有资金很少,绝大部分资金是从老百姓那里借来的,也就是大家说的存款。银行一手从老百姓和企业吸储,一手向企业和老百姓放贷。其实就是资金的中介,所以才叫“间接融资”。贷款多了,存款就不够用了。

这时候怎么办呢?当然是开源节流啊。开源就是增加存款,怎么增加呢?大家都见过,银行以前经常送点米面油、送点小礼品什么的,这样做有点用处,但用处不大,主要还是靠提高存款利率,利率高了,老百姓自然愿意多存款。

节流就是减少贷款。可贷款少了利润也少了。所以银行就提高贷款利率,这样即使贷款少了,利润也不会少很多,甚至还能增加。因为经济在增长,即使贷款利率提高了,企业还是有的赚,利率高一点无所谓。

所以,我们看到08年之前,存贷款利率一直在上升。但是,08年后金融危机来了,事情就不一样了。这是为什么呢?

改革开放后的三十年,我国经济在高速发展。经济学认为,GDP是由消费、投资和净出口(出口减去进口)三个部分组成的。

但是,我国这么快的经济发展,很大程度上,是靠出口和投资带动起来的,而不是像欧美发达国家一样,靠消费带动起来。

金融危机一来,欧美发达国家经济受到重创,老百姓收入减少了,自然就会减少消费。而欧美发达国家的消费,对应着我国的净出口。

所以,金融危机以后,我国的净出口快速下跌,严重影响了GDP增速。国家的应对措施有两种,一种是扩大消费,一种是扩大投资。我国主要采取了后一种措施。

要扩大消费和投资,降低利率是一种办法。

降低了存款利率,一些老百姓和企业就会觉得把钱存在银行里不划算,不如自己花掉。

降低了借款利率,一些老百姓和企业就会觉得从银行借钱更便宜了,老百姓才会借钱买买买,企业才会借钱买原材料和设备。

于是我们看到08年后,利率在下降。“四万亿”出台后,投资猛增,占比几乎翻倍。而这么多投资,大部分都是银行贷款支撑起来的,到期是要还本付息的。

但是,我们也看到了,很多投资变成了形象工程、变成了各地的鬼城、变成了过剩产能,不能产生效益和利润。也就是说,这些贷款到期以后不仅还不起利息,连本金也还不起,把真金白银打了水漂。

那么该怎么处理呢?如果是民营企业,那就到期不再续贷,要想续贷就得增加抵押或找其他企业担保。

于是,我们看到很多地方,尤其是浙江等民营企业发达的地方,一个企业破产,拖倒了担保链上的几十家健康企业。银行的坏账越来越多。

如果是国企,那地方会想方设法要求银行继续提供贷款。因为一旦企业还不起贷款破产倒闭,那么麻烦就大了。

首先,国企倒闭,GDP就少了,而GDP是官员考核的最关键因素。

其次,国企倒闭,税收就少了,而税收是财政收入的重要组成部分,这也是官员考核的重要因素。

再次,国企倒闭,失业工人很可能会闹事,YX、SW乃至进京SF,导致官员在考核时被一票否决。

所以,地方GY会竭尽所能,请求、诱导、要求、迫使银行继续贷款给国企。

如果是地方ZF,那银行就更不敢得罪了。几年前地方ZF自己、或者其下属的各种城投企业从银行贷了很多款,利率也不低,因为最低也不能低过贷款基准利率。

但是,几年后贷款到期时地方ZF还不起贷款了,中央ZF没办法,要求银行把贷款置换为地方债。也就是说,银行以高利率放出的贷款变成了利率不到3%的债券,其中的差额都是损失。

于是,这几年我们看到,银行的利润增速从百分之几十到现在的接近零点,坏账越来越多。

但是,借新还旧不能解决问题,其实是把雪球滚得越来越大,让问题越来越难以解决。这些钱究竟最后怎么还呢?中央ZF的办法是用放水来稀释债务。

老百姓以为放水就是印钞票,其实不是。因为在货币供应里,印钞票只占极小部分。现钞在金融学的叫M0,只是冰山一角,而这座大冰山,专业的说法叫M2。

下面是中国的M2与几个发达国家的对比。大家可以看到,中国的M2在08年之前就很多,08年之后更是飞速增长。


说白了,货币与经济是水和面的关系,经济发展了就得多发货币,好比面多了就得加水。如果经济没怎么发展,却大规模放水,那么面就稀了。

面稀了,对内就是通货膨胀,老百姓存进银行一碗面,拿回来时只剩半碗面半碗汤了。这就相当于,企业和政府欠的债,有一大块不用还了,这块损失,让存款的老百姓承担了。

面稀了,对外就是货币贬值。之前,中国为了促进出口,认为压低人民币汇率。所以美国经常指责中国操纵人民币汇率不正当竞争。

经过几年的暗中贬值,不但之前人为压低的那部分没有了,还让人民币汇率高估了。再加上美国央行不再大规模放水,反而打算开始从市场上抽水,使得美元汇率升高。

这一里一外,让大家对人民币的实际购买力越来越没有信心,认为人民币汇率早晚会下跌很多,所以越来越多地把人民币换成外汇,使得外汇储备越来越少。

中国的外汇储备在2014年中达到最高点3.99万亿美元,一年半后就跌到接近3万亿。要知道,中国一年的顺差就有三千几百亿美元呢。

这三年来,不仅存量少了1万亿美元,三年的进出口顺差也有1万亿美元,也就是说,实际上,三年来外汇储备就少了四成。这还是最近两年来,ZF想方设法、围追堵截才达到的,不然外汇流失会更多。

外汇储备的大量流失让央行不能继续大规模放水了,否则外汇储备就撑不住了。于是,我们看到,最近几个月的M2增速越来越低,从08年的27%,到现在的个位数。

M2少了,就意味着银行不能像以前一样,从央行那里借到便宜的钱了。从老百姓那里吸储也不容易,因为利率那么低,老百姓也不是傻子,不愿意挨宰,更愿意把钱拿出来买房子来抵消通货膨胀。

于是银行只能跟同业去借钱,同业市场的利率不受央行控制,很快就升高了。在同业市场,银行们主要是借款的一方,那贷款的一方是谁呢?正是货币基金,也就是老百姓常说的各种“宝宝”们。

货币基金给银行的贷款利率越来越高,利润越来越多,自然能支付起越来越高的利息给老百姓,所以大家都越来越愿意把钱放在余额宝里,使得余额宝的规模越来越大。

这其中的关键就是,央行不去管制同业利率,而去管制基准利率。那为什么央行不去管制同业利率呢?如果把同业利率降低到基准利率的水平,那货币基金就没有什么收益,自然不能吸引老百姓的存款了。

这是因为同业市场是金融机构之间调剂余缺的地方,如果把同业利率强行降低,那么资金富裕的金融机构就不愿意把钱借给资金紧张的金融机构了。

老百姓自己资金周转不过来时得去借钱,金融机构也一样啊,万一真的周转不过来那是会引发违约、挤兑乃至倒闭的,所以央行不敢这么做。

那央行能不能把基准利率提高到同业利率的水平呢,那这样货币基金对银行存款就没什么优势了。

这样也不行。因为那么已经借了很多钱的企业和政府ZF会受不了。因为他们中的很多,不仅还不起本金,连利息也快还不起了。

不仅是企业,近几年全民炒房,很多个人身上也背着贷款,一旦利率快速上升,那么很可能还不上月供。

有些人可能说,我就一套房子,利息翻一倍也还的上。但是,架不住有很多人手里有多套房子啊,一旦利率快速上升,他们很难还得起,必然要卖房还贷。

这样的人不需要很多,一个小区里有几个快速卖房的业主,那么整个小区的价格都会被这几套房的交易价格拉下来。房价下跌后,总有人会恐慌性卖房,把房价拉得更低。

即使没有恐慌性卖房,房价下跌一定程度后,银行也会要求贷款客户尽快增加抵押和担保,拿不出足够的抵押和担保就得卖房。所以最近各大城市都开始“限售”,就是害怕出现连锁反应和踩踏事件。

所以个人、企业、ZF,都害怕利率升高。之前还能借新还旧、勉强维持,一旦提高基准利率,那利息都还不起了,很快就会违约。银行的坏账一下子就会爆发。

金融是经济的中枢,银行是金融的中枢,一旦银行坏账大规模爆发,那么整个经济都要出大乱子,难以收拾。

但是,不加息提高利率是不大可能的,因为外汇储备是命根子,必须得保住。极端情况下,如果外汇储备低到了一定水平,宁可加息刺破泡沫也要保住外汇储备。为什么说外汇储备如此重要,一定要保住呢?

因为我国是大国中外贸依存度最高的国家,高达60%,世所罕见,庞大的进口规模需要足够的外汇储备。没有外汇储备就不能进口。

老百姓没有日本纸尿裤、法国化妆品、不去美国旅游、不去澳洲留学,依然能好好过日子,但粮食、石油、芯片这三大类是一定要有的。

2014年中国的粮食自给率是87%,农产品自给率是70%,乍看不低,但这是用极高的粮食收购价格给农民补贴得到的。2014年我国四种谷物价格平均高于国际市场一半。也就是说,我国是靠花大价钱来保证粮食供应的。

有人说,就算是花了大价钱,但我国的粮食还是能基本维持自给的。但是,不要忘了吃肉。公认的肉粮比是六比一以上,也就是说,肉价得高过粮价六倍以上才行。我国的粮食产量只能保证老百姓吃粮,近几年来,肉类进口规模越来越大。
根据JCI统计数据显示,受肉类总产量下降影响,2016年我国肉品实际进口总量首次超过450万吨,同比增幅超过68.7%,而2010年到2016年肉品进口总量年平均增速为19.7%。除去进口肉品外,活猪/禽类冻品/冷冻猪、牛肉等走私产品,“明目张胆”的越过海关、边检等进入中国市场。按照业内的保守估计,走私肉品的数量保守估计应是正规进口数量的2~3倍,而实际走私肉品数量可能更多。
中国两大油田2016年大量减产,国内石油对外依存度升至65%,天然气对外依存度升至34.9%。石油是工业的血液,没了石油后果不堪设想。况且中国的农业已经是石油农业,没了石油,化肥农药也产不出来。

我国的机电行业出口是最大一块,但是其中离不开芯片进口,而我国的芯片进口率已经超过90%。其他的问题,忍忍就过去了,外汇储备如果耗竭,危及粮食、石油、芯片进口,那中国经济真要崩溃了。

所以中国要保外汇储备,不得不停止大规模放水,怕利率升高刺破经济泡沫,又不敢快速加息,让基准利率跟上同业利率这个中国最真实的利率。

这其中的不对称,让银行最难受。银行也不愿意做亏本生意啊。存款基准利率太低,储蓄上不来,银行就加大理财产品的发售力度。因为理财产品的利率不受央行管控。
但是,近几年来,银监会对理财产品的发行和投向有了越来越越严格的规定,特别是今年以来。
存款不够,贷款就不好做,银行只能收紧贷款额度,提高贷款利率。银行对企业的贷款利率早就提高了,只是老百姓不知道而已,因为这个利率不是统一的,而是每家企业都不一样。

最近几个月,老百姓发现个人住房贷款很难办,利率也提高了,这才意识到贷款利率真的提高了。

银行对企业对个人的贷款都难做,但是又要考核利润。只能从其他地方想办法。于是就借助证券公司、信托公司、基金子公司等资产管理公司作为通道,把资金包装成千奇百怪的产品发售出去。

这样做有很多好处。

首先,银行贷款受到的监管是最严格的,把贷款包装成其他产品,就能够逃避银监会的严格管制,把款放给不能放贷的企业。

其次,银行发放贷款是要消耗资本金的,资本金不够了,存款再多也不能拿出去放贷。包装以后,就能“出表”,不受严格监管了。

再次,银行发放贷款是有风险的,企业还不上贷款银行也难受。银行借助其他金融机构做通道,一方面给了通道机构服务费,另一方面也让这些通道机构承担了相应的风险。一旦出事,倒霉的是通道机构,银行不受影响。

于是,各家银行都开始拼命做“包装”业务,银行包装一次不够,通道机构就继续包装。本来只有银行到企业一个环节,现在却层层嵌套,七八个环节也不稀奇。于是就出现了所谓的“资金空转”。

即使这样,银行还是不能弥补利率不对称给自己带来的损失,怎么办呢?大家都找银行借钱放杠杆,银行自己也可以啊!

本来一项业务只有1%的利润,不值得做,但是,加上十倍的杠杆,就有10%的利润了,如果还不够,那就再加杠杆,这样别说是1%利润率的业务了,0.1%的业务也能做。

这样一来,一边是环节越来越多,一边是杠杆越来越大,积累的风险就越来越不可控。一旦有一个点出了问题,很快就会层层传染,层层放大,最终殃及整个金融体系。

所以今年四月份以来,银监会开始了史上最严格的监管,因为,金融体系里的黑洞越来越大,再不管的话,以后就无法收拾了。

不过,这样做不能解决根本的问题。银行是要盈利的,不给银行开正门,银行就得走后门。加强监管只是扬汤止沸,不是釜底抽薪。根子还是在基准利率上。

美国已经开始加息缩表,并将继续加息缩表。中国要想维持外汇储备和人民币汇率,就得跟上美国的步伐,不仅提高银行间市场的利率,还要提高基准利率。

如果美国走得慢,中国就能慢慢加息,老百姓、企业、ZF就还有慢慢适应的余地。如果美国走得快,中国就麻烦了。一旦出麻烦,谁也不想背黑锅。

ZXC先生明年就要退休了,这半年他肯定不想给自己找麻烦,何况还有秋天的那场重大会议,更不能出乱子,所以只能慢慢来。

但是,现在越慢以后问题越难解决。现在我们只能,一方面加强外汇管制,阻止资本外逃,另一方面,祈祷美国人慢点走,给中国留出充裕的时间来。

白话区块链技术栈与应用

内容概要
现如今说起比特币,相信不少朋友已是耳熟能详了,尤其是这两年随着其价格飙升,甚至超过了黄金 ,超过了房地产,各大财经媒体乃至央视都有所关注报道;

在很多朋友心目中,比特币似乎就是一个类似于游戏币、邮币卡这样的炒作标的物,除了惊叹于它的价格上升速度外,对其了解还是寥寥。

然而,这一切的背后,到底是什么在支撑,现如今除了比特币,还有很多其他的类似系统, 比如莱特币、以太坊、 比特股等等,不胜其多,但凡介绍这些内容的软文, 大体都会提到一个名词:区块链 

一切似乎都是由区块链引起的,那么,就让我们剖开迷雾,揭开神秘的面纱,来看看这里头到底是个什么,它有什么特点,能有什么用处。
白话区块链技术栈与应用

导读:本章内容主要介绍区块链本身的含义以及代表性的技术组成,并由此介绍比特币是怎么通过这样的技术产生的。

1. 什么是区块链

1.1  一个有趣的数据记录格式

区块链,拆开来就是“区块+链”,实际上是一种数据的记录格式,软件在处理数据的时候,总是需要按照某种格式来读写,比如我们通常使用的关系型数据库,数据是按照一条一条的记录保存,或者再通俗的说,就像会计记账,将每一笔发生的业务都记在账本中,每一笔记录的账务称之为是凭证,一个月下来,将记录的一堆凭证数据汇总成 一个账簿,每过一个月就月结一下。区块链的格式,跟会计的这种记账方法很类似,所谓区块也就是一大坨数据的意思,我们可以将会计每个月所有记录的记账凭证看成是一个个的区块,区块之间通过年 月串联起来,这样看起来就像是一条数据链一样,区块链其实就是这么简单的一个格式,我们看个示意图:

如图所示,就是区块链格式的样子了 ,在比特币中,不是每个月存储一个区块, 而是大约每10分钟一个区块(注意只是大约,不是精确的10分钟),区块中存储的数据是最近的10分钟内发 生的交易 事务(最近的10分钟这个说法其实并不严谨,现在可以就这么理 解,在下面另有解释),可以理解为就是流水账。

大家看到这样的格式后,不知道是否有些似曾相识的联想,其实这样的数据格式,在生活中是有很多相似的;

比如工厂仓库的出入库记录,这个跟会计账本是类似的,还有家谱或者族谱,每一代人之间的关系是一个区块,到了下一代 又是一个区块,区块之间是父辈与子 女的关系连接,等等;而如果是计算机专业的朋友,一眼看上去,这不就是个线性表吗?是的,这就是比特币软件的主要数据存储格式,也是其他所有基于区块链技术的系统存取数据的格式。

这是一个很有趣的数据格式,它将连续不断的发生的数据分成了一个 一个的数据块,这样每个区块就都有自己的数字编号,也可以有自己的身份证号(通过哈希算法计算得到),在下载同步这些数据的时候,可以并行的从各个节点来获得,无论数据先后,到达本地后再根据区块号或者身份证号来组装起来就行 。

另外,这种格式是一种链条的格式,链条最大的特点就是一环扣一环,很难从中间去破坏, 比如有人篡改了中间的5号区块,那么如果要让数据看起来是完整的,就得同步把5号区块后续的所有区块都要更改掉,这个难度就大了,这也是区块链数据格式不可篡改的其中一个原因(当然了,如果仅仅只是本机的数据,也没什么不可篡改的,区块链系统真正的防篡改能力是通过无数个区块链系统运行的节点网络以及共识算法来实现的,这个在下面再介绍)。

这种格式还要个妙处,如果这个数据总是由一个人来记录的,那自然也没什么,但是如果放到网络中, 大家共同来记录这个数据,那就有点意思了,每个区块数据由谁来记录或者说打包,是可以设置一个游戏规则的,比如说掷骰 子,大家约定谁能连续3次掷出6,那就让他来记这个数据,为了补偿 一下他的劳动投入,奖励给他一些收益, 比特币正是使用了这样的原理来不断的发行新的比特币出来,奖励给打包的那个人的比特币就是新发行的比特币。

说到这里,大家觉得有点意思了吧?

1.2  一组技术的代表称呼

刚刚我们说了,区块链是一种数据的记录格式,可如果仅仅如此的话,实在不算是什么大不了的创新,事实上,在技术上区块链是一组技术的代名词,我们通常都说使用了区块链技术就是这个意思,那么既然是一组技术,那是由哪些技术组合起来的呢?我们来看一组关键词:

  • 公开密钥算法
  • 网络共识算法(挖矿)
  • 梅克尔数据证明
  • 可编程脚本合约
  • 区块链账本

1.公开密钥算法

属于计算机密码学⾥面传统的技术,公开密钥算法是⼀种不对称的加密算法,拥有两个密钥,可以互相加解密,通常其中的一个密钥是公开的称之为公钥,另外一个密钥是保密的称之为私钥;

2.哈希算法

也是属于计算机密码学中传统的技术,应⽤就更广泛了,主要⽤来对⼀段数据进行计算,得出⼀个摘要信息,通俗点说就是给一段数据⽣成⼀个身份证号;不同的消息生成的摘要数据是不⼀样的(某些抗碰撞能力弱的哈希算法可能在这⽅面会有些问题,但是使⽤广泛的⼀些知名的哈希算法,发⽣碰撞的概率很低),相当于给⼀段数据⽣成了一个身份证号这么个意思,在区块链系统中,哈希算法的使⽤很多,⽐如区块与区块之间,就是通过区块头的哈希关联起来的,⽽区块中的每⼀笔交易事务也都会⽣成⼀个哈希值作为交易易数据的ID,通过这些身份证号可以⽅便的检索或者关联区块,也能⽅便的指定某⼀笔交易事务。

哈希算法还可以用来生成梅克尔树,在下面我们再详细介绍,我们说了,哈希算法的特点是,只要目标数据有哪怕⼀点点的改动,生成的哈希值就会完全不不一样,因此可以⽤用来验证数据是否被改动过。

3.⽹络共识算法

在很久前就有计算机科学家研究过,并且提出过一些模型,⽐如拜占庭容错算法之类,比特币、以太坊这些使用的是⼀种工作量证明算法,其它的一些区块链系统有使用其他各种衍⽣的算法,⽽算法的原理都很简单,就是约定⼀个规则,通过共同执行这个规则,让每个分布式的节点数据都保持最终一致;

4.梅克尔数据证明

这是利用哈希算法将⼀组数据创建为⼀棵哈希树结构,⽤于验证数据完整性的一种结构,同时也应⽤在了轻量级钱包中。不同的区块链系统对梅克尔树的应⽤不尽相同,比特币中是⼆叉梅克尔树,比较简单,通过交易事务的哈希值两两配合生成一棵树,以太坊这种就复杂的多了,称之为梅克尔.帕特⾥夏树,这里暂时不赘述。

5.可编程脚本合约

什么叫合约?就是⼀组约定的规则,⽐如银行的结算系统,⼩明转账100给小王,在这么⼀个过程中,银⾏系统就会根据⼀组规则自动执行,规则包含⽐如检测⼩明的密码是否正确,余额是否⾜够,⼩王的账号是否正确,检测通过则分别更改两者的账户⾦额并写⼊事务⽇志。是的,这就是合约的意思了,当然,如果范围再⼴泛些,各种商业合约也都是这么个意思,因此可编程脚本合约也没什么好稀奇的,然⽽,如果将这种编程合约放到区块链的环境中,就⽐较有趣了,看两个特点:

第⼀个,区块链系统是⽆中⼼的分布式⽹络,没有边界

第⼆个,区块链系统通过⼀系列的技术实现了可信任⽹络

加起来,就是⽆边界的可信任⽹络,在这样的⼀个⽹络中执⾏既定的合约,成本低⽽而且安全,⽐特币在本质上也是属于这么⼀种脚本合约,只不过在⽐特币软件中,合约中处理的事情是⽐特币的转账,如果扩展这个概念,众筹、担保、分润等各种合约种类都能应⽤在这上⾯,⽤户也可以⾃行编写合约规则,以太坊便是这⽅面的⼀个典型代表,并由此带出了智能合约的应⽤。

这些技术的具体解释,我们在下⾯⼀一详述。

其中的【区块链账本】我们已经介绍过了,不再赘述,那么其他的技术都具体是什么意思呢,它们是怎么与区块链账本结合起来的?我们来一一说明一下:

1.3 创世应用“比特币”

说了这么多,我们知道,区块链技术反正就是一套软件开发技术,跟我们平时的网站开发技术、游戏开发技术、手机APP开发技术类似,只不过,与其他的开发技术不同的是,它能开发出一款软件,这种软件能制造“货币”出来,这就让人觉得有些不可思议了,比特币正是区块链技术的第一个应用软件,因此我们称它为“创世应用”。

正是比特币把区块链的技术理念带到了我们的视野中,虽然⽐特币的创始人中本聪⼀直都是⼀个谜,没有搞得清楚他到底是⼀个⼈人还是⼀个组织,但这些都不重要,重要的是⽐特币系统以⼀种极其天才的创新设计,解决了人们⼀直以来都难以解决的问题,那就是异步⽹络环境中实现数据的可信任共识的⽅案。我们抛开⽐特币这个货币的概念,纯粹站在软件或者⽹络的⻆度来看⼀下,假设我们是当初的中本聪,模拟⼀下当时的想法,⾸先,希望实现⼀套系统,可以联⽹,并且通过网络传递数据,如果是使⽤中心服务器这个结构的话,那显然是不够安全的,只要服务器上的数据损坏或者被攻击,系统等于就被瘫痪了,因此,决定采⽤分布式的结构,可是分布式结构有几个问题;

第一个,这些分布式的系统节点运⾏在哪呢,谁愿意提供计算机设施来运⾏行,靠⾃己来部署,那个成本就没底了;

第⼆个,分布式的节点,那么数据的⼀致性就是个问题,没有了服务器,数据来源也就没有权威的保证了;

第三个,怎么来验证⽹络中的数据呢?

对于第⼀个问题,站在经济⻆度,如果系统提供⼀种激励措施,让运⾏节点的⼈有利可图应该就能解决了,因此设计这个系统,得要有⼀个奖励或者激励的规则,在⽐特币中,打包区块的矿⼯工能够获得⼀定数量量的⽐特币奖励,这就是激励措施了。

对于第⼆个,这个问题是个难点,比特币要运⾏在公⽹上,各种情况都有,数据可能被篡改,⽹络可能不稳定,就连节点什么时候运⾏也不在控制之中,如何来解决这些问题呢?得要有⼀个机制,这个机制必须要有公正性,既然网络是可能不可靠不稳定的,那这个机制中就不能有太多对其他节点的依赖,得是⼀个主要依靠本机就能实⾏的⼀个做法。

换成是我,还真的很难想到⼀个好方法,传统的⼀些技术都有些问题,如果是在⼀个节点明确,网络也较为良好的场合,还好处理理⼀些,可是⽐特币的情况要⽐这个复杂的多。著名的CAP原理,阐述了这么⼀个结论:分布式计算系统不可能同时确保⼀致性、可⽤性和分区容忍性。看下这三个术语分别是是什么意思吧:

【⼀致性】:这⾥是指强⼀致性,发⽣在后⾯的事件能看到前⾯事件发⽣导致的结果

【可⽤性】:在有限时间内,任何⾮失败节点都能应答请求

【分区容忍性】:也就是说⽹络有可能发⽣分区,也就是说节点之间的通信不可保障不能同时确保,那就只能靠弱化某⼀个或者某两个特性,⽽而增强其中⼀个特性了。

中本聪在实现的时候,设计了⼀个工作量证明,很有意思,设置⼀个难度值,大家都通过⼀个类似于掷骰⼦的算法来命中⼀个结果,若结果符合预期的要求,就成功,成功者可以获得数据的记账权也就是区块数据打包,打包完毕后⼴广播给其他⼈,其他⼈验证后写⼊⾃己的数据中。

在这个过程中,由于使⽤的算法是⼀个类似于暴力破解的算法,除了靠提⾼计算机算力没有更高的办法去讨巧(这就⼀定程度上实现了⼀定程度的公正,当然了,⼟豪有能⼒购买更高性能的计算机设施,从⽽比普通⽤户更加具有抢得打包权的能力,这也是⼀个问题,不过⼀种技术总是只能解决⼀定范围的技术问题),但是大家需要注意的是,能够算出⼀个命中的值的,可并不⼀定只有⼀个⼈,如果出现了多个呢?那大家就只能进⾏区块的⼴播竞争了,谁被其他的节点接收的多,谁就被最终认可,⽽其他同样挖矿成功的就会被丢弃,从⽽得不到奖励。

因此,比特币中的这种数据⼀致性的算法是最终⼀致性而不是实时的⼀致性,这个大家⼀定要注意了。

对于第三个问题,怎么验证⽹络中的数据,在⽐特币⽹络中,每个节点都是独⽴的验证数据的,在验证过程不需要⽹络中其他节点提供依赖的服务。

2. 区块链技术栈

 

2.1 记录格式—区块.链

见【1.1  一个有趣的数据记录格式

2.2  网络结构-P2P

现如今,⼤概很少软件是单机版的了,就连输⼊法⽐如搜狗输⼊法、讯飞输⼊法也都是要通过联⽹来更新词库以及提供其他⼀些智能功能的,那么,既然是联⽹的软件,就避不开⼀个问题,那就是⽹络结构,就好⽐我们要造房⼦,总得设计下房屋的结构吧,砖瓦结构呢还是框架结构,单独的平⽅呢还是连⽚的⼩区。

迄今为⽌,⽆论什么样的⽹络结构,总体来区分⼀下的话,就是两种:客户端-服务器结构、P2P结构。

P2P也就是peer to peer的意思,中⽂点对点,也就是对等的意思。

区块链中的特点之⼀就是分布式,每个节点都维持完整的账本数据,可以独⽴的进⾏数据验证,独立的发送数据接收数据,彼此之间通过共识来实现数据的不可篡改和⼀致性,⽽每个节点都独⽴的按照规则做着⾃己的事情。任何⼀个节点的损坏或者图退出都不⾜以影响整个⽹络的正常使⽤,尤其当节点数量很多的事情,这也就避免了单点故障。

由于不存在⼀个服务器,也因此对等⽹络结构中的节点,是需要有⼀个认识彼此的机制的,这就是⽹络路由功能,简单来说,就是每个节点都会负责为其他节点提供地址信息,同时也会去索取和更新有效的节点地址。

就个⼈理解来说,对等⽹络结构最核⼼的就是⽹络共识机制,每个节点既当客户端也当服务器器,通过共识机制来协同。

2.3 同步机制-共识算法

区块链系统是对等⽹络结构,每个运⾏的节点都各⾃保存⾃⼰的数据副本,那么问题就来了,怎么来保证彼此之间的数据统⼀呢,既然没有⼀个中⼼服务器,⾃然也就没有⼀个传统意义上的权威数据来源了,⽽且对等⽹络中的每个节点都是平等的,那要是彼此的数据不⼀致,以谁的为准呢?这就要使⽤到⼀个同步机制,也就是共识算法。

共识算法的主要⽬的就是通过⼀种机制,使得⽹络中产⽣的数据让⼤家都能认可也就是所谓的共识,⽽对于那些⾮法的⽆效的数据会被丢弃掉,可以说,共识算法是确保区块链⽹络数据同步以及数据安全的重要环节。每⼀种不同的区块链系统都会有⾃⼰的⼀套共识算法,⽐如PoW(proof of work,⼯作量量证明)、PoS(proof of stake,权益证明)、DPoS(Delegated proof of stake,股份授权证明)、PBFT(Practical Byzantine Fault Tolerance,拜占庭容错算法)等等,很多,每种不同的算法也各有特点和优劣。

再具体说明之前,有朋友可能会有疑问,就算是对等⽹络,没有⼀个服务器来权威的提供数据来源,但只要节点之间彼此都连接,随时保持⼀致不就⾏了,如果是在⼀个⽹络良好的局域⽹中,并且运⾏的节点是受到严格的管理的,那⼤概也就没什么问题了,可事实上是,类似⽐特币这样的区块链系统是运⾏在互联⽹上的,⽽且谁也不能保证⽹络是个什么状况,甚⾄就连运⾏的节点什么时候启动什么时候会关闭掉都不知道,⽐如我们使⽤微信聊天,假设没有⼀个微信服务器存在,当⼩明发消息给⼩王时,⼩王正好没开微信,或者⼩王正好在地下停⻋场,没⽹络,那怎么办?种种情况,都不能保证节点之间能够随时连接在⼀起,因此区块链中的共识算法,要解决的是这样⼀个情况异常复杂的⽹络环境中的数据同步问题。

为了让⼤家⽐较能够形象的理解,我们还是以⽐特币为例,⽐特币中使⽤的是⼀种⼯作量量证明算法,其原理很简单,如下:

我们还是以⽐特币为例来说明,⽐特币中的⽹络共识算法的过程原理相对简单,理解了这部分,再去理解其他的共识算法就会⽐较有基础。

在⽐特币中,使⽤的共识算法是⼀种⼯作量量证明算法,说通俗点,⼤家通过⼀种竞争算法来抢夺区块数据的打包权,谁抢到了谁就能将发⽣的交易易数据打包成区块,并且⼴播出去,其他节点验证后没有问题就保存到⾃⼰的区块链账本中,这种竞争算法的原理很简单,系统会计算出⼀个难度⽬标值,然后⼤家通过对区块头进⾏⼀个加入了随机数的哈希计算,直到算出的值⼩于难度⽬标值,那就算是成功拿到记账权了,就跟掷骰子差不多意思,谁掷出了⼀组符合条件的数字谁就赢了。

有朋友可能问,那要是不⽌⼀个⼈算出了那么⼀个数字呢,以谁的为准呢?呵呵,这个时候,就要靠运⽓了,假如A和B都得到了符合条件的⽬标数据,都打包,都⼴播了,这个时候就看谁⼴播的范围最⼤,影响最⻓远了,最后⽐特币⽹络会保留⼴播范围最⼤的那个。

⼤家看到在这个⼩节的标题上放了个“挖矿”的字样,是不是共识算法都称之为是挖矿算法呢?答案是否定的。在这⾥之所以放⼀个“挖矿”的字样,是因为在不少的公链系统中,⽐如⽐特币、莱特币、以太坊等,都是通过这样的⼀个共识算法来发行新币的,怎么发⾏呢,就是奖励⼀定数量量的币给成功挖到区块的矿⼯。

2.4 完整证明-梅克尔树

梅克尔树是一种数据结构,跟区块链账本数据格式一样,是用于维护 一类数据的,区块链的账本格式是一条链,梅克尔树,顾名思义是 一种树结构,梅克尔树的目的是为了实现完整性证明,在不同的区块链系统中,对梅克尔树的使 用不尽相同,比特币中使用的称之为二叉梅克尔树,而比如以太坊系统中使用的则是梅克尔-帕特里夏树,相对来说, 二叉梅克尔树要简单许多,咱们就从简单的开始介绍吧,还是以比特币中的为例 。

既然是树结构,那就有一个个的树节点,那么比特币中的树节点中都是哪些数据呢?实际上,在比特币中,每个区块中都包含有一颗梅 克尔树,我们来看看,这棵树是怎么种出来的。

在每个区块中都包含有很多交易事务,每条事务都有一个身份证号,这是通过哈希算法计算而来的,可以唯一的表示某条事务记录,假如说某个区块中有6条事务记录,那我们就拿出6条事务记录的身份证号也就是哈希值,进行两两配对,然后分别再计算出两两配对的事务哈希值,依次往上,直到最后计算出一个根哈希,我们来看个图示:

 

 

在⽐特币中,每个区块都能⽣成⼀颗梅克尔树,是通过什么来⽣成的呢?是通过交易事务,在⼀个区块中,每条交易事务都会被计算⼀个哈希值,假设某个区块有4条事务,则如图所示,Hash1到Hash4就是这4条事务的哈希值,接下来再次对事务的哈希值两两哈希,直到最后⽣成⼀个根哈希,如此,⼀棵梅克尔树就⽣成了。那么,这样的⼀棵树⽣成后有什么⽤呢?

⾸先,⽐特币的节点在进⾏数据同步的时候,会向多个节点下载数据,这个时候,就会有个问题,怎么来验证获得的数据是完整的还是不完整的呢,是有问题还是没问题的呢?在点对点⽹络中进⾏数据传输的时候,显然并不只是从⼀台服务器上下载数据,⽽且其中的⼀些机器还可能是不稳定的,甚⾄是不可信的,这个时候,通过上述的⼀个⼤文件⼀个哈希值的⽅式就不太能起作⽤了。

然后通过梅克尔树,假设图中的2号事务数据下载有问题,则计算出的Hash12必然是与其他节点不⼀致的,很快就能定位到问题块,除了能够快速定位到数据块外,还有⼀个作⽤,就是对SPV(Simplified Payment Verification, 简单⽀付验证)的支持,我们知道,⽐特币核⼼钱包是要搭配完整的区块链数据使⽤的,包含了所有发⽣的交易事务,也因此,可以对接收或者发起的交易事务进⾏完整的验证,⽐如是否包含⾜够的余额,是否双花等,但是这种却也有个很⼤的问题,它必须要带上⼀个数据量很⼤的账本副本,这就限制了⽐特币钱包的使⽤,有时候我们只是想验证⼀下⽀付是否发⽣过就⾏了,完整的交易可以交给核心节点,那怎么办呢?可以通过如下的过程来实现:

1.  ⾸先下载完整的区块头数据,注意是区块头不是所有的区块链数据,区块头中包含有区块的梅克尔根

2.  如果是想要验证某笔⽀付交易,则计算出这笔交易事务的哈希值txHash

3.  找到txHash所在的区块,验证⼀下所在区块的区块头是否包含在区块链账本中

4.  获得所在区块中计算梅克尔根所需要的哈希值,注意我们并不需要所有的事务哈希值,如图所示,如果是要校验Hash1的话,我们只需要再搜集Hash2、Hash34即可

5.  计算出梅克尔根

6.  若计算结果与所在区块的梅克尔根相等,则⽀付交易是存在的。

7.  根据该block header所处的位置,还可以确定该交易得到了多少个确认

从中我们可以看到,梅克尔树是相当重要的。⼤家可以设想⼀下,这种结构还能应⽤在哪些场景下。

2.5 账户管理 -公开密钥算法

我们在使用通常的网络服务时,都会注册一个用户名,无论是使用淘宝、京东、微信等,还是玩网络游戏之类,都会去注册一个用户名,那么区块链系统中是怎么来注册用户名的呢?实际上在区块链系统中 一般是没有用户名这个概念的,而只有一个账户地址的概念, 无论是使用比特币还是以太坊还是其他的,基本都是通过一个地址来表示的,对于支持数字货币的区块链系统这个地址也称之为是钱包地址,那么这个地址是从何而来的呢?我们先来了解一下公开密钥算法:

这是⼀种加密算法,通常的加密算法,密钥只有⼀个,举个例子,我们希望对⼀串串数字进⾏行加密,约定将每⼀个数字都加上2,⽐如1,2,3,4,5就变成了3,4,5,6,7,如果有谁知道了这种加密⽅法,那同时也就知道了解密算法,这种⼀般称之为叫对称密码算法;

如果希望加密的⽅法与解密的⽅法是可以独⽴的且⽆无法互相直接推倒出来,那么,这种算法就是不对称加密算法,也就是所说的公开密钥算法,为什么叫公开密钥呢,因为这种拥有两种密钥,⼀个是保密的称之为私钥,⼀个是可以公开的,称之为公钥,使⽤用私钥加密的数据可以通过公钥解密,反过来使⽤公钥加密的数据可以通过私钥解密,⽬目前这种算法应⽤比较多的有RSA算法ECC椭圆曲线算法,前者是利用了⼤素数分解难度的原理理,后者是利用了椭圆曲线离散对数的计算难度,具体细节基于篇幅这⾥不再展开,区块链系统中,通常椭圆曲线算法应⽤的最多。

以⽐特币为例,⽤户可以在⾃己的钱包中创建地址,这个地址类似于银⾏账号,我们可以将⽐特币从⼀个地址发往另外⼀个地址,那么,这个地址从何⽽来的呢,实际上,从本质上来讲,并没有⽐特币地址这么⼀个东⻄存在,为什么这么说?⽤户在创建钱包地址时,实际上是创建了⼀对公钥和私钥,⽽所谓的地址只是公钥的⼀种格式化表示。 ⽤户通过私钥签名证明⾃己拥有某笔⽐特币,⽽通过公开的公钥可以验证⾃己的身份,只要⾃己通过私钥签名⼀笔交易或者签名⼀笔消息,任何⼈人都可以通过公开的公钥来确认是否是合法的用户。也就是说,公开密钥算法不但⽤来识别某个地址用户,也是⽤来完成交易事务的,不但是⽐特币,其他的区块链系统也是同样的原理。

2.6 智能合约-可编程状态逻辑

这是区块链系统⾮常重要的特点,我们知道,区块链系统可以创建⼀个可信任的⽹络,在这样⼀个可信任的网络中可以放心的通过⼀组代码编写的既定规则,转移数据的所有权,变更数据的状态。⽐特币⽹络中可以转移⽐特币,以太坊⽹络中可以转移以太坊还可以通过其他的智能合约实现按规则的状态变更。

这些到底是什么意思呢?

通常,在⼀个传统系统中,⽐如银⾏行的账户系统,是怎么来表明⼀笔钱是谁的呢?是通过账户和密码,⽐如⼩明转了了100元给⼩王,这100的⾦金金额数值就会写⼊到⼩王的账户,然后扣除掉⼩明账户⾥100,⼩王的账户只有通过⼩王⾃己的密码才能验证通过使⽤,这个逻辑看起来很正常,⼀直以来我们都是来的。然⽽而,区块链系统中却不是这么来实现的。

让我们来站在⼀个⽐较⾼的⻆角度来看待⼀下,以银⾏账户为例,⽆论是转账,存钱还是扣除费⽤等,不管是什么样的业务,对于账户来说,站在数据的层⾯,无⾮就是数据状态的不断变更,⽽每⼀次的变更都是通过⼀系列的规则验证的,这么⼀来,我们可以将这个账户看成是⼀个状态机,如下:

 

这个图很好理解,那么我们可以看到,最主要的不是状态本身,⽽是状态变更的触发条件,在这个图中,每个状态之间的变更都是有条件的,区块链系统中通常会怎么来实现这么⼀个条件的触发呢?我们以转账来说明:

1. 发送⽅发起⼀个转账交易,类似于开了⼀张⽀票,然后签上⾃⼰的名字(私钥签名)

2. 在⽀票上写上对⽅的账户地址(对⽅的钱包地址,我们知道钱包地址就是通过公钥转换⽽来的)

3. 向⽹络中发送这笔交易,每个节点都可以来验证这条交易是否有效(⽐如发送⽅的余额是否⾜足够,私钥签名是否合法等)

4. 节点如果验证没问题就能通过,这条交易事务最终会被矿⼯打包到区块(相当于正式的记了个账)

5. 接收⽅可以通过⾃⼰的私钥来验证⾃⼰对这条转账交易的拥有权(这句话⼀定要理解⼀下),通过⾃⼰的私钥和⽀票上的公钥转成的地址匹配,若能成功,就表明⾃⼰拥有这条交易事务转账的所有权,那么⾃⼰就能花这笔钱了。

这样的⼀个过程是通过什么来实现的呢,是通过⼀组脚本程序,在⽐特币中是⼀对锁定与解锁脚本,在以太坊中是更为复杂的编程脚本,总之,就是通过这样的程序逻辑实现了状态变更的触发条件,只要脚本程序写好,达到触发条件,程序就会严格的执⾏,刚正不阿,不留留半点情⾯面^_^。

那么,我们可以发现,这个程序,实际上相当于就是⼀份合约,大家约定了⼀个规则,符合规则了就照章办事,⽽具体是什么样的规则,这个是可以事先编写的(⽐特币中功能⽐较受限,⼀般也就能实现转账交易,以太坊则可以⾃定义编写各种合约规则),将这样的⼀份合约放在这样的⼀个去中⼼,分布式的环境中,由⽹络共识来保证不可篡改,这是多么创新的⼀个思路啊,这种可编程合约的思想可以⼴泛的应⽤于各种商业环境之下包括金融领域。

3. 应用特点

 

3.1 分布式网络

P2P⽹络本身就是⼀个分布式⽹络,区块链⽹络中并没有⼀个真正意义上的服务器,内部的运⾏逻辑也并不假设有服务器的存在。在区块链之前,也有过不少的分布式⽹络系统,⽐如⼤家很熟悉的电驴下载、BT下载,互联⽹初期的时候,⼤家都是到⽹站服务器去下载,下载的⼈多了,速度就会慢,因为占流量了或者说服务器更繁忙了,然而BT下载这种,确实下载的⼈越多,速度越快,我们不来详细的解析BT下载的具体技术细节,就光从⽹络结构上来讲,分布式的⽹络结构,使每个节点都既是使⽤者也是服务的提供者,也就形成了⼈多力量⼤的效果。

分布式⽹络中,首要的⼀个问题就是,如何保证数据的⼀致性,有些对数据的⼀致性要求不⾼⽐如⽹⻚资源,⽂件服务,早点晚点影响也不⼤;有些则希望在⼀个能承受的时间范围内达成⼀致,⽐特币就是这种,通常会建议发送⼀笔交易事务后,等待⾄少6个区块,原因就是6个区块后,数据基本上被⼤部分节点收纳的概率就很⼤了,还有⼀些对⼀致性的要求很即时,⽐如银⾏结算,不可能说要等段时间,账本才能⼀致,那对银⾏来说不能接受。

针对不同的使⽤场景,分布式⽹络也会不同的扩展,⼤家要注意的是,分布式⽹络并不是说完全没有中心,而是说在整个⽹络结构上是分散的,分布式的,但是每个单元还是有可能会存在中⼼的,毕竟在某些效率要求⾼的场合,中⼼结构的效率是最⾼的,这两者之间并不是互相对立的,⽽是互补的。

3.2 数据不可篡改性

我们可以反过来看⼀下,什么情况下数据是可篡改的。

⽐如数据都管理在⼀个服务器上,那⾃然是可篡改的,再怎么设置身份认证之类,只要突破进去就是⼀马平川了;

再⽐如数据虽然不在⼀个服务器上,但是对数据的验证是⼀个人说了了算的,⽐如现在很多的⽹站服务,⽐如各种电商⽹站啊,甚⾄包括银行(当然,不是说这些系统就会被随意的修改,这⾥只是参照⼀个例子),数据的管理权在⼀个管理员⼿中,数据怎么改并不需要得到其他不受⾃⼰控制的系统验证; 数据的记录权限在⼀个管理员⼿中,跟第二点类似,⾃⼰说了算;

区块链系统怎么保证数据不可篡改性的,对于第⼀点,区块链系统是分布式的,因此不存在⼀个明显的服务器目标;第二点,区块数据需要被⽹络中其他节点验证,⼤家都认可才会被记录在账本中由此达成共识,除非控制了大部分的节点,否则是不现实的;

对于第三点,区块链系统中使⽤各种共识算法,记账权不会掌握在⼀家⼿中,⽐如⽐特币的挖矿算法。

这种特性对于⼀些公众数据的记录是很有意义的,⽐如公证类数据,⽐如众筹账务,慈善款项等。

3.3 规则强制执行性

  • 代码即法律
  • 智能合约的条件执行

3.4  无边界价值转移

区块链网络可以创造一个可信任网络,可信任就表示有信用,而信 用是一切金融传递的基础

区块链系统可以自带金融属性,通过比特币的例子我们也能看到,它可以通过网络在全球各地进行转账交易,通过这种原理,不但可以传递货币,也可以传递其他任何的数字资产。

传统的比如游戏币,游戏道具,某平台的积分等,一定程度上也可以转移价值,但都是很难做到无边界传递的,而且其本身的信用程度也并不高,区块链⽹络⽆无边界,并且可以维持⼀个可信任的网络,这就为资产或者说价值的传递构造了一个成本相当低廉且传播很广泛的⽹络基础设施。

3.5  自治网络系统

这个其实是一个未来的愿景展望,可编程社会的一个基础模型

4. 应用场景

 

4.1 数字代币

比特币、莱特币、以太坊以及基于以太坊的各种合约代币

4.2 众筹合约

属于智能合约的 一种

4.3 跨境 支付

无边界的价值转移能力以及智能合约的特点,很适合应用在金融的跨境支付领域,目前的跨境支付手续繁杂,等待时间也很长,效率不  高,可以考虑在各国银行之间建立一个基于区块链的支付系统。

R3联盟

swift应用超级正本的fabric建立支付网络

4.4身份证明

使用区块链来构建身份管理系统

4.5去中心交易

目前的案例,Bitshares以及Openledger

基于区块链的交易系统,通过预言机创建链上资产,通过代码规则运行公开透明的交易逻辑

5.主流技术平台

5.1比特币

历史上第一个区块链系统,第一个加密数字货币系统,其他的系统基本都是在比特币的基础上开发的

5.2以太坊

数字货币+智能合约,既是一个数字货币系统,也是一个智能合约的开发平台

5.3超级账本

包含一系列的项目

比较著名的就是fabric,是一个面向商业的区块链系统开发框架,其本身其实并不是一个运行的区块链系统而是一套开发框架,一套开发用的半成品基础设施,是由Linux基金会主导的项目。
from:https://mp.weixin.qq.com/s/kuNtNekdsBYxoTtP6xxQqw

不懂点社会心理学,怎么好意思说自己是广告人?

广告是一个复杂的行业,当我们在服务不同客户的时候,经常会要懂得其他行业的很多知识。所以凡是优秀的广告人,大多对商业社会和消费心理都有很深的理解。然而现实中,加班却成了广告人一种不能承受之重。因为种种原因,我们在协调工作和生活上耗费太多时间,很少有机会和精力去吸收和充电。

然而在关注那么多热点新闻后,我发现不管是刷屏案例,还是10W+阅读的爆款文章。在创意和洞察之外,还有心理学规律在背后起着作用。如果能够多懂一些相关的效应和原理,在专业之外尝试用社会心理学的工具去分析。也许能够帮助我们更好的理解消费者,创造更好的创意。当然,还有……搞定客户。

 

01 幸存者偏差

依据大数据的营销,可能一开始就是错的

关于幸存者偏差理论,有一个经常被引用的案例。在二战时期,人们发现所有战斗后返回基地的飞机,通常两侧的机翼中弹比较多,而其他部位的弹孔很少。于是军队决定在中弹较多的部位加强装甲,减少飞机的战损,但这时有为数学家提出质疑。他认为能在战斗后返回基地的飞机,都是没有被击中关键部位,受了轻伤而已。而受到致命攻击的飞机,已经被击落在战场,他们是无法被统计的样本,即“沉默的大多数”。

这个例子就很好地说明了,当我们去试图用统计结果推算某种规律时,一定要注意是否存在一些容易被忽视的关键信息,导致最终的结果“失真”。

它是人们非常容易犯的错误之一,因为人们很容易就根据现有情况,对未来作出推论和假设。例如现在流行的精准营销概念,其实就存在一种幸存者偏差认知。品牌通过监测用户的行为大数据,锁定对产品感兴趣的消费者,并在电商平台投放针对性广告。看似合情合理,然而事实上,这些广告大多是无效的。因为当人们搜索某件产品并购买之后,往往今后一段时间内,都不会再搜索同样产品,也不会对同类产品感兴趣。这种错误的广告投放策略,就是没有考虑到数据“沉默”的可能。

 

02 马太效应

预算不够,什么都玩不转

马太效应出自圣经《新约·马太福音》里的寓言,耶稣谈到“凡有的,还要加倍给他多余的;没有的,连他所有的也要夺过来”。这里先不谈宗教的阐述,马太效应这其实就是在描述,强者愈强、弱者愈弱的现象。

作为一个常用的经济和社会术语,它被广泛应用于社会心理学、教育、金融以及科学领域。当人们一开始获得不错的成绩后,往往能得到正面评价和资源支持,而之后就会利用这些不断正面刺激,做出更好的成绩。相反,如果开始不顺利的话,时间越往后推迟,能够“逆转”的机会就越小。

之前滴滴和快的红包补贴,共享单车的疯狂投放,大部分也是因为这个原因。有些观点认为,这些烧钱抢用户的行为太浪费,还没盈利就先画大饼,凭空制造虚假繁荣。然而我们假设其中的一方出于成本考虑,不参与疯狂推广的比拼。那么无论在商业规模和传播口碑,都会落于竞争对手的下风。即使能在短暂阶段内保持盈利,但随着市场的扩大、竞争的加剧。弱小的一方会面临融资困难、招不到人才、话语权弱等情况,陷入被动,当然无法避免今后被收购的处境。所以为了保持经营独立和市场主动权,必须要参与到烧钱大战之中。

 

03 羊群效应

关于刷数据,我会给你一个不得不接受的理由

羊群效应又称“从众效应”,是指个人的观念或行为由于真实的或想象的群体的影响或压力,而向与多数人相一致的方向变化的现象。因为每个人的信息接收渠道都是有限的,所以当出现未曾了解的新事物时,大部分倾向于观察周围人的反应,并从中寻找示范和参照。

利用从众心理,是营销的常用手段之一。比如人们在逛街时,会下意识觉得需要排队的奶茶店,会比较好喝。所以有时候老板会去雇人排队,造成热销的假象。但其实排队的奶茶店并不一定好喝,可能只是制作速度慢,材料供应不及时等等。

不仅是线下,线上营销也可以利用这种心理。在许多品牌的眼中,网红大V只是一个个小型媒体,找他们合作也只是换个平台投放广告。所以他们会深恶痛绝刷数据等造假情况。但如果把网红看作内容生产者,只是在推销自己的内容“产品”的话,他们其实更类似于沿街叫卖的商贩。如果一篇内容的阅读、点赞等数据很不错,那么在粉丝(消费者)的眼中价值会更高、更有说服力。所以适当地增加“数据”,反而会帮助品牌传播。

但这个行为有一个风险,就是要考虑内容质量,以及粉丝的心理落差。如果排了两个小时队伍,结果发现并不好喝,或是不是“那么的”好喝,就会对品牌留下极深的负面印象。发誓说“再也不喝了”的例子,其实并不少见。

 

04 口红效应

色号试得多,可能是因为穷

口红效应是20世纪30年代美国大萧条时期提出的经济理论。由于当时社会经济不景气,许多人没有工作,生活拮据。然而人们发现即使如此,口红的销量却不减反增。

为什么没什么钱的人,会去买口红这个非必需品?因为在人们普遍观念中,口红是一个“低价的奢侈品”。当人们受限于经济条件,无法购买大宗商品满足消费欲望时,口红则是一个性价比很高的替代品。同时在使用口红的过程,会使人们更加自信,对生活的困境和未来的更加乐观。

其实不只是口红,许多娱乐消费品也存在“口红效应”的现象。例如经济下行时期,电影市场通常比较火热,文化市场也会更加繁荣。这些商品会使人们满足消费欲望,从现实的烦扰中挣脱出来,价格通常也可以负担的起。好莱坞的崛起,日本动漫产业腾飞,都是在社会经济萧条的阶段出现。所以也可以从这个思路去思考,为什么国内的电影和动漫,一直很难达到美国日本的高度。

 

05 肥皂水效应

客户:我有一个好消息和坏消息,你想听哪个?

这是美国前总统约翰·卡尔文·柯立芝提出的概念:当批评夹杂在赞美中,能减少被批评人的抵触,使得批评更容易被接收。也就是说当正面和负面信息混杂时,人们对负面信息应激反应会下降。

在日常的营销活动中,品牌有时会遇到一些突发的负面事件。这时候就需要立刻引入危机公关处理,防止事态进一步恶化。而很多品牌在公关声明时,对已经既定的负面事实,习惯采用推迟、避重就轻的手段,试图模糊概念。但往往收效甚微,得不到消费者理解和认可。

而如果灵活运用肥皂水效应,向公众及时公布阶段性的补救措施,或一些有利情况。同时,积极承认负面状况的存在。消费者的注意力将从事件的恶劣后果,转移到品牌的后续补救上,其实一定程度上会削弱品牌负面的关注度。

 

06 锚定效应

为什么每到双11,就是忍不住剁手?

锚定效应指人们在对人或事物判断时,会被第一时间接受信息所影响,并以此为参照不断调整。

锚定效应在生活中很常见。比如面试时如何让别人青睐你呢?一般面试时间通常有几十分钟,但其实在前5分钟之内,面试官就已经能判断求职者是否合适。而接下来的交谈,仅仅是对细节的补充和略微调整。所以可以看到许多的求职攻略,尤其强调打造第一印象的重要性。

除了求职找工作,电商平台的促销活动,也是运用了这个心理效应。人们为什么会喜欢在网上买打折商品?除了不用出门购买以外,促销力度的夸张展示,也是电商购物充满诱惑力的重要原因。在人们搜索商品时,会将原价和折扣价作比较,减免越多越能提升商品的诱惑力。尽管商家可能永远不会按“原价”来买,但作为消费者的角度来看,仍会觉得占了很大便宜。

 

07 诱饵效应

给你三个选择,A买、B一定要买、C不买干嘛?

如果出现各有优劣的两个选项,我们会变得难以抉择。而假如能引入新的选择,就会迅速打破原先的平衡,引导人们选择其中之一,这就是诱饵效应。也就是说,当我们拥有多种选择的时候,其实是被剥夺了选择的权利。

被“诱饵”帮助的选项通常称为“目标”,而另一选项被称为“竞争者”。当我们在商场购物时,经常会遇到导购员的解说推荐。他们常用的推销方式,就是将主推商品和质量不占优势的商品作比较,加强主推品的说服力,这是一种非常奏效的推销手段。

除了推销时会运用诱饵效应,在新产品上市时也可以利用它。例如手机厂商在发布新品时,大多会同时发布3款产品。“低配版”、“豪华版”、“豪华升级版”,这3款产品通常在价格和性能上呈阶梯式分布,但差距并不相等。之所以发布三款,并不是为了满足不同人的需求。而是利用诱饵效应,凸显其中一款产品的性能、价格的相对优势,使它成为销量提升的主力爆款。而剩下的两款产品,则充当干扰消费者购买抉择的“诱饵”。

 

08 曝光效应

品牌为什么要追热点?

曝光效应是一种心理现象,指的是我们会偏好自己熟悉的事物。在20世纪60年代,心理学家扎荣茨进行了一系列实验,证明只要让被试者多次看到不熟悉的刺激,他们对该刺激的评价就要高于其他被试没有看到过的类似刺激。而这一系列实验,也使得曝光效应被发现和研究。

尽管楼下的小饭店价格比较贵,但你还是会觉得比其他饭店好吃;同样都是陌生人,老乡就是比较热心实诚。而广告就是曝光效应的产物,著名的AIDAS理论模型,也将曝光的“吸引注意”作用,排在了创意“诱发兴趣”之前。

如今品牌社会化上蹭热点、借势等营销行为,其实就是一种曝光效应。企业在微博、微信等平台上开设账号,发布内容。这不仅是单纯地“戏多”刷存在感,而是通过发布内容获得多次曝光。一旦消费者有了熟悉感后,就会影响购买的决策。比如说到安全套,你最先想起哪个品牌呢?

但人们研究发现曝光效应,也有负面作用:

一开始就让人感到厌恶的事物,无法产生曝光作用;

 

如果两个人彼此之间已经有一些冲突,或是性格上本来就不合,越常见面反而愈扩大彼此的冲突;

 

过多的曝光会引起厌烦。

 

09 沉没成本效应

沉迷农药、无法自拔,你也配姓赵?

沉没成本是指那些已经发生,未来无法改变的决策成本。人们在决定是否去做一件事情的时候,不仅是看这件事对自己有没有好处,而且也看过去是不是已经在这件事情上有过投入。如果已经付出的成本大于维持现状的损失,人们会倾向于维持原状。

而对沉没成本理解最深刻的绝对是游戏行业,为什么玩游戏很容易就会上瘾?当用户还处于新手阶段时,游戏往往会安排一些简单的任务。这些任务通常很简单,轻轻松松就能够完成,而之后“通关”的难度会越来越大,但玩家们却难以自拔。因为当玩家在其中投入时间和金钱时,受到沉没成本效应的影响,如果要求玩家放弃游戏,等于变相否认之前的努力,“弃坑”对玩家来说损失实在太大了。只好被迫继续游戏。而为了鼓励玩家保持活跃度,游戏运营方总会会提供各种礼包或是任务活动,不断提升玩家的付出成本,让他们更难以离开游戏。

 

10 墨菲定律

千万不要改……不要改……好吧,改!

墨菲定律由爱德华·墨菲提出,他发现如果事情有变坏的可能,不管这种可能性有多小,它总会发生。

在一次实验的项目中,要求受试者要求将16个火箭加速度计进行悬空装置,每个加速度计有两种方法可以安装。但最后却发现,竟然有人将16个加速度计全部安装在错误位置,而这种情况发生的几率是2的16次方——六万五千五百三十六分之一。

墨菲定律的成立,要建立在两个基础条件上:发生几率大于0,且样本数量要足够大。墨菲定律的存在,不是宣扬宿命论。而是提醒人们不要盲目乐观,重视所有糟糕事件的可能性,即使它发生几率非常低。如果觉得自己会搞砸事情,一定要做好预备应急方案。如果觉得时间很紧,就一定要及早寻求帮助。当然,如果认为工作只是混口饭而已,并不打心底里认为,自己会成为优秀的广告人。那么迎娶白富美,走上人生巅峰,可能真的不会实现哦。

阿里+百度+CVTE的Java面试题

程序员:作为一个和代码谈恋爱的人,我怎么可能食人间烟火???

代码

敲键盘的一天又开始了

I收邮件,收到想砸电脑

充满厌恶:需求又来了

跟你这种人沟通太费劲…

我就爱看技术组扯皮

PHP是世界上最好的语言

谁说我没对象?冲啊,程序员

改不尽的bug

产品经理想和我好好相处——只有搞基

嫁人一定要嫁我:钱多,老实,挂的早

一切等我写完程序再说

能弄明白的bug优先解决

杀死一个程序员不需要抢,改几次需求就够了!

×

咆哮

综上:程序员,卒

虽然程序员总在垂“死”线上挣扎,但是绝对是九条命的代言人,生命力相当顽强,而且程序员总是智慧的象征,用他不能检测你的情商是否在线,但智商绝对可以。

做为一个有追求的程序员,当然不能错过每一个送分题,挣分题和加分题。能够跻身到巨头公司也是很多程序员的梦想。阿Y貌似扒到了BAT(今天没有T)的Java面试题目,你起来感受下扑面而来的虐吧

阿里面试题

1. 二叉树的遍历方式,前序、中序、后序和层序

2. volatile关键字

3. synchronized

4. concurrentHashMap

5. 锁的优化策略

6. 操作系统

项目部分

1、缓存的使用,如果现在需要实现一个简单的缓存,供搜索框中的ajax异步请求调用,使用什么结构?

2、内存中的缓存不能一直存在,用什么算法定期将搜索权重较低的entry去掉?

3、TCP如何保证安全性

4、红黑树的问题,B+数

5、JDK1.8中对HashMap的增强,如果一个桶上的节点数量过多,链表+数组的结构就会转换为红黑树。

6、项目中使用的单机服务器,如果将它部署成分布式服务器?

7、MySQL的常见优化方式、定为慢查询

8、手写一个线程安全的单例模式

阿里巴巴▶

浪潮

面试大片2017

百度面试题

1、是否了解动态规划

2、JVM调优

3、分别介绍一下Struts2和Spring

4、职责链模式(设计模式)

5、实践中如何优化MySQL

6、什么情况下设置了索引但无法使用

7、SQL语句的优化

8、索引的底层实现原理和优化

9、HTTP和HTTPS的主要区别

10、Cookie和Session的区别

11、如何设计一个高并发的系统

12、linux中如何查看进程等命令

13、两条相交的单向链表,如何求他们的第一个公共节点

14、11个设计模式

对一个后台程序员来说,重要的不只是语言,还有数据结构算法、网络基础、并发、数据库、设计模式、操作系统、linux等等很多很多技术需要掌握。很多人能力发展不够均衡,比如Java很厉害,但是其他方面一般,眼尖的面试官其实都记在心里,而对整体知识的把握,在阿里巴巴的面试中体现的很深刻。

百度baidu▶

经典面试

2017

CVTE面试题

1、struts2和SpringMVC的区别

2、Spring中IoC和AOP的理解

3、在MySQL中如何定为查询效率较慢的SQL语句

4、慢查询日志

5、EXPLAIN关键字还有PROFILES

6、设计了一个场景,青蛙爬井

7、页面的跳转关系、

8、二分查找

9、在N个数中求前M大个数

如果面试的是你,觉得自己会表现如何呢?(满分10,请自行脑补)。

如果你也想在IT行业拿高薪,可以参加我们的训练营课程,选择最适合自己的课程学习,技术大牛亲授,7个月后,进入名企拿高薪。我们的课程内容有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,群号为:636532962

作者:一粒红尘_98b6
链接:http://www.jianshu.com/p/0524b1869b50
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。