摘要:
将博客搬至CSDN 阅读全文
摘要:
chain33 诞生记 很多年没有写博客了,应该说,自从2013年开始玩比特币,就没有写过了。这5年来,做了很多事情,也见了很多以前做梦都没有想到过都事情。我做的最开心的事情,也是觉得最有意义的事情,就是负责开发了一个区块链开发框架 chain33 ,目前这个框架已经在 github 上开源,开源地 阅读全文
摘要:
Go语言类库中,有两个官方的服务器框架,一个HTTP,一个是RPC。使用这个两个框架,已经能解决大部分的问题,但是,也有一些需求,这些框架是不够的,这篇文章,我们先分析一下HTTP 和 RPC服务器的特点, 然后结合这两个服务器的特点,我实现了一个新的服务器,这个服务器非常适合客户端和服务器端有大量交互的情况。HTTP服务器的特点: HTTP的请求 和 响应的周期如下: 对于一个HTTP 长连接,一个请求必须等到一个响应完成后,才能进行下一个请求。这就是http协议最本质的特点,是串行化的。而这个特点保证了http协议的简洁性,一个请求中间不会插入其他的请求干扰,这样不需要去对应请求和响应。. 阅读全文
摘要:
go语言在云计算时代将会如日中天,还抱着.NET不放的人将会被淘汰。学习go语言和.NET完全不一样,它有非常简单的runtime 和 类库。最好的办法就是将整个源代码读一遍,这是我见过最简洁的系统类库。读了之后,你会真正体会到C#的面向对象的表达方式是有问题的,继承并不是必要的东西。相同的问题,在go中有更加简单的表达。 go runtime 没有提供任何的锁,只是提供了一个PV操作原语。独占锁,条件锁 都是基于这个原语实现的。如果你学习了go,那就就知道如何在windows下高效的方式实现条件锁定(windows没有自带的条件锁)。 我想阅读源代码,不能仅仅只看到实现了什么,还要看... 阅读全文
摘要:
虽然写的大部分程序是在 freebsd 和 linux 下面的。但是,最近还是遇到了一个windows 下面的问题,那就是如何让一个 用Go语言写的服务器,在windows 下面开机的时候不登录就自动启动。所以,不能设置成在run里面启动。把服务器组成成一个window的服务比较靠谱。但是,当初设计的时候,程序是在linux运行的,后来因为某些原因才搬到windows上,写的时候根本没有考虑弄成window 服务。 下面是基本的步骤: 1. 准备好 instsrv.exe srvany.exe, 这两个文件在附件中下载。instsrv.exe 是注册服务用的, 使用方法如下: usage... 阅读全文
摘要:
最常见到的同步是防止一个资源同时被多个人访问,这里要介绍的同步问题要不一样一点,他是多个线程之间要互相等待的一种同步,就像我们出去爬山,如果有人慢了,就要停下来等等他,这样我们才能一起到达目的地。 这个问题最初是在金融历史数据反演的时候遇到的,简单的说,拿一份历史的股票或者外汇,期货的数据,按照时间顺序的模拟价格变东,通过一个算法来判断买卖,最后统计一下赢利的曲线。如下图所示: 举个外汇例子,一年的外汇数据,价格变化大概是2000万次,所以,只是一个非常简单的策略,模拟一下整个历史,也是要非常大的计算量。要解决这个问题一般要采用分布式的计算。当然,同时也要提高单台机器的性能,这就需... 阅读全文
摘要:
如果你有过装修,或者家里造房子的经历,你会发现,大多数“技术工人”都是半瓶水,让你满意的人实在是凤毛麟角。就算你要找一个很有责任感的,不需要你去监督,做事情精益求精的人都基本上没有。 你或许在装修,并正在抱怨那样的技术工人。但是,你的老板或许也同样的在抱怨你:只有半瓶水,还吹牛吹的不行。当,没有人监督,没有项目任务的时候,你就开小差,偷懒,做事情,也都是在赶进度,凑合,蒙混过关就行。 我想,这或许就是技术工人吧,我们的工作实际上没有什么创造性, 所以,当我们工作很多年,也就不再有激情了,变成江湖小混混了。你可以学会N种编程语言,学会怎么更好的组织代码,学会如何在unix上写代码,只要... 阅读全文
摘要:
大多数语言都提供从float到double的转换,比如C语言,你可以直接通过一个赋值语句来实现把一个float的数字转成 double。而某些蛋疼的语言里面,对二进制的支持实在是少的可怜,我们还是不得不处理这样蛋疼的问题。 MQL4 这种语言大家可能没有这么听说过,是一种写金融交易策略的语言。我的一个同事在用这种语言写策略的时候,遇到了一个问题,要从网络中接收float的二进制数据,然后进行计算,而这种语言只支持double,没有float的。于是,我这个救火队员上马了。 说句实话,我非常喜欢这样蛋疼的问题。当然,对二进制,底层非常熟悉的人,这基本上不是问题。而我工作了这样多年,说句... 阅读全文
摘要:
说起排序,大多数人在实际项目中很少自己去写一个排序,一般来说,qsort一行话就可以了。我也很少在实际项目中用到过基数排序,最近,写了一篇博客文章叫做: 字符串之全文索引 ,这篇文章的下一篇文章 要用到一个倍增算法。这个倍增算法,就可以非常巧妙的运用基数排序。作为那篇文章的一个铺垫,我专门写了一篇基数排序的文章。这篇文章里面的基数排序肯定是一个变形。 大多数网上 或者 书上的基数排序都是从下面的例子开始的: 排序下面的数列: 73 22 93 43 55 14 28 65 39 81 然后对这些数字,用个位数进行排序: 0 ... 阅读全文
摘要:
我是在Yii的官方wiki上看到这篇文章的。读的第一遍觉得很不错,还有一种想翻译出来的冲动。虽然,本人英文很烂,但是毕竟写了这样多年的代码,估计大概的意思是能有的吧。英文原文:http://www.yiiframework.com/wiki/268/how-to-learn-yii/ 下面是针对Yii的初学者的一个一步一步如何学习Yii的列表。这个列表列出了一些文档,教程,希望你能够阅读,这些文档,教程有助于我们理解Yii这个框架。 1. 学习PHP。当然,你需要先学习PHP编程。w3cschool 上有一个很好的教程,教程分成 语言基础 高级功能 数据库操作三个部分。有一个小技巧,... 阅读全文
摘要:
今天突然发现网站挂掉了。原因就是机房意外的重启了我的机器,因为apache 要输入ssl密码才能启动,所以就启动不起来。 用下面的方法就可以避免这个问题: ee /usr/local/etc/apache22/httpd.conf 找到: <IfModule ssl_module> 加入这样一行: SSLPassPhraseDialog exec:/usr/local/e... 阅读全文
摘要:
字符串,我现在正在写的就是一个字符串。我们的源代码就是一个字符串,计算机科学里面,一大部分问题都是字符串处理的问题。比如,编译器,就是一个字符串处理程序。还有,搜索引擎,也在处理一个字符串问题。数据库,最难处理的还是字符串部分。索引,一般是一种预处理的中间程序。在我们写代码的时候,往往需要对一个对象进行预处理。这个预处理时间可能比较长,但是,处理完了以后,就能很快的多次的在上面进行查询。比如,你要在一组数里面进行查找,可能先要进行排序,这样速度就会快一些, 排序可以看做是建立索引的一个过程。 字符串的全文索引,怎么样才能非常的省空间,查找速度也还可以,我这里介绍一种数据结构,叫做后缀数组。 . 阅读全文
摘要:
Wallpaperfox contain many anime wallpapers, such as Fairy Tailwallpapers, bleach wallpapers, naruto wallpapers, one piece wallpapers, and so on. October is a busy season, the anime wallpaper site posts a series of 2011 calendar wallpapers, divided into two topics, one topic is about Halloween, anoth 阅读全文
摘要:
最近,和一个网友交流的时候,给我提了一个非常奇怪的问题。那就是,在一个运算中,加了一个引用之后,发现性能慢了一万倍。在我的脑海里面,引用是一个非常容易出错的问题,特别是PHP里面的引用,有非常多的陷阱。因为,以前专门研究过这一块PHP的源代码,所以,我可以比较清晰的解析引用到底是怎么一回事,希望,读了我这篇博客的PHP开发者,能彻底理解这个问题。如果,有任何疑问,或者有一些你想了解的问题,可以给我留言。 先来看一段代码: class RefferTest{ private $data; private $testKey; function __construct() { $key = &qu 阅读全文
摘要:
最近一段时间,在研究PHP的共享内存。于是,我想尝试一下共享内存和普通文件相比,能提高多少的性能。本来想简单的把纯真IP数据库导入到共享内存然后查询。但是,后来发现这个数据库设计过于复杂,查询IP速度非常的慢,于是我对这个数据库的结构重新进行了设计。头部:4 * 4 个字节。就记录一个总数//总数|0|0|0索引区: (区域ID的格式:前 24 个bit是区域在文件中的的offset,后8个bit是长度,这样区域的名称长度不能超过255个字节)//start|end|区域ID1|区域ID2//start|end|区域ID1|区域ID2数据区:简单的把所有区域的名称写在这块区域(过滤掉重复的数据 阅读全文
摘要:
今天有人在PHP的群里面问这样一个问题:<?xml version="1.0" coding="utf-8"?><country><city>北京</city><city>香港</city><city>上海</city></country>如果在香港前面加上一个<city>杭州</city>。今天请假在家,就花了几分钟,解决了这个问题。<?php$xml=<<<XML<?xmlversion=& 阅读全文
摘要:
这是一个非常经典的问题,同时,也是一个很难解决的问题。经典是因为,这个问题非常常见,而且有很多解决方案。难以解决是因为,存在多音字。可以发现很多股票软件都有这问题,比如zgyh 出来的不是中国银行,而是找不到,这是因为,中国银行的 “行” 查出来读的是 "xing" 。我篇文章我只是提供了一个原始的转换方法,就是查表。和你以前看过的算法可能不一样的是,我加了一个二分查找,我看到的一个开源的解决方案是顺序查找的。 关于,多音字问题,我只有一个小规模的多音字表,从所有股票名称里面纠正过来的。解决方案是这样的:在查找拼音的时候,查找一下这个字是否在多音字表里面,如果是,那么查找前后组成的词,来决定读 阅读全文
摘要:
本文通过分析C++编译器生成的汇编代码,分析多态的机制。并实现了一个C语言版本。 在编译性语言里面,多态真的是一个伟大的发明。它可以现在写好代码,编译好,并且可以调用未来的代码。这多少有了点动态的感觉。很多人,也在脚本语言里面抱怨,为什么不提供多态的功能啊。脚本语言里面,一个函数参数,可以传递任何类型,甚至可以通过函数名的字符串调用函数,这样多态的作用就小了很多。对于面向对象来说,最重要的两个概念莫过于 继承 和 多态。继承可以减少代码重复,多态可以减少大量的条件判断,if else switch如果在代码中太多,你的程序应该不怎么面向对象。 废话不说了,先给一个用于分析的程序:代码 Code 阅读全文
摘要:
我们经常会看到 在说一个对象的man page 的时候,会有这样的格式:mmap(2)shm_open(3)这个后面的数字是什么意思呢,通过 man man 命令就可以知道,这个是数字是,section大多数类unix 操作系统,都采用相同的section 的约定:Section 1 user commands (introduction) Section 2 system calls (introduction) Section 3 library functions (introduction) Section 4 special files (introduction) Section 阅读全文
摘要:
在看我这篇文章之前,先看看关于KDJ的相关资料和背景。下面的链接可以参考。http://www.shenmeshi.com/Business/Business_20070523005553.html简单的说,KDJ 有四个要计算的东西。RSV ,K, D, JRSV: 中文翻译过来就是 未成熟值,这个值实际上也不神秘。它其实就是著名的威廉指数。计算公式如下:设:周期为 PeriodRSV[i] = (close[i] - low[i, Period]) / (high[i, Period] - low[i, Period])这个计算也是这个指标的核心部分,K D J 这三个参数都依赖与 RSV 阅读全文