- 博客(55)
- 收藏
- 关注
原创 css页面布局demo
<!DOCTYPE html><html><head><meta charset="UTF-8" /><title></title><style> * { margin: 0; padding: 0; } .header { width: 100vw; height: 3.6rem; position: fixe
2022-11-16 11:48:40
226
1
原创 使用py2exe打包含有numpy的文件出错的解决方法
最近公司打包py文件时由于用到了numpy,导致打包过程一波三折,出现了各种问题,主要是缺少dll文件,公司使用的环境为:打包平台:Win32系统,Python环境:Python2.7,打包方式:Py2exe,构建过程中报的错误:Here is how to proceed: If you’re working with a numpy git repository, try git clean -xdf (removes all files not underversion c
2021-01-07 11:04:10
886
原创 B树及B+树比较
B树B树中一个结点允许多余两个key的存在。B树是一种树状数据结构,他能够存储数据,对其进行排序并允许以O(logn)的时间复杂度进行查找,顺序读取,插入和删除等操作。B树中允许一个结点包含多个key可以使3个,4个,5个甚至更多,并不确定,需要看具体的实现。现在我们选择一个参数M,来构造一个B树,我们可以把他看做是M阶的B树,那么该树会具有如下特点:每个结点最多M-1个key,并且以升序排序。每个结点最多能有M个子结点。根结点至少有两个子结点。实际应用中B树的阶数一般都比较大(通常大于1
2020-09-28 15:34:23
278
原创 红黑树的原理及python简单实现
了解红黑树之前需要先了解一种树:2-3查找树。2-3查找树为了保证二叉查找树的平衡性,需要一些灵活性,因为我们允许树中的一个结点保存多个键。确切的说,将一棵标准的二叉查找树中的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和三条链。2-结点和3-结点中的每条链都对应着其中保存的键所分割产生的一个区间。定义:一颗2-3查找树要么为空,要么满足下面两个要求:2-结点:含有一个键(及其对应的值)和两条链,左连接指向2-3树中的键都小于该结点,右连接指向的2-3树中的键都大于
2020-09-28 15:14:44
734
原创 使用python创建堆以及实现堆排序
堆是计算机科学中一类特殊的数据结构的总称,堆通常可以被看做是一颗完全二叉树的数组对象。堆的特性它是完全二叉树,除了树的最后一层结点不需要是满的,其他的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求坐满右不满。他通常用数组来实现。具体方法就是讲二叉树的结点按照层级顺序放入数组中,根结点的在位置1,他的子结点在位置2和3,而子结点的子结点分别在位置4,5,6和7,以此类推。如果一个结点的位置为k,则它的父结点的位置为k/2,而他的两个子结点的位置分别为2k和2k+1。这样,在不使用指针的情况
2020-09-22 21:54:20
1314
1
原创 python实现二叉树的创建与遍历
树是由n(n>=1)个有限结点组成一个具有层次关系的集合,把它叫做树是因为它看起来像一颗倒挂的树,也就是说它是根朝上,而叶朝下的。二叉树特点每个结点有0个或多个子结点。没有父结点的结点成为根结点。每一个非根结点只有一个父结点。每个结点及其后代结点整体上可以看做一棵树,称为当前结点的父结点的一个字树。树的相关术语结点的度:一个结点含有的子树的个数称为结点的度。叶结点:度为0的结点称为叶结点,也可以叫做终端结点。分支节点:度不为0的结点成为分支结点,也可以叫做非终端结点。结点的层
2020-09-21 21:49:06
931
原创 python实现快速排序
快速排序是对冒泡排序的一种改进,他的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,一次达到整个数据的有序序列。## 快速排序def quick(lst): """ 原理: 1、首先设定一个分界值,通过分界值将数组分成两部分。 2、将大于或等于分界值的数据放到数组右边,小于分界值的数据放到数据的左边,此时左边部分元素都小于或
2020-09-20 02:08:16
160
原创 python实现归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用,将已有序的子序列合并,得到完全有序的序列,即先使每个序列有序,再使子序列段间有序,将两个有序表合成一个有序表,成为二路归并。## 归并排序def merge(lst): """ 原理: 1、尽可能的将一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是1为止。 2、将相邻的两个字组进行合并成一个有序的大组。 3、不
2020-09-19 21:28:11
198
原创 python实现希尔排序
希尔排序是插入排序的升级版import timeimport randomfrom insert import insert## 希尔排序def shell(lst): """ 插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。 选定一个增量h,按照增长量作为数据分组的依据,对数据进行分组,对分好组的每一组数据完成插入排序,减小增长量,最小 减为1,重复操作 :param lst: :return: """
2020-09-18 17:29:09
144
原创 java随笔
重写(override)和重载(overload)的区别:重写是子类继承父类并对父类里的方法进行重写,不可以改变参数及返回值,只可以改变内容;重载是同一个类中方法的重写,可以改变参数以及返回值。抽象方法所在的类必须是抽象类。不能直接创建抽象类对象;必须用一个子类来继承抽象父类;子类必须覆盖重写父类当中的所有抽象方法,去掉抽象方法中的abstract关键字,然后补上方法体大括号;创建子类对象进行使用。类中静态方法中不可以访问非静态字段,静态属性的创建早于非静态属性,静态属性及方法存在于方法区中的静态区中.
2020-06-30 22:26:20
186
原创 SpringBoot全局异常拦截器(基于前后端分离中json串的处理)
SpringBoot提供了一套默认的异常处理机制,一旦程序异常,springboot会向/error的url发起请求,并且提供了名为BasicErrorController的拦截器来处理请求,因此我们可以自定义显示的错误页面。基于现在越来越多的前后端分离项目,我们返回的错误信息往往不再是错误页面,而是携带错误信息的字符串,因此我们需要自定义异常拦截器去拦截错误信息并将信息已正确的格式返回给前端...
2020-04-19 20:20:58
1149
原创 flask中sqlalchemy增删改查
增from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom models import *db = SQLAlchemy()app = Flask(__name__)app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:123@localhost:9508/...
2019-09-28 11:35:28
252
原创 flask中使用flask-sqlalchemy连接mysql数据库并创建数据表
ORM(object relationship model)是我们在开发当中必定会用到的一项数据库操作技术,他是我们脱离了繁琐的原生SQL语句,极大的简化了我们开发的难度,使用flask在开发中我们一般使用sqlalchemy作为ORM。python中想要使用SQLAlchemy需要安装:pip install SQLAlchemy,但在flask中我们可以使用flask封装的SQLAlchem...
2019-09-25 19:12:20
7478
1
原创 python实现选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最...
2019-09-24 21:49:54
298
原创 django+celery使用阿里云短信服务异步发送注册验证码
网站注册时通常都会使用短信验证码,以防止机器恶意注册网站,阿里云短信服务是国内较大的短信服务平台,使用阿里云短信服务实现验证码发送也是非常的简单,相关文档:https://helpcdn.aliyun.com/document_detail/59210.html,python发送短信验证码文档:https://help.aliyun.com/document_detail/55491.html。...
2019-09-23 22:12:39
1009
原创 Django自定义User模型以及用户系统(用户、权限、组)的使用
Django自带强大的User系统,为我们提供用户认证、权限、组等一系列功能,可以快速建立一个完整的后台功能。但User模型并不能满足我们的需求,例如自带的User表中没有手机号码,而且对于国人来说表中的first_name和last_name并没有什么卵用,对于实际生产中灵活的用户表来说重写User模型是非常有必要的。自定义模型有许多的方法:1、Proxy继承:代理继承,此方法只能够继承...
2019-09-20 17:48:44
12769
2
原创 django2.1.7配置xadmin以及bug解决方案
强大的Django框架为我们自带了admin后台管理系统,为我们的开发省去了很多的事情,但有一个不好的地方,就是自带的admin系统太丑了!影响着我们操作后台的心情,因此很有必要换一个漂亮的后台管理系统,Xadmin就提供了这样一个系统。Xadmin基于bootstrap3,页面相对admin要美观许多,Xadmin作为一款全面的后台管理系统框架,不仅提供了基本的CRUD功能,还内置了丰富的插件功...
2019-09-18 23:53:36
654
原创 django之中间件详解
django中的中间件贯穿一个请求的始终,请求进来会被中间件的process_request拦截,执行视图函数时会被中间件的process_view拦截,模版渲染时会被中间件的process_template_response拦截,产生错误异常时会被中间件的process_exception拦截,返回响应时会被中间件的process_response拦截。因此在django中中间件是一个非常重要的...
2019-09-18 11:34:58
508
原创 python实现插入排序
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描, 找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复 把已排序元素逐步向后挪位,为最新元素提供插入空间。python实现插入排序很简单,代码如下:def insertion(lst): """从第二个元素开始向前插入...
2019-09-17 20:49:55
205
原创 python实现冒泡排序
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素作同样的工...
2019-09-17 19:59:09
242
原创 Django之paginator分页功能及重写Paginator类实现自定义分页
网页中经常会用到分页,django中自带的paginator为我们很好的实现了分页功能。虽然其中还有些功能待完善,例如paginator会为我们将所有的页码全部展现出来,如果页码过多的话,全部显示就不太合理了,此时我们可以通过重写paginator类去实现我们想要的结果。想要使用分页功能首先需要导入:from django.core.paginator import Paginator...
2019-09-16 22:35:35
975
1
原创 MySQL触发器的使用
MySQL的触发器和存储过程(https://blog.csdn.net/weixin_44951273/article/details/100765929)一样都是嵌入到MySQL的一段程序。触发器是由事件来触发某个操作,这些事件包括INSERT、UPDATE和DELETE语句。触发器(trigger)是个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要CA...
2019-09-12 16:43:41
133
原创 MySQL存储过程和函数
MySQL存储程序可以分为存储过程和函数两种,MySQL中可以使用CREATE PROCEURE 和CREATE FUNCTION来创建存储过程和函数。函数只能通过RETURN返回单个值或者表对象,而存储过程不允许执行RETURN,但是可以通过OUT参数返回多个值。函数限制比较多,不能用临时表,只能用表变量,还有一些函数都不可用等等,而存储过程的限制相对较少。函数可以嵌入SQL语句中使用,可以在S...
2019-09-12 15:23:41
429
原创 MySQL查询详解
数据库管理系统最重要的功能就是数据查询,数据查询不应只是简单的返回数据库中储存的数据,还应根据需要进行筛选,以及确定以什么样的格式显示。MySQL提供了强大的、灵活的查询语句来支持这些操作。基本查询语句:SELECT {*|<字段列表>}[ FROM <表1>、<表2>... [WHERE <表达式>] [GROUP BY <grou...
2019-09-11 15:30:57
374
原创 MySQL数据类型
MySQL支持的数据类型主要有数值类型,日期/时间类型,字符串类型,复合类型。数据类型数值类型包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECIMAL。时间日期类型包括YEAR、TIME、DATE、DATETIME和TIMESTAMP。字符串类型包括CHAR、VARCHAR、BINARY、V...
2019-09-10 13:41:27
180
原创 Django中Manager管理器的使用
Django强大的ORM帮助我们实现了通过类和对象去操作数据库,从而大大简化了我们在后台操作数据库的难度,那么Django是如何实现和数据库之间的映射的呢?django中ORM有三个类:Manager、Queryset、Model,其中Manager类实现了和数据库之间的操作,Manager类中定义了许多表级方法,通过这些方法实现数据库的查询,并且将查询到的结果封装成一个Queryset对象返回...
2019-09-09 21:09:20
756
原创 MySQL数据库的基本操作
连接MySQL数据库:mysql -h hostname -u username -p,其中mysql为登录命令,-h后的参数代表服务器主机地址,-u后的参数代表登录数据库的用户名称,-p后的参数代表登录密码。设置数据库密码: set password for 用户名@localhost = password('新密码'); 查看数据库:SHOW DATABASES;SQL语句不...
2019-09-09 16:33:38
245
原创 python协程的实现以及gevent的使用初步
python多线程一直以来是被人诟病的对象,虽说I/O密集型操作使用多线程效率还不错,但对于网站所涉及到的高并发等问题,线程过多会造成cpu频繁的切换线程,此时cpu性能的损耗是不容忽视的,为了解决多线程带来的诸如此类的问题,python3.4之后引入了协程。线程是cpu执行的最小单位,而协程是比线程更小的执行单元,因为它自带cpu上下文切换。相对于线程而言,协程只是单纯的操作cpu的上下文,不...
2019-09-08 14:25:56
206
原创 MongoDB数据库操作以及python连接MongoDB
MongoDB作为最像关系型数据的非关系型数据库,有许多类似SQL的功能,他是一个基于分布式文件储存的数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。MongoDB的主要特点:MongoDB 的...
2019-09-08 10:43:44
1072
原创 python多进程模块的multiprocessing的使用
由于全局解释器锁的存在,python中的多线程使用有许多的局限性,因此部分场合使用多进程会优于多线程,比如在cpu计算密集型的环境下。python中使用multiprocessing模块实现多线程。python多进程中引入了多线程中没有的Queue、Pool等模块,方便我们更好的使用多进程。我们常说对于I/O密集型使用多线程,对于CPU密集型使用多进程,但其实I/O密集型的场景下也可以使用多进...
2019-09-04 19:56:46
267
原创 django中django-celery实现定时任务
在网站开发的过程中我们经常会遇到一些异步任务的需求,有些异步任务是实时的,有些则是需要定时完成,我写过一篇django中使用celery编写异步发送邮件的博文https://blog.csdn.net/weixin_44951273/article/details/100107526,这次使用django-celery编写定时任务,需要用到的第三方库:pip install django-cele...
2019-09-03 22:57:51
1010
1
原创 浅析TCP/IP协议
网络协议是为计算机网络中的数据交换而建立的一系列协议,只有遵循网络协议,才可以在网络中访问资源。互联网中有上百种协议,但最重要的协议就是TCP协议和IP协议,因此我们将这上百种协议统称为TCP/IP协议族。TCP/IP协议在一定程度上参考了OSI的体系结构,OSI模型共有七层其中应用层,表示层和会话层提供的服务相差不大,因此在TCP/IP协议中被统称为应用层,数据链路层和物理层被统称为网络...
2019-09-03 19:03:41
175
原创 python常用模块之os模块的使用
os模块是python内置模块,可以操作系统文件,需要导入import os重命名文件:import osos.rename(src,dst) #src表示旧文件或目录名,dst表示新文件或目录名 删除文件:os.remove(path) # path表示路径,只能删除文件,如果是目录就会报错创建目录:os.mkdir('file01') # mkdir生成目录时,如果父级目录...
2019-09-03 14:24:15
234
原创 python常用魔术方法总结
面向对象编程(英语:Object-oriented programming,缩写:OOP)是一种编程理念,这种编程理念更符合我们人的逻辑思维。使用面向对象编程可以提高我们的开发速度和代码的重用率。面向对象的开发非常适合大型程序开发,开发速度和后期维护都比过程化开发要好很多。面对对象内置了许多魔术方法,吃透一些常用的魔术方法是每一个程序员所必需的。下面我们介绍一些常用的魔术方法。__init__...
2019-09-02 15:30:30
623
原创 python常用模块之time模块的使用
python中通常有三种方式来表示时间:时间戳(timestamp):表示从1970年1月1日00:00:00开始到现在的秒值,类型为float,是计算机可以识别的时间。时间元组(struct_time):元组有9个元素(年,月,日,时,分,秒,一周的第几天,一年的第几天,夏令时),是用来操作时间的。格式化的时间字符串(Format String):类似“1995-08-24”,是人能够看懂...
2019-08-31 00:33:17
176
原创 django中haystack+whoosh+jieba实现网站的全局搜索功能
一提起数据库关键搜索,相信大家都会想起like语句,django中也可以使用orm的contains进行查询,这种查询是非常耗时间的,对于小量数量还可以,但随着数据的增多,查询速度会急剧下降,因此网站中使用这种方式是非常不合理的。基于这种情况,许多全文搜索框架应运而生。本来打算使用haystack+elasticsearch实现全局搜索,但windows的系统环境问题和windows版的dock...
2019-08-30 22:44:29
462
原创 python常用模块之random模块的使用
random类中包含的方法:seed,getstate,setstate,randrange,randint,choice,shuffle,sample,choices,uniform,triangular,normalvariate,lognormvariate,expovariate,vonmisesvariate,gammavariate,gauss,betavariate,paretov...
2019-08-30 16:40:24
267
原创 windows下安装maven
安装maven:http://maven.apache.org/download.cgi解压之后配置环境变量新建maven_homepath中添加“;%SystemRoot%\system32;%maven_home%\bin”在cmd中输入mvn -version,如果报mvn不是内部或外部命令,在用户变量中在配置一次上面的步骤cmd输入mvn -version...
2019-08-30 09:54:12
63
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人