自定义博客皮肤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)
  • 收藏
  • 关注

原创 MySQL学习总结--索引 & 排序

索引模型、索引类型、索引覆盖、索引下推、唯一索引 VS 普通索引、change buffer重建索引/表、索引选择异常、字符串字段如何加索引、order by 排序字段要加索引、索引字段不要应用函数,其传参可以应用函数。

2022-05-28 17:17:24 1723

原创 locust 性能测试工具(V2.8.6)

Locust 是一个易于使用、可编写脚本和可扩展的性能测试工具。它基于 Python 语言编写,支持分布式负载测试,自带 UI 界面展示实时统计数据,不仅能测试 HTTP,也可以用于测试 gRPC 等系统,小且灵活。

2022-04-23 16:39:28 2457

原创 MySQL学习总结--WAL日志

WAL、日志的两阶段提交、组提交机制(group commit)、redo log(重做日志)、binlog(归档日志)、内存脏页、InnoDB刷脏页的控制策略

2022-04-08 18:51:49 1356

原创 MySQL学习总结--事务

事务、ACID、并发一致性问题、事务的隔离级别、多版本并发控制(MVCC)、快照读、一致性读、当前读、长事务、利用事务统计大表总行数

2022-04-04 11:49:31 1131

翻译 Libvirt XML文件详解(一)

所有虚拟机的根元素都命名为 domain。`type`:指定用于运行 domain 的 hypervisor。可选值:xen、kvm、qemu、lxc。`id`:是正在运行的 guest 的唯一整数标识符。不活动的虚拟机没有 `id` 值。

2021-05-08 23:57:31 5873

原创 Python版17个内部排序算法

交换类:冒泡、鸡尾酒、快速排序、SampleSort。选择类:简单选择、树形选择(锦标赛)、堆排序。插入类:直接插入、二分插入、2-路插入、希尔排序。归并类:归并排序、TimSort。非比较类(线性时间):鸽巢、计数、基数、桶排序。

2021-05-08 11:59:00 783

原创 Python 版 SampleSort 算法

- 检查数组是否属于特殊案例(已经有序、或全部重复、或在有序数组末尾追加几个随机元素的数组)。如果只有很少的无序元素,或者总共只有很少的元素,直接使用二分插入排序就能以很低的成本结束整个排序。 - 普通案例(没有明显模式的大型数组),会得到完整的 samplesort 处理。它基本上就是加了兴奋剂的快速排序: - 随机选择 `2**k - 1` 个元素作为预选枢轴(PP:preselected pivots),其中 `k` 等于最接近 `n/ln(n)` 的 2 幂次方,再减去 1 。把 PP 都交换

2021-04-29 14:38:37 572

原创 Python 版 TimSort 算法

根据 JDK1.8 的 Collections.sort() 源码翻译的 Python 版 TimSort 代码。 - 小数组无需归并,使用二分插入排序返回即可。大数组需要归并,先计算最小 run 长度,长度不足此值的 run 需要用二分插入排序补足。 - 整个流程是从左到右遍历数组一次,每识别出一个 run 就入栈,并检查栈顶的三个 run,如果符合归并条件则归并其中两个相邻的 run。遍历结束后,把堆栈中剩余的 run 都归并成一个,完成排序。

2021-03-20 21:04:57 907 1

翻译 Timsort 介绍(listsort.txt 翻译)

这里描述了一种自适应的、稳定的、自然的 mergesort,谦虚地称之为 timsort (嘿,这是我应得的 <眨眼>)。它对部分有序的数组具有超高的性能(所需比较次数小于 `lg(N!)`,并且最低能到 `N-1`),对于随机数组,它的速度与 Python 之前精心调优过的 samplesort 混合排序 一样快。简而言之,主流程是遍历数组一次,从左到右,依次识别出下一个 run,然后“智能地”将其合并到之前的那些 run 上。除此之外的一切都是为了提升速度的处理,以及对内存效率的一些来之不易的度量。

2021-03-15 15:54:59 2120

原创 python-redis-lock

python-redis-lock使用方法导入包阻塞锁超时阻塞锁非阻塞锁释放锁查看锁是否已被占用使用上下文管理器 with锁 id日志工作原理redis 命令获取锁原理释放锁原理其他参考文档python-redis-lock 是基于 redis SETNX和BLPOP命令实现的锁上下文管理器,其接口类似于threading.Lock。使用方法导入包import redis_lockfrom redis import StrictRedis阻塞锁线程拿不到锁时将一直阻塞等待。具体是控制acqu

2020-12-11 14:31:49 2619

原创 qemu-img命令

qemu-img命令通用参数通用选项子命令amendbenchcheckcommitcompareconvertcreateddinfomapmeasuresnapshotrebaseresize镜像格式rawqcow2其他格式qemu-img用于离线创建、转换和修改磁盘镜像文件。警告:不要使用qemu-img修改正在运行的虚拟机或任何其他进程使用的镜像,这可能会破坏镜像。通用参数FILENAME:镜像文件名。OUTPUT_FILENAME:输出的目标镜像的文件名。-f FMT:镜像格式,一般会

