- 博客(71)
- 资源 (1)
- 收藏
- 关注
原创 布隆过滤器原理
布隆过滤器: 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 基本概念: 如果想要判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思
2017-12-13 22:12:55 736
原创 celery的配置和使用
环境:ubuntu环境下载必要的包:pip install celery apt-get install erlang apt-get install rabbitmq-server 开启rabbitmq-serverservice rabbitmq-server startvi /var/log/rabbitmq/rabbit\@ubunt
2017-12-07 19:56:06 4657
原创 Scrapyd部署爬虫项目
Scrapyd部署爬虫项目1、新建虚拟环境(方便管理),在虚拟环境中安装scrapy项目需要使用到的包mkvirtualenv--python=C:\python27\scripts\python.exe scrapySpider 新建虚拟环境进入虚拟环境使用pip将所需包安装完成2、安装scrapyd模块,scrapyd模块是专门用于部署scrapy项目的,可以部署和管理sc
2017-11-29 21:53:47 7362 3
原创 Python实现深度遍历和广度遍历
深度遍历:原则:从上到下,从左到右逻辑(本质用递归):1)、找根节点2)、找根节点的左边3)、找根节点的右边class Node(object): def __init__(self, item=None, left=None, right=None): self.item = item self.left = left
2017-11-27 21:07:16 5734
原创 递归算法堆栈溢出
递归算法: 一种直接或者间接的调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的。特点: ①递归就是在过程或者函数里调用自身。 ②在使用递归策略时,必须有一个明确的递归条件,称为递归出口。 ③递归算法解题通常显得很简洁,但递归算法解题的效率较低。所以一般不倡导使用递归算法设计程序。 ④在递归调用的过程当中系统的每一层的返回点、局部变量
2017-11-27 20:58:46 5280
原创 内存中的堆和栈
内存结构:堆区,栈区,全局区,文字常量区,程序代码区栈:栈是你的电脑内存的一个特别区域,它用来存储被每一个function(包括mian()方法)创建的临时变量。栈是FILO,就是先进后出原则的结构体,它密切的被CPU管理和充分利用。每次function声明一个新的变量,它就会被“推”到栈中。然后每次一个function退出时,所有关于这个函数中定义的变量都会被释放(换句话
2017-11-27 20:51:32 2917
原创 如何避免内存泄漏?
内存泄漏由于疏忽,或者错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。导致程序运行速度减慢,甚至系统崩溃等严重后果。有__del__()函数的对象间的循环引用是导致内存泄漏的主凶。不使用一个对象时,使用:del object 来删除一个对象的引用计数就可以有效防止内存泄漏问题
2017-11-27 20:41:55 3285
原创 Python实现归并排序
归并排序归并排序是典型的分治法的应用思想:先递归分解数组,再合并数组原理:将数组分解最小之后,然后合并两个有序数组,基本思想是比较两个数组的最前面的数,谁小就取谁,取完后,将相应的指针后移以为。然后再比较,直到一个数组为空,最后把另一个数组的剩余部分复制过来即可。Python代码实现:# 归并排序def merge_sort(alist): if len(
2017-11-27 09:21:26 4454 3
原创 Python实现希尔排序
希尔排序(Shell Sort)希尔排序是插入排序的一种,也称为缩小增量排序,是直接插入排序的一种更加高效的改进版。是一种非稳定排序算法。原理:希尔排序把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰好被分成一组,算法便终止。基本思想:把数组列在一个表中并对列分别进行插入排序,重复这个过程,不过每次用更长
2017-11-25 14:51:56 4063
原创 Python实现快速排序
快速排序(QuickSort)工作原理:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后按照这种方法对两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。实现步骤:1)从数列中挑出一个元素,当做基准2)重新排序数列,所有元素比基准小的摆放在基准前面,所有比基准大的摆在基准的后面(想同的数可以到任一
2017-11-25 14:40:17 4130
原创 Python实现插入排序
插入排序(Insertion Sort):插入排序是一种简单直观的排序算法。工作原理:通过构建有序序列,对于未排序的数据,在已排序序列中从后向前进行扫描,找到相应位置并插入。插入排序,在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。Pyhton代码实现:# 插入排序# order 默认为True 表示升序;False 表示降序def i
2017-11-25 14:29:28 3965
原创 Python的内存管理机制
Python的内存管理机制一、引用计数:通过引用计数来保持对内存中的变量跟踪,Python内部记录中所有在使用对象各有多少个引用。Python中有个内部跟踪变量叫做引用计数器,每个变量有多少个引用,简称引用计数。当对象被创建时就创建了一个引用计数。当某个对象的引用计数为0时,对象就不在需要,就列入了垃圾回收队列。引用计数增加:1.对象被创建:x=4;2.另外的别人被创建:y
2017-11-25 12:06:41 4165
原创 关系型数据库的ACID指的是什么?
关系型数据库的ACID:1、A (Atomicity)原子性原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败
2017-11-25 11:44:55 9857
原创 cookie的属性和属性的作用
cookie属性:name字段 :一个cookie的名称。value字段 :一个cookie的值。domain字段 :可以访问此cookie的域名path字段:可以访问此cookie的页面路径。Size字段 :此cookie大小。http字段 :cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过docume
2017-11-25 11:41:46 7367
原创 http、https的区别
http、https的区别:http:http协议是超文本传输协议,被用于在web浏览器和网站服务器之间传递信息。http协议工作是以明文方式发送内容,不提供任何形式的数据加密,而这也是很容易被黑客利用的地方,如果黑客截取了web浏览器和网站服务器之间的传输信息,就可以直接读懂其中的信息,因此http协议不适合传输一些重要的、敏感的信息,比如信用卡密码及支付验证码等。https:安全套
2017-11-25 11:39:30 3947
原创 Http请求头和常见响应状态码
请求头:Accept:指浏览器或其他客户可以接爱的MIME文件格式。可以根据它判断并返回适当的文件格式。Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.Accept-Language:指出浏览器可以接受的语言种类,如en或en-us,指英语。Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式
2017-11-25 11:35:15 4435
原创 多线程和多进程的区别?
多线程和多进程的区别?线程:线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自
2017-11-25 11:32:42 3477
原创 tcp和udp的区别?
TCP(Transmission Control Protocol,传输控制协议) 面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,只简单的描述下这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台
2017-11-25 11:13:25 3216
原创 Python实现选择排序
选择排序(Selection sort)选择排序:一种简单直观的排序算法。工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余的未排序的元素中继续寻找最小(大)元素,然后放到已排序的末尾。直到所有元素均排序完毕。优点:选择排序与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被一道其最终位
2017-11-22 20:17:46 9588 2
原创 Python实现冒泡排序
冒泡排序(Bubble Sort)冒泡排序,是一种简单的排序算法。通过重复遍历要排序的数列,一次比较两个元素,如果顺序错误,就将其做交换,重复进行直到没有再需要交换,说明数列已经排序完成了思路(升序):1)比较相邻的元素,如果第一个比第二个大,交换位置2)对每一对相邻的元素做同样的工作,从开始第一对到结尾最后一对,这一步完成后,最后的元素会是最大的数。3)针对所有的元素重复以上
2017-11-22 20:05:19 5527
原创 Django缓存系统
为什么要做django缓存?在动态网站中,用户每次请求一个页面,服务器都会执行以下操作:查询数据库,渲染模板,执行业务逻辑,最后生成用户可查看的页面。这会消耗大量的资源,当访问用户量非常大时,就要考虑这个问题了。缓存就是为了防止重复计算,把那些消耗了大量资源的结果保存起来,下次访问时就不用再次计算。Django缓存系统:Django提供了自己的缓存系统,可以自己保存动态网页
2017-11-22 19:35:49 2634
原创 Python数据结构队列的实现
队列结构:queue 生活例子:排队买票队列的特点:先进先出(FirstInFirstOut,简称FIFO)队列的基本用法:push(入队:添加元素) pop(出队:删除元素)队列:Push、Pop、队列的大小、是否为空队列、清空队列 先进先出 双端队列:两端都能进,都能出class Queue(object): # 先进先出 # 在Python中用列表模拟
2017-11-20 20:02:22 3354
原创 Python栈数据结构的实现
栈结构:stack生活例子:电梯栈的特点:先进后出(FirstInLastOut,简称FILO)栈的基本用法:push(入栈:添加元素) pop(出栈:删除元素) size(返回栈的大小) is_empty(判断栈是否为空) empty(清空栈) top(返回栈顶元素)# -*- coding:utf-8 -*-# 利用python的列表来模拟一个栈结构class My
2017-11-20 19:49:49 3072
原创 算法与数据结构
算法的概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务,一般,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法重要的是其的思想,而不是其所实现的某种语言,它是独立存在的一种解决问题的方法和思想。算法的特性输入:算法具有0个或多个输入输出:算法至少有1个或多个输出
2017-11-20 19:40:47 3110
原创 Elasticsearch-bool组合查询
# bool组合查询# filter:过滤,不参与打分# must:如果有多个条件,这些条件都必须满足 an与# should:如果有多个条件,满足一个或多个即可 or或# must_not:和must相反,必须都不满足条件才可以匹配到 !非GET 51jobs/job/_search{ "query": { "bool": { "must": {
2017-11-10 19:45:24 13999
原创 Elasticsearch基本搜索
# ES 分为三种查询方式# 1.基本查询 2.复合查询 3.过滤# 1.基本查询:可以使用es中内置的一些查询条件进行查询# 2.复合查询:可以把多个查询条件结合在一些进行复合查询# 3.过滤:在查询的过程中,使用filter在不影响打分的情况下进行数据筛选# match查询,使用较多# _search 查询的接口GET jobs/job/_search{
2017-11-10 19:40:35 3554
原创 Elasticserach-mappings映射
# 映射mappings# 创建索引的时候,预先定义的字段的类型以及字段的相关属性# 如果创建索引的时候不指定映射关系,es会根据json中的数据进行分析,自动帮你建立映射关系# 映射好处:会让索引建立的更加完善,方便后续的搜索工作# es支持的类型:# # 创建索引,添加mappings映射# 相当于在创建数据库中的表的时候,设置表中字段的数据类型
2017-11-10 19:38:08 3595
原创 Elasticsearch基本CRUD操作
# es中对数据的增删改查都是通过请求的方式完成的# es使用的是RT接口,所有的操作都会根据请求的方式来进行# GET 获取引擎的数据# POST\PUT 向引擎添加数据# DELETE 删除引擎数据# 新建一个索引(理解为mysql中的数据库)# 请求方式 索引名称#PUT student{"settings": {"index":{"num
2017-11-10 19:35:09 3629
原创 ElasticSearch安装
ElasticSearch简介ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二最流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。我们建立一个网站或应用程序,并要添加搜
2017-11-09 22:32:22 3507
原创 ElasticSearch的简单介绍
ElasticSearch的基本概念1、集群:一个或者多个节点组织在一起 2、节点:一个节点是集群中的一个服务器,由一个名字来标识,默认是一个随机的漫微角色的名字 3、分片:将索引(相当于数据库)划分为多份的能力,允许水平分割和扩展,对个分片响应请求,提供性能和吞吐量 4、副本:创建分片的一份或者多份的能力(相当于备份),在一个节点失败其余节点可以顶上E
2017-11-09 22:22:52 3924
原创 微信服务器接入流程
微信服务器接入流程1. 创建django项目,创建app,创建wechat路由2. 写路由对应的视图函数,不能使用csrf_token验证,两种方式: 1)取消该项目所有视图函数csrf_token的验证2)使用@csrf_exemp修饰器修饰该函数3. 如果需要使用到数据库,后台管理等,需要将数据库连接配置好,收集后台使用的静态文件,
2017-11-03 22:39:35 4458
原创 微信订阅号和服务号的区别
订阅号和服务号的区别一丶展示位置:所有的订阅号都被折叠到一起,共同挤在一个叫“订阅号”的文件夹中;服务号是直接展示在微信首页的,并且用蓝色字体展示,打开微信就可以看到。二丶群发数量:订阅号每天可以群发一条,服务号每月可以群发四条。有的朋友可能注意到有些订阅号是可以每天可以群发三条的,这些账号都是在公众平台内测期创建的,才享有此特权。内测期过后创建的账号都没有这种特殊待遇。三丶自
2017-11-03 22:36:53 4840
原创 布隆过滤去重,及分布式爬虫配置
布隆过滤去重基本概念如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit Array)中的一个点。这样一来
2017-11-03 22:23:10 4441
原创 基于Redis分布式爬虫
分布式爬虫1) 在爬虫的settings.py中添加下面两句话# Enables scheduling storing requests queue in redis.SCHEDULER = "scrapy_redis.scheduler.Scheduler"# Ensure all spiders share same duplicates filter through re
2017-11-03 22:19:56 3734
原创 memcache和redis区别
memcache和redis区别Memcache时一个内存对象缓存系统,用于加速动态web应用程序,减轻数据库负载。它可以应对任意多个连接,使用非阻塞的网络I/O,工作机制:在内存中开辟一块空间,然后建立一个hash表,memcached自管理这些hash表memcache与redis区别1)redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据
2017-11-03 22:17:00 4040
原创 Redis部署主从关系
redis部署主从关系Redis属于非关系型数据库1)修改配置文件(找到redis下的redis.windows.conf) 1. 修改主的配置文件 搜索bind,将后面的ip改成当前服务器ip 2. 修改从的配置文件 搜索slaveof,将该代码解注释,然后添加ip和端口号。注意:端口号必须写2) 重启主和从的redis服务 进入文件夹
2017-11-03 22:14:28 3685
原创 Redis介绍及安装
Redis简介REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。Redis 与其他 key - value 缓存产品
2017-11-03 22:07:18 3583
原创 python发送带附件邮件
1. 不包括附件的邮件#coding:utf-8import smtplibimport string# 发送普通的文本邮件# 邮件smtp的地址HOST = 'smtp.163.com'# 定义邮件的标题SUBJECT = '这是邮件标题'# 发件人FROM = 'xxx@163.com'# 收件人To = 'xxx@qq.com'# 发送的邮件文本内容TEX
2017-11-03 21:59:39 9981
原创 Ubuntu部署Django项目
Ubuntu部署Django项目1. 安装Ubuntu系统或CentOS系统2. pip freeze >requirements.txt3. pip install -r requirements.txt4. 相关环境搭建5. sudo passwd 输入root相关密码6. 输入su回车 进入超级管理员sudo apt-get install python (
2017-11-03 21:44:09 3815
原创 Ubuntu搭建samba
Ubuntu搭建samba1. 简介Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,能够完成在Windows,Mac操作系统下访问Linux系统下的共享文件2. 安装Sudo apt-get install samba samba-common3. 配置挑选一个目录,新建一个文件夹为share,设置权限为最高权限mkdir sharechm
2017-10-30 22:41:46 3009
Burp 1.6.38破解版.rar
2017-11-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人