自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python设计模式 - 适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它用于将一个类的接口转换为客户端所期待的另一个接口。注:在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者一组方法的集合。

2025-03-22 18:24:22 1056

原创 Python设计模式 - 建造者模式

建造者模式是一种创建型设计模式,主要用于构建包含多个组成部分的复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象表示。

2025-03-10 20:25:29 966

原创 Python设计模式 - 原型模式

原型模式是一种创建型设计模式,它可以通过复制现有对象来创建新对象,而不是直接实例化新的对象。

2025-02-07 20:43:46 1140

原创 Python设计模式 - 组合模式

组合模式(Composite Pattern) 是一种结构型设计模式,主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象,从而简化了客户端代码。组合模式有透明组合模式和安全组合模式两种,下面分别介绍这两种模式。

2025-01-28 15:05:02 1369 1

原创 Python设计模式 - 抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

2024-08-03 18:41:07 1229

原创 Python设计模式 - 工厂方法模式

工厂方法模式是一种创建型设计模式,它定义一个创建对象的接口,让其子类来处理对象的创建,而不是直接实例化对象。

2024-07-28 11:55:02 782

原创 Python设计模式 - 简单工厂模式

简单工厂模式是一种创建型设计模式,它通过一个工厂类来创建对象,而不是通过客户端直接实例化对象。

2024-06-15 17:29:20 582

原创 在docker容器中使用gdb调试python3.11的进程

docker容器默认情况不允许使用系统ptrace,会导致gdb使用报错,运行容器时增加--cap-add sys_ptrace参数来关闭ptrace限制

2024-06-09 23:08:19 810 1

原创 Python设计模式 - 单例模式

单例模式是一种创建型设计模式, 其主要目的是确保一个类只有一个实例, 并提供一个全局访问点来访问该实例。

2024-05-04 16:10:41 1133

原创 浅析 Dockerfile 构建缓存:原理与优化方法

构建镜像时,Docker 按照指定的顺序逐步执行 Dockerfile 中的指令。对于每条指令,Docker 检查它是否可以重用构建缓存中的指令。从变更不频繁到变更频繁的顺序来写指令。

2023-12-31 23:59:21 1680

原创 在Flask中使用line_profiler分析代码性能

当使用Flask进行Web开发,发现接口响应较慢或者超时的时候,我们可以借助性能分析工具line_profiler来查看每行代码的执行时间,从而找到原因。

2023-11-12 19:03:33 689

原创 快速上手 Docker Swarm:构建分布式容器集群、轻松管理节点和服务

Docker Swarm 是 Docker 的内置编排工具,它允许将多个 Docker 主机组成一个集群,并以统一的方式管理和部署容器化应用程序。Swarm 提供了高可用性、伸缩性和容错能力,使得应用程序能够在集群中弹性地运行和扩展。

2023-09-30 19:29:59 597

原创 深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式

VSS是虚拟耗用内存大小,是进程可以访问的所有虚拟内存的总量,包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。RSS是比例驻留内存大小,包括进程独自占用的物理内存、比例分配和其他进程共享的内存(共享库内存会均分到各个共享进程)。

2023-07-29 22:12:21 14605

原创 Liunx umask命令

umask 是用来指定“新建文件或者目录的权限掩码”。r、w、x分别是4、2、1,要拿掉读权限就输入4,拿掉读写权限就输入6,以此类推。

2023-06-29 22:37:14 233

原创 记一次 TimescaleDB 性能优化

项目中使用TimescaleDB来存储时序数据,最近发现查询很慢,且对服务器资源消耗较大。通过查看官方文档,慢日志等方式,找到了一些可以优化的地方,包括索引优化、SQL优化、调整分区大小、删除过时的块、压缩。

2023-03-19 20:11:43 3792 2

原创 TimescaleDB 超表

超表(hypertable)是具有特殊功能的PostgreSQL表,可以很容易地处理时间序列数据。与它们交互就像与普通PostgreSQL表交互一样,但在幕后,超表会自动按时间将数据划分为块。

2023-03-07 22:12:07 3264

原创 MySQL 锁机制

