自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 架构学习分享:软件架构设计的三大原则

作为一个程序员,需要不断的学习、成长,丰富自己,提升自身价值。软件架构学习不一定是想成为架构师才去学习,哪怕是一个普通的程序员,也应该学习软件架构相关知识,这样可以增加对开发的理解。我之前有看过李运华老师的《从零开始学架构》,受益匪浅。这里我结合自己的理解给大家分享软件架构设计的三大原则:合适原则、简单原则、演化原则。合适原则:原则宣言:“合适优于业界领先”现在互联网时代,技术的迭代非常快。很多架构师在设计架构的时候的希望用更新的技术来进行设计,以期望达到更好的效果。但是,更新的

2021-08-31 21:50:14 644 1

原创 python中的bisect模块的使用

bisectbisect主要用来管理有序序列,注意:一定是“有序”,bisect可以对有序序列进行快速的查找和插入。bisect模块主要包含两个函数:bisect:用来搜索元素位置(元素插入位置)insort:用来插入新元素这两个函数都是使用二分查找算法在有序序列中查找或插入元素,所以执行效率非常高下面将通过一些例子来对比说明bisect的高效率:现在有一个场景:如果我需要插入一个值到一个有序列表中,然后依然保证这个列表的有序,那么如何快速获取需要插入值的位置索引?import bi

2021-02-14 18:31:14 639

原创 Python常用特殊方法汇总

一、跟运算符无关的特殊方法1. 实例的创建和销毁__init__解释:构造方法,可调用超类的构造器。这是实例级别的方法,发生在实例创建之后,用于初始化实例,给实例添加一些属性和操作__new__解释:优先于__init__被调用。这是类级别的方法,控制类生成实例的过程,然后通常返回该类的一个实例__del__解释:用于销毁实例化对象,释放内存空间。注:通常情况下,python的垃圾回收机制(引用计数)会自动销毁没用的实例2. 字符串/字节序列表示形式__repr__

2021-02-09 16:34:00 2821 5

原创 记一个简单的增量式爬虫方案

最近在玩爬虫,于是基于以下需求场景设计了一个简单并且验证可用的增量式爬虫方案。场景需要爬取多个同类型的网站数据网站数据持续、不定期更新数据量不太大,每日更新几千获取到的数据可以用来玩(数据分析等等),嘿嘿对于这种类型的需求,先捋捋需要考虑的问题:数据如何去重怎样的存储方案我的设计方案如图:爬虫通过一个定时任务以多线程启动,爬取的数据直接放入消息队列等待下一步处理第二个定时任务将消息队列中的数据定时取出放入源数据层,这个定时任务有一个很关键的任务就是去重,在放入源数据层中先

2020-05-25 23:25:15 606

原创 Linux下安装virtualenvwrapper

Ubuntu和Centos下安装几乎没有任何区别:第一步:安装virtualenvwrapper命令:pip3 install virtualenvwrapper安装建议使用豆瓣源,即:pip3 install virtualenvwrapper -i https://pypi.douban.com/simple/安装virtualenvwrapper会自动安装virtualenv第...

2020-03-07 20:58:48 482

原创 Python的协程

协程的定义和原理:协程,又叫做纤程、微线程。协程的本质上是一个单线程程序,所以协程不能够使用计算机多核资源(但是可以利用多进程+协程实现利用多核资源)。通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率。协程的作用:协程能够高效的完成并发任务,占用较少的资源,因此协程的并发量较高。协程的优点:消耗资源少无需切换,...

2020-02-28 20:28:25 340

原创 Python多进程和多线程的同步互斥

同步互斥机制:解决了多个进程或者线程对共享资源的争夺,因为某些共享资源在某个时刻可能只允许一个进程对其进行访问。首先需要了解几个概念:临界资源:临界资源就是上面提到的,同时只允许一个进程对其进行访问的资源,即:虽然是共享资源,但是不能多个进程同时对资源进行访问和操作。多进程之间需要遵守某些约定来对临界资源进行访问和操作。临界区:临界区就是我们写的多进程代码中,对临界资源进行操...

2020-02-27 16:10:10 1060

原创 Python的多线程

