自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 Python中前后端分离的好处

Python中前后端分离的好处1 .DjangoRESTframeworkweb应用模式在开发web应用中,有两种应用模式:前后端不分离前后端分离1. 前后端分离在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,有后端渲染页面或重定向,也就是后端需要控制前端的展示,前后端的耦合度很高2. 前后端分离在前后端分离的应用模式中,后端仅返回前端所需的数据,不在渲染HTML页面,不在控制前端的效果。至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都是由前端自己决定,网页

2020-06-18 18:32:04 554

原创 Python内存回收机制

Python内存回收机制由于面试中遇到了内存回收的问题,转载学习和总结这个问题。我们从三个方面简单来了解一下Python的内存回收机制。引用计数当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1.当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。标记-清除它分为两个阶段:第一阶段是标记阶段,GC会把所有的活动对象打上标记,第二阶段是把那些没有标记的对象非活动对象进行回收。对象之间通过引用(指针)连在一起

2020-06-18 18:28:02 244

原创 装饰器实现计算函数的运行时间

装饰器实现计算函数的运行时间何为装饰器装饰器其实就是一个函数,该函数有一个参数(函数类型),返回一个闭包在返回的闭包中调用传递进来的函数,然后在调用函数的前后就可以添加内容作用:当需要改变一个函数原有的功能时,但是不想/不能改变原来的函数,可以通过装饰器解决计算函数执行时间的装饰器import functoolsimport timedef run_time(fn): @functools.wraps(fn) def wrapper(*args, **kw):

2020-06-18 17:54:21 1059

原创 五种IO模型

五种IO模型文章目录五种IO模型1.阻塞IO(blocking I/O)2.非阻塞IO(noblocking I/O)3.信号驱动IO(signal blocking I/O)4.IO多路转接(I/O multiplexing)5.异步IO(asynchronous I/O)在网络环境下,通俗的讲,将IO分为两步:1.等;2.数据搬迁。如果要想提高IO效率,需要将等的时间降低。五种IO模型包括:阻塞IO、非阻塞IO、信号驱动IO、IO多路转接、异步IO。其中,前四个被称为同步IO。在介绍五种I

2020-06-18 17:53:49 211

原创 MySQL四种事务隔离级别

MySQL四种事务隔离级别文章目录MySQL四种事务隔离级别MySQL 事务概念说明事务隔离级别一探究竟MySQL 中执行事务读未提交读已提交可重复读串行化MySQL 中是如何实现事务隔离的解决幻读总结经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗,事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢?本文就帮大家梳理一下。MySQL 事务本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的。数据库事务指的是一组数据操作,事务内的操作要么就是

2020-06-17 21:23:19 232

原创 MySQL 事务

