自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis持久化

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。要有下面五个过程:客户端向服务端发送写操作(数据在客户端的内存中)。数据库服务端接收到写请求的数据(数据在服务端的内存中)。服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。Redis 提供了两种持久化方式:RDB(默认) 和AOFRDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘

2022-06-13 10:21:42 314 1

原创 联合索引最左原则失效了怎么办

Mysql5.6后的新特性在使用联合索引时,最左索引使用范围查找时会使后续索引无序失效例如现在我们有一个users表,表里有一个(age,height)的联合索引假设我们要执行这条sql假设现在数据库里的辅助索引表这样存储如果是在Mysql5.6之前,会把age=10和age=11的6条数据全部拿出来后再遍历判断height是否等于10,这样height的索引其实就失效了,因为对于age组合后的数据来说,height已经是无序的了所以在Mysql5.6之后加入了一个索引下推的新特性。它不再把满足a

2022-06-10 10:12:17 599

原创 MySQL软件架构

Mysql主要由Mysql Server 加 存储引擎 构成Mysql Server 主要是由连接器,缓存,分析器,优化器和执行器组成连接器的主要功能是用于管理处理客户端连接请求,连接器接受4种请求方式记录查询缓存在内存中,有相同语句则直接返回结果。Mysql8.0之后已取消主要是根据关键字将sql语句解析成语法树,语法不合法则会报错MySQL 优化器使用基于成本的优化方式(Cost-based Optimization),以 SQL 语句作为输入,利用内置的成本模型和数据字典信息以及存储引擎的统计信息决

2022-06-09 10:18:01 433

原创 MySQL的三大日志

bin log日志是Mysql server层的逻辑日志,它完整的记录了每次数据更新的操作。所以,bin log可用于从库进行数据复制更新,也可用于数据库的数据闪回binlog 日志有三种格式,分别为 STATMENT 、 ROW 和 MIXED 。STATMENT : 基于 SQL 语句的复制( statement-based replication, SBR ),每一条会修改数据的sql语句会记录到 binlog 中 。ROW : 基于行的复制( row-based replication, RBR )

2022-06-09 10:16:54 396

原创 MySQL数据更新

bin log 和 redo log都是写入内存,可通过配置规定多久将内存中的日志落入磁盘中redo log 可以通过修改innodb_flush_log_at_trx_commit参数配置讲redo log buffer写入磁盘中的时机有时候Mysql会卡几秒不处理事务,而且磁盘IO很高,这个时候不是Mysql在进行垃圾回收,而是Mysql在刷脏页因为mysql的数据更新首先都是在内存中,所以就会导致内存中的数据与磁盘上的数据不一致,而内存中的数据页就是脏页。脏页的存在可以加快查询,且保证事务的数据隔离性

2022-06-09 10:16:01 1068

原创 数据库有哪些分类

所有资源都共享,启多个服务器节点都使用同一套资源,跟单节点差别不大,一般数据库都不采用内存和磁盘共享,但有多个独立cpu,这种一般用在超级计算机上,提升计算性能只共享磁盘,每个节点有单独的cpu和内存。像阿里的PolarDB就采用的这个架构。网吧也是用的这个架构什么都不共享像我们平时的mysql集群,主从复制,还有分库分表都是分开独立的,相互之前通过网络请求联系...

2022-06-09 10:15:13 264

原创 InnoDB的数据存储方式

在理解行数据结构时,我们首先要知道两个概念:变长列和行溢出数据变长列值得是一个字段对应的不同行数据在存储中占用的大小时不固定的当行数据中某个字段长度过长,会影响到一页数据所存储的行数据条数,从而影响到B+树的性能。所以InnoDB会将一条行数据中过长字段的数据单独存放到BLOB的页中,而在B+树叶子节点中存储指针。这样的机制的优点是保证了单页行数据条数更多,降低磁盘IO,提升查询效率缺点是在需要查询该长字段的数据时,需要去额外磁盘IO一次查询数据InnoDB的行记录格式主要有四种MySQL5.0之前的默认

2022-06-09 10:14:09 1271

原创 docker下mongodb开启权限认证后无法创建用户问题

docker启动mongo容器时默认是未开启权限认证的,所以为了防止被脱裤,启动的时候需要在最后加上–auth参数来使mongo开启权限认证创建用户由于刚创建的mongo容器是没有任何用户的,所以需要手动创建一个admin用户首先使用mongo admin进入容器里的mongo命令行然后在mongo命令行创建一个用于创建用户的admin用户这里的role权限主要有BUT创建失败因为开启了权限认证,所以创建用户需要权限,所以我们需要先不开启权限认证,需要先创建好了admin账号后再开启。把之前的容器

2022-06-09 10:12:00 3757 1

原创 BloomFilter算法

如何判断一个元素是否存在于集合里?常见的一些解决办法有:但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。遍历集合的时间成本高,时间复杂度再O(n)到O(logn)不等而哈希表也存在问题,当元素越来越多,哈希冲突也会越严重,从而影响查询效率。而布隆过滤则是一种时间空间都有巨大优化的算法布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量(位图)和一系列随机映射函数(哈希函数)。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率