什么是线程:线程也是一种多任务编程方法,可以利用计算机多核资源完成程序的并发执行。线程又被称为轻量级的进程。线程的特征:线程是计算机多核分配的最小单位一个进程可以包含多个线程线程也是一个运行的过程,消耗计算机资源,多个线程共享进程的资源和空间线程的创建删除消耗的资源都要远远小于进程多个线程之间执行互不干扰线程也有自己的特有属性,比如指令集 IDPython中使用threa...

2020-02-26 16:56:03 248

原创 Python进程间通信之管道、消息队列、共享内存

由于进程空间相对独立,资源无法共享,基于这种情况,就需要使用一些方法使得不同的进程之间可以进行通信。我这里介绍三种进程间通信的方式:管道、消息队列、共享内存。管道管道的通信原理:在内存中开辟管道空间,生成管道操作对象,多个进程使用"同一个"管道对象进行操作即可实现通信代码实现:from multiprocessing import Process,Pipe#创建管道对象fd1...

2020-02-24 20:57:16 1638

原创 Python的进程池

了解了Python的多进程之后,我们会发现,如果有大量任务需要使用多进程来完成,则可能需要频繁的创建删除进程,给计算机带来较多的资源消耗。(多进程的缺点就是会频繁的创建和删除进程,消耗计算机资源)。基于这种情况,于是出现了进程池。进程池的原理:创建适当的进程放入进程池,用来处理待处理事件,处理完毕后进程不销毁,仍然在进程池中等待处理其他事件。进程的复用降低了资源的消耗。举一个通俗易懂的例...

2020-02-23 15:58:47 386

原创 Python的多进程

什么是进程:进程是一个动态过程的描述,占有计算机的资源,有一定的生命周期。同一个程序的不同运行过程是不同的进程,占用资源和生命周期都不一样。(分清程序与进程的区别)进程的特征:进程之间运行互不影响,各自独立运行进程是操作系统资源分配的最小单位每个进程空间独立,各自占有一定的虚拟内存多进程的优缺点:优点:可以使用计算机多核,进行任务的并发执行,提高执行效率,空间独立,数据安全,运...

2020-02-22 16:06:17 228

原创 计算机网络学习笔记(7)——网络安全

安全包括哪些方面: 数据存储安全 应用程序安全 操作系统安全 网络安全 物理安全 用户安全教育 计算机网络上的通信面临以下四种威胁: 1.截获————从网络上窃听他人的通信内容 2.中断————有意中断他人在网络上的通信 3.篡改————故意篡改网络上传送的报文 4.伪造————伪造信息在网络上传送截获信息的攻击称为“被动攻击”,而更改信息和拒绝用户使用资源的攻击称为“...

2020-02-15 12:00:25 431

原创 计算机网络学习笔记(6)——应用层

DNS服务: 负责解析域名,将域名解析成IP地址 安装自己的DNS服务器的环境: 1.解析内网自己的域名 2.降低到Internet的域名解析流量 3.域环境DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的lP地址和子网掩码。FTP(文件传输协议)是 TCP/IP 协议组中的协议之一。FTP协...

2020-02-10 14:45:14 245

原创 计算机网络学习笔记(5)——传输层

传输层协议:TCP协议,UDP协议 TCP:面向连接的、可靠的、基于字节流的传输层通信协议 UDP:无连接的传输协议,该协议称为用户数据报协议 传输层和应用层时间的关系 http在传输层是使用的TCP:TCP+80 https在传输层是使用的TCP:TCP+443 ftp在传输层是使用的TCP:TCP+21 SMTP在传输层是使用的TCP:TCP+25 POP3在传输层是使用的...

2020-02-09 13:03:16 228

原创 计算机网络学习笔记(4)——网络层

在计算机通信中,可靠交付由端系统来负责,而不是网络系统网络层向运输层提供两种服务: 虚电路服务、数据报服务虚电路服务:是一种面向连接的,使所有分组顺序到达目的端的可靠性数据传输服务。注意:虚电路只是逻辑上的连接,而不是真正建立的物理连接数据包服务:是一种无连接的,使分组按照独立路由到达目的端的数据传输服务。虚电路服务与数据报服务对比: ---------------------...

2020-02-05 13:53:03 419

原创 计算机网络学习笔记(3)——数据链路层

