- 博客(33)
- 收藏
- 关注
原创 数据结构与算法笔记(12) - 二叉树的概念和性质
二叉树二叉树是结点的有穷集合。这个集合或者为空,或者其中有一个称为根结点的特殊结点,其余结点分属两个互不相交的二叉树,这两棵子树分别是原二叉树的左子树和右子树。特征二叉树中的每个结点至多有两个子结点结点关联的后继结点明确的分为左结点和右结点二叉树的性质二叉树最重要的性质就是树的高度和树中可以容纳的最大结点个数之间的关系。在非空二叉树第 i 层最多有 2i 个结点(i >=...
2019-12-23 23:00:26 259
原创 数据结构与算法笔记(11) - 树的基本概念
定义树结构是由结点和结点之间的连接关系(后继关系)构成的一种层次结构。基本术语空树: 不包含任何结点的树单点树: 只包含一个结点的树树根: 树形结构的起始点,也叫其余结点的祖先结点父结点: 一个树的根结点称为子树根结点的父结点子节点: 一棵树的子树根结点称为树根结点的子节点边: 父结点到子结点的连线父子关系: 父结点到子结点的单向关系祖先/子孙关系: 祖先结点和子孙结点间的传...
2019-12-23 21:54:36 389
原创 数据结构与算法笔记(10) - 表达式
概述本文所讨论的表达式指的是数学表达式。在数学表达式中,最常见的结构是由一组二元运算符和运算对象构成,通常,二元运算符写在运算对象中间,这样的形式成为中缀表达式。将运算符写在运算对象前面称为前缀表达式,将运算符写在运算对象的后面称为后缀表达式。本文对表达式的讨论是假设运算符为二元运算符。中缀表达式中缀表达式是日常最习惯的一种表达式,但是作为表达式的表示方式,它很难统一的贯彻,对于一元和多元...
2019-12-23 05:00:53 354
原创 设计模式系列之命令模式
定义命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。模式结构client 负责创建一个ConcreteCommand,并设置接受者ConcreteCommand 定义了动作和接受者之间的绑定关系Receiver 接受者,action实现接受者自己的动作Command 命令对象接口,实现该接口只需要实现 execute() 和 u...
2019-12-17 07:24:30 149
原创 设计模式系列之单例模式
定义单例模式确保一个类只有一个实例,并提供一个全局访问点。模式结构uniqueInstance 是一个类变量,持有唯一的单例类的实例getInstance 是一个静态的,也就是一个类方法,通过这个方法获得单例类的唯一实例,这么做的优点是可以延迟实例化。模式分析单例模式,实际上是把某个类设计成自己管理的一个单独实例,同时避免其他类再自行产生实例。要想取得单例实例,必须通过单例类。提供...
2019-12-15 08:28:36 85
原创 设计模式系列之抽象工厂
定义提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。模式结构AbstractFactory 声明一个创建抽象产品对象的操作接口ConcreteFactory 实现创建具体产品对象的操作AbstractProduct 为一类产品对象声明一个接口ConcreteProduct 定义一个被相应的具体工厂创建的产品对象,实现 AbstractProduct 接口...
2019-12-14 12:52:22 94
原创 设计模式系列之工厂方法模式
定义工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。模式结构Factory 是没有实现工厂方法的抽象类ConcreteFacroty 只实现工厂方法的具体工厂类Product 抽象产品ConcreteProduct 具体产品模式分析工厂方法用来处理对象的创建,并将这样的行为封装在子类中。在超类中,工厂方法是抽象的,因此它依...
2019-12-14 09:41:49 98
原创 设计模式系列之简单工厂模式
定义简单工厂不是严格意义上的设计模式,它比较像是一种编程习惯,将变化的部分进行封装。简单工厂定义一个类来专门创建对象,是的对象的创建和使用分离已达到解耦的目的。模式结构Factory是创建对象的工厂,是整个应用中唯一用到具体对象的地方,通常 createProduct 会被声明为静态方法;Client是工厂的客户,可以通过工厂取得实例;Product是工厂的产品,抽象类定义一些通用的实...
2019-12-10 08:22:54 162 1
原创 设计模式系列之装饰者模式
定义动态的给一个对象添加一些额外的职责,对于扩展功能而言,装饰者提供了比继承更有弹性的设计。模式结构模式分析代码实现适用性
2019-11-27 07:41:01 85
原创 设计模式系列之观察者模式
定义定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。模式结构模式分析Subject 主题可以有任意多个观察者,提供主题和删除接口,并保持它们的引用。Observer 观察者定义统一的更新接口。当主题的状态发生改变时,想所有观察者发出通知并更新。代码实现(python)class Subject(object): ...
2019-11-26 00:26:11 108
原创 设计模式系列之策略模式
前言在软件开发的过程中,完成一项任务,往往可以用多种不同的方式,每一种方式就是一种策略,我们选择不同的策略来完成任务;在某些情况下,需要提供多种策略,比如提供多种排序算法;提供多种策略的方式可以是以硬编码的方式,即在代码中通过条件判断,这样的方式容易使得我们的代码变得臃肿,维护起来也异常困难;另一种方式是将算法封装成一个类,由客户端去选择想要执行的类。定义策略模式是一种行为型设计模式,策略模...
2019-11-22 08:33:50 98
原创 浅谈API网关
在微服务架构体系中,一个应用被拆分成多个小的服务,每个服务自成体系,每个服务可以拥有自己的框架、语言、数据库,通常这些小服务都会提供 restful 风格的接口供外部调用,微服务架构兴起的初衷是解耦,小的服务是易于维护的,易于扩展的,服务与服务之间是资源隔离的。微服务架构的引入解决了项目面临的瓶颈,但同时也给客户端带来了新的问题,本文针对客户端和服务器之间的交互问题进行探讨。
2019-11-21 08:46:58 296
原创 设计模式
设计模式是经过总结优化的,对我们经常碰到的一些编程问题的可重用解决方案,它是一种在特定情形下实现的一种方法模板,设计模式不会绑定具体的编程语言。设计模式同传统意义上的分析、设计与实现不同,它是将一个完整的理念根植与程序中。它可能出现在分析阶段或更高层的设计阶段。是否可以这样理解设计模式: 增加一个抽象层。抽象一个事物就是隔离任何具体细节,这么做的目的是为了将那些不变的核心部分从其他细节中分离出...
2019-10-14 18:58:53 95
原创 postgresql-json
1 overview2 json_example1、overview三个问题:1.什么是json数据类型?2.为什么要使用json数据类型?3.如何使用json数据类型?1.1 JSON TYPE官方文档按照RFC 7159的说明,json数据类型是用来存储json数据的。json数据可以作为text存储,但json数据类型的优点是每个存储的值都是有效符合json规则的,而且还...
2019-10-14 18:55:58 1281
原创 sqlalchemy可变数据跟踪
突变跟踪__支持对标量值的就地更改,当标量值拥有父对象时将传播到orm事件中__1. 数据类型__PostgreSQL的数据类型分为四种:基本数据类型、复合数据类型、域、伪类型。__基本数据类型:integer, char, varchar, bytea等数据类型复合数据类型:用户自定义的数据类型 create type域:基本数据类型+约束条件 create domain伪类型...
2019-10-14 18:55:29 644
原创 sqlalchemy钩子
基本概念Sqlalchemy: python Orm框架Session: sqlalchemy通过session和数据库进行交互, 用法是定义Session类(链接数据库),实例session对象Events: Session和数据库交互过程中发生的各种事件, sqlalchemy包含一个事件API,该API发布了很多钩子; e.g.create transaction; f...
2019-10-14 18:54:15 1787
原创 数据库的事务
事务是DBMS的基本单位,是一些列多数据库操作的集合,这些操作要么完成,要么不完成。每一步的状态对其他并发的事务是不可见的,如果有一些错误发生也会保护该事务完成,任何一步都不会影响到整个数据库。在DBMS中,事务具有ACID特性:2.1 原子性(atomicity):事务是操作的最小粒度,是不可分割的最小单位。即事务中的操作要么都发生,要么都不发生。2.2 一致性(consistency)...
2019-10-14 18:52:47 158
原创 PostgresQL 锁
postgresql的锁机制主要有三种,表级锁、行级锁、建议性锁表级锁和行级锁有显示的和隐式的,建议性锁都是显示的。显示的需要用户显示的查询来获取,隐式的则是由标准sql获取。页级共享/排除锁,用于控制对共享缓存池里表页的访问,在一行数据被读取或更新后会立即被释放表级锁大多数表级锁都可以通过sql命令来获取,也可以通过锁命令获取access share 访问共享锁,只和access ...
2019-10-14 18:52:11 393
原创 数据结构与算法笔记(9) -括号匹配问题
对于一段文本中存在的多种不同的括号,可以使用顺序扫描的方式一个一个字符的检查,因为每中括号都包括一个开括号和一个闭括号,原则上,在扫描过程中,遇到的表括号应该与此前遇到的且尚未获得匹配的开括号配对。由于无法预知正文中有多少对括号需要保存,所以使用缓存结构。上述说明括号的匹配符合后入先出规则,因此使用栈来匹配括号。匹配括号的流程如下:顺序扫描正文检查中跳过无关字符遇到开括号压入栈遇到闭...
2019-08-13 07:08:12 315
原创 数据结构与算法笔记(8) -栈
栈是一种简单的缓冲存储结构,它只支持数据项的存储和访问,不支持数据项之间的任何关系。栈具有后进先出的特性。栈的实现:基于栈的特性,实现一个栈可以基于两种结构,线性表和列表1. 异常类class StackUnderflow(ValueError): pass2. 基于线性表实现栈class Stack(object): def __init__(self): ...
2019-08-13 06:43:28 183
原创 数据结构与算法笔记(7) -字符串匹配算法之KMP算法
KMP算法: 维护一个表,表中记录了每个元素移动的距离,O(n)BM算法: 坏字符和好后缀Sunday算法:类似于BM算法,不过是从首部开始匹配搜索一个字符串(下文称之为模式字符串,记为 p)是否在另一个字符串(下文称之为目标字符串,记为 t)中,有多种算法,下面分别介绍一下:1. 朴素匹配算法朴素匹配算法,也常称之为暴力匹配算法,将模式字符串 p 和目标字符串 t 左端对齐,逐位比较,...
2019-08-09 23:36:08 241
原创 数据结构与算法笔记(6) - 循环双链表
双链表也可以定义为循环链表,让表尾结点的 next 指向表的首节点,让表首节点的 prev 指向表的尾结点。节点类:class Node(object): def __init__(self, elem, next_=None, prev=None): self.elem = elem self.next = next_ self.pre...
2019-08-03 16:00:14 103
原创 数据结构与算法笔记(5) - 双链表
双链表,节点之间具有双向链接,即在每个节点都有前和后两个指针,分别指向前一个节点和后一个节点。节点类:class Node(object): def __init__(self, elem, next_=None, prev=None): self.elem = elem self.next = next_ self.prev = pre...
2019-08-01 23:14:26 107
原创 数据结构与算法笔记(4) - 循环单链表
循环单链表是单向链表的一个变体,其中最后一个节点指向链表的第一个节点。节点类:class Node(object): def __init__(self, elem, next_=None): self.elem = elem self.next = next_循环链表:class LCList(object): def __init__(...
2019-08-01 08:59:42 188
原创 浅谈数据库关系范式
范式,是指规范化的关系模式,是衡量数据库关系模式是否规范的指标。根据规范化程度不同,定义了不同的范式。目前,主要有第一范式、第二范式、第三范式、Boyce-Codd范式、第四范式、第五范式。每一级的范式都比上一级的范式的约束条件更严格。第一范式:关系中的属性必须是原子项,即列不可再分。第一范式是关系型数据库最起码的要求,不满足第一范式的数据库模式不能成为关系数据库。第二范式:不允许关系模式...
2019-07-28 21:51:44 334 1
原创 数据结构与算法笔记(3) - 线性表之链表
用链接关系显示表示元素之间的顺序关系称为链接技术,基于链接技术实现的线性表称为链接表或者链表,链表主要由节点和连接关系组成。链表的实现主要有以下几种:单向链表单向循环链表双向链表双向循环链表1. 单向链表单向链表的节点是一个二元组,元素域保存数据,指针域指向下一个节点。单向链表需要一个变量指向首节点,尾结点需要指向空。定义一个节点:class Node(object): ...
2019-07-28 08:42:57 114
原创 数据结构与算法笔记(2) - 线性表之顺序表
1. 什么是线性表线性表是一些元素的序列,它维护着元素之间的一种线性关系。元素为空的表称为空表,元素的个数为表的长度,元素的位置为该元素的下标。除了首元素外,其余元素有且只有一个前驱元素;除了尾元素外,其余元素有且只有一个后继元素。2. 顺序表线性表的实现主要有两种:顺序表、链表顺序表:表中元素是按照一定的顺序存放在一块足够大的连续的内存中,首元素放在开始位置,其余元素依次放置,元素之...
2019-07-25 09:22:23 126
原创 浅谈python垃圾回收
1. 引用计数在 Python 中,一切接对象,所谓的对象,其实是一个结构体: typedef struct_object { int ob_refcnt; struct_typeobject *ob_type;} PyObject;这个结构体中的 ob_refcnt 是一个引用计数,当一个对象被引用是,该计数器就会加1。计数加 1 的情况:被创建被引用作为...
2019-07-24 15:29:30 76
原创 浅谈python装饰器
装饰器是 Python 中比较重要的一个概念,它是基于装饰器模式实现的,装饰器模式是一种结构型设计模式,它允许向现有的一个对象添加新的功能,而又不改变其结构。在 Python 中,装饰器是一个函数或者是一个类,它的功能是让其他函数或者类在不改变内部结构的情况下添加新的功能,通常用于切面需求,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景,它的返回值也是一个函数。通常,我们会使用高阶函...
2019-07-23 16:12:10 87
原创 数据结构与算法笔记(1) - 概述
1. 算法的定义:算法是对一种计算过程的严格描述2. 算法的性质:有穷性能行性确定性终止性输入输出3. 算法的描述:自然语言描述自然语言结合数学记法或公式计算模型描述法专门的描述语言采用某种编程语言的形式伪代码4. 程序程序是算法的实际体现,程序可能用各种计算机语言描述,这里采用Python语言描述程序,定义各种数据结构,描述各种算法。5. 算法设计与...
2019-07-20 14:54:43 127
翻译 redis系列: python客户端 redis-py 功能简介
这篇博客主要是探讨一下 redis-py 模块的基本功能和特性,后续会写一些 redis-py 源码方面的文章
2019-07-18 00:12:17 2989 1
原创 python微信昵称乱码
调用微信接口提取数据后中文乱码string.encode(‘iso-8859-1’).decode(‘utf-8’)注: string为从接口返回数据中提取的字符串
2019-02-19 16:27:56 1689
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人