MySQL 事务​ MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。事务用来管理 insert,update,delete 语句一般来说,事务是必须满足4个条件(A

2020-06-17 21:22:43 98

原创 Redis事务

Redis事务Redis事务的概念:Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。Redis事务没有隔离级别的概念:批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。Redis不保证原子性

2020-06-17 21:22:13 574

原创 Redis分布式锁

Redis分布式锁文章目录Redis分布式锁1、为什么要使用分布式锁?2、分布式锁概念3、分布式锁的特点4、分布式锁的实现4.1、Memcached分布式锁4.2、Redis分布式锁4.3、Zookeeper分布式锁4.4、Chubby分布式锁4.4、Chubby分布式锁1、为什么要使用分布式锁?如下图所示,成员变量A存在JVM1、JVM2、JVM3三个JVM内存中。由于成员变量A同时都会在三个JVM上分配一块内存:若三个请求同时对这个变量操作时,显然结果是不对的;若三个请求依次分别请求三个不同

2020-06-17 21:21:41 102

原创 常见的搜索算法原理及其时间复杂度

常见的搜索算法原理及其时间复杂度1.顺序查找:最基础的查找方法,对比每一个元素进行查找。在数据量很大的时候效率相当的慢。数据结构:有序或者无需的队列时间复杂度:O(n)2.二分查找:二分查找首先要求数组有序每次查找从中间开始查找,比较查找对象和中间值,如果比中间值小,则去头到中间值的范围继续二分查找。如果比中间值大,则去中间值以后的数组进行二分查找。如果某一步骤数组为空,则表示没有此对象数据结构:有序数组时间复杂度:O(logN)3.二叉树排序:二叉排序树的特点是:a.若它

2020-06-10 23:35:27 5847

原创 MySQL存储引擎中的MyISAM和InnoDB区别详解

MySQL存储引擎中的MyISAM和InnoDB区别详解​ MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。​ InnoDB,是MySQL的数据库引擎之一,为MySQL

2020-06-10 23:33:18 126

原创 Redis主从复制流程

Redis主从复制流程复制过程1、从节点执行 slaveof 命令2、从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制3、从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点4、连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连5、如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。6、权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。7、当主节点把当前的数据

2020-06-10 23:32:59 160

原创 Mysql的主从复制原理及理解

Mysql的主从复制原理及理解Mysql主从复制原理master服务器将数据的改变都记录到二进制binlog日志中,只要master上的数据发生改变,则将其改变写入二进制日志;salve服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数

2020-06-10 23:28:31 120

原创 Python基本数据类型的时间和空间复杂度

Python基本数据类型的时间和空间复杂度常见的时间复杂度高低排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n²logn)<O(n³)<O(2ⁿ)<O(n!)<O(nⁿ)列表(List):python的列表内部实现是数组(具体实现要看解析器),因此就有组数的特点。超过容量会增加更多的容量,set, get 是O(1),但del, insert, in的性能是O(n)。具体的看下表,'n’是容器中当前的元素数, 'k’

2020-06-09 19:10:53 293

原创 python中几种常用的排序算法

python中几种常用的排序算法1.插入排序插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序;首先将第一个作为已经排好序的,然后每次从后的取出插入到前面并排序;时间复杂度:O(n²)空间复杂度:O(1)稳定性:稳定def insert_sort(ilist): for i in range(len(ilist)): for j in range(i): if ilist

2020-06-09 19:08:42 299

原创 python的几种常见数据类型底层细节实现

python的几种常见数据类型底层细节实现文章目录python的几种常见数据类型底层细节实现Str(字符串)List(列表)Dict(字典)Set(集合)Tuple(元组)Str(字符串)通过紧凑数组 实现字符串的存储, 字符串数据在内存中是连续存放的,空间利用率高原因是:每个字符的大小是固定的,因此一个字符串的大小也是固定的,可以分配一个固定大小的空间给字符串。同为序列类型,为什么列表采用引用数组,而字符串采用紧凑数据虽然同为序列类型,但列表可以存储的元素类型是多种多样的,并且列表是可变的,无

2020-06-09 18:58:25 900

原创 Django的中间件

Django的中间件中间件(middleware)中间件应用于request与服务端之间和服务端与response之间,客户端发起请求到服务端接收可以通过中间件,服务端返回响应与客户端接收响应可以通过中间件,也就是说中间件可以处理request和response。Django默认的中间件在settings中Django以及默认添加了许多有用的中间件MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'dja

2020-06-02 20:56:08 74

原创 Django-ORM之自关联表结构+处理平行数据

Django-ORM之自关联表结构+处理平行数据什么是自关联表结构表内自关联是指表内数据相关联的对象和表是相同字段,这样我们就直接用表内关联将外键关联设置成自身表的字段。同样表内关联也分一对多字段和多对多字段。例如:对于微博评论,每条评论都可能有子评论,但每条评的字段内容应该都是相同的,并且每条评论都只有一个父评论,这就满足了,一对多的情形。父评论为关联字段,可以对应多个子评论,这就是一对多的自关联。再比方说,我们国家的省市县信息的存储上面,就是一个很典型的自关联表。一个省对应很多个市。在Dja

2020-06-02 20:54:36 312

原创 可逆不可逆加密&对称非对称加密

