摘要: 树状数组的原理和实现 概念 树状数组或者二叉索引树也称作Binary Indexed Tree,又叫做Fenwick树;它的查询和修改的时间复杂度都是log(n),空间复杂度则为O(n),这是因为树状数组通过将线性结构转化成树状结构,从而进行跳跃式扫描。通常使用在高效的计算数列的前缀和,区间和。 其阅读全文
posted @ 2017-10-22 17:49 banananana 阅读(47) 评论(0) 编辑
摘要: 连接远程主机 做法:通过ssh来连接远程主机,然后通过expect来发送密码,登陆主机以后再发送需要执行的命令来设置ss。为了避免出现超时,所以需要设置一个超时时间; 代码如下: #!/usr/bin/expect set user root set host yourip set password阅读全文
posted @ 2017-10-15 19:04 banananana 阅读(14) 评论(0) 编辑
摘要: 跳跃表原理和实现 前提 有时候会被问到链表如果做到二分搜索,可能会有部分的人会去把链表中的值保存到数组来进行二分,但是如果知道跳跃表的话,那么这个数据结构就可以解决这个困惑,它允许快速查询一个有序连续元素的数据链表,它的效率可以做到和二分相同,都是O(logn)的平均时间复杂度,其空间复杂度为O(n阅读全文
posted @ 2017-10-07 20:41 banananana 阅读(177) 评论(0) 编辑
摘要: Scrapy框架解析 Scrapy框架大致包括以下几个组件:Scrapy Engine、Spiders、Scheduler、Item Pipeline、Downloader; 组件 Scrapy Engine 这是框架的核心,负责控制数据流在整个系统的各个组件间的流动过程,并且在特定动作发生时触发相阅读全文
posted @ 2017-09-18 17:03 banananana 阅读(28) 评论(0) 编辑
摘要: 前言 的确,我一开始的时候也认为二分查找挺简单的,但是在我对二分查找进行总结的时候,发现虽然思路很简单,但是代码要写的正确就不容易了。 区间 需要注意的是 注意计算的区间是左闭右开区间[)还是左闭右闭区间[],两者的代码是不太一样的。 左闭右闭区间 如果说你使用的是左闭右闭区间: int searc阅读全文
posted @ 2017-09-16 17:59 banananana 阅读(15) 评论(0) 编辑
摘要: Python风格规范 整理自Google开源项目指南 分号 行长度 不要使用反斜杠连接行,可以使用圆括号来连接; # True x = ('This will build a very long long ' 'long long long long long long string') URL可以阅读全文
posted @ 2017-09-16 01:21 banananana 阅读(119) 评论(0) 编辑
摘要: 多线程库总结 基于线程的并行性 threading模块 下面是一些基础函数,函数包括: threading模块一共提供的类包括:local、Thread、Lock、RLock、Condition、Semaphore、Event、Time 1. Thead-Local Data 专门用来管理线程局部的阅读全文
posted @ 2017-09-12 22:43 banananana 阅读(92) 评论(0) 编辑
摘要: Redis数据结构底层总结 本篇文章是基于作者黄建宏写的书Redis设计与实现而做的笔记 数据结构与对象 Redis中数据结构的底层实现包括以下对象: String Redis中并没有直接使用C语言中的字符串,而是在其基础之上实现了字符串的数据结构,叫做简单动态字符串(SDS)。 其内部的定义为: 阅读全文
posted @ 2017-08-24 00:37 banananana 阅读(144) 评论(0) 编辑
摘要: Celery 使用(一) 架构 如下图: 整体的流程,任务发布者或者是任务调度,将任务发送到消息代理中,接着消息代理将任务发送给消费者来执行,其执行完后将结果保存到backend中。 使用 先创建Celery实例和相关的任务,这里配置Celery可以通过创建一个配置文件,然后通过app.config阅读全文
posted @ 2017-08-18 00:13 banananana 阅读(69) 评论(2) 编辑
摘要: RabbitMQ中的使用 这篇文章将会介绍关于RabbbitMQ的使用,并且使用的是kombo(客户端的Python实现)来实现; 安装 如果使用的是mac安装的话,可以先安装到指定的位置,接着配置命令访问路径: vi .bash_profile,输入下面两行 RABBIT_HOME=/usr/lo阅读全文
posted @ 2017-08-17 01:35 banananana 阅读(410) 评论(0) 编辑
摘要: web框架总结 前提 一个web框架需要包含的组件或者功能有: wsgi 首先要了解WSGI的相关知识,如下: web server:指的是软件程序,它从客户端接受请求,然后返回一个Response,需要注意的是它不创建Response,web app才是创建Response的主体。web app:阅读全文
posted @ 2017-08-15 23:34 banananana 阅读(103) 评论(0) 编辑
摘要: 装饰器总结 前提 使用装饰器的前提在于Python提供的特性: 可以通过一个例子来了解: def get_animal(name='dog'): def dog(): return 'this is a dog' def cat(): return 'this is a cat' # 返回函数对象 阅读全文
posted @ 2017-08-15 03:29 banananana 阅读(173) 评论(0) 编辑
摘要: Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是之前的。 优点: 如果要充分利用CPU多核,可以通过使用多进程+协程的方式 使用 打开asyncio阅读全文
posted @ 2017-08-13 09:21 banananana 阅读(166) 评论(1) 编辑
摘要: Python 内存管理机制和垃圾回收机制 内存管理 Python中的内存管理机制的层次结构提供了4层,其中最底层则是C运行的malloc和free接口,往上的三层才是由Python实现并且维护的。 第一层则是在第0层的基础之上对其提供的接口进行了统一的封装,这是因为虽然不同的操作系统都提供标准定义的阅读全文
posted @ 2017-08-12 13:03 banananana 阅读(205) 评论(1) 编辑
摘要: 求二叉树中任意两个结点的距离 实现步骤: 1 class Node(object): def __init__(self, value=0): self.value = value self.left = self.right = None def get_path_length(root, n, 阅读全文
posted @ 2017-08-12 00:20 banananana 阅读(213) 评论(1) 编辑
摘要: 排序算法 下面算法均是使用Python实现: 插入排序 原理:循环一次就移动一次元素到数组中正确的位置,通常使用在长度较小的数组的情况以及作为其它复杂排序算法的一部分,比如mergesort或quicksort。时间复杂度为 O(n2) 。 # 1nd: 两两交换 def insertion_sor阅读全文
posted @ 2017-08-10 07:00 banananana 阅读(196) 评论(2) 编辑
摘要: InnoDB索引原理 前面总结过B树和B+树原理 MySQL支持多种索引,包括B+树索引(最为常用)、全文索引、哈希索引等等。 数据库中的B+树索引可以分为聚集索引和辅助索引,但是不管是聚集还是辅助的索引,其内部都是B+树,是高度平衡的,叶子结点存放着所有的数据。聚集索引和辅助索引最大的不同在于,叶阅读全文
posted @ 2017-08-09 13:10 banananana 阅读(401) 评论(3) 编辑
摘要: 基本操作 通用操作 1. export 显示所有的环境变量,也可以获取到某个变量的详细信息; export # 显示所有 echo $SHELL # 只显示SHELL 2. whereis 使用系统自动构建的数据库来搜索可执行文件; whereis python # 如果搜不到就不输出 3. whi阅读全文
posted @ 2017-08-07 16:04 banananana 阅读(54) 评论(0) 编辑
摘要: Django是如何工作的? 概念 以线上版本中Django和Nginx、uwsgi搭配,这里首先要了解uWSGI、uwsgi、WSGI分别代表着什么,其中uWSGI实现了uwsgi、WSGI、HTTP协议的Web服务器,WSGI是通信协议,而uwsgi则是线路协议。 流程 当用户启动Nginx以后,阅读全文
posted @ 2017-08-07 09:19 banananana 阅读(220) 评论(8) 编辑
摘要: RabbitMQ知识总结 AMQP协议 AMQP协议是一个提供统一消息服务的应用层标准协议,并不会受到客户端/中间件不同产品、不同开发语言等条件的影响。RabbitMQ则是基于该协议实现的。 举个例子来说,如下图,生产者将消息发送到交换机上,交换机接收到信息以后按照相应的路由键路由到队列中,这里的交阅读全文
posted @ 2017-07-27 11:28 banananana 阅读(823) 评论(4) 编辑