2022-06-09 10:10:14 283

原创 令牌桶算法

Python的collections模块包含了许多实用的集合类。namedtuple可以定义一个简单的类,比直接定义一个类更简单,且减少了初始化类的很多初始化方法,所以速度更快。namedtuple继承于tuple,所以也拥有tuple的性质namedtuple还可以使用类方法_make方法来传入可迭代的对象创建类namedtuple还可以使用_asdict方法将namedtutple对象转化成字典tuple与list相比,tuple会作为常量在编译时确定,所以速度会比list快很多;tup

2022-06-09 10:09:14 3556

原创 python中函数参数中的星号*和正斜杠/

下面引用一段python3.8中dataclass源代码我们可以发现在函数参数中出现了/和*号,那这两个符号分别代表什么意思呢*号作为一个函数参数出现在函数中,表示的是在*号之后的参数在调用时必须用kwargs的方式指定命名调用。例如这样一个函数我们在调用的时候可以有指定和非指定的方式但如果加入了*后我们用非指定的方式传参就会报错而这种限制只在于*之后的参数,比如下面这个例子就不会报错参数//号的作用则是表示在/之前的参数都必须为位置参数,而不能用指定命名传入我们结合*号一起全指定的方式调用

2022-06-09 10:04:12 1193

原创 asyncio.gather和asyncio.wait的区别

asyncio.gather和asyncio.wait的区别环境: python3.7.1参考: https://stackoverflow.com/questions/42231161/asyncio-gather-vs-asyncio-waitwait执行顺序是随机的,gather执行顺序是有序的import asyncioimport timeasync def add(x=1, y=2): print(f'Add {x} + {y}') await async

2022-05-25 09:32:47 1114

原创 数据库的四大特性和四种隔离等级

数据库事务特性(ACID)Atomicity(原子性):原子性指的是一个事务中的操作,要么全部成功,要么全部失败,如果失败,就回滚到事务开始前的状态Consistency(一致性):一致性是指事务执行前后都必须保证数据库的一致性状态Isolation(隔离性):在并发事务的情况下,在一个事务的操作不应影响另一个事务Durability(持久性):持久性指的是一旦事务被提交,那数据库中的数据改变就是永久的数据库事务的四种隔离等级Read Uncommitted(读未提交)指一个事务可

2022-05-25 09:32:32 155

原创 logging模块

logging模块logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等;相比print,具备如下优点:可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;日志等级日志等级由上至下依次递增级别含义DEBUG调试时的详

2022-05-24 11:29:03 131

原创 python hasattr()、getattr()、setattr()

