分类目录归档:工程与技术

工程与技术

监控项目分析报告-系统架构

通过上面的需求分析可以清晰地看到整个监控系统外部的数据流:

  1. 接收数据流很大,送出数据流很小;
  2. 接收数据流为内容数据,送出数据流为控制数据;
  3. 内容数据在系统两端进行处理,前端机器处理为硬实时(秒级),后端人工处理为软实时(时级);
  4. 控制数据在系统两端都有送出,送出时间与其对应的内容数据处理的时间点一致,处理完内容数据即送出。控制数据内容为对应各个产品对其产品内容数据的控制动作。 继续阅读

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

你是否对上面那个lookdict提出过疑问?

对啦,没有退出语句,它不会成为死循环吧,不会!下面马上提晓答案。

看下面这段代码,位于PyDict_SetItem中:

if (!(mp->ma_used > n_used && mp->ma_fill*3 >= (mp->ma_mask+1)*2))
return 0;
return dictresize(mp, (mp->ma_used > 50000 ? 2 : 4) * mp->ma_used);

即dict在插入数据时,都会检查hash空间使用情况,一旦新添加一条且(dummy+used)的数量小于空间总大小的2/3,就会执行dictresize,就会来扩展原有的hash空间,从而始终保证空间中有空闲位置,这样上面那个’死循环‘的疑问就解决了

2/3:还有一个原因,就是根据统计结果,发现装载率超过2/3后冲突率就会急剧升高。 继续阅读

MySQLdb sql转义与编码处理

进行转义操作时,MySQLdb.escape_string(sql) 中sql的编码是utf8(前提相关表的connection-charset为utf8,即与数据库的connection-charset保持一致)。

由于不管connection的charset是什么,cursor.execute只需要unicode的字符串,在执行上面的转义sql时,需要解码:execute(MySQLdb.escape_string(sql).decode('utf8'))。

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

从搜狐各个产品的角度,监控作为一项安全服务来保证各个产品的网络内容层面的安全(防止色情、暴力、政治极端,广告等危及社会稳定与用户体验的内容以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类型。 继续阅读