摘要: 单例模式应用的场景一般发现在以下条件下: 资源共享的情况下,避免由于资源操作时导致的性能或损耗等,如日志文件,应用配置。 控制资源的情况下,方便资源之间的互相通信。如线程池等, 1.网站的计数器 2,应用配置 3.多线程池 4. 数据库配置 数据库连接池 5.应用程序的日志应用 阅读全文
posted @ 2020-08-31 23:58 anobscureretreat 阅读(1454) 评论(0) 推荐(0)
摘要: 在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变 量称之为闭包。 阅读全文
posted @ 2020-08-31 23:55 anobscureretreat 阅读(166) 评论(0) 推荐(0)
摘要: 装饰器本质上是一个callable object,它可以在让其他函数在不需要做任何代码的变动的前提下增加额 外的功能。装饰器的返回值也是一个函数的对象,它经常用于有切面需求的场景。比如:插入日志,性 能测试,事务处理,缓存。权限的校验等场景,有了装饰器就可以抽离出大量的与函数功能本身无关的 雷同代码 阅读全文
posted @ 2020-08-31 23:54 anobscureretreat 阅读(469) 评论(0) 推荐(1)
摘要: 迭代器是遵循迭代协议的对象。用户可以使用 iter() 以从任何序列得到迭代器(如 list, tuple, dictionary, set 等)。另一个方法则是创建一个另一种形式的迭代器 —— generator 。要获取下一个元 素,则使用成员函数 next()(Python 2)或函数 nex 阅读全文
posted @ 2020-08-31 23:52 anobscureretreat 阅读(197) 评论(0) 推荐(0)
摘要: yield就是保存当前程序执行状态。你用for循环的时候,每次取一个元素的时候就会计算一次。用yield 的函数叫generator,和iterator一样,它的好处是不用一次计算所有元素,而是用一次算一次,可以节 省很多空间,generator每次计算需要上一次计算结果,所以用yield,否则一r 阅读全文
posted @ 2020-08-31 23:50 anobscureretreat 阅读(171) 评论(0) 推荐(0)
摘要: 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改 变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上其所指的 值直接发生改变,并没有发生复制 阅读全文
posted @ 2020-08-31 23:48 anobscureretreat 阅读(134) 评论(0) 推荐(0)
摘要: code s1='_aai0efe00' res=re.findall('^[a-zA-Z_]?[a-zA-Z0-9_]{1,}\d$',s1) print(res) 阅读全文
posted @ 2020-08-31 23:42 anobscureretreat 阅读(755) 评论(0) 推荐(0)
摘要: import re pattern = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]') pattern.sub('',text) 阅读全文
posted @ 2020-08-31 23:41 anobscureretreat 阅读(210) 评论(0) 推荐(0)
摘要: 这个问题被问的概念相当之大, 进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单 位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。 线程: cpu调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在,一个进程至少有一个线 程,叫主线程,而 阅读全文
posted @ 2020-08-31 23:35 anobscureretreat 阅读(261) 评论(0) 推荐(0)
摘要: 线程是非独立的,同一个进程里线程是数据共享的,当各个线程访问数据资源时会出现竞争状态即:数 据几乎同步会被多个线程占用,造成数据混乱,即所谓的线程不安全 那么怎么解决多线程竞争问题? 锁 锁的好处: 确保了某段关键代码(共享数据资源)只能由一个线程从头到尾完整地执行能解决多线程资 源竞争下的原子操作 阅读全文
posted @ 2020-08-31 23:30 anobscureretreat 阅读(400) 评论(0) 推荐(0)
摘要: 锁(Lock)是python提供的对线程控制的对象。有互斥锁,可重入锁,死锁。 阅读全文
posted @ 2020-08-31 23:27 anobscureretreat 阅读(383) 评论(0) 推荐(0)
摘要: 若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,互 相干等着,程序无法执行下去,这就是死锁。 GIL锁 全局解释器锁 作用: 限制多线程同时执行,保证同一时间只有一个线程执行,所以cython里的多线程其实是伪多线 程! 所以python里常常使用协程技术来代 阅读全文
posted @ 2020-08-31 23:20 anobscureretreat 阅读(185) 评论(0) 推荐(0)
摘要: 怎么避免重读? 创建一个已访问数据列表,用于存储已经访问过的数据,并加上互斥锁,在多线程访问数据的时候先查 看数据是否在已访问的列表中,若已存在就直接跳过。 阅读全文
posted @ 2020-08-31 23:19 anobscureretreat 阅读(169) 评论(0) 推荐(0)
摘要: 每个对象都对应于一个可称为’互斥锁‘的标记,这个标记用来保证在任一时刻,只能有一个线程访问该 对象。 同一进程中的多线程之间是共享系统资源的,多个线程同时对一个对象进行操作,一个线程操作尚未结 束,另一线程已经对其进行操作,导致最终结果出现错误,此时需要对被操作对象添加互斥锁,保证每 个线程对该对象 阅读全文
posted @ 2020-08-31 23:18 anobscureretreat 阅读(290) 评论(0) 推荐(0)
摘要: 同步: 多个任务之间有先后顺序执行,一个执行完下个才能执行。 异步: 多个任务之间没有先后顺序,可以同时执行,有时候一个任务可能要在必要的时候获取另一个同 时执行的任务的结果,这个就叫回调! 阻塞: 如果卡住了调用者,调用者不能继续往下执行,就是说调用者阻塞了。 非阻塞: 如果不会卡住,可以继续执行 阅读全文
posted @ 2020-08-31 23:13 anobscureretreat 阅读(155) 评论(0) 推荐(0)
摘要: 孤儿进程: 父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被init 进程(进程号 为1)所收养,并由init 进程对他们完成状态收集工作。 僵尸进程: 进程使用fork 创建子进程,如果子进程退出,而父进程并没有调用wait 获waitpid 获取子进 程的状态信息,那么子进程的进 阅读全文
posted @ 2020-08-31 23:11 anobscureretreat 阅读(391) 评论(0) 推荐(0)
摘要: 多进程适合在CPU密集操作(cpu操作指令比较多,如位多的的浮点运算)。 多线程适合在IO密性型操作(读写数据操作比多的的,比如爬虫) 阅读全文
posted @ 2020-08-31 23:08 anobscureretreat 阅读(293) 评论(0) 推荐(0)
摘要: 并行: 同一时刻多个任务同时在运行 并发:不会在同一时刻同时运行,存在交替执行的情况。 实现并行的库有: multiprocessing 实现并发的库有: threading 程序需要执行较多的读写、请求和回复任务的需要大量的IO操作,IO密集型操作使用并发更好。 CPU运算量大的程序,使用并行会更 阅读全文
posted @ 2020-08-31 23:06 anobscureretreat 阅读(962) 评论(0) 推荐(0)
摘要: IO密集型: 系统运行,大部分的状况是CPU在等 I/O(硬盘/内存)的读/写 CPU密集型: 大部分时间用来做计算,逻辑判断等CPU动作的程序称之CPU密集型。 阅读全文
posted @ 2020-08-31 23:05 anobscureretreat 阅读(1525) 评论(0) 推荐(0)
摘要: 一个客户端运行了新的命令,添加了新的数据。 redis检查内存使用情况,如果大于maxmemory的限制,则根据设定好的策略进行回收。 一个新的命令被执行等等,所以我们不断地穿越内存限制的边界,通过不断达到边界然后不断回收回到 边界以下。 如果一个命令的结果导致大量内存被使用(例如很大的集合的交集保 阅读全文
posted @ 2020-08-31 23:03 anobscureretreat 阅读(693) 评论(0) 推荐(0)
摘要: 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据。 索引的实现通常使用B树以其变种B+树。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。 为表 阅读全文
posted @ 2020-08-31 23:01 anobscureretreat 阅读(226) 评论(0) 推荐(0)
摘要: drop直接删掉表,truncate删除表中数据,再插入时自增长id又从1开始,delete删除表中数据,可以加where字句。 1.delete 语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志 中保存以便进行回滚操作。truncate table则一次性地从表中 阅读全文
posted @ 2020-08-31 22:58 anobscureretreat 阅读(150) 评论(0) 推荐(0)
摘要: Python自带:urllib,urllib2 第三方:requests 框架: Scrapy urllib 和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。 urllib2: urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时 阅读全文
posted @ 2020-08-31 22:52 anobscureretreat 阅读(368) 评论(0) 推荐(0)
摘要: requests, urllib,urllib2, httplib2 阅读全文
posted @ 2020-08-31 22:51 anobscureretreat 阅读(532) 评论(0) 推荐(0)
摘要: Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但是禁用 Cookie就不能得到Session。 因为Session是用Session ID来确定当前对话所对应的服务器Session,而 Session ID是通过Cookie来传递的,禁用Cookie相 阅读全文
posted @ 2020-08-31 22:50 anobscureretreat 阅读(484) 评论(0) 推荐(0)
摘要: Django REST framework是一个强大而灵活的Web API工具。使用RESTframework的理由有: Web browsable API对开发者有极大的好处 包括OAuth1a和OAuth2的认证策略 。 支持ORM和非ORM数据资源的序列化 全程自定义开发--如果不想使用更加强 阅读全文
posted @ 2020-08-31 22:49 anobscureretreat 阅读(236) 评论(0) 推荐(0)
摘要: 1.Django中耗时的任务用一个进程或者线程来执行,比如发邮件,使用celery. 2.部署django项目的时候,配置文件中设置了进程和协程的相关配置。 阅读全文
posted @ 2020-08-31 22:47 anobscureretreat 阅读(433) 评论(0) 推荐(0)
摘要: django:主要是用来搞快速开发的,他的亮点就是快速开发,节约成本,,如果要实现高并发的话,就要 对django进行二次开发,比如把整个笨重的框架给拆掉自己写socket实现http的通信,底层用纯c,c++写 提升效率,ORM框架给干掉,自己编写封装与数据库交互的框架,ORM虽然面向对象来操作数 阅读全文
posted @ 2020-08-31 22:44 anobscureretreat 阅读(719) 评论(0) 推荐(0)
摘要: uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的 作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx, uWSGI等服务器)与web应用(如用Flask框架写的程序)通信 阅读全文
posted @ 2020-08-31 22:41 anobscureretreat 阅读(186) 评论(0) 推荐(1)
摘要: 1.GET是从服务器上获取数据,POST是向服务器传送数据 2.在客户端,GET方式在通过URL提交数据,数据在URL中可以看到,POST方式,数据放置在HTML ——HEADER内提交 3.对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用 阅读全文
posted @ 2020-08-31 22:37 anobscureretreat 阅读(158) 评论(0) 推荐(0)
摘要: 在进行数据库的设计时,所遵循的一些规范,只要按照设计规范进行设计,就能设计出没有数据冗余和 数据维护异常的数据库结构。 数据库的设计的规范有很多,通常来说我们在设是数据库时只要达到其中一些规范就可以了,这些规范 又称之为数据库的三范式,一共有三条,也存在着其他范式,我们只要做到满足前三个范式的要求, 阅读全文
posted @ 2020-08-31 22:33 anobscureretreat 阅读(302) 评论(0) 推荐(0)
摘要: Nginx(engine x)是一个高性能的HTTP和反向代理服务器,也是 一个IMAP/POP3/SMTP服务器,工作 在OSI七层,负载的实现方式:轮询,IP_HASH,fair,session_sticky. Apache HTTP Server是一个模块化的服务器,源于NCSAhttpd服务 阅读全文
posted @ 2020-08-31 22:31 anobscureretreat 阅读(389) 评论(0) 推荐(0)
摘要: 一般是用户通过浏览器向我们的服务器发起一个请求(request),这个请求会去访问视图函数,如果不涉 及到数据调用,那么这个时候视图函数返回一个模板也就是一个网页给用户) 视图函数调用模型毛模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板中空格 中,最后返回网页给用户。 1.wsg 阅读全文
posted @ 2020-08-31 22:28 anobscureretreat 阅读(288) 评论(0) 推荐(0)
摘要: 为什么要使用会话管理 众所周知,HTTP协议是一个无状态的协议,也就是说每个请求都是一个独立的请求,请求与请求之间 并无关系。但在实际的应用场景,这种方式并不能满足我们的需求。举个大家都喜欢用的例子,把商品 加入购物车,单独考虑这个请求,服务端并不知道这个商品是谁的,应该加入谁的购物车?因此这个请 阅读全文
posted @ 2020-08-31 22:23 anobscureretreat 阅读(162) 评论(0) 推荐(0)
摘要: 什么是CORS? CORS是一个W3C标准,全称是“跨域资源共享"(Cross-origin resoure sharing). 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而客服了A JAX只能同源使用的限制。 什么是CSRF? CSRF主流防御方式是在后端生成表单的时候生成 阅读全文
posted @ 2020-08-31 22:17 anobscureretreat 阅读(640) 评论(0) 推荐(0)
摘要: 1、 Django走的大而全的方向,开发效率高。它的MTV框架,自带的ORM,admin后台管理,自带的 sqlite数据库和开发测试用的服务器,给开发者提高了超高的开发效率。 重量级web框架,功能齐全,提供一站式解决的思路,能让开发者不用在选择上花费大量时间。 自带ORM和模板引擎,支持jinj 阅读全文
posted @ 2020-08-31 22:09 anobscureretreat 阅读(965) 评论(0) 推荐(0)
摘要: WSGI: web服务器网关接口,是一套协议。用于接收用户请求并将请求进行初次封装,然后将请求交给web框 架。 实现wsgi协议的模块:wsgiref,本质上就是编写一socket服务端,用于接收用户请求(django) werkzeug,本质上就是编写一个socket服务端,用于接收用户请求(f 阅读全文
posted @ 2020-08-31 22:08 anobscureretreat 阅读(264) 评论(0) 推荐(0)
摘要: 在django中,路由是浏览器访问服务器时,先访问的项目中的url,再由项目中的url找到应用中url, 这些url是放在一个列表里,遵从从前往后匹配的规则。 在flask中,路由是通过装饰器给每个视图函数 提供的,而且根据请求方式的不同可以一个url用于不同的作用。 阅读全文
posted @ 2020-08-31 22:06 anobscureretreat 阅读(423) 评论(0) 推荐(0)
摘要: 浏览器发送的请求被Nginx监听到,Nginx根据请求的URL的PATH或者后缀把请求静态资源的分发到静 态资源的目录,别的请求根据配置好的转发到相应端口。 实现了WSGI的程序会监听某个端口,监听到Nginx转发过来的请求接收后(一般用socket的recv来接收 HTTP的报文)以后把请求的报文 阅读全文
posted @ 2020-08-31 22:03 anobscureretreat 阅读(253) 评论(0) 推荐(0)