数据链路层使用的信道主要有以下两种类型: 点对点信道:一对一的点对点通信方式 广播信道:一对多的广播通信方式 网络层传送的是数据报数据链路层传送的是帧物理层传送的是比特流数据链路层的三个基本问题 封装成帧:在一段数据的前后分别添加首部和尾部,就构成了一个帧 透明传输:当传输的数据中出现了与帧头或者帧尾相同的数据时,发送端需要在这些数据前添加转义字符进行转义,到达接收端后再将转...

2020-02-02 16:43:50 336

原创 计算机网络学习笔记(2)——物理层

物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的主要任务描述为:确定与传输媒体的接口的一些特性,即: 机械特性 电气特性 功能特性 过程特性 通信的目的是传送消息数据(data)————运送消息的实体信号(signal)————数据的电气的或电磁的表现模拟信号————代表消息的参数的取值是连续的数字信号————代表消息的参数的取值是...

2020-02-01 17:23:45 211

原创 计算机网络学习笔记(1)——计算机网络概述相关

计算机网络重要功能: 连通性:彼此连通,交换信息 共享性:信息共享、软(远程服务器连接)硬(打印机远程打印文件)件共享网络、互联网、因特网 网络:许多计算机连在一起(计算机通过集线器或者交换机组建一个局域网就形成一个网络,通常范围在100米以内) 互联网:许多网络连接在一起(网络与网络之间通过路由器连接形成互联网) 因特网:全球最大的一个互联网 整个Internet使用的是T...

2020-01-31 13:42:36 1413

原创 代码笔记——非递归与递归实现二分查找

import random# 生成随机有序列表def create_li(): # 二分查找,要求保证数据是有序的 random_li = [] for i in range(20): num = random.randint(1, 100) random_li.append(num) random_li.sort() ...

2020-01-28 23:27:58 212

原创 递归实现斐波那契数列以及详细解析

什么是递归:函数内部调用函数自身。什么是斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89......像这样的数列,第一个数加第二个数等于第三个数,第二个数加第三个数等于第四个数,以这样的规律递推。F(1)=1,F(2)=1,F(n)=F(n - 1)+F(n - 2)(n≥ 3,n∈ N*)现在我将用Python来写递归实现斐波那契数列。d...

2020-01-28 20:00:25 9477

原创 PyCharm同步本地项目文件到服务器

最近做了一个个人博客网站,在做上线准备,所以购买了一台阿里云的服务器。上线前是需要将本地项目文件同步到服务器的。我的网站是基于Django开发的,使用的IDE是PyCharm。本地项目文件上传服务器的方式有很多种,我在这里介绍PyCharm同步本地项目文件到服务器。第一步:依次点击PyCharm左上方菜单栏的Tools --> Deployment --> Configurat...

2020-01-21 13:40:57 2516

原创 Django表单类验证功能

在Django的开发中,不管是使用前端模板开发,还是前后端分离开发,基本都会用到表单,而在后端层面做表单的验证是很重要的,本文主要说明Django后端对表单的验证功能。通常来说,我们在Django后端写表单验证的时候,在不使用Django的表单类的情况下,通常会使用接收前端通过POST方法传递过来的表单数据,然后逐一验证,就像这样:class UserInfoView(View): ...

2019-12-14 18:46:15 355

原创 简述cookie和session机制

首先来说说HTTP协议,我们知道HTTP协议是无状态的,意思就是说我们每一次发出的HTTP请求之间都是没有关联的,对于服务且而言,就算是同一个人在不停的发出HTTP请求访问网页,服务器也不知道是同一个人在访问。但是在很多网页中都涉及到了登录注册的功能,用户登录后,就算请求该网站的其他页面,服务器也都会知道是你这个用户,从而返回相应的网页给你。但是前面说到了HTTP协议是无状态的,那么这是怎么实...

2019-12-10 16:25:55 1236

原创 Django的models的分层设计(避免循环引用)

在一个Django项目中,通常都会有多个app,在每个app中都有一个models.py文件用来存放相应的模型类(模型类是数据库表的映射)。而在模型类与模型类之间很有可能会存在某种关联,比如外键关联,这时,相关联的模型类很有可能不在同一个models.py文件中,很有可能是跨越了app来关联的。这时,如果app1中的models.py文件引用了app2中的models.py文件来建立外键关联,而a...