hasattr(object, name)判断object对象中是否存在name属性。对于python的对象而言,属性包含变量和方法。有则返回True,没有则返回False。无论属性是变量还是方法,name都是str类型的class Student(): name = 'xiaoming' def func(self): return 'This is a student'print(hasattr(Student,'name'))print(hasattr(Stud

2022-05-24 11:28:15 103

原创 python中的and 和 or

python中的真值和假值在python里面,0、”、[]、()、{}、None为假,其它任何东西都为真。and当and表达式为真时,会返回最后一个真值# 先计算4 and 5,结果为5,再计算5 and 6,结果为6print(4 and 5 and 6)>>> 6当and表达式为假时,会返回第一个假值# 先计算1 and '',结果为'',再计算'' and 0,结果为''print(1 and '' and 0)>>> ''or当or表

2022-05-24 11:27:22 2297 2

原创 python3 print函数

python2中print是个关键字,在python3中print是个函数print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)平常我们一般都只是传入value参数,但其实print函数还提供里很多功能sep参数当我们需要打印多个value时,会根据sep参数来分隔,sep默认是一个空格>>> print('a', 'b')a b>>> print('a', 'b', sep='')

2022-05-24 11:26:33 928

原创 python == 和 is

==一般是值的比较,is则是地址的比较>>> a = [1, 2, 3]>>> b = [1, 2, 3]>>> a == bTrue>>> a is bFalse在上面这个例子中a和b的值是一样的,但他们指向的是不同的内存>>> a = 'a'>>> b = 'b'>>> a == bTrue>>> a is bTrue我们会发现,

2022-05-24 11:25:14 103

原创 centos下安装python3.7

引用: https://www.cnblogs.com/wendyw/articles/9714215.html安装前的准备(各种依赖及工具安装)yum -y install gcc makeyum -y install libffi-develyum -y install zlib zlib-devel yum -y install bzip2 bzip2-devel yum -y install ncurses ncurses-devel yum -y install readline.

2022-05-24 11:24:05 555

原创 Ubuntu下使用pyenv安装python3.7

首先需要安装依赖包sudo apt-get updatesudo apt-get upgradesudo apt-get dist-upgradesudo apt-get install build-essential python-dev python-setuptools python-pip python-smbussudo apt-get install build-essential libncursesw5-dev libgdbm-dev libc6-devsudo apt-get

2022-05-24 11:23:29 765

原创 python一切皆对象

Python作为动态语言,与其一切皆对象的特性是分不开的。什么是一切皆对象,就是python中所有的东西都是对象在python中,一般我们要看一个对象的类型都是用type基础数据类型如int、str、list、set都是对象>>>type(int)<class 'type'>>>>type(str)<class 'type'>>>>type(list)<class 'type'>>&gt

2022-05-24 11:22:24 1851

原创 Protocol Buffers(proto3)

简介protocol buffer是google的一个开源项目,它是用于结构化数据串行化的灵活、高效、自动的方法,例如XML,不过它比xml更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构定义一个消息类型一个简单的.proto文件在.proto文件定义消息,message是.proto文件最小的逻辑单元,由一系列name-value键值对构成。syntax = "proto3";message Se

2022-05-24 11:14:34 466

原创 Golang 交叉编译

在很多时候,由于开发的方便,会有这样的场景出现,使用Mac开发或使用Windows开发,需要编译成Linux系统的执行文件,那么如何做到?Go语言提供了非常方便的命令行操作,即可实现。Mac下编译Linux, Windows# LinuxCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build xxx.go # WindowsCGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build xxx.goLinux下编译Mac

2022-05-24 11:11:43 88

原创 GeoHash算法

附近的职位(POI: 兴趣点)最近有个需求,要求实现附近的职位的功能那么首先我们需要定位当前的点,用经纬度表示,是一个二维的坐标。那么如果要筛选附近一公里以内的职位,我们不可能把数据库所有的职位坐标取出来计算,所以我们需要增加筛除条件减小结果集。这个时候我想到的方法是,计算出以当前点为中心,取得相同纬度,距离1公里的左右经度临界线,再以相同经度取得上下维度临界线,这样就可以得到一个正方形范围的矩形和经纬度的最大最小临界值。在数据库进行查询的时候就可以用临界值去排除(经纬度要用B+索引)。对于查出来

2021-06-23 18:31:55 1709

原创 mysql交换两列数据

mysql交换两列数据在做数据迁移的时候,将老表的两个表示大图和小图字段的直导入新表时导反了,所以在新表需要交换两列的值本来想的是直接用set x=y, y=x 结果发现mysql进行update进行set的时候,x=y时就已经将x的值写进去了,所以后面的y取到的x是已经改变过的了。解决办法有:1.新增一个字段tem, 临时存储x的值,用完即删update xxx set tem=x, x=y, y=tem这种方法要增删字段,十分不优雅2. 连表操作, 将本表临时备份出来这样就能保留x原来的

2021-06-23 18:28:27 1560

原创 Python collections模块

collections模块Python的collections模块包含了许多实用的集合类。namedtuplenamedtuple可以定义一个简单的类,比直接定义一个类更简单,且减少了初始化类的很多初始化方法,所以速度更快。from colletions import namedtupleUser = namedtuple('User',['name','age','he...

2018-07-21 11:22:49 692

原创 memcached

memcached是什么?memcached是一个高性能的分布式内存对象缓存系统,用于动态web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于键值对的存储。其守护进程是用C写的,但客户端可以用任何语言来编写。memcached和memcache的关系简单来说,可以把memcached看成是memc...

2018-07-19 22:19:37 338

原创 基于Python的接口自动化测试(二)抓包工具Fiddler

常见的抓包工具1. Fiddler:Fiddler是一款免费且功能强大的数据包抓取软件,主要用于抓取HTTP/HTTPS协议,简单易用目前主流的版本是Fiddler4,最新版本已经到了Fiddler5。2. Charles:这是一款在Mac下常用的抓包工具。3. Wireshark:功能十分强大的抓包工具,可以支持spdy,tcp,udp等网络协议的抓包。对于测试来说,推荐使用Fiddler,简单...

2018-05-23 16:20:37 5011 1

原创 基于Python的接口自动化测试(一)概念以及意义

接口定义:接口普遍有两种意思,一种是API(Application Program Interface),应用编程接口,它是一组定义、程序及协议的集合,通过API接口实现计算机软件之间的相互通信。而另外一种则是Interface,它是面向对象语言如java,c#等中一个规范,它可以实现多继承的功能。接口测试中的接口指的是API。为什么要使用接口:接口其实就是前后端交互的一个通道,它实现了前后端的一...

2018-05-22 11:33:24 3341

原创 HTTP协议

1.HTTP简介HTTP(Hyper Text Transfer Protocol):超文本传输协议HTTP是一个基于TCP/IP协议来传输数据(HTML文件,图片文件,查询结果等)的,用于万维网(WWW:World Wide Web)服务器与本地浏览器之间的传输协议。HTTP是一个应用层协议HTTP默认端口号是80,HTTPS默认端口号是443现在普遍应用的是HTTP 1.1,最新版本HTTP ...

2018-05-17 11:52:58 244

空空如也

空空如也

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

TA关注的人

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