自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

方亮的专栏

方亮的专栏

  • 博客(383)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++拾趣——C++11的语法糖auto

        C++是一种强类型的语言,比如变量a,如果声明它是整型,则之后只能将它作为整型来用。这和其他弱类型的语言有很大的区别,比如python中,我们可以让a在第一行是个整型,第三行是一个字符串。(转载请指明出于breaksoftware的csdn博客)a = 3print aa = "3"print a        C++代码在声明一个变量时就已经明确指定了它的类型。这...

2018-01-22 19:01:13 1664

原创 Linux下HOOK动态链接库中API的方法

        2012年,我写了一篇介绍Windows系统下Ring3层API的hook方案——《一种注册表沙箱的思路、实现——Hook Nt函数》,其在底层使用了微软的Detours库。5年后,我又遇到这么一个问题,但是系统变成了Linux。我最开始的想法是找一个Linux下的Detours库,于是找到了subhook。其原理是:修改被Hook函数起始地址处的汇编代码,让执行流程跳到我们定义的...

2017-08-23 21:49:10 6704 4

原创 代码打补丁的利器——diff和patch

        一般来说,如果我们在研发过程中需要对代码进行修改,是不需要通过打补丁的方式的,因为我们可以直接改动文件即可。但是如果针对一款要上线的产品,我们总不能在研发的电脑上编译通过后直接发布到线上的。(转载请指明出于breaksoftware的csdn博客)因为这样做有很多缺陷:最后负责编译的同事,可能忘记提交最终的代码。这样代码库中的代码逻辑和线上运行的产品逻辑将存在差异。 最后负责...

2017-08-17 19:56:22 10217

原创 libev源码解析——定时器监视器和组织形式