2019-12-09 21:25:21 1289

原创 一个Django导出可定制excel表格的封装可复用模块

之前我做的一个Django项目需要导出excel表格,具体场景描述:数据库中有用户表,商品表,订单表等等数据表,每张数据表都有多个字段,而客户不需要导出所有字段,只需要导出每张表部分字段。基于这样的场景,我不可能每一张数据表的excel导出都单独写一个方法,因此我尝试写了一个excel导出的封装类,每次需要导出excel时,只需要传入指定参数创建一个对象,然后调用该对象的work_on方法即可实现...

2019-11-30 11:18:19 412 3

原创 Django ORM中的元数据Meta

元数据:指的是除了字段以外的所有内容,这些内容不是必须的。在Django ORM中实现元数据的定义只需要在模型类中添加一个Meta子类即可,然后就可以在该子类下增加各种元数据选项了。下面列举出常用的元数据选项:class Books(models.Model): """图书类""" name = models.CharField(max_length=20) ...

2019-11-29 21:16:55 421

原创 Django使用Celery实现异步任务

什么是Celery?Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度如图所示,整个Celery架构由4部分组成:user、broker、workers、task result。其中:user负责生成需要处理的任务,然后交给broker任务队列,等待被处理,workers可以由多个worker组成,然后从broker中...

2019-11-29 14:10:29 525 2

原创 Django ORM中null和blank的区别

在Django中定义模型类的时候,常常会有用到null和blank这两个参数,比如下面给某个模型类定义了一个name字段name = models.CharField(max_length=10, null=True, blank=True)这里同时定义了null和blank为True,这两个参数都是允许为空的意思,但是却是有区别的:null=True表示在数据库层面允许为空。...

2019-11-28 15:14:30 1271

原创 Django ORM的外键ForeignKey中的on_delete的参数解析

以两个模型类为例,一个是老师类,一个是学生类,学生类通过外键关联老师类,实现一(老师)对多(学生)的关联。class Teachers(models.Model): """老师类""" name = models.CharField(max_length=10)class Students(models.Model): """学生类""" name = ...

2019-11-27 16:14:04 1333

原创 Django ORM常用字段类型

在设计模型类时,字段类型的选择至关重要,对项目的开发,甚至性能都会有影响。下面我列举出了在Django中,设计模型类时常用的字段类型,以对应MySQL为例。自增类型:AutoField 能存储11个字节的整数,对应MySQL中的int(11),自增主键,Django是默认提供该字段的。二进制类型:BinaryField 可存入二进制数据。布尔类型:BooleanFi...

2019-11-27 15:15:33 433

原创 解决同源策略限制以实现跨域访问的两个方法:JSONP和CORS

同源的定义:同源是指,域名,协议,端口相同。比如:在下表中找出与 http://www.aaa.com:8888/abc/ 同源的URLURL 结果 原因 http://www.bbb.com:8888/bbb/ 不同源 域名不一致 https://www.aaa.com:8888/ccc/ 不同源 协议不一致 http://www.aaa....

2019-11-20 19:08:36 354

原创 解决顺序队列的“假溢出”问题之环形队列(循环队列)——Python实现

队列是一种“先进先出”(FIFO)的数据结构,队列有两端,一边只进,一边只出,即:数据从尾部进入,从头部出来,先进去的就会先出来,就像我们平时食堂打饭排队一样,先去排的先打到饭,后去排的后打到饭。队列通常可以用数组或者是链表实现。这里以数组举例,假设这儿有一个长度为5的数组,左端为头部,负责取出数据,右端为尾部,负责存入数据。从尾部加入数据A再从尾部加入数据B再从尾...

2019-11-15 17:20:50 4794 1

原创 Python实现堆栈(列表结构和链表结构)

堆栈是一种数据项按序排列的数据结构,具有“后进先出”(LIFO)的特点,堆栈所有的操作都在其顶端执行,在顶端进行插入和移除。堆栈好比我们常见的羽毛球盒子,一个圆柱体的羽毛球盒子中从上到下装了很多羽毛球,盒子的开口在顶端,这样,如果先放入盒子的羽毛球就会在盒子的下面,取出时就会后拿到,如果后放入盒子的羽毛球就会在盒子的上面,取出时就会先拿到。 在Python中,实现堆栈有两种方式:...