2020-11-18 19:57:58 12057 1

原创 MySQL双主复制--基于二进制日志

场景需求:对控制节点做双机热备,正常情况下keepalived的VIP绑在主控上,即使用主控读写数据,备控从主控上复制数据,当keepalived检测到主控故障时或手动切换主备时,将把VIP绑在备控上,即使用备控读写数据,主控从备控上复制数据。由于两个节点都可能写数据,考虑使用mysql双主复制,即每个节点既是源服务器,又是副本服务器。由于不会同时写数据,无需对自增ID设置奇偶。

2020-10-09 11:19:28 379

原创 Linux网卡bond

Red Hat Enterprise Linux 7 支持将多个网络接口绑定在一起作为一个网络接口(bonding),实现增加带宽,提供容错的效果。

2020-07-31 08:52:00 1773

原创 Keepalived v1.3.5 高可用配置参数总结

Keepalived既能做高可用,也能做4层负载均衡(基于LVS)。如果只需要高可用功能,只涉及两类配置:全局配置、VRRPD配置。如果同时还需要LVS负载均衡功能,还涉及一类配置:LVS配置。

2020-07-16 12:44:16 2468

转载 Keepalived权威指南中文(Keepalived:The Definitive Guide)

Keepalived 权威指南 The Definitive Guide第一章 VRRP1.1 VRRP协议简介VRRP路由器VRRP虚拟路由器MASTER和BACKUP1.2 工作机制第二章 KEEPALIVED2.1 Keepalived的设计和实现2.1.1 多进程模式2.1.2 控制面板2.1.3 WatchDo2.1.4 IPVS封装2. 2 KeepAlived的安装2.3 KeepAlived配置详解2.3.1 全局配置全局定义静态地址和路由2.3.2 VRRPD配置VRRP Sync Gro

2020-07-16 12:41:32 4309

原创 Linux环境下使用Pyinstaller打包Django项目

1 环境Linux环境:CentOS7Python 3.7.4PyInstaller 3.6 及其依赖包:setuptools altgraph dis3项目代码:django 2.1 项目,存放路径:/mypath/hello/[root@localhost mypath]# tree.└── hello ├── db.sqlite3 ├── hello │ ├── __init__.py │ ├── settings.py │ ├──

2020-06-18 17:17:38 5100

原创 由RFC7234详解HTTP缓存头(Cache-Control)

详解HTTP缓存头结论1 默认缓存策略2 响应中的Cache-Control命令2.1 是否允许缓存2.2 允许谁缓存2.3 开始重用前是否需要经过来源服务器验证2.4 响应过期后是否强制进行重新验证2.5 来源服务器显式声明响应的过期时间2.6 是否允许中间组件、连接器对响应做格式转换3 共享缓存4 验证两种验证器验证结果3 响应头中与缓存相关的其他字段4 请求中的Cache-Control命令...

2020-04-26 10:43:57 816

原创 根据REST理解HTTP

HTTP协议到底是什么,干什么用的?Roy Fielding在其REST论文中,是这么定义的:HTTP在Web中是一个特殊的角色,它既是Web组件之间通信的的应用级协议,也是作为移交资源的表述而设计的唯一 协议。(注:Fielding发布REST的论文是在2000年,而在2014年又但是了一个COAP协议,所以以现在时间点来看,HTTP已经不是唯一的协议了)(一)设计的角度从设计的角度看,H...

2020-04-20 17:34:59 195

原创 基于OIDC实现单点登录SSO、第三方登录