MySQL通过MVCC和锁机制实现事务的隔离性。对于MVCC之前的文章介绍过了,今天来讲讲MySQL的锁。

2022-12-31 21:12:35 893

原创 MySQL RR级别下仍然会发生幻读和不可重复读

在MySQL MVCC详解一文中讲到,在InnoDB的RR级别中,MVCC解决了脏读,快照读的不可重复和幻读,但是当快照读和当前读同时使用时,仍然可能会发生不可重复读和幻读。下面就来讲这两个问题什么时候会发生以及如何解决。

2022-12-18 11:09:08 2088 2

原创 MySQL MVCC详解

MVCC是一种用来解决读写冲突的无锁并发控制的方法,可以提高数据库并发读写的性能。

2022-12-11 17:54:16 1110

原创 MySQL 事务

MySQL提供了许多支持事务的存储引擎,但 InnoDB 现在已经成为推荐使用的存储引擎。而且从 MySQL5.5 版本开始,默认的存储引擎就从 MyISAM 变成了 InnoDB。事务是一组SQL语句作为一个工作单元以原子方式进行处理。事务具有四个特性,分别是原子性、一致性、隔离性、持久性,这四个特性简称ACID特性。

2022-12-04 18:29:40 456

原创 使用GDB调试Docker容器中的Python进程

当一个Python程序运行停住或陷入死循环,遇到这种情况可以使用GDB命令attach到进程上,查看Python堆栈信息然后进行分析。但是当在Docker容器中运行Python程序时,因为Docker的seccomp禁用了系统ptrace,所以不能直接使用GDB调试,这时我们要借助nsenter工具进入容器命令空间再运行GDB调试。

2022-11-11 23:56:41 1118

原创 Flask源码分析(三):上下文的作用和实现原理

在了解上下文之前,先要弄清楚Local、LocalStack、LocalProxy这三个概念。......程序中的上下文代表了程序当下所运行的环境,存储了一些程序运行的信息。

2022-07-10 19:18:27 467

原创 Flask源码解析(二):Flask的工作原理

本文通过解析Flask0.1的源码,讲解一下Flask框架的主要工作原理,包括启动应用,请求处理,路由,异常处理。

2022-04-23 16:19:48 1515

原创 Flask源码解析(一):WSGI

要理解 Flask 的源码,必须有一定的 Python 基础,要熟悉 decorator、magic method、iterator、generator 的概念和用法。还有一点是必须理解 WSGI,下面就讲解一些和 WSGI 相关的概念以及用一些代码来帮助理解 WSGI。

2022-03-26 18:47:44 1295

原创 leetcode 330 Patching Array

原题链接:Patching Array - LeetCode题目Given a sorted integer array nums and an integer n, add/patch elements to the array such that any number in the range [1, n] inclusive can be formed by the sum of some elements in the array.Return the minimum number of pa

2022-03-17 22:26:19 336

原创 Docker Registry定期清理

背景项目在持续部署过程中会push镜像到registry中,随着时间推移,registry中会保存大量镜像,造成磁盘空间不足,所以需要定期清理历史镜像,保证registry服务正常运行。删除镜像流程registry默认是不允许删除镜像的,需要修改/etc/docker/registry/config.yml配置文件来开启删除操作,如下:version: 0.1log: fields: service: registrystorage: delete: en

2022-02-07 18:51:25 4785

原创 在PyCharm中调试celery、gunicorn

如何在PyCharm中调试celery程序和以gevent模式运行的gunicorn程序。

2022-01-17 22:33:56 3411 1

原创 Python中的getattr、__getattr__、__getattribute__、__get__

