git & github 快速入门
摘要:假设你在的公司要上线一个新功能,你们开发团队为实现这个新功能,写了大约5000行代码,上线没2天,就发现这个功能用户并不喜欢,你老板让你去掉这个功能,你怎么办?你说简单,直接把5000行代码去掉就行了,但是我的亲,说的简单,你的这个功能写了3周时间,但你还能记得你是新增加了哪5000行代码么?所以你
阅读全文
建造者模式
摘要:建造者模式,是创建型模式中的第三种模式,一般的开发过程中用的比较少。所以只做简单的介绍。 根据书上的介绍,建造者模式通常用于补充工厂模式的不足,尤其是在如下场景中: 要求一个对象有不同的表现,并且希望将对象的构造与表现解耦要求在某个时间点创建对象,但在稍后的时间点再访问 看起来是很难理解,其实最常用
阅读全文
工厂模式
摘要:工厂模式,从名字上来讲就已经说明了它的本质 像工厂一样,根据得到的材料构造需要的产品。但是根据书上的介绍工厂模式通常有两种形式:一种工厂方法,一种是抽象工厂。 我们分别来讲述一下工厂模式的这两种形式。 通俗的解释工厂方法就是是:给出固定的接口,根据你的输入,会得到与输入相对应的输出。也许这个说法还是
阅读全文
设计模式分类
摘要:https://zhuanlan.zhihu.com/whatever
阅读全文
python的接口
摘要:写法一: 由于Mypay类并未实现pay方法,所以上述代码会报错: NotImplementedError 这就起到了限制作用。 但是这种写法如果不去调用Mypay.pay就不会报错。 第二种写法: 报错:TypeError: Can't instantiate abstract class Myp
阅读全文
Python代码教你批量将PDF转为Word
摘要:很多时候在学习时发现许多文档都是PDF格式,PDF格式却不利于学习使用,因此需要将PDF转换为Word文件,但或许你从网上下载了很多软件,但只能转换前五页(如WPS等),要不就是需要收费,那有没有免费的转换软件呢? so,我们给各位带来了一个免费简单快速的方法,手把手教你用Python批量处理PDF
阅读全文
什么是“堆”,"栈","堆栈","队列",它们的区别?
摘要:堆:什么是堆?又该怎么理解呢? ①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: ·堆中某个节点的值总是不大于或不小于其父节点的值; ·堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 ②堆是在程序运行时,而
阅读全文
python 黑魔法 ---上下文管理器(contextor)
摘要:所谓上下文 计算机上下文(Context)对于我而言,一直是一个很抽象的名词。就像形而上一样,经常听见有人说,但是无法和现实认知世界相结合。 最直观的上下文,莫过于小学的语文课,经常会问联系上下文,推测...,回答...,表明作者...。文章里的上下文比较好懂,无非就是前与后。 直到了解了计算机的执
阅读全文
python greenlet 背景介绍与实现机制
摘要:最近开始研究Python的并行开发技术,包括多线程,多进程,协程等。逐步整理了网上的一些资料,今天整理一下greenlet相关的资料。 并发处理的技术背景 并行化处理目前很受重视, 因为在很多时候,并行计算能大大的提高系统吞吐量,尤其在现在多核多处理器的时代, 所以像lisp这种古老的语言又被人们重
阅读全文
分布式队列神器 Celery
摘要:Celery 是什么? Celery 是一个由 Python 编写的简单、灵活、可靠的用来处理大量信息的分布式系统,它同时提供操作和维护分布式系统所需的工具。 Celery 专注于实时任务处理,支持任务调度。 说白了,它是一个分布式队列的管理工具,我们可以用 Celery 提供的接口快速实现并管理一
阅读全文
希尔排序
摘要:希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达
阅读全文
归并排序
摘要:在讲归并排序之前我们先来了解一下什么是分治算法。为什么归并排序属于分治算法的体现。 分治算法基本思想就是将一个比较大规模的问题分解成为若干个规模较小的性质和原问题性质必须要保持一致。 1. 该问题可以分解成为程序能够执行的子问题。 2. 该问题能够分解。意思就是问题具有最优子结构。 这里我们可以理解
阅读全文
堆排
摘要:预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(大根堆);或者每个结点的值都
阅读全文
快排
摘要:快速排序的基本思想是: 1、先从数列中取出一个数作为基准数 2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边 3、再对左右区间重复第二步,直到各区间只有一个数 上述思想用代码表示: 而关键就是partion函数,如何理解这个函数呢? 看动画: 有这样一组数: 用它演示一下
阅读全文
插入排序
摘要:插入排序是基于比较的排序。所谓的基于比较,就是通过比较数组中的元素,看谁大谁小,根据结果来调整元素的位置。 因此,对于这类排序,就有两种基本的操作:①比较操作; ②交换操作 插入排序算法有种递归的思想在里面,它由N-1趟排序组成。初始时,只考虑数组下标0处的元素,只有一个元素,显然是有序的。 然后第
阅读全文
选择排序
摘要:a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序) b)
阅读全文
冒泡排序
摘要:原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序
阅读全文
二分查找法
摘要:二分查找是一个基础的算法,也是面试中常考的一个知识点。二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。
阅读全文
时间复杂度
摘要:虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。 算法的效率主要由以下两个复杂度来评估: 时间复杂度:用来表示算法执行时间的单位,一般来说,时间复杂度高的算法比时间复杂度低的算法慢。空间复杂
阅读全文