2019-11-14 21:50:21 1003

原创 django-rest-framework实现三种分页

我们通常在使用Django为前端或者用户提供接口的时候,时常会遇到返回大量数据信息的情况,比如:有1000条用户信息,有1000条新闻文章,有1000条商品信息等等。但是我们不可能将所有数据从数据库获取后一股脑的全部返回,这样相当不好,会增大服务器压力,同时也会增加前端渲染压力,也不方便前端或者用户使用。这种情况下,我们就需要用到分页处理。顾名思义,就是将大量数据进行分页,每页只有少量数据,在...

2019-11-12 18:52:46 1321 1

原创 白话浅谈MVC模式

MVC由三部分组成:模型层(model),视图层(view),控制层(controller)。其实光从这三部分的名字就可以看出个大概,模型层嘛,肯定是与数据库有关,视图层,嗯,视图,肯定和眼睛看有关,控制层,应该偏向和逻辑挂钩吧。如果能想到这样其实应该还不错,哈哈哈。然后我们来具体从一个Web应用例子的交互逻辑来谈一谈MVC:我们假设!假设!假设!百度网站就是基于MVC模式构建的(...

2019-11-01 17:39:17 358

原创 Django admin配置django-ckeditor

对于内容管理系统而言,富文本编辑器是必不可少的功能组件,在Django自带的管理后台admin中,我们可以使用ckeditor,Django有相关的插件(django-ckeditor)可以帮助我们快速的配置完成并使用。我在这里举一个小例子来完成django-ckeditor的安装配置,在Django后台admin中实现富文本编辑器的功能,包含图片的上传。例子:数据库中有一张存放用户个人信...

2019-10-30 18:05:55 710

原创 排序算法之插入排序死磕篇(Python实现)

我个人在插入排序的实现上有点晕,有点要懂不懂的感觉,我本着不完全弄明白不罢休的精神,强行来写写插入排序来说服自己。原理说明首先来说说插入排序的原理:插入排序是将列表中的元素逐一与已经排序好的元素进行比较,即每一次都拿一个没有排序的元素,然后插入到已经排了序的元素中去,通过比较,插入在一个合适的位置。比如有一个列表:[ 33, 34, 25, 62, 32 ],要进行升序排列这样...

2019-10-26 14:39:47 173

原创 排序算法之冒泡排序、选择排序(Python实现)

一、冒泡排序冒泡排序的原理是:从第一个元素开始,依次和相邻的元素进行比较,如果大小顺序有误,则交换顺序后再和下一个元素比较,如同气泡慢慢从水底升到水面,这样最后一个元素就会是最大(最小)的,这样就完成的第一轮比较,接下来再进行下一轮,下一轮时,也从第一个元素开始,依次比较,这次只用比较到最后一个元素的前一个元素,因为前面已经确认了最后一个元素是最大(最小)的。再进行下一轮,一直循环,这样每经历...

2019-10-25 17:58:20 512

原创 Python实现双向链表

之前写的单向链表和环形链表都只是单向的,只能单向遍历,不能根据后面的节点获取前面的节点,除非进行反转操作。双向链表每个节点都有两个指针,这两个指针分别指向前后两个节点,这样就可以从任意一个节点从两个方向获取其他的所有节点,非常方便。但是由于每个节点有两个指针,所以双向链表比较消耗空间。在设计双向链表时,通常会加上一个链表头指针,该链表头指针的数据字段不存放任何数据。双向链表的可以是环形...

2019-10-22 18:19:59 255

原创 Python实现环形链表

我们将单向链表的最后一个节点的指针指向链表的头部(第一个节点),那么就形成了一个环形链表。环形节点可以从任意节点开始遍历其他的节点。这里主要实现了环形链表节点的遍历、添加、插入、删除,反转。代码如下:class Player: """节点类""" def __init__(self): """初始化姓名,分数,指针""" self.na...

2019-10-20 17:05:28 760

空空如也

空空如也

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

TA关注的人

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