我们先看下定时器监视器的数据结构。(转载请指明出于breaksoftware的csdn博客)/* invoked after a specific time, repeatable (based on monotonic clock) *//* revent EV_TIMEOUT */typedef struct ev_timer{ EV_WATCHER_TIME ...

2017-08-07 16:07:21 1839 2

原创 libev源码解析——定时器原理

本文将回答《libev源码解析——I/O模型》中抛出的两个问题。(转载请指明出于breaksoftware的csdn博客) 对于问题1:为什么backend_poll函数需要指定超时?我们让其一直等待到有事件发生不是更好么? 答案是“必须要指定超时”。为什么呢?在《libev源码解析——总览》中,我们抛出过一个问题:定时器和事件是如何关联的?因为...

2017-08-07 16:07:05 3707 1

原创 libev源码解析——I/O模型

在《libev源码解析——总览》一文中,我们介绍过,libev是一个基于事件的循环库。本文将介绍其和事件及循环之间的关系。(转载请指明出于breaksoftware的csdn博客) 目前ibev支持如下IO事件模型:select模型。对应文件是ev_select.c。 poll模型。对应文件是ev_poll.c。 epoll模型。对应的文件是ev_epol...

2017-08-07 16:06:40 2277 1

原创 libev源码解析——调度策略

在《libev源码解析——监视器(watcher)结构和组织形式》中介绍过,监视器分为[2,-2]区间5个等级的优先级。等级为2的监视器最高优,然后依次递减。不区分监视器类型和关联的文件描述符的值,权限高的要优先于权限低的执行。但是ANFD结构中的监视器链表无法满足高等级优先执行的特性。那么libev是如何解决这个问题的呢?(转载请指明出于breaksoftware的csdn博客)...

2017-08-07 16:06:16 2313 3

原创 libev源码解析——监视器(watcher)结构和组织形式

在《libev源码解析——总览》中,我们介绍了libev的一些重要变量在不同编译参数下的定义位置。由于这些变量在多线程下没有同步问题,所以我们将问题简化,所提到的变量都是线程内部独有的,不用考虑任何多线程问题。(转载请指明出于breaksoftware的csdn博客) 之前提到过,libev支持多种功能,比如文件状态监控、定时器等。这些功能都是有其相对应的一个“监...

2017-08-07 16:05:55 2524 1

原创 libev源码解析——总览

        libev是个非常优秀的基于事件的循环库,很多开源软件,比如nodejs就是使用其实现基础功能。本系列将对该库进行源码分析。(转载请指明出于breaksoftware的csdn博客)        不知道是被墙了还是网站不再维护,它的官网(http://libev.schmorp.de/)在国内已经没法访问了。但是我们仍然可以从github上下载其源码(https://gith...

2017-08-07 16:05:24 9362 2

原创 静态分析C语言生成函数调用关系的利器——cflow

除了《静态分析C语言生成函数调用关系的利器——calltree》一文中介绍的calltree,我们还可以借助cflow辅助我们阅读理解代码。(转载请指明出于breaksoftware的csdn博客)cflow的说明和安装 cflow是一款静态分析C语言代码的工具,通过它可以生成函数的调用关系。和calltree不一样,cflow有独立的网页介绍它(https://ww...

2017-07-20 22:39:37 21119 9

原创 静态分析C语言生成函数调用关系的利器——calltree

当项目中引入了一些第三方或者开源库时,如果没有详细的文档说明,我们往往有种“盲人摸象”的感觉。如果只是简单的使用还好,但是这些代码需要被定制时,就需要深入阅读理解其实现。这个时候又往往有种“无从入手”的感觉。特别是对一些大型的项目,管理者往往需要划分出不同模块交由下属去理解,于是划分的依据是什么?如果没有一个总体统筹的认识,很多工作都无法开展下去。本文将探讨的工具将协助我们解决这些...

2017-07-20 22:39:20 13827 5

原创 IT项目研发过程中的利器

“工欲善其事必先利其器”,这是我写这个系列的主要原因。(转载请指明出于breaksoftware的csdn博客) 在进入这个系列之前,我们先看下大概在十几年前的一个段子: “我”win98系统崩溃了,需要重装,但是没有系统盘。于是“我”找了一个大牛。他找我要了一个连着电话线的座机,把电话线一端插在电脑上。他在另一端的座机上不停按着0...

2017-07-20 22:39:02 1133

原创 同步、异步、堵塞、非堵塞和函数调用及I/O之间的组合概念

        在我们工作和学习中,经常会接触到“同步”、“异步”、“堵塞”和“非堵塞”这些概念,但是并不是每个人都能将它们的关系和区别说清楚。本文将对这些基本概念进行讨论,以期让大家有更清楚的认识。(转载请指明出于breaksoftware的csdn博客)        IT技术和相关术语均为舶来品,于是其相关的问题也并非只有我们讲中文的分不清。在一些外文网站上,我们可以发现外国人也会对这些...

2017-07-10 22:20:51 2097

原创 码农技术炒股之路——选股策略样例

        有了之前抓取的数据,我们便可以利用这些数据进行股票分析。(转载请指明出于breaksoftware的csdn博客)        为了便于计算,我决定引入numpy库pip install numpy -i http://pypi.douban.com/simple        其实这篇文章并不能告诉大家一个恰到好处且有用的样例。因为之前我分析过,同花顺等分析软件...

2017-05-12 21:34:59 3750 3

原创 码农技术炒股之路——抓取日线数据、计算均线和除权数据

        日线数据是股票每日收盘后的信息。这块数据不用实时抓取,所以并不占用宝贵的交易时间的资源。于是我们抓取完数据后直接往切片后的数据库中保存。(转载请指明出于breaksoftware的csdn博客)抓取日线数据        我们先要获取今天有交易信息的股票代码。因为存在股票停牌的情况,所以不需要这类股票信息 def _get_all_share_ids(self)...

2017-05-12 21:34:21 9199

原创 码农技术炒股之路——实时交易信息、主力动向信息分库备份

        一般来说,一个股票信息应该保存在一张表中。但是由于我机器资源限制,且我希望尽快频率的抓取数据。所以每天我将所有股票的实时交易信息放在daily_temp库中的一个以日期命名的表中。主力动向信息也是如此。但是盘后分析股票时,我们会以单只股票进行分析。这样就需要跨越很多天,而这样的设计将导致需要查询若干个表,且随着日期增加,读取的表也将增加。我觉得这样是不合适的。(转载请指明出于bre...

2017-05-12 21:32:21 1564

原创 码农技术炒股之路——抓取股票基本信息、实时交易信息、主力动向信息

        从本节开始,我们开始介绍各个抓取和备份业务。(转载请指明出于breaksoftware的csdn博客)        因为我们数据库很多,数据库中表也很多,所以我们需要一个自动检测并创建数据库和表的功能。在《码农技术炒股之路——数据库管理器、正则表达式管理器》一文中,我们介绍了数据库管理器帮我们自动创建数据库,但是没有自动创建表的功能。于是我们需要实现一个。class p...

2017-05-12 21:31:37 7101 4

原创 码农技术炒股之路——任务管理器

        系统任务和普通任务都是通过任务管理器调度的。它们的区别是:系统任务在程序运行后即不会被修改,而普通任务则会被修改。(转载请指明出于breaksoftware的csdn博客)        为什么要有这样的设计?因为我希望它是一个可以不用停止服务就可以更新相关配置的系统。比如我们现在要加一个普通任务,我们只要修改下普通任务配置文件即可。再比如我们需要修改数据库中表结构,我们也不用...

2017-05-12 21:30:52 1852

原创 码农技术炒股之路——数据库管理器、正则表达式管理器

        我选用的数据库是Mysql。选用它是因为其可以满足我的需求,而且资料多。因为作为第三方工具,难免有一些配置问题。所以本文也会讲解一些和Mysql配置及开发相关的问题。(转载请指明出于breaksoftware的csdn博客)数据库管理器        Mysql的安装我就不说了。我先说说和我习惯相关的一个问题:我希望在我Windows系统上可以通过Navicat for M...

2017-05-12 21:29:56 1982 2

原创 码农技术炒股之路——配置管理器、日志管理器

        配置管理器和日志管理器是项目中最为独立的模块。我们可以很方便将其剥离出来供其他Python工程使用。文件的重点将是介绍Python单例和logging模块的使用。(转载请指明出于breaksoftware的csdn博客)配置管理器        在《码农技术炒股之路——架构和设计》中我们介绍过,配置管理将作为一个单例而存在。我尝试过各种Python单例的实现方法,发现都存在...

2017-05-12 21:28:53 1973

原创 码农技术炒股之路——架构和设计

        首先说明一下,我并没打算把这个项目设计的多么高大上。一个最简单的理由就是我没有那么多资源。比如做架构设计,要考虑计算机性能、数据库主从备份、服务多点部署和一些容灾问题,而这些都需要机器。但是我只有一台机器,所以也只能尽可能将这台机器的性能榨干,而主从、多点部署都问题就不能涉及了。(转载请指明出于breaksoftware的csdn博客)架构        为了比较贴近生产环...

2017-05-12 21:28:30 4726 2

原创 码农技术炒股之路——数据源选择

        在给本系列博文拟定标题时,我原先写下的是《股票交易信息获取及分析系统》。之后感觉这个名字过于高大上,又不自觉的在草稿中写下《码农技术炒股之路》。这个名称让我会心一笑,因为它即突出了我的身份,又点名了本系列博文要介绍的东西——技术炒股。最后“之路”一词可以让我好好介绍下这个项目的前因后果,希望大家也感受下这个项目的温度,因为它的产生并非我一人杜撰出来的愿景。(转载请指明出于break...

2017-05-12 21:27:56 8497 9

原创 C++拾趣——类构造函数的隐式转换

        之前看过一些批判C++的文章,大致意思是它包含了太多的“奇技淫巧”,并不是一门好的语言。我对这个“奇技淫巧”的描述颇感兴趣,因为按照批判者的说法,C++的一些特性恰巧可以让一些炫耀技术的同学有了炫耀的资本——毕竟路人皆知的东西却没什么好炫耀的。这又让我想起了《孔乙己》中关于“回”字有几种写法的描述。当时老师在上此课时,是抱着批判的态度去评价孔乙己的这种思想,而我却感觉到这其中必有一...

2017-02-08 12:33:46 5761 8

原创 Redis源码解析——Zipmap

本文介绍的是Redis中Zipmap的原理和实现。(转载请指明出于breaksoftware的csdn博客)基础结构 Zipmap是为了实现保存Pair(String,String)数据的结构,该结构包含一个头信息、一系列字符串对(之后把一个“字符串对”称为一个“元素”(ELE))和一个尾标记。用图形表示该结构就是: Redis源码中并没...

2016-12-14 22:43:48 5390 1

原创 Redis源码解析——有序整数集

有序整数集是Redis源码中一个以大尾(big endian)形式存储,由小到大排列且无重复的整型集合。它存储的类型包括16位、32位和64位的整型数。在介绍这个库的实现前,我们还需要先熟悉下大小尾内存存储机制。(转载请指明出于breaksoftware的csdn博客)大小尾(Big Endian/Little Endian) 第一次接触这个概念还是在大学时上...

2016-12-13 00:11:03 2167 2

原创 Redis源码解析——双向链表

        相对于之前介绍的字典和SDS字符串库,Redis的双向链表库则是非常标准的、教科书般简单的库。但是作为Redis源码的一部分,我决定还是要讲一讲的。(转载请指明出于breaksoftware的csdn博客)基本结构        首先我们看链表元素的结构。因为是双向链表,所以其基本元素应该有一个指向前一个节点的指针和一个指向后一个节点的指针,还有一个记录节点值的空间t...

2016-12-09 00:03:38 3656 4

原创 Redis源码解析——字典遍历

之前两篇博文讲解了字典库的基础,本文将讲解其遍历操作。之所以将遍历操作独立成一文来讲,是因为其中的内容和之前的基本操作还是有区别的。特别是高级遍历一节介绍的内容,充满了精妙设计的算法智慧。(转载请指明出于breaksoftware的csdn博客)迭代器遍历 由于Redis字典库有rehash机制,而且是渐进式的,所以迭代器操作可能会通过其他特殊方式来实现,以保...

2016-12-08 20:28:22 2626

原创 Redis源码解析——字典基本操作

有了《Redis源码解析——字典结构》的基础,我们便可以对dict的实现进行展开分析。(转载请指明出于breaksoftware的csdn博客)创建字典 一般字典创建时,都是没有数据的,但是字典类型需要确定,所以我们看到Redis字典创建主要需要定义数据操作的dictType对象:static void _dictReset(dictht *ht){...

2016-12-08 20:26:12 2124 1

原创 Redis源码解析——字典结构

C++语言中有标准的字典库,我们可以通过pair(key,value)的形式存储数据。但是C语言中没有这种的库,于是就需要自己实现。本文讲解的就是Redis源码中的字典库的实现方法。(转载请指明出于breaksoftware的csdn博客) 一般情况下,我们谈到字典,难免要谈到红黑树。但是Redis这套字典库并没有使用该方案去实现,而是使用的是链表,且整个代码行数...

2016-12-08 20:25:11 2803 2

原创 Redis源码解析——内存管理

在《Redis源码解析——源码工程结构》一文中,我们介绍了Redis可能会根据环境或用户指定选择不同的内存管理库。在linux系统中,Redis默认使用jemalloc库。当然用户可以指定使用tcmalloc或者libc的原生内存管理库。本文介绍的内容是在这些库的基础上,Redis封装的功能。(转载请指明出于breaksoftware的csdn博客)统一函数名 ...

2016-12-08 20:23:15 5461 1

原创 Redis源码解析——前言

        今天开启Redis源码的阅读之旅。对于一些没有接触过开源代码分析的同学来说,可能这是一件很麻烦的事。但是我总觉得做一件事,不管有多大多难,我们首先要在战略上蔑视它,但是要在战术上重视它。除了一些高大上的技术,我们一般人都能用比较简单的方式描述它是干什么的。比如Redis,它不就是一个可以通过网络访问的KV型数据库嘛。在没有源码的情况下,可以想象出它应该是通过网络服务、指令解析、特殊...

2016-12-08 20:21:10 7764

原创 Simple Dynamic Strings(SDS)源码解析和使用说明二

     在《Simple Dynamic Strings(SDS)源码解析和使用说明一》文中,我们分析了SDS库中数据的基本结构和创建、释放等方法。本文将介绍其一些其他方法及实现。(转载请指明出于breaksoftware的csdn博客)字符串连接        SDS库提供下面两种方法进行字符串连接sds sdscatlen(sds s, const void *t, size_...

2016-12-01 20:00:00 2045

原创 Simple Dynamic Strings(SDS)源码解析和使用说明一

        SDS是Redis源码中一个独立的字符串管理库。它是由Redis作者Antirez设计和维护的。一开始,SDS只是Antirez为日常开发而实现的一套字符串库,它被使用在Redis、Disque和Hiredis等作者维护的项目中。但是作者觉得这块功能还是比较独立的,应该让其成为一个独立的库去被使用。于是就开发了第二版的SDS。本文我们要讨论的SDS就会是基于这个版本的。(转载请指明...

2016-12-01 19:58:40 2565 1

原创 跨平台PHP调试器设计及使用方法——拾遗

        之前七篇博文讲解了跨平台PHP调试器从立项到实现的整个过程,并讲解了其使用方法。但是它们并不能全部涵盖所有重要内容,所以新开一片博文,用来讲述其中一些杂项。(转载请指明出于breaksoftware的csdn博客)触发调试的方法        Xdebug提供了两种调试方式。一种需要我们在触发调试的URL中新增XDEBUG_SESSION_START或XDEBUG_SESS...

2016-11-03 18:45:14 1624

原创 跨平台PHP调试器设计及使用方法——使用

        经过之前六篇博文的分析和介绍,大家应该对这套调试器有个初步的认识。本文我将讲解它的使用方法。(转载请指明出于breaksoftware的csdn博客)        上图是该软件界面的布局,我们之后的讲解也将围绕着这些功能展开。文件夹管理        在查看一个功能代码前,我们往往需要知道其逻辑所在的路径。文件夹管理功能就是提供给用户设置代码逻辑路径的地方。用户可...

2016-11-03 18:44:44 1273

原创 跨平台PHP调试器设计及使用方法——界面设计和实现

        一个优秀的交互设计往往会影响一个产品的命运。在设计这款调试器时,我一直在构思这款调试器该长什么样子。简单、好用是我设计的原则,于是在《跨平台PHP调试器设计及使用方法——立项》一文中,我给出了一个Demo。之后实现的效果也与之变化并不大。(转载请指明出于breaksoftware的csdn博客)        在《跨平台PHP调试器设计及使用方法——立项》一文中,我阐述了该款调...

2016-11-03 18:34:15 1746

原创 跨平台PHP调试器设计及使用方法——高阶封装

        在《跨平台PHP调试器设计及使用方法——协议解析》一文中介绍了如何将pydbgp返回的数据转换成我们需要的数据。我们使用该问中的接口已经可以构建一个简单的调试器。但是由于pydbgp存在的一些问题,以及调试器需要的一些高级功能,我们还需要对这些接口进行组合和封装。(转载请指明出于breaksoftware的csdn博客)        首先我们需要做的便是一个简单的状态机。在前...

2016-10-27 21:14:43 1008

原创 跨平台PHP调试器设计及使用方法——协议解析

        在《跨平台PHP调试器设计及使用方法——探索和设计》一文中,我介绍了将使用pydbgp作为和Xdebug的通信库,并让pydbgp以(孙)子进程的方式存在。《跨平台PHP调试器设计及使用方法——通信》解决了和pydbgp通信的问题,本文将讲解和pydbgp通信协议的问题。(转载请指明出于breaksoftware的csdn博客)        和Xdebug的通信协议不同,和p...

2016-10-16 22:49:36 1246

原创 跨平台PHP调试器设计及使用方法——通信

        首先引用《跨平台PHP调试器设计及使用方法——探索和设计》中的结构图(转载请指明出于breaksoftware的csdn博客)        本文要介绍的是我们逻辑和pydbgp通信的实现(图中红框内内容)。        设计通信之前,我需要先设计一种通信协议,其实就是一个数据打包和解包的协议。因为我们的数据非常简单,所以只是用“”长度+数据“”的结构。我们规定一个包...

2016-10-13 21:03:17 1188

原创 跨平台PHP调试器设计及使用方法——探索和设计

        在《跨平台PHP调试器设计及使用方法——立项》一文中,我确定了使用xdebug作为调试器插件部分的基础组件。xdebug提供了一个远程调试的功能(相关资料可以详见https://xdebug.org/docs/remote),我们这个项目便是基于这个功能实现的。(转载请指明出于breaksoftware的csdn博客)        远程调试是基于网络传输方式进行交互的一种调试...

2016-10-13 18:21:54 1648

LuaCmdTest

我用于测试的一个lua脚本,没啥用,不用下载。

2012-11-27

同步双工管道

http://blog.csdn.net/breaksoftware/article/details/7001672文中的工程

2011-11-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除