getattrgetattr(object, name[, default])是Python的内置函数之一,它的作用是获取对象的属性。示例>>> class Foo:... def __init__(self, x):... self.x = x...>>> f = Foo(10)>>> getattr(f, 'x')10>>> f.x10>>> getattr(f, '

2021-12-26 22:05:41 731

原创 su命令用法以及和su -的区别

su为switch user,用于切换用户。

2021-12-21 22:47:34 631

原创 理解Elapsed Time、CPU Time、Wait Time

Elapsed Time表示程序运行的持续时间。

2021-12-18 19:50:37 18446

原创 Oracle中的Schema和表空间

SchemaSchema是数据库对象的集合。Schema里面包含了各种对象如tables,views,sequences,stored procedures,synonyms,indexes,clusters,database links。用户与Schema的关系一个用户对应一个缺省Schema,该Schema名和用户名相同。操作对象时,如果不指定Schema,则会使用当前用户缺省的Schema。比如当前用户是scott的话,可以直接用select * from emp来访问scott.emp。表

2021-12-13 23:18:31 4980

原创 MySQL的concat、concat_ws、group_concat函数

CONCAT()函数将多个字符串连接成一个字符串。如果有任何一个参数为null,则返回值为null。

2021-12-12 21:05:53 387

原创 理解服务器负载

什么是Load Average在UNIX系统中,系统负载Load是对当前CPU工作量的度量,表示当前正在运行的进程数加上等待(排队)运行的进程数之和,也被称为运行队列长度。Load Average 表示一段时间 (1 分钟、5分钟、15分钟) 内的平均 Load 。

2021-12-12 14:47:32 1141

原创 leetcode 96 Unique Binary Search Trees

原题链接:Unique Binary Search Trees - LeetCode题目Given an integer n, return *the number of structurally unique **BST’*s (binary search trees) which has exactly n nodes of unique values from 1 to n.Example 1:Input: n = 3Output: 5Example 2:Input: n = 1Ou

2021-12-11 18:42:16 232

原创 Linux安装Oracle Instant Client

下载官网下载地址:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html本文以18.5为例,下载地址为:https://download.oracle.com/otn_software/linux/instantclient/185000/oracle-instantclient18.5-basic-18.5.0.0.0-3.x86_64.rpm安装yum localinstall

2021-12-01 23:15:37 989

原创 CentOS7离线安装docker、docker-compose

安装docker官方参考文档:https://docs.docker.com/engine/install/binaries/下载下载地址:https://download.docker.com/linux/static/stable/x86_64/解压tar -xvf docker-19.03.0.tgz将解压出来的docker文件内容移动到 /usr/bin/ 目录下cp docker/* /usr/bin/将docker注册为servicevi /etc/systemd/syst

2021-11-27 18:17:43 753

原创 leetcode 11 Container With Most Water

原题链接:Container With Most Water - LeetCode题目Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of the line i is at (i, ai) and (i, 0). Find two lines,

2021-09-04 23:13:53 109

原创 git fetch工作原理

背景相信大家都知道git pull命令相当于git fetch加git merge。那么直接使用git pull和分开使用有什么区别呢?要解答这个问题首先要想了解git fetch的工作原理是什么样的。git fetch的工作原理先讲一下什么是远程跟踪分支。远程跟踪分支以 <remote>/<branch> 的形式命名,它们是远程分支状态的本地引用(指针)。当使用 git fetch 命令和远程仓库进行通信时,Git会移动远程跟踪分支以精确反映远程仓库的状态。即远程跟踪分支的

2021-09-04 23:04:53 1144

原创 动态规划的两种实现形式

动态规划动态规划与分治方法相似,都是通过组合子问题的解来求解原问题。动态规划是分治方法的特例,应用于子问题重叠的情况。在这种情况下,分治算法会反复求解这些重叠的子问题。而动态规划算法对每个子问题只求解一次,将其解保存下来,而无需每次都计算。动态规划的实现有两种形式:递推形式和递归形式。

2021-07-11 21:57:37 1523

原创 sed替换内容中有斜杠该怎么处理

问题当我想替换文件中的路径时,使用转义符号(\)会比较麻烦且可读性很差。比如要将abc.sh中的/a/b/c替换成/d/e/f,命令如下:sed -i 's/\/a\/b\/c/\/d\/e\/f/g'解决分隔符由/换成#(其他字符也可以,只要跟在s命令后面即可):sed -i 's#/a/b/c#/d/e/f#g'...

2021-06-20 22:01:44 8014

空空如也

空空如也

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

TA关注的人

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