月度归档:2011年12月

监控项目分析报告-需求分析

从搜狐各个产品的角度,监控作为一项安全服务来保证各个产品的网络内容层面的安全(防止色情、暴力、政治极端,广告等危及社会稳定与用户体验的内容以sohu产品为平台出现在网络中,以下统称为网络内容安全),需要提供如下功能与标准:

  1. 需要对各个产品提交的内容进行机器审核并同步给出审核结果,各个产品以此对该内容实施对应的发布策略(进行机器审核的审核依据统一简称为过滤器);
  2. 需要对各个产品提交的内容进行人工审核并异步给出审核结果,各个产品以此对该内容修改之前的发布策略;

继续阅读

python源码分析:dict对象的实现-1

首先来看看构建dict的基础设施:

typedef struct {
Py_ssize_t me_hash;
PyObject *me_key;
PyObject *me_value;
} PyDictEntry;

这个结构体为dict中key-value,其中的me_hash为me_key的hash值,[空间换时间]。除此之外,我们发现me_key与me_value都是PyObject指针类型,这也说明了为什么dict中的key与value可以为python中的任何类型数据。

struct _dictobject {
PyObject_HEAD
Py_ssize_t ma_fill; /* # Active + # Dummy */
Py_ssize_t ma_used; /* # Active */
Py_ssize_t ma_mask;
PyDictEntry *ma_table;
PyDictEntry *(*ma_lookup)(PyDictObject *mp, PyObject *key, long hash);
PyDictEntry ma_smalltable[PyDict_MINSIZE];
}; 继续阅读

python源码分析:list对象的实现

一、List对象的基石:

下面这个结构体囊括了python实现的list的所有信息:list中的内容信息与处理方法

typedef struct {

PyObject_VAR_HEAD

PyObject **ob_item;

Py_ssize_t allocated;

} PyListObject;

下面来分别解释上面的变量含义:

PyObject_VAR_HEAD

:在第一篇的对象实现中,我们知道只要是变长对象的共有内容

PyObject **ob_item:由于每个对象都是由PyObject指针来索引,而列表是存储若干对象,即存储若干指针

。因此,需要一个指针数组(存储指针的数组),即需要一个指针的指针来索引这个数组。 继续阅读

python源码分析:string对象的实现

通过在分析源码与测试分析预期时,我们发现这样一个现象,就是python的这些基础数据类型(intstringlistdict)其实在实现python时(注意,是实现python自身时)就开始运用了。比如后面说到的stringintern机制就使用了dict来形成映射。好了,言归正传,下面开始分析任何语言中最为关键的数据类型:String类型。 继续阅读

Python源码分析 :整数对象的实现-1

python中的对象分两种:可变对象与不可变对象。

intfloatstring,元组就是不可变对象;list,map及自定义对象就是可变对象。

好了,现在知道python中一切皆对象并且int为不可变对象,想像一下一个for循环:

for I in ragne(1,1000):

print I

就会出现不停地生成对象然后销毁对象。靠,这不是在烧CPU是在干什么。显然,python的发明者肯定不会做这样的蠢事。那么他是怎么完成的呢? 继续阅读

Huffman编码的证明过程与反思

看到http://mindhacks.cn/2011/07/10/the-importance-of-knowing-why-part3/这篇文章后,突然想起自己学习败者树的经历。当时确实认为自己已经掌握了败者树的构建原理与方法。可是没有过几天,再次给别人讲解时又忘得像没有学过一样。如作者所说,我们真的没有掌握其证明过程,而只是记住结论了。 继续阅读