自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

mattkang

剥洋葱,刨根问底

  • 博客(15)
  • 收藏
  • 关注

原创 社区帖子anti-spam综述

搞了anti-spam之后,发现原来杀毒软件的原理也是类似的,浏览器的AdBlock插件原理也是类似的.目的垃圾是不可能根绝的,就跟犯罪不可能根绝一样.所以anti-spam的目的,就是提高攻击成本,降低防御成本.攻击者的目的无非就是牟利,当他们成本太高的时候,就会降低攻击力度.攻击者的智慧人肉打码:绕过验证码淘宝"注册账号交易"代收短信业务/代收邮件业务:

2014-11-27 00:07:29 3650 2

原创 飘逸的python - 使用dis模块进行代码层次的性能剖析

dis — Disassembler for Python bytecode,即把python代码反汇编为字节码指令.使用超级简单:python -m dis xxx.py当我在网上看到while 1比while True快的时候,我感到很困惑,为何会有这种区别呢?于是使用dis来深入.假设est_while.py代码如下.#coding=utf-8while 1

2014-11-25 12:22:41 8497 2

原创 飘逸的python - 使用图像匹配SIFT算法进行LOGO检测

先上效果图.

2014-11-24 18:11:42 15857 2

原创 飘逸的python - 实现trie树

trie,又称前缀树或字典树. 它利用字符串的公共前缀来节约存储空间.定义Trie树中每个单词都是通过character by character方法进行存储,相同前缀单词共享前缀节点.可以看到,每条路径组成一个单词.上面这颗树存了to/tea/ted/ten/inn这些词.性质(1)根节点不包含字符,除根节点外的每个节点只包含一个字符。(2)从根节点到

2014-11-24 15:56:21 16187 1

原创 飘逸的python - 作用域与lookup策略

首先了解什么是命名空间,命名空间是一个”命名->对象“的映射,在python中用dict实现的。而作用域,是指能直接访问到的命名空间。当我们访问一个变量时,会按LEGB的顺序来lookup:L->Local. 即局部变量,比如定义在def或lambda中的变量。E-> Enclosing function locals. 即闭包中的变量。G->Global (modul

2014-11-23 00:55:09 5806

原创 飘逸的python - 为什么修改全局的dict变量不用global关键字

比如下面这段代码s = 'foo'd = {'a':1}def f(): s = 'bar' d['b'] = 2f()print sprint d为什么修改字典d的值不用global关键字先声明呢?这是因为,在s = 'bar'这句中,它是“有歧义的“,因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以在python中

2014-11-23 00:10:45 8376 1

原创 飘逸的python - 大数据TopK问题的quick select解法

TopK问题,即寻找最大的K个数,这个问题非常常见,比如从1千万搜索记录中找出最热门的10个关键词.方法一:先排序,然后截取前k个数.时间复杂度:O(n*logn)+O(k)=O(n*logn)。方法二:最小堆.维护容量为k的最小堆.根据最小堆性质,堆顶一定是最小的,如果小于堆顶,则直接pass,如果大于堆顶,则替换掉堆顶,并heapify整理堆,其中heapify

2014-11-21 18:17:08 9588 8

原创 飘逸的python - and_or大法

George Boole神奇的将逻辑变成了代数,使之可以演算,因此,被叫做布尔代数.而and和or是布尔代数其中的2个符号.首先,我们要明确一个东西,Python和很多语言一样,都是返回两个被操作对象中的一个,而非它们的布尔表达式 True 或 False.比如>>False and 2False>>True and 22>>1 and 11其次,了解什么是短路

2014-11-20 17:05:18 2438

原创 飘逸的python - 八皇后问题简洁解法

思路:使用DFS.用一维数组表达坐标,其中下标为行,元素为列.A[i]=j表示将第i行的皇后放在j列上.一行一行依次遍历(从上往下),决定放在哪列(从左往右),这样就不用判断行冲突,只需要判断列冲突和主斜线副斜线冲突.(行-列)标识主斜线, (行+列)标识副斜线.下面上代码.#coding=utf-8#风格1def queen(A, cur=0): if

2014-11-20 10:34:24 10157 3

原创 当python邂逅vim

先上效果图:前言:在这个年纪爱上vim,不是因为它漂亮,只是那天阳光很好,我用它敲坏了键盘. ------一位不愿意透露姓名的人士第一次接触vim,是在上linux操作系统的课上,当时的想法是,"这东西怎么这么难用,要输入个东西都不知道怎么输入".但是,经过几天的了解和练习之后.我深深的被震撼了.先进的理念/多种模式/全键盘操作/快速定位/风骚的快捷键和命令/丰富的插件

2014-11-18 18:11:29 4253

原创 什么是string interning(字符串驻留)以及python中字符串的intern机制

In computer science, string interning is a method of storing only one copy of each distinct string value, which must be immutable. Interning strings makes some string processing tasks more tim

2014-11-16 11:34:23 6120 2

原创 试试pypy

pypy是一个python的解释器和JIT编译器。可以在不修改任何代码的情况下大幅提升python代码的性能。使用超级简单,在官网下载编译好的二进制包进行安装,然后然后运行代码的时候指定这个解释器就行了。我们来试试下面这段代码。import timet1 = time.time()i = 10000000while i: i -= 1print time.time()

2014-11-16 09:46:56 3280

原创 飘逸的python - 字符串的KMP匹配算法

首先我们来看一下字符串的朴素匹配.可以想象成把文本串s固定住,模式串p从s最左边开始对齐,如果对齐的部分完全一样,则匹配成功,失败则将模式串p整体往右移1位,继续检查对齐部分,如此反复.#朴素匹配def naive_match(s, p): m = len(s); n = len(p) for i in range(m-n+1):#起始指针i if s[i

2014-11-10 11:20:27 11050 8

原创 飘逸的python - yield简明教程

发现还有很多人对yield不理解,云里雾里,于是试着用文字表述.只要函数含有yield语句,它就返回一个生成器.所以我们与其把其看成函数定义,不如看作是生成器定义.函数用return返回,而生成器用yield返回.接下来是yield的行为.比如def html(): yield 'header' for i in range(5): yield

2014-11-07 10:56:34 4640

原创 飘逸的python - 不使用关键字,求和1+2+…+n

根据题意,我们不能用到if/else/for/while等关键字.--------------思考中------------思路:1.用递归实现循环2.递归的终止条件不用if怎么判断呢?  答案是字典,其中用not not n来把数字n转成bool.上代码:def sum_(n): return n + { True:

2014-11-03 15:38:44 4701

空空如也

空空如也

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

TA关注的人

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