数据:客观事物的符号表示,是所有能输入到计算机中并能被计算机程序处理的符号的总称。
数据元素:数据的基本单位,也称元素、记录。(单元格)
数据项:组成数据的、有独立含义的、不可分割的最小单位。(行)
数据对象:性质相同的数据元素的集合。(列)
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
关心数据元素之间的相互关系与组织方式、运算及规则,不涉及数据元素的具体内容。
数据类型:一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型:由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
逻辑结构的两个要素:数据元素、关系。
数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。
定义:数组是最简单、也是使用最广泛的数据结构。每个数据元素都关联一个正数值,我们称之为索引,它表明数组中每个元素所在的位置。大部分语言将初始索引定义为0。
分类:一维数组、多维数组(数组的数组)。
存储结构:顺序存储。
基本操作:插入元素、删除元素、返回数组元素数量、返回指定索引位置的元素。
定义:字符串本质是指含有字符的数组。
定义:只能在表的一端(栈顶)进行插入和删除运算的线性表。
逻辑结构:与线性表相同,为一对一关系。
存储结构:用顺序栈或链栈存储均可,但以顺序栈更常见。
运算规则:只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则。
实现方式:关键是编写入栈和出栈函数,具体实现依顺序栈或链栈的不同而不同。
基本操作:入栈、出栈、读栈顶元素值、建栈、判断栈满、栈空等。
定义:只能在表的一端(队尾)进行插入,在另一端(队头)进行删除运算的线性表。
逻辑结构:与线性表相同,为一对一关系。
存储结构:用顺序队列或链队存储均可。
运算规则:先进先出(FIFO)。
实现方式:关键是编写入队和出队函数,具体实现依顺序队或链队的不同而不同。
基本操作:初始化队列、入队、出队、读队头元素、判队空操作等。
暂无
暂无
暂无
定义:采用链式存储结构的线性表称为链表 。
逻辑结构:与线性表相同,为一对一关系。
存储结构:链队存储。
实现方式:每个节点包含着数据和指向后续节点的指针。 链表还包含一个头指针,它指向链表的第一个元素,但当列表为空时,它指向null或无具体内容。
基本操作:初始化链表、取值、查找、插入、删除、建立链表、求链表长度等。
扩展:单链表、双向链表
定义:树是n(n≥0)个结点的有限集合T。
逻辑结构:一对多关系。
存储结构:用顺序队列或链队存储均可。
相关概念:
基本操作:插入、删除、修改、查找和排序。
定义:我们把满足以下两个条件的树形结构叫做二叉树(Binary Tree):
1.每个结点的度都不大于2;
2.每个结点的孩子结点次序不能任意颠倒。
特点:
结点的度小于等于2
有序树(子树有序,不能颠倒)
特殊的二叉树:
满二叉树:一棵深度为k 且有
2k -1
个结点的二叉树。(特点:每层都“充满”了结点)。满二叉树是完全二叉树的一个特例。完全二叉树:深度为k 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k 的满二叉树中编号从1至n的结点一一对应
性质:
在二叉树的第i层上至多有2^(i-1)个结点
深度为k的二叉树至多有2^k-1个结点
对于任何一棵二叉树,若2度的结点数有
n2
个,则叶子数n0
必定为n2+1
(即n0=n2+1
)具有n个结点的完全二叉树的深度必为
log2n
+1对完全二叉树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为
2i
,其右孩子编号必为2i+1
;其双亲的编号必为i/2。
存储结构:顺序存储结构和链式存储结构。
遍历:
DLR—先序遍历,即先根再左再右
LDR—中序遍历,即先左再根再右
LRD—后序遍历,即先左再右再根
由遍历确定二叉树:由二叉树的前序序列和中序序列或者后序序列和中序序列可唯一地确定一棵二叉树
规律(前,中):在前序序列中找根;到中序序列中分左右。
规律(中,后):在后序序列中找根;到中序序列中分左右。
暂无
定义:字典树,也称为“前缀树”,是一种特殊的树状数据结构,对于解决字符串相关问题非常有效。它能够提供快速检索,主要用于搜索字典中的单词,在搜索引擎中自动提供建议,甚至被用于IP的路由。
性质:
根节点不包含字符,除根节点外每一个节点都只包含一个字符;
从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
每个节点的所有子节点包含的字符都不相同。
基本操作:查找、插入和删除(比较少见)。
实现方法:
从根结点开始一次搜索;
取得要查找关键词的第一个字母,并根据该字母选择对应的子树并转到该子树继续进行检索;
在相应的子树上,取得要查找关键词的第二个字母,并进一步选择对应的子树进行检索。
迭代过程……
在某个结点处,关键词的所有字母已被取出,则读取附在该结点上的信息,即完成查找。
其他操作类似处理
暂无
定义:Graph=(V,E)
V:顶点(数据元素)的有穷非空集合;
E:边的有穷集合。
逻辑结构:多对多关系。
存储结构:邻接矩阵表示法(顺序)邻接表(链式)。
类型:有向图和无向图。
基本操作:遍历:深度优先遍历、广度优先遍历。
定义:堆通常是一个可以被看做一棵完全二叉树的数组对象。
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树。
逻辑结构:一对多关系。
基本操作:上浮、下沉、插入、弹出、取顶、堆排序。
大顶堆:每个结点的值都大于或等于其左右孩子结点的值。
小顶堆:每个结点的值都小于或等于其左右孩子结点的值。
定义:散列表(哈希表)是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
影响性能的3个因素:
常用方法:
处理冲突:
算法:算法是为了解决某类问题而规定的一个有限长的操作序列。
问题规模:问题规模是算法求解问题输入量的多少,是问题大小的本质表示,一般用整数n表示。
语句频度:一条语句的重复执行次数。
时间复杂度:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)
表示,若有某个辅助函数f(n)
,存在一个正常数c
使得fn*c>=T(n)
恒成立。记作T(n)=O(f(n))
,称O(f(n))
为算法的渐进时间复杂度,简称时间复杂度。
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)
空间复杂度:指算法在计算机内执行时所需存储空间的度量。
记作:S(n)=O(f(n))
算法执行期间所需要的存储空间包括3个部分:
在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术。
数据库(DB):长期保存在计算机的存储设备上,按照一定规则组织起来,可以被用于或应用共享的数据集合。
数据库管理系统(DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库系统(DBS):在计算机系统中引入数据库后的系统,通常由计算机硬件、软件、数据库管理系统和数据库管理员组成。
SQL:结构化查询语言
事务:数据库事务是构成单一逻辑工作单元的操作集合。
事务具有隔离性,理论上来说事务之间的执行不应该相互产生影响,其对数据库的影响应该和它们串行执行时一样。然而完全的隔离性会导致系统并发性能很低,降低对资源的利用率,因而实际上对隔离性的要求会有所放宽,这也会一定程度造成对数据库一致性要求降低。事务的隔离级别越低,可能出现的并发异常越多,但是通常而言系统能提供的并发能力越强。
对应关系只是理论上的,对于特定的数据库实现不一定准确,比如MySql的Innodb存储引擎通过Next-Key Locking技术在可重复读级别就消除了幻读的可能。
所有事务隔离级别都不允许出现脏写,而串行化可以避免所有可能出现的并发异常,但是会极大的降低系统的并发处理能力。
范式:当设计关系数据库时,需要遵从不同的规范和要求,设计出合理的关系型数据库,这些不同的规范被称为范式,越高的范式数据库冗余越小。一般来说,数据库只需满足第三范式(3NF)就行了。
范式越高,设计的表越可能越多,关系可能越复杂,但性能却不一定越好。
反范式的设计模式中,可以允许适当的数据冗余,用这个冗余可以缩短查询获取数据的时间。
优点:
缺点:
常见的数据库反范式技术:
索引:索引是对数据库表中一列或多列的值进行排序的一种结构。
提升检索速度、加速表与表之间的连接。
存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。
存储过程用于执行特定操作,可以接受输入参数、输出参数、返回单个或多个结果集。
增强了SQL语句的功能和灵活性。
存储过程可以保证数据的安全性。
不需要反复建立一系列处理步骤,保证了数据的完整性。
极大的改善数据库性能。
降低了网络的通信量,客户端调用存储过程只需要传存储过程名和相关参数即可,与传输SQL语 句相比自然数据量少了很多。
可以实现集中控制,当规则发生改变时,只需要修改存储过程就可以啦。
函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
函数和存储过程都可以有输入参数,都是由一系列SQL语句组成的。
触发器(TRIGGER)是数据库提供给程序员和DBA 用来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是用户定义在表上的一类由事件驱动的特殊过程。触发器的执行不是由程序调用,也不是由手工启动,而是由事件来触发的。其中,事件是指用户对表的增(INSERT)、删(DELETE)、改(即更新UPDATE)等操作。触发器经常被用于加强数据的完整性约束和业务规则等。
视图是由数据库的基本表中选取处理的数据组成的逻辑窗口,它不同于基本表,它是一个虚拟表,其内容有查询定义。
数据库只存储视图的定义,不存储视图的数据。
只有在使用视图时,才会执行视图的定义,从基本表中查询数据。
SQL注入:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
永远不要信任用户的输入,必须认定用户的输入的数据是不安全的,对用户输入的数据都必须进行过滤处理。
注意:
锁:锁机制用于对共享资源的并发访问,用于多用户环境下,可以保证数据库的完整性和一致性。
表级锁
表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面影响最小。所以获取锁和释放锁的速度很快。由于表级锁一次会将整个表锁定,所以可以很好的避免困扰我们的死锁问题。当然,锁定颗粒度大所带来最大的负面影响就是出现锁定资源争用的概率也会最高,致使并大度大打折扣。
行级锁
行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的。由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予应用程序尽可能大的并发处理能力而提高一些需要高并发应用系统的整体性能。虽然能够在并发处理能力上面有较大的优势,但是行级锁定也因此带来了不少弊端。由于锁定资源的颗粒度很小,所以每次获取锁和释放锁需要做的事情也更多,带来的消耗自然也就更大了。此外,行级锁定也最容易发生死锁。
页面锁
页级锁定是MySQL中比较独特的一种锁定级别,在其他数据库管理软件中也并不是太常见。页级锁定的特点是锁定颗粒度介于行级锁定与表级锁之间,所以获取锁定所需要的资源开销,以及所能提供的并发处理能力也同样是介于上面二者之间。另外,页级锁定和行级锁定一样,会发生死锁。在数据库实现资源锁定的过程中,随着锁定资源颗粒度的减小,锁定相同数据量的数据所需要消耗的内存数量是越来越多的,实现算法也会越来越复杂。不过,随着锁定资源颗粒度的减小,应用程序的访问请求遇到锁等待的可能性也会随之降低,系统整体并发度也随之提升。
总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。
Python3中的命名规范大全—基于PEP8标准:https://blog.csdn.net/weixin_39723544/article/details/82144280
Django官网:https://www.djangoproject.com/
Django中文文档:https://docs.djangoproject.com/zh-hans/3.1/
Django中文网:https://www.django.cn/
刘江的Django教程:https://www.liujiangblog.com/course/django/84
Django的数据库详细操作:https://blog.csdn.net/yanpenggong/article/details/82316514
WSGI是Python在处理HTTP请求时,规定的一种处理方式。如一个HTTP Request过来了,那么就有一个相应的处理函数来进行处理和返回结果。WSGI就是规定这个处理函数的参数长啥样的,它的返回结果是长啥样的?至于该处理函数的名子和处理逻辑是啥样的,那无所谓。简单而言,WSGI就是规定了处理函数的输入和输出格式。
下载地址:https://dev.mysql.com/downloads/installer/
HTML参考手册:https://www.w3school.com.cn/tags/index.asp
HTML教程:https://www.w3school.com.cn/html/index.asp
CSS教程:https://www.w3school.com.cn/css/index.asp
CSS参考手册:https://www.w3school.com.cn/css/css_reference.asp
JQuery官网:https://jquery.com/
JQuery中文网(JQuery官方文档):https://www.jquery123.com/
Bootstrap中文网:https://www.bootcss.com/
Bootstrap3中文文档:https://v3.bootcss.com/
Bootstrap4中文文档:https://v4.bootcss.com/
常见加密方式和Python实现:https://www.jianshu.com/p/4ba20afacce2