- 博客(68)
- 收藏
- 关注
原创 Python设计模式 - 适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,它用于将一个类的接口转换为客户端所期待的另一个接口。注:在适配器模式定义中所提及的接口是指广义的接口,它可以表示一个方法或者一组方法的集合。
2025-03-22 18:24:22
1056
原创 Python设计模式 - 建造者模式
建造者模式是一种创建型设计模式,主要用于构建包含多个组成部分的复杂对象。它将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象表示。
2025-03-10 20:25:29
966
原创 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
原创 在docker容器中使用gdb调试python3.11的进程
docker容器默认情况不允许使用系统ptrace,会导致gdb使用报错,运行容器时增加--cap-add sys_ptrace参数来关闭ptrace限制
2024-06-09 23:08:19
810
1
原创 浅析 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 RR级别下仍然会发生幻读和不可重复读
在MySQL MVCC详解一文中讲到,在InnoDB的RR级别中,MVCC解决了脏读,快照读的不可重复和幻读,但是当快照读和当前读同时使用时,仍然可能会发生不可重复读和幻读。下面就来讲这两个问题什么时候会发生以及如何解决。
2022-12-18 11:09:08
2088
2
原创 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
原创 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关注的人