自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL-explain分析sql语句

explain分析sql语句explain是什么?explain能干嘛?explain语法explain字段解释id表的读取顺序select_typetablepartitionstypepossible_keyskeykey_lenrefrowsExtraexplain是什么?使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。explain能干嘛?通过explain我们能够知道如下信息• 表的读取顺序• 数据读取操作的操作类型• 那些索引

2020-08-22 18:46:14 259

原创 MySQL-Show Profile进行SQL分析

Show Profile进行SQL分析Show Profile进行SQL分析Show Profile分析步骤type参数注意全局查询日志Show Profile进行SQL分析是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况,可以用于SQL的调优的测量默认情况下,参数处于关闭状态,并保持最近15次的运行结果。Show Profile分析步骤• 1.是否支持,看看当前MySQL版本是否支持• 2.开启功能,默认是关闭,使用前需要开启 -- 查看是否开启, 默认关闭 OFF show

2020-08-22 18:45:43 125

原创 MySQL数据库存储引擎

MySQL数据库存储引擎数据库存储引擎服务层存储引擎层MyISAM存储引擎Innodb存储引擎CSV存储引擎Memory存储引擎如何选择存储引擎参考条件数据库存储引擎服务层第二层服务层是MySQL的核心,MySQL的核心服务层都在这一层,查询解析,SQL执行计划分析,SQL执行计划优化,查询缓存。以及跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。通过下图来观察服务层的内部结构存储引擎层负责MySQL中数据的存储与提取。 服务器中的查询执行引擎通过API与存储引擎进行通信,通过接口屏

2020-08-10 17:50:28 158

原创 MySQL中事务的隔离级别

MySQL中事务的隔离级别隔离级别(ISOLATION LEVEL)查看当前事物级别设置mysql的隔离级别READ UNCOMMITTED(未提交读)READ COMMITTED(读已提交)REPEATABLE READ(可重复读)隔离级别(ISOLATION LEVEL)隔离性其实比想象要复杂。在SQL中定义了四种隔离的级别,每一种隔离级别都规定了一个事务中的修改,哪些是在事务内和事务间是可见的,哪些是不可见的。较低级别的隔离通常来说能承受更高的并发,系统的开销也会更小。查看当前事物级别SELE

2020-08-10 15:36:03 110

原创 MySQL中的索引

MySQL中的索引索引索引是什么索引的目的索引原理索引的使用适合建立索引的情况不适合建立索引的情况索引思考在图书馆中是如何找到一本书的?一般的应用系统对比数据库的读写比例在10:1左右(即有10次查询操作时有1次写的操作),而且插入操作和更新操作很少出现性能问题,遇到最多、最容易出问题还是一些复杂的查询操作,所以查询语句的优化显然是重中之重解决办法当数据库中数据量很大时,查找数据会变得很慢优化方案:索引索引是什么索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),

2020-08-10 13:27:34 78

原创 MySQL中的事务

MySQL中的事务为什么要有事务事务事务四大特性(简称ACID)事务的状态事务命令为什么要有事务事务广泛的运用于订单系统、银行系统等多种场景例如:A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事:检查A的账户余额>500元;A 账户中扣除500元;B 账户中增加500元;正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500,而B也没有收到本该属于他的500。以上的案例中,隐藏着一个前提

2020-08-10 12:38:45 128

原创 MySQL中的运算符和函数