可逆/不可逆加密&对称/非对称加密1、加密种类:1.1、不可逆加密:【Hash加密算法/散列算法/摘要算法】一旦加密就不能反向解密得到密码原文,一般用来加密用户密码,app的服务器端数据库里一般存储的也都是加密后的用户密码。在数据传输的过程中,首先把密码类数据经过MD5加密算法加密,然后再在外面使用可逆的加密方式加密一次,这样在数据传输的过程中,即便数据被截获了,但是想要完全破解,还是很难的。Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯

2020-06-02 20:54:03 565 1

原创 Vue+Django+Channles实现websocket

Vue+Django+Channles实现websocket文章目录Vue+Django+Channles实现websocketDjango端Vue端Django端django项目结构-SevenDays–SevenDays–websocket​ --auth.py​ --console.py1、SevenDayssettings.pyREDIS_OPTIONS = { 'HOST': '127.0.0.1', 'PORT': 6379, 'CHS_

2020-06-02 20:03:36 224

原创 Django+Vue实现dwebsocket通信

Django+Vue实现dwebsocket通信文章目录Django+Vue实现dwebsocket通信djangoVuedjangoPython环境下pip install dwebsocket配置django的setting.py文件# 看到其他博客里有这一步,但是添加中间件后,django报错,故注释掉# 只添加了WEBSOCKET_ACCEPT_ALL = TrueMIDDLEWARE = [ ... # 'dwebsocket.middleware.WebSocketMidd

2020-06-02 20:03:08 714

原创 Python 实现协同过滤算法

Python 实现协同过滤算法文章目录Python 实现协同过滤算法一、推荐系统二、推荐的常用方法三、基于协同过滤的推荐1.协同过滤算法概述2.协同过滤算法分类四、相似度的度量方法1.欧氏距离2.皮尔逊相关系数**3.余弦相似度**五、协同过滤算法实现1.**基于项的协同过滤算法进行推荐****2.基于用户的协同过滤算法进行推荐**参考文献一、推荐系统在信息暴涨的时代,每天大量的微博转载和创作,给用户不断更新信息的同时,也增加了用户筛选信息的难度,当用户有明确的需求时可以使用搜索引擎。但是在用户没有明

2020-06-02 20:02:32 927 3

原创 django+vue实现webshell

django+vue实现webshell文章目录django+vue实现webshellWebshellweb端实现1.安装2.导包3.在页面中的显示4.数据操作5.web端完整代码服务器端实现使用paramiko与服务器建立交互1.安装2.利用`paramiko`进行`ssh`远程登录3.结合`websocket`实现实时操作Webshell“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为通过网站端口对网站服务器的某种程

2020-06-02 20:02:01 282

原创 Vue父子组件传参和通信

Vue父子组件传参和通信父 > 子使用ref实现。Parent.vue<template> <div> parent <br> <button @click="add()">child +1</button> <hr> <Child ref="c"></Child> </div></template&gt

2020-06-02 20:01:34 82

原创 前端(Vue)上传图片到七牛云与后端(Django)上传图片到七牛云

前端(Vue)上传图片到七牛云与后端(Django)上传图片到七牛云文章目录前端(Vue)上传图片到七牛云与后端(Django)上传图片到七牛云Vue上传图片到七牛云Django上传图片到七牛云在开发项目的时候,经常会用到上传图片的功能,如果把图片全都存放在项目路径下,会导致项目越来越臃肿,因此可以考虑把图片上传交给第三方处理,此处采用七牛云进行图片存储。经过测试,通过七牛云获取图片确实比直接通过自己的服务器获取的速度要快得多,赶快去注册七牛云吧。上传方式上传图片的方式有两种:1 .通过服务器:

2020-06-01 21:23:57 1131

原创 OAuth2.0认证原理

OAuth2.0认证原理一.OAuth是什么? OAuth的英文全称是Open Authorization,它是一种开放授权协议。OAuth目前共有2个版本,2007年12月的1.0版(之后有一个修正版1.0a)和2010年4月的2.0版,1.0版本存在严重安全漏洞,而2.0版解决了该问题,下面简单谈一下我对OAuth2.0的理解。二.OAuth2.0有什么用? 引用一下OAuth2.0中文文档中的介绍: 1.需要第三方应用存储资源所有者的凭据,以供将来使用,通常是

2020-06-01 21:23:30 7714

原创 FastDFS

FastDFSFastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。在UC基于FastDFS开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和

2020-06-01 21:22:31 90

原创 单点登录

单点登录文章目录单点登录什么是单点登陆?单点登陆如何解决?基于cookie和session的单点登陆解决基于session认证所显露的问题基于JWT的单点登陆解决什么是JWTJWT组成JWT在django中如何使用JWT优势JWT安全要求什么是单点登陆?单点登录(Single Sign On),简称为 SSO。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。单点登陆如何解决?​ redis作为缓存储存session信息(cookie/session)​ J

2020-06-01 21:21:58 190

原创 为什么要使用celery,以及broker的选择标准

文章目录celery是什么?celery的使用场景?celery的使用?总结celery是什么?​ Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度celery的使用场景?有延时需要网络IO的,并且不关心返回结果的数据。例如:你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让你的程序等着结果返回,而是给你返回 一个任务ID,你过一段时间只需要拿着这个任务id就可以拿到任务执行结果, 在任务执行ing进行时,你可以

2020-06-01 20:01:01 648

转载 python基本数据结构

python基本数据结构文章目录python基本数据结构什么是数据结构数据类型1. 栈2. 队列3. 链表3.1 单向链表3.2 双向链表4. 数组什么是数据结构简单来说,数据结果就是设计数据以何种方式 存储在计算机中如:列表,集合,与字典等都是一种数据结构程序 = 数据结构 + 算法数据结构与数据类型数据类型说明:数据类型是一个值的 (集合和定义)在此集合上的一组操作(通常是增删改查或者操作读写的方法)的总称数据类型:int、str、boolean、byte数据结构说明:数据以什么方

2020-05-31 21:10:54 2734 1

原创 python的GIL全局解释器锁

GIL全局解释器锁概念保证同一时间仅有一个线程对资源有操作权限(在一个进程内,同一时刻只能有一个线程执行)python多线程中GIL锁只是在CPU操作时(如:计算)才是串行的,其他都是并行的,所以比串行快很多为什么会有GIL为了利用多核,Python开始支持多线程。而解决多线程之间数据完整性和状态同步,即数据安全,最简单方法自然就是加锁。 于是有了GIL这把超级大锁,而当越来越多的代码库开发者接受了这种设定后,他们开始大量依赖这种特性(即默认python内部对象是thread-safe的,无需在实

2020-05-31 12:35:47 69

原创 关于python的文件操作

关于python的文件操作文章目录关于python的文件操作python 文件操作**Python读写文件**1.open2.读文件读文本文件读二进制文件读取所有内容读固定字节读每行如果文件是文本文件,还可以直接遍历文件对象获取每行:3.写文件写文本文件写二进制文件追加写文件写入多行file的读写方法:python 文件操作python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd()返回指定

2020-05-31 12:30:58 70

原创 正则

正则文章目录正则正则表达式常用符号非打印字符特殊字符限定符定位符Pyhon中的正则表达式Python中常用的正则表达式处理函数。re.search方法函数语法:re.match与re.search的区别re.compile 函数语法格式为:findall语法格式为:re.finditer正则表达式正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。常用符号非打印字

2020-05-31 12:30:28 139

原创 python中的上下文管理和高阶函数的基本使用

python中的上下文管理和高阶函数的基本使用上下文管理1什么是with语句with是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try….except….finlally的处理流程。所以使用with处理的对象必须有enter()和exit()这两个方法1)with通过enter方法初始化(enter方法在语句体执行之前进入运行)2)然后在exit中做善后以及处理异常(exit()方法在语句体执行完毕退出

2020-05-31 10:30:37 152

原创 python的深浅拷贝和垃圾回收机制

python的深浅拷贝和垃圾回收机制深浅拷贝1. python的变量及其存储python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身不管多么复杂的数据结构,浅拷贝都只会copy一层。理解:两个人公用一张桌子,只要桌子不变,桌子上的菜发生了变化两个人是共同感受的。2. 浅copy与deepcopy浅copy: 不管多么复杂的数据结构,浅拷贝都只会copy一层deepcopy : 深拷贝会完全复制原变量

2020-05-31 10:27:11 208

原创 python面向对象中的魔法方法和类与对象

python面向对象中的魔法方法和类与对象文章目录python面向对象中的魔法方法和类与对象一,魔法方法二,类与对象一,魔法方法1.init__init__方法可以简单的理解为类的构造方法(实际并不是构造方法,只是在类生成对象之后就会被执行),之前已经在上一篇博客中说明过了。2.del__del__方法是类中的析构方法,当对象消亡的时候(被解释器的垃圾回收的时候会执行这个方法)这个方法默认是不需要写的,不写的时候,默认是不做任何操作的。因为你不知道对象是在什么时候被垃圾回收掉,所以,除非你确实要

2020-05-31 10:22:30 207

原创 python的面向对象

python的面向对象文章目录python的面向对象一、对面向对象的理解1、面向对象的编程---object oriented programming2、python面向对象的重要术语:3、函数和面向对象编程的区别二、封装、继承、多态1、封装(Encapsulation)2、继承(Inheritance)3、多态(Polymorphism)三、面向对象的各种方法1、静态方法 (用这个装饰器来表示 @staticmethod )2、类方法 (用这个装饰器来表示 @classmethod)3、属性方法

2020-05-31 10:22:00 138

原创 关于python中三程三器的基础知识和简单例子

关于python中三程三器的基础知识和简单例子文章目录关于python中三程三器的基础知识和简单例子三程(进程,线程,协程)进程进程是什么什么是程序(程序就是我们存储在硬盘上的代码)CPU分时进程具有独立的内存空间,所以没有办法相互通信进程是如何进行通信的呢为什么需要进程池线程为什么有了进程还需要线程什么是线程为保证数据安全,必须使用线程锁GIL全局解释器锁线程锁(互斥锁)MySQL中共享锁&互斥锁MySQL共享锁:MySQL排它锁:有了GIL全局解释器锁为什么还需要线程锁?死锁定义协程什么是协程

2020-05-31 10:21:29 128

原创 Django的RBAC权限管理

Django的RBAC权限管理文章目录Django的RBAC权限管理Django的RBAC权限管理Django的RBAC权限管理基于角色分配(RBAC) Role Based Access Control最基本基于角色分配表:角色表 User用户表 Role用户分配角色 User2Role许可表 Permission操作表(增删改查) Action 权限表

2020-05-24 21:38:16 136

原创 Redis的穿透, 雪崩与击穿

Redis的穿透, 雪崩与击穿文章目录Redis的穿透, 雪崩与击穿redis穿透什么是redis穿透?发生场景:解决方案redis雪崩:什么是redis雪崩?发生场景解决方案redis击穿什么是redis的击穿发生场景解决方案redis穿透什么是redis穿透?查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻

2020-05-24 21:34:48 120

原创 Redis内存管理与数据淘汰机制

Redis内存管理与数据淘汰机制文章目录Redis内存管理与数据淘汰机制maxmemory 的用法数据淘汰机制最大内存设置默认情况下,在32位OS中,Redis最大使用3GB的内存,在64位OS中则没有限制。在使用Redis时,应该对数据占用的最大空间有一个基本准确的预估,并为Redis设定最大使用的内存。否则在64位OS中Redis会无限制地占用内存(当物理内存被占满后会使用swap空间),容易引发各种各样的问题。通过如下配置控制Redis使用的最大内存:maxmemory 100mbma

2020-05-24 21:34:24 70

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除