OIDC联合身份认证机制背景概念1 OIDC身份认证协议2 基于OIDC实现SSO2.1 统一登录2.1.1 流程2.1.2 RP相关接口2.1.3 OP相关接口2.2 统一登出2.2.1 流程2.2.2 RP需要在向OP注册时提供2.2.3 RP相关接口2.2.4 OP相关接口2.3 持续监视2.3.1 流程2.3.2 RP相关接口2.3.3 OP相关接口3 在OIDC的SSO中集成第三方登录(...

2020-04-20 15:16:34 12605 4

原创 详解OAuth 2.0授权协议(Bearer token)

OAuth 2.0授权协议1 认证(Authentication)2 授权(Authorization)3 OAuth 2.0与认证机制的联系4 详解OAuth 2.0授权协议4.1 授权码流程4.2 如何使用refresh_token换发新的access_token?4.3 access token的具体用法(Bearer token)4.4 客户机应用如何把access token传递给资源服...

2020-04-20 15:13:51 14162

原创 Web应用中基于密码的身份认证机制(表单认证、HTTP认证: Basic、Digest、Mutual)

表单认证(Form-Based Authentication)优点:允许开发人员定制登录页面和错误页面。缺点:不够安全。用户、密码以纯文本形式发送,并且目标服务器未经过身份验证。如果有人拦截传输,则用户名和密码信息可以轻松解码。因此,需结合HTTPS使用。流程:1、客户端请求访问受保护的资源(目标URL:http://localhost:8000/resource)2、如果客户端未经身份...

2020-04-20 15:12:10 3552 2

原创 Web应用中4类登录会话管理机制(基于session、基于cookie、基于token、基于认证)

Web应用中4类登录会话管理机制场景需求背景概念1 基于session的会话管理机制1.1 本质特征1.2 会话过程1.3 优点1.4 缺点2 基于cookie的会话管理机制2.1 本质特征2.2 会话过程2.3 优点2.4 缺点3 基于token的会话管理机制3.1 本质特征3.2 会话过程3.3 优点3.4 缺点4 服务器无状态的会话管理机制4.1 本质特征4.2 会话过程4.3 优点4.4 ...

2020-04-18 12:53:41 2932 1

原创 Web应用中的状态(会话状态、应用状态、有状态协议、无状态协议、REST无状态约束)

Web应用中的各种状态结论先行组件交互层次的“状态”应用软件使用层次的“状态”应用软件存储数据层次的“状态”网络传输层次的“状态”HTTP是无状态协议是什么意思?REST中的无状态约束是什么意思?HTTP是无状态协议是什么意思?为什么将HTTP设计为无状态协议?为什么REST要包含无状态约束?(一)Web的需求(二)利大于弊违背无状态交互约束的典型例子:基于session的会话管理机制应用状态应用...

2020-04-18 12:50:28 2522 1

原创 由PEP8分析Python保护变量、私有变量

结论先行在Python中,允许子类使用的内部属性(单下划线开头)类似于Java的保护变量,不允许子类使用的内部属性(双下划线开头)类似于Java的私有变量。背景概念函数:在类外部定义的函数方法:在类内部定义的函数,通常第一个参数默认为self或cls变量:在类外部定义的变量属性:在类内部定义的变量,通过【实例.属性名】,或【类.属性名】的格式才能调用公开接口与内部接口Python将...

2020-02-04 21:45:28 400

原创 Python实现单例模式8种方法的优缺点比较

Python实现单例标准(一)使用模块使用函数装饰器使用类装饰器使用装饰器返回类使用基类__new__方法使用元类参考文档标准为什么要使用单例模式?我们希望某个类在程序运行期间只有一个实例(单例效果),最简单的办法就是只实例化一次得到一个实例,自己记住,之后写代码的时候一直用它,不再实例化。问题是自己有可能忘了某个类已经实例化过了,而且别人想复用你的代码时也不知道你已经实例化过了,就很容易发...

2020-02-03 15:21:30 1104 1

原创 由import 机制原理分析为什么Python模块就是天然的单例模式

import 机制原理当我们使用 import A 这行代码导入模块A时,底层做了以下事情:检查模块A是否已经被加载到了sys.modules中,即检查字典sys.modules中是否有A这个key。(sys.modules是一个将模块名称映射到已装载模块的全局字典。该字典在python启动后就存在于内存中。字典sys.modules对于导入模块起到了缓存的作用。当某个模块第一次导入,字典...

2020-02-02 11:22:37 921

原创 SQLAlchemy相关(连接池、在eventlet中使用、backref/back_populates、lazy/eager loading)

SQLAlchemy相关连接池在eventlet中使用SQLAlchemy创建表关系完整例子参考文档连接池在使用create_engine(url)创建引擎时,SQLAlchemy会默认绑定一个容量(pool_size)为5,上溢(max_overflow)为10的连接池(QueuePool对象)from sqlalchemy import create_engineengine =...

2020-01-11 22:31:06 1838

原创 SO_REUSEADDR与SO_REUSEPORT平台差异性总结

SO_REUSEADDR与SO_REUSEPORT平台差异性前言BSD系统Linux系统Windows参考文档前言在网上看到很多人说在socket中设置SO_REUSEADDR选项的用途是端口复用/地址复用,具体来说就是让处于time_wait状态的socket可以快速复用。对于服务端而言,设置SO_REUSEADDR作用就是在重启服务器时能马上重新绑上原来的端口,方便调试。不然就绑定会失败,...

2019-12-18 22:08:08 1182

原创 Python实现WebSocket(心跳检查、进程通信)

Python实现WebSocket服务器(心跳检查、进程通信)心跳检查进程通信WebSocket完整代码参考文档心跳检查websocket适用于高频、服务端主动推送的场景需求,所以采用TCP长连接模式,长连接需要保活,即确保连接在被使用的时候是可用状态。连接的关闭分为两种情况:连接正常关闭,客户端调用close() 、shutdown()连接优雅关闭。   判断方法:服务端recv(...

2019-12-17 20:03:23 11080 1

原创 初识WebSocket及Python实现

初识WebSocket及Python实现WebSocketWebSocket与HTTP的关系WebSocket与Socket的关系Python实现参考文档WebSocketWebSocket 一种在单个 TCP 连接上实现浏览器与服务器全双工通信(同时双向信号传输)的协议。目的:即时通讯,替代轮询Web 基于 B/S 架构,通常使用 HTTP 协议进行通信,HTTP 本质是一个单向请求,若...

2019-12-15 17:04:16 1585

空空如也

空空如也

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

TA关注的人

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