MySQL中的运算符和函数字符函数数值运算符比较运算符信息函数聚合函数加密函数字符函数CONCAT() 连接多个字符CONCAT_WS() 使用指定的连接符进行字符连接FORMAT() 数字格式化LOWER() 转换为小写字母UPPER() 转换为大写字母LEFT() 获取左侧字符RIGHT() 获取右侧字符LENGTH() 获取字符串长度LTRIM() 删除左边的空格RTRIM() 删除右边的空格TRIM() 删除左右两边的空格SUBSTRING(字

2020-07-24 18:16:39 275

原创 MySql中的完整性约束

约束·约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:–NOT NULL–PRIMARY KEY–UNIQUE KEY–DEFAULT–FOREIGN KEY列级约束:对一个数据列建立的约束表级约束:对多个数据列建立的约束列级约束既可以在定义时声明,也可以在定以后声明。表级约束只能在列定义后声明。MySql中的完整性约束主要包括下面这些:NOT NULL非空约束,当我们给某个字段添加非空约束后,我们添加的记录的时候,就必须给该字段赋值,如果不赋值则会报错。

2020-07-24 09:32:15 185

原创 MySql中索引的相关操作

MySql中索引可以非常有效的提高表的查询速度,但会降低表的更新速度。就是提高select的速度,降低insert,update,delete的速度。因为在更新表的时候,MySQL不仅要保存数据,还要保存一下索引文件。创建索引:CREATE INDEX 索引名称 ON 表名(字段名[长度])修改表结构添加索引ALTER TABLE 表名 ADD INDEX 索引名称(索引字段名)创建表的时候添加索引CREATE TABLE student(id INT UNSIGNED PRIMARY

2020-07-24 07:23:45 93

原创 Python网络通信socket

一 客户端/服务器架构1.硬件C/S架构(打印机)2.软件C/S架构互联网中处处是C/S架构例如淘宝网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频)C/S架构与socket的关系:我们学习socket就是为了完成C/S架构的开发二 osi七层引子:须知一个完整的计算机系统是由硬件、操作系统、应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己玩了(打个单机游戏,玩个扫雷啥的)如果你要跟别人一

2020-07-17 21:11:37 270

原创 计算机网络基础知识入门(一)

网络的基本概念客户端:应用 C/S(客户端/服务器) B/S(浏览器/服务器)服务器:为客户端提供服务、数据、资源的机器请求:客户端向服务器索取数据点击免费下载海量工程资料响应:服务器对客户端请求作出反应,一般是返回给客户端数据URLUniform Resource Locator(统一资源定位符)网络中每一个资源都对应唯一的地址——URLIP 、子网掩码 、路由器 、DNSIP地址IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏

2020-07-17 00:56:54 214

原创 python并发编程-协程

一 引子本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它ps:在介绍进程理论时,提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态一:其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实

2020-07-17 00:39:22 102

原创 Python-元类

python中一切皆对象,所有的对象都是实例化或者调用类得到。那么我们创建的类也是一个对象,创建类的类就称为元类class Person(object): def __init__(self,name): self.name = namep = Person("jack")print(p) # <__main__.Person object at 0x0000000000692198>动态的创建类"""定义创建类的函数create_class如果给cr

2020-07-13 18:58:16 66

原创 Python-通过属性描述符管理实例属性

上一篇博客中,我们通过@property装饰器来管理实例的属性,这使得我们不仅可以通过obj.attr的方式来访问,并且可以设置属性的存储规则。并且由于@property和@attr.setter装饰器的存在,我们也很容易能够找到处理业务逻辑相关的函数。但当大量的属性都需要相同的存储逻辑来进行控制时,使用@property装饰器仍然无法避免代码的重复。例如:学生类的age和grades属性都必须是整数并且大于0.下面通过属性描述符的形式来管理实例属性,看看有什么区别class IntField(obje

2020-07-12 21:29:22 132

原创 Python-管理实例属性

在实际面向对象编程的过程中,实例对象的属性通常都有一定的存储逻辑。例如,学校管理系统中,学生的信息管理。我们需要记录学生的姓名,年龄,各科的成绩。然后还要根据各科的来判断该学生是否能够正常毕业。定义一个学生类可以这样:class Student(object): def __init__(self,name,age,grades): self.name = name self.age =age self.grades =grades de

2020-07-12 05:05:21 98

原创 Python中的__getattr__和__getattriute__的区别

一般情况下我们都是通过下面的方法访问对象的属性class Student(object): def __init__(self,name): self.name = names = Student("jack")print(s.name) # 通过s.name 访问对象s的name属性print(s.age) # 属性age不存在,抛出异常AttributeError: 'Student' object has no attribute 'age'在一个类中重写了__g

2020-07-12 03:24:18 650

原创 Python中与类比较相关的魔术方法

1 用于比较的魔术方法class Square(object): """ 比较长方形的面积大小 """ def __init__(self,width,height): self.width = width self.height = height def res_area(self): return self.width * self.height def __eq__(self, other): # =

2020-07-11 22:08:31 125

原创 Python中的上下文管理器-with语句

我们在读写文件的时候经常会用到with语句,那么到底什么是上下文管理器呢?可以简单的理解为我们现在有2个需要成对出现的操作。例如我们操作文件的时候,先要打开文件,然后执行文件相关的操作,最后在关闭文件。这里打开文件和关闭文件是成对出现的。还有一个常见的就是在多线程中的加锁与解锁操作。上下文管理器: 当我们在一个类中实现了__enter__和__exit__方法,那么这个类的实例就是一个上下文管理器class OpenFile(object): def __init__(self,file_na

2020-07-11 20:34:00 235

原创 python中__dict__,dir()和__slots__的区别

1 __dict__class Person(object): is_alive = True country = "China" def __init__(self,name,age): self.name = name self.age = ageclass Teacher(Person): school = "哈佛" def __init__(self,name,age,subject): super()

2020-07-10 21:04:31 233 1

原创 Python中type和isinstance的区别

在Python中,我们经常通过type和isinstance来判断某个对象的类型,下面我们通过一个简单的例子来分析2个方法的区别class Animal(object): def __init__(self,name): self.name = nameclass Dog(Animal): def __init__(self,name): self.name = namedog = Dog("dog1")print(type(dog)) # &l

2020-07-10 17:53:57 118

原创 Python面向对象-封装

封装可以认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的接口控制。封装的优点隐藏信息,实现细节。可以对成员变量进行更精确的控制。类内部的结构可以自由修改。良好的封装能够减少耦合。在Python中,我们通过在属性的前面添加双下划线的方式将类的属性隐藏起来,但这仅仅只是一种变形操作。类中所有双下划线开头的属性和方法都会在类的定义阶段、检测语法的时候修改为“_类名__属性名”的形式。class Animal(object): de

2020-06-29 05:11:47 62

原创 Python面向对象-继承

1 继承的概念继承是面向对象中的一个概念,如果B类继承A类,那么我们称A类为B类的父类(超类),B类为A类的子类。继承使得子类拥有父类的属性和方法,这样就可以减少代码的重复。当子类对父类的方法不满意时,还可以重写该方法,即覆盖掉父类的方法,这样就可以实现同父类不一样的功能。当然,我们还可以在子类中添加新的属性和方法。Python3中我们所写的类都默认继承object类。Python中既支持单继承,也支持多继承。2 继承的特点减少了重复的代码增加了类的耦合性使代码更加规范,合理3 继承的使用

2020-06-28 23:44:27 437

原创 Python-面向对象编程

1 面向对象的相关的概念类(Class):是用来描述具有相同属性和方法的对象的集合。定义了每个对象所共有的属性和方法,对象就是类的实例对象:一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同封装:在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法继承:一个类可以派生出子类,在这个父类里定义的属性、方法自动

2020-06-28 23:11:01 61

原创 Python中的进程池与线程池

前面我们了解到,可以通过多进程、多线程来提高程序的执行效率。但是随着进程数、线程数的增多,服务器的压力也会越来越大,甚至可能会瘫痪。因此,为了是服务器能够长时间正常运行,我们有必要对程序的并发数进行控制。这时候就会用到进程池和线程池。池的功能就是控制进程数和线程数。下面以线程池(进程池的用法同线程池一样)为例:异步提交任务from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutorimport os,random,time

2020-06-28 18:11:19 119

原创 Python并发编程-Event事件和Timer计时器

Python中每个线程都是独立运行的。如果程序中的其他线程需要根据某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得很麻烦。为此我们可以使用threading库中的Event对象。该对象包含一个可由线程设置的信号标志,它允许线程等待某些事件的发生。在 初始情况下,Event对象中的信号标志被设置为False。如果有线程等待一个Event对象, 而这个Event对象的标志为假,那么这个线程将会被一直阻塞直至该标志为True。一个线程如果将一个Event对象的信号标志设置为True,它将唤醒所有等待

2020-06-27 08:01:28 744

原创 python多线程中的死锁与递归锁

Python中的多线程是共享所在进程的资源和内存地址的,因此当多个线程同时操作同一个数据的时候,就容易出错。如下from threading import Thread,currentThreadimport timedef task(): global n tem = n time.sleep(0.01) # 在此处休息0.01秒,足够开启所有的线程,他们所获取到的n都是0,这就导致了最后输出的n为1 tem = tem + 1 n = tem pri

2020-06-27 07:11:13 204

原创 Python中的多线程

1 开启线程的2中方式开启线程和开启进程的方法基本是一样的,如下from threading import Threadimport timedef task1(name): print("%s 开始执行" % name) time.sleep(3) print("%s 执行完毕" % name)if __name__ == '__main__': thre=Thread(target=task1, args=("线程1",)) thre.start()

2020-06-22 04:11:15 75

原创 Python中多线程的相关概念

1 线程的概念在Python中,每一个进程都有独立的内存空间地址,默认有一个控制线程。进程就像一个车间,把各个资源整合到一起,而线程就像是车间的一条流水线,完成某个特定的任务。线程是CPU的最小执行单位,而进程则是整个车间的工作过程,是一个资源的集合。多线程就是一个车间的多条流水线,共用该车间的资源,即共享进程的内存空间地址2 创建线程开销小创建进程就像创建一个车间,需要申请一块内存空间,然后还需要创建一个控制线程。而创建线程,只需要在该车间内建一条流水线,故创建线程的开销比创建进程的开销小3

2020-06-22 03:22:55 75

原创 Python多进程队列(Queue)和生产者消费者模型

Python中每个进程的内存是相互隔离的,那么如何实现进程之间的通信了,multiprocessing模块提供了队列和管道2种方式来实现进程之间的消息传递。队列的底层就是通过管道和锁来实现的。队列相关的方法from multiprocessing import Process,Queueq = Queue([maxsize]) # 创建一个队列,maxsize表示队列的大小,即可以存放几条数据,如果省略则可以存放无穷多条数据,取决于你内存空间的大小q.put(data,block=True,t

2020-06-22 02:15:26 1692

原创 Python多进程中的互斥锁(Lock)和信号量(Semaphore)

多个进程之间的内存空间是隔离的,但是硬盘,数据库,打印终端都是共享的 。因此当多个进程同时修改硬盘中的同一个文件,或者修改数据库中的同一条记录时,就存在资源竞争的问题,容易出错。以抢票为例:from multiprocessing import Processimport time,jsondef find(name): time.sleep(1) # 模拟网络延迟 dic=json.load(open('ticket.txt')) print('%s 剩余票数 %s

2020-06-21 07:16:04 576

原创 Python中的多进程

1 multiprocessing模块Python中的多线程无法利用多核优势,如果想要充分利用多核CPU的资源,大部分情况需要使用多进程。multiprocessing模块可以用来开启子进程,并且提供了许多功能组件,Process,Lock,Queue,Pipe。2 Process的用法开启子进程的2种方式from multiprocessing import Processimport timedef task1(name): print("%s 开始执行" % name)

2020-06-21 06:27:48 116

原创 Python多进程的相关概念

1 进程的概念进程是指一个正在执行任务的过程,而负责执行任务的则是cpu。2 进程与程序程序只是程序员写的代码,而进程则是指程序的运行过程3 并发、并行和串行并发;你现在有做作业的任务,打游戏的任务,看电视剧的任务。但你同时只能做一件事情(cpu同一时间只能执行一个任务)。那如何才能产生并发的效果了?可以先做一会作业,再看一会电视剧,在打一会游戏,然后又做一会作业,再看一会电视剧。这样看起来就好像你同时在干多件事情。现在cpu有5个任务要执行,cpu同一时间只能执行一个任务。由于cpu的速度非常快

2020-06-21 03:58:26 103

原创 Python中sys模块的常用方法

import syssys.version # 返回Python解释程序的版本信息sys.platform # 返回操作系统名称sys.exit(n) # 退出程序,n为0时正常退出sys.path # 返回模块的搜索路径

2020-06-20 06:22:41 112

原创 Python中os模块的常用方法

os.getcwd() # 获取当前py文件所在的文件夹路径os.mkdir(path) # 创建一个单层级文件夹os.makedirs(path) # 创建一个多层级的文件夹os.rmdir(path) # 删除一个单层级的空文件夹,若文件夹不为空则报错os.removedirs(path) # 删除一个空文件夹(非空文件夹报错),然后递归返回该文件夹的上一级文件夹,如果上一级文件夹为空,则删除,然后重复之前的操作,直到上一级文件夹不为空os.listdir(path) # 以列表的形式返

2020-06-20 06:13:02 102

原创 MySql中的单表查询

1 单表查询语法结构SELECT 字段1,字段2,... FROM 表名 where 条件 GROUP BY 字段名 HAVING 筛选条件 ORDER BY 字段名 LIMIT 查询条数 2 where 条件查询单条件查询SELECT * FROM student where name='jack';AND多条件查询SELECT id,name,age,sex FROM student where age=14 AND sex='male';

2020-06-19 19:28:24 123

原创 MySql中记录的相关操作

1 插入记录插入所有字段INSERT INTO 表名 VALUES(值1,值2,值3....);插入指定字段INSERT INTO 表名(字段1,字段2,字段3....) VALUES(值1,值2,值3....);INSERT INTO 表名 SET 字段1=值1,字段2=值2,字段3=值3.....;插入多条记录INSERT INTO 表名(字段1,字段2,字段3....) VALUES(值1,值2,值3....),(值1,值2,值3....),(值1,值2,值3....);2

2020-06-19 17:35:02 57

原创 MySql中表的相关操作

1 创建表CREATE TABLE student(id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20),age SMALLINT UNSIGNED,sex ENUM('male','female') default 'male');上面创建了一个student表,有id,name,age,sex字段,UNSIGNED:无符号位PRIMARY KEY:主键AUTO_INCREMENT:自增ENUM(‘male’,‘fe

2020-06-19 17:14:52 75

原创 MySql中的数据类型

1 整型2 浮点型3 字符型

2020-06-19 16:16:35 51

原创 MySql中数据库相关的操作

1 系统数据库information_schema:保存mysql所有数据库的信息。数据库的名称,数据库中包含的表,表中的数据类型,索引等信息。performance_schema:MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象sys:包含视图、存储过程、自定义函数等mysql:mysql的核心数据库,主要存储mysql的用户信息,权限等2 数据库的相关操作创建数据库CREATE DATABASE 数据库名称 CHARSE

2020-06-19 15:32:49 73

原创 Python中random模块的常用方法

Python中random模块的常用方法如下:import randomprint(random.randint(1,10))# 返回一个1-10之间的随机数,包含10print(random.randrange(1,10,2))#返回一个1-10之间的随机数,不包含10,第3个参数2表示步长print(random.random())#返回一个0-1之间的随机浮点数print(random.uniform(2,8)) # 返回一个2-8之间的随机浮点数print(random.choice(

2020-06-18 11:27:37 279

空空如也

空空如也

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

TA关注的人

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