python
文章平均质量分 66
我的紫霞辣辣
须知少时凌云志 曾许人间第一流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
脏读 不可重复读 幻读 行级锁(共享锁,排它锁,死锁现象)表级锁 页级锁 innodb存储引擎 innodb三种行锁的算法 事务隔离级别 乐观锁与悲观 mvcc机制锁
脏读(无效的数据)a事务把数据改完之后并没有提交,b事务读到这个改完数据之后的事务,b事务读完之后,a事务又把数据做了一个回滚操作,这种现象叫脏读不可重复读a事务把数据读完拿去用了,b事务刚好直接把数据给改了,a事务会发现之前的数据不准确了幻读现象是不可重复读的一种特殊现象,举例:假设一张表一共有10条数据,a事务把id大于3的数据name全部改成了xx,就在刚刚改完的那一刻,b事务又插入一条数据,a事务改完之后,会发现有一条数据没有修改成功以上现象都是并发带来的一些问题,mysql的底层原创 2021-02-25 23:25:42 · 1983 阅读 · 6 评论 -
索引(二叉树,平衡二叉树,b树,b+树)innodb存储引擎索引 索引的简单使用 联合索引
什么是索引? 索引是存储引擎中的一种数据结构,或者说是数据的组织方式,又称之为键key 为数据建立索引就好比是为书建目录 为何要用索引? 为了优化查询效率 ps:创建完索引后会降低增、删、改的效率 好就好在读写比例10:1如何正确看待索引? 开发人员最懂业务,任何一个软件都有其吸引用户的亮点 亮点背后对应的是热数据,这一点开发人员是最清楚的, 开发人员最了解热数据对应的数据库表字段有哪些,所以 应该在开发软件的过程中就提前原创 2021-02-24 16:51:59 · 681 阅读 · 0 评论 -
视图 触发器 事务 存储过程 内置函数 流程控制
今日内容概要视图(了解)触发器(了解)事物(需要掌握)存储过程(了解)内置函数(了解)流程控制(了解)索引理论(了解 日后再去拓展)今日内容详细视图(了解) 什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次可以直接使用 其实视图也是表 为什么要用视图 如果要频繁的操作一张虚拟表(拼表),你就可以制作成视图,后续直接操作 如何操作 固定语法:create view 表名 as 虚拟表的查询语句原创 2021-02-23 23:10:22 · 229 阅读 · 1 评论 -
Navicat软件使用 pymysql模块的使用 注入问题的产生原因与解决办法 pymysql文件的增删改查
Navicat软件一开始学习python的时候 下载python解释器然后直接在终端写python代码pycharm能够更加方便快捷的帮助你书写代码excel word pdf我们在终端操作mysql 也没有自动提示也无法保存等等 不方便开发Navicat内部封装了所有的操作数据库的命令用户在使用它的时候只需要鼠标点点即可完成操作 无需书写sql语句安装 直接百度搜索 有破解版的也有非破解版 下载完成后是一个压缩包 直接解压 然后点击安装即可原创 2021-02-23 17:32:37 · 276 阅读 · 0 评论 -
单表与多表操作 where筛选 group by分组 having分组后筛选 distinct去重 order by排序 limit限制展示条数 regexp正则 多表查询 子查询
如何查询表单表操作单表操作的基本语法:select where group by having distinct order by limit regexp like ...今日内容详细前期表准备create table emp( id int not null unique auto_increment, name varchar(20) not null, sex enum("male","female") not null default "male", # 大原创 2021-02-19 18:37:03 · 478 阅读 · 0 评论 -
default默认值 unique单列唯一和联合唯一 primary key主键 auto_increment自增 外键foregin key 表与表之间关系
约束条件补充知识点 插入数据的时候可以指定字段create table t1( id int, name char(16) );insert into t1(name id)values("nana",1)default默认值default代码展示create table t2(id int,name char(16),gender enum("male","female","other")default"male");insert into t2(id,na原创 2021-02-10 15:02:37 · 705 阅读 · 0 评论 -
存储引擎 数据类型 整型 严格模式 浮点型 字符类型 日期类型 枚举与集合类型
存储引擎日常生活中,文件格式有很多种,并且针对不同的文件格式会有不同的存储方式和处理机制(txt,pdf,word,mp4。。。)针对不同的数据应该有对应的不同的处理机制来存储存储引擎就是不同的处理机制mysql主要存储引擎1.innodb 是mysql5.5版本之后默认的存储引擎 存储数据更加安全2.myisam 是mysql5.5版本之前默认的存储引擎 速度要比innodb更快 但是我们更加注重数据的安全3.memory 内存引擎(数据全部存放在内存原创 2021-02-07 22:16:28 · 251 阅读 · 0 评论 -
数据库管理软件的相关概念 安装配置mysql 基本sql语句(库,表,数据的增查改删)
数据库管理软件相关的概念数据库管理软件:本质就是个cs架构的套接字程序(解决本地文件存储数据的问题而开发的一个程序)服务端套接字 客户端套接字操作系统 操作系统计算机(本地文件) 计算机硬件1.程序的所有组件不可能运行在一台计算机上一台计算机性能有限,我们需要将程序的各个组件分布于多台机器去执行2.数据安全问题每台计算机都只能操作本地的文件,这就导致了数据的不一致将数据与应用程序分离,把文件存放于一台机器,然后多台机原创 2021-02-01 15:26:13 · 229 阅读 · 0 评论 -
进程池与线程池 协程代码演示Gevent
进程池与线程池计算机的性能是有限的,不能无限的开启进程和线程。创建进程池,把并发任务的个数控制在计算机可承受范围之内进程池(计算密集型用多进程)方案1方案1:等进程全部运行完毕统一拿返回值,需要处理返回值结果时采用并发的形式去处理结果效率最高,比较占用计算机的资源from concurrent.futures import ProcessPoolExecutorimport os, time, randomdef task(n): print("%s is running" %原创 2021-01-30 00:30:12 · 275 阅读 · 0 评论 -
协程 信号量 死锁现象与递归锁 事件event 定时器与线程queue gil解释器锁 多线程性能测试
协程协程:是单线程下的并发,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的。python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换其他线程运行)单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关)对比操作系统控制线程的切换,用户在单线程内控制协程的切换优点如下:协程的切换原创 2021-01-23 23:22:19 · 358 阅读 · 0 评论 -
共享内存(IPC进程间通信) 生产者消费者模型 线程理论 开启线程Thread 线程的相关对象与方法 守护线程 互斥锁
共享内存(IPC进程间通信)1.管道一个进程写,一个进程读的情况,两个进程涉及不到数据安全的问题可以用管道来实现共享内存2.队列(管道+锁)队列使用于本地,不能基于网络通信# 队列代码实现from multiprocessing import Queueq = Queue(3) # 列表里面存的值跟取的值都是放入q里面的,Queue(3)表示队列里面最多只能放3个值,如果超过3个值,那么该队列则处于堵塞状态队列里面放值q.put([1, 2, 3])q.put({"a": 1})原创 2021-01-21 21:21:44 · 327 阅读 · 0 评论 -
父进程与子进程 僵尸进程与孤儿进程 守护进程 互斥锁与信号量
运行一个py程序,就是开启了一个python解释器的进程,py程序下开的子进程也是python解释器的进程。在python解释器里面启动一个py文件,等同于只开启了一个python解释器进程,本质原理就是python解释器启动后,读取了py文件的内容,通过解释器的运行来执行文件内容。pid是操作系统中任务的唯一编号在windows系统下: 通过cmd命令查看所有pid进程命令:tasklist 通过pid号查看进程的命令:tasklist | findstr (pid号) 强原创 2021-01-20 23:37:51 · 376 阅读 · 0 评论 -
操作系统发展史 进程相关概念 开启进程的两种方式multiprocessing模块 进程之间的内存空间 进程对象的方法
进程的概念进程:进程指的就是程序的运行过程,是一个动态的概念(程序的运行就是由操作系统控制硬件去运行应用程序的过程)程序:程序就是一系列的代码文件,是一个静态的概念进程是操作系统最核心的概念,研究进程就是在研究操作系统操作系统发展史第一代计算机(1940~1955):真空管和穿孔卡片优点:程序员在申请的时间段内独享整个资源,可以即时地调试自己的程序(有bug可以立刻处理)缺点:浪费计算机资源,一个时间段内只有一个人用。同一时刻只有一个程序在内存中,被cpu调用执行,比方说10个程序的执行,是串原创 2021-01-19 21:34:54 · 262 阅读 · 0 评论 -
socket收发消息的原理 tcp协议的Nagle算法 tcp自定义协议解决粘包问题 struct模块的使用 udp协议的使用 tcp与udp并发编程实现
为什么会产生粘包问题只有tcp有粘包的现象,udp永远不会有粘包两种情况下会发生粘包。1.发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包)2.接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)socket收发消息的原理socket客户端向socket服务端发送消息,首先由客户端把消息发送给操作系统的缓存,由操作系统调用网卡发送给对方操作系统的缓存,原创 2021-01-18 22:53:54 · 269 阅读 · 0 评论 -
arp协议原理 基于tcp协议的套接字通信 加入通信循环与链接循环 编写远程执行命令的程序
arp协议的工作原理发送端与接收端在一个局域网内时arp协议会把发送者与被发送者的ip地址与子网掩码按位运算会得到一个子网地址,对比子网地址可以确认两台计算机在不在一个子网内,如果两台计算机在同一个子网内,arp协议会把发送者的mac地址进行打包,会把目标mac打包成FF:FF:FF:FF:FF:FF(指的是要跟目标要mac地址,这是一种信号),以太网的头打包好后,会再打包ip头,ip头就是发送者与被发送者的ip头。然后会以广播的方式把数据包(数据包的内容就是一些请求获得对方mac地址之类的)发原创 2021-01-17 21:45:52 · 363 阅读 · 1 评论 -
socket套接字介绍 互联网通信协议 tcp协议
套接字学习套接字编程的目的是为了开发一个c/s或者b/s架构的软件client------网络-------servercs架构需要写两个软件,客户端,服务端都需要开发去写优点:开发可以按照自己的想法写软件缺点:服务端,客户端都需要开发去编写,开发工作量增大browser------网络------serverbs架构的客户端是浏览器,开发只需要写服务端的软件优点:开发的工作量减少,只需要写服务端软件缺点:写软件需要按照浏览器的标准去写互联网=物理连接介质+通信协议互联通信协议就相当于原创 2021-01-14 18:41:03 · 433 阅读 · 0 评论 -
多态性 鸭子类型 内置方法 反射 异常处理 断言 raise 自定义异常
多态性(主要是来定标准的,而不是继承父类的功能,应用于多继承)鸭子类型:强耦合思想,把不是同一种事物的用法统一在一起(归一的思想),使用者使用起来会更加方便多态:同一种事物有多种形态代码演示import abcclass Animal(metaclass=abc.ABCMeta): # 导入adc模块强行统一标准,如果子类的代码不写成talk的函数名调用会直接报错 @abc.abstractmethod def talk(self): pass注意:导入adc原创 2021-01-13 18:51:19 · 250 阅读 · 0 评论 -
单继承(派生,super应用) 多继承下的属性查找顺序 mixins机制 组合
继承应用模板学生选课系统案例模板class Student: school = "虹桥校区" def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def choose(self): print("%s 选课成功" % self.name)stu1 = Student("lili原创 2021-01-12 20:56:18 · 236 阅读 · 0 评论 -
一切皆对象 封装 类的装饰器property(影藏属性) 绑定方法与非绑定方法 继承基础知识 先抽象再继承
类与对象内置的一些装饰器及功能property:被property装饰过的函数可以不用再加()运行函数名.setter: 函数名.setter装饰过的函数使用在修改名字的接口,更改属性可以直接写成self.函数名=“xx”的形式进行更改函数名.deleter:函数名.deleter装饰过的函数不允许删除classmethod:类中定义的函数被classmethod装饰过,就绑定给类,应该由类来调用。 类调用会将类本身当作第一个参数自动传入staticmethod:类中定义的函数被staticmet原创 2021-01-11 20:24:55 · 224 阅读 · 0 评论 -
面向对象编程思想 面向对象语法 面向对象封装的特性 隐藏属性
面向对象编程与面向过程编程的差别:面向过程编程:复杂的问题简单化,扩展性差。面向对象编程:复杂读变高,扩展性强。面向对象编程:核心是对象二字,对象就是一个用来盛放数据与功能的容器基于该思想编写程序就是创造一个个的容器专门语法:类对象属性查找面向对象的三大特性:封装:归类整合,把相关的数据跟功能封装在一起,很好的体现了扩展性强的特点继承多态面向对象编程思想def tell_info(aaa): print("my name is %s, my age is %s,my g原创 2021-01-08 23:14:47 · 339 阅读 · 4 评论 -
hash模块 subprocess模块 os模块 sys模块 configparser模块
模块的应用场景:hash模块:主要应用于文件加密或者校验文件的完整性subprocess:主要用来运行操作系统命令,导入subprocess可以理解成导入cmdos模块:主要应用于环境变量,文件目录sys:主要记住sys.path,sys.argvconfigparser:读取修改固定格式的配置文件,配置文件的后缀是ini或者cnfhash算法的三大特点如果传入一段内容,会得到一串hash值,hash值有三大特点1.如果传入的内容与采用的算法一样,那么得到的hash值一定一样2.只有采用的原创 2021-01-07 19:45:44 · 243 阅读 · 0 评论 -
正则表达式(re模块) json,pickle序列与反序列 时间模块 random模块
正则表达式常用的正则表达式:\w: 匹配字母数字及下划线\W:匹配非字母数字及下划线\s:匹配任意空白字符\S:匹配非空白字符\d:匹配任意数字,等价于0 - 9\D:匹配任意非数字\t :匹配一个制表符\n:匹配一个换行符^ :匹配字符串开头$ :匹配字符串结尾\A:匹配字符串开始\Z:匹配字符串结束,如果存在换行,只匹配到换行前的字符结束.:匹配除了换行符以外的任意字符* :匹配 * 左边的第一个字符为0次或者出现无穷次? :匹配?左边的第一个字符出现0次或者1次+原创 2021-01-06 22:10:25 · 278 阅读 · 0 评论 -
区分py文件的两种用途 包的使用 日志模块
区分py文件的两种用途def f1():print(“x”)print(name)当文件被运行的时候__name__等于__main__当文件被导入使用的时候__name__等于模块名if name == “main”:f1()else:pass使用if判断main可以使文件导入的时候只导入代码文件,不运行文件代码。只有run的时候才会运行文件包的使用包的文件只能被导入,不能运行首次导入包发生的事情import导入文件,会先执行一个_init_.py文件,申请一个包的名称空间,执原创 2021-01-05 18:47:09 · 188 阅读 · 0 评论 -
模块的介绍,基本使用 sys.path模块的搜索路径设置,优先级 目录规范
模块的介绍什么是模块模块就是一系列功能的集合体模块大致分为四个类别:一个py文件就是一个模块,文件名叫test.py,模块名叫test一个包含了_init_.py文件的文件夹称之为包,包也是模块使用c编写并链接到python解释器的内置模块已被编译为共享库或DLL的C或C++扩展模块的三种来源:自带的模块第三方模块自定义模块为何要用模块(自带的模块,第三方模块)->拿来注意,提升开发效率自定义模块是为了解决代码冗余问题如何用模块模块都是用来被导入使用的,不是直接使用的原创 2021-01-04 19:58:21 · 1053 阅读 · 0 评论 -
三元表达式 列表,字典,集合生成式 生成器表达式 函数的递归调用 二分法 匿名函数 面向过程编程思想
三元表达式:取代双分支的ifdef max(x, y):if x > y:return xelse:return yx = 11y = 22print(x if x > y else y)print(“yes” if x > y else “no”)列表生成式案例1l = []for i in range(10):l.append(i)print(l)l = [i for i in range(10)]print(l)案例2l = []for i原创 2021-01-02 22:16:43 · 207 阅读 · 0 评论 -
装饰器 迭代器 生成器(yield 与return的异同)
方案五:import timedef index(): #index=被装饰对象index函数的内存地址time.sleep(1)print(“from index”)def foo(func): #func=被装饰对象index函数的内存地址def wrapper():start = time.time()func() #func=被装饰对象index函数的内存地址stop = time.time()print(“run time is %s” % (原创 2020-12-31 00:51:32 · 231 阅读 · 0 评论 -
函数对象 函数嵌套 名称空间与作用域 装饰器
在python中,函数是第一类对象,函数是第一等公民本质上函数可以当变量用def func(): # func=函数的内存地址print(“from func”)1.可以赋值f = funcprint(f) #打印的结果就是func的内存地址f() #运行代码func(),from func2.可以当作参数传给另一个函数def foo(x):print(x)x() #加括号原创 2020-12-29 20:49:27 · 223 阅读 · 0 评论 -
函数的基本使用
什么是函数ps:函数就是盛放代码的容器具备某一功能的容器------》函数先准备工具的过程-------》函数的定义遇到应用场景拿来就用------》函数的调用所以函数的使用原则:先定义后调用为何要用函数:解决下述问题:1.代码组织结构不清晰,可读性差2.可扩展性差如何用函数定义的语法:def函数名(参数1,参数2,参数3,…):"函数的文档注释”代码1代码2代码3return 返回值定义函数发生的事情1.申请内存空间把函数体代码放进去2.将函数内存地址绑定给原创 2020-12-28 18:51:07 · 368 阅读 · 0 评论 -
文件管理
字符编码运行python程序的三个步骤:1.启动python解释器2.解释器将test.pyde的内容从硬盘读入内存3.解释器解释执行刚刚读入内存的代码,识别python语法。第二个阶段:怎么样避免乱码用文本编辑器写文本文件时,要记得在开头注释(#codig:写入文件的字符编码表类型)文件从硬盘把文件读入内存的的时候也用一样的字符编码表,这样可以避免乱码问题。如果用python2需要在字符串前加u,x=u”上“这样会强制python2在存文件的时候把文件存成UTF-8的模式,python3原创 2020-12-26 18:51:59 · 182 阅读 · 0 评论 -
堆栈与队列 集合(set) 文件管理 字符编码
文件管理什么是文件文件是操作系统提供给用户或者应用程序操作硬盘的一种机制为何要用文件读写文件就是存取硬盘应用程序: open()操作系统: 打开文件计算机硬件: 硬盘空间一个操作系统文件对应一个硬盘空间如何用文件打开文件读 / 写关闭文件open(r"a\a.txt",mode = “rt”, encoding = “UTF-8”) # encoding是指定字符编码表的意思windowsx系统要在前面加个“r“取消”\“的意义open("/a/b原创 2020-12-24 20:24:29 · 185 阅读 · 0 评论 -
深浅拷贝 元组(tuple) 字典(dict)
深浅拷贝浅拷贝的原理:拷贝后,无论是可变还是不可变类型都公用一个id,共用一个内存地址案例:l = [11, 22,[“aa”, “bb”]]l2 = l[:]l[2][0]=55print(l2) #[11, 22, [55, ‘bb’]]print(l) #[11, 22, [55, ‘bb’]]l2copy l,当l2中的子列表值改变后,l中的子列表值也会发生变化,查看l,l2的id是一样的深拷贝的原理:拷贝后,可变类型的子列表id发生了变化,不共用一个内原创 2020-12-23 19:07:06 · 1354 阅读 · 0 评论 -
切片 可变类型与不可变类型 基本数字类型(int和float) 字符串(str) 列表(list)
今日重点:for+range()#起始位置,结束位置,步长for i in range(10,3,-1):print(i)一个数结束位置两个数起始位置结束位置三个数起始位置结束位置加步长for+enumeratea = [1, 2, 3]for i in enumerate(a):print(i)enunerate给列表格式加了索引。0开头,打印结果为(0,1)(1,2)(2,3)什么是可变类型值改变, 内存地址不变(id不变)证明就是在改变原值,原址是可变类型a=[111,2原创 2020-12-22 22:20:50 · 607 阅读 · 0 评论 -
while循环 for循环
为什么要用循环结构?让计算机像人一样一直重复做某件事情while循环(条件循环)语法while 条件:代码1代码2代码3while循环运行的步骤:步骤1:如果条件为真,那么依次执行:代码1,代码2,代码3…步骤2:执行完毕后循环到while条件,再次判断条件:如果条件为True,则再次执行:代码1,代码2,代码3…如果条件为False,则循环终止死循环的效率问题:while True:1+1纯计算无io死循环会导致致命的效率问题退出循环的方法:改变while条件定义:先原创 2020-12-21 23:09:40 · 488 阅读 · 0 评论 -
增量赋值 链式赋值 交叉赋值 解压赋值 逻辑运算符 短路运算 布尔值分类 if判断 格式化输出
增量赋值age = 10age=age+1#age +=1#age %= 3取余#age //=3取整数#age **=3三次方print(age)链式赋值x = 10y = xz = yx = y = z = 10print(x, y, z)print(id(x),id(y),id(z))#交叉赋值m = 10n = 20temp=mm=nn=tempm = n # 将n的值赋值给m,m=20#print(id(m),id(n),id(temp))#prin原创 2020-12-18 18:43:29 · 234 阅读 · 2 评论 -
变量的三大组成部分 基本数据类型 基本运算符 比较运算符
变量的三大组成部分变量名:用来找值赋值符号:将变量值的内存地址绑定给变量名变量值:记录的事物的状态,也就是我们存储的数据引用print(变量名)运行会显示出变量值变量名变量名的命名应该遵循见名知意的原则命名的规范:1.有字母,数字,下划线组成,(变量名注意尽量不要用_开头命名)2.不能以数字开头,3.不能用python的一些关键字命名,如果用python的关键字命名会导致python自带的一些功能失效。[‘and’, ‘as’, ‘assert’, ‘break’, ‘class’, ‘原创 2020-12-17 21:56:21 · 2279 阅读 · 0 评论 -
编程语言分类 python介绍 认识变量
编程语言的分类机器语言:用二进制指令编写程序(相当于直接用高低电频去控制计算机硬件,需要对计算机硬件特别了解)优点:直接控制硬件,执行效率极高缺点:二进制指令难以记忆,极容易出错编程复杂度极高汇编语言:用英文单词代替二进制指令编写程序(对机器语言的二进制做了一些封装,需要对计算机硬件特别了解)优点:相比机器语言学习难度稍微降低,硬件的执行效率依然很高。缺点:编程难度依然很高高级语言:用人类的能够理解的语言去控制计算机硬件高级语言计算机无法直接理解,需要通过翻译才能控制计算机,按照种类分为编原创 2020-12-16 20:55:21 · 217 阅读 · 0 评论
分享