- 博客(172)
- 收藏
- 关注
原创 Python中的unittest库
是Python标准库中自带的单元测试框架,灵感来源于Java的JUnit。它提供了一套完整的测试结构,包括。若有错误与不足请指出,关注DPT一起进步吧!等功能,是Python开发者必备的测试工具。原生不支持参数化,但可通过。
2025-03-15 17:06:14
1034
原创 测试必会库—— Pytest
答:如 pytest-cov 用于生成覆盖率报告,pytest-xdist 实现并行测试加速,pytest-mock 则便于模拟依赖,这些插件在实际项目中极大地提高了测试效率和质量。答:Pytest 语法简洁,断言机制直观,且 Fixture 机制能高效管理测试资源,再加上丰富的插件支持,使其在复杂项目中更具优势。答:通过创建 conftest.py 文件,可以集中管理多个测试模块共享的 Fixture,避免重复定义,提高整体测试代码的整洁性。通过并行运行,多个测试可以同时执行,显著缩短总测试时间。
2025-03-15 15:45:44
859
原创 Zap:Go 的高性能日志库
/ 配置日志级别、输出目标、时间格式等config.Level = zap.NewAtomicLevelAt(zap.DebugLevel) // 启用 Debug 级别config.OutputPaths = []string{"stdout", "/var/log/app.log"} // 输出到控制台和文件config.EncoderConfig.TimeKey = "timestamp" // 自定义时间字段名。
2025-02-24 22:32:39
872
原创 Python 动态获取参数:sys.argv 与 argparse
sys.argv适用于简单参数获取,但需手动解析。argparse更强大,支持类型转换、默认值、可选参数,且自动生成帮助信息。推荐使用argparse,让代码更健壮、可读性更强!若有错误与不足请指出,关注DPT一起进步吧!!!
2025-02-24 14:36:17
514
原创 通过Signal库实现 Python 程序优雅退出
当程序运行时,它会等待操作系统发来的终止信号(如 SIGINT(ctrl+c)、SIGTERM(kill)),可以通> 过 signal 模块捕获这些信号,在捕获信号后,执行如关闭文件、断开网络连接、保存状态等清理工> 作。完成清理后,程序正常退出。若有错误与不足请指出,关注DPT一起进步吧!布尔值通知所有执行单元。
2025-02-24 12:14:50
310
原创 grpc的四种数据流(go代码实现)
这次讲讲 grpc 中的 stream,srteam 顾名思义 就是 一种 流,可以源源不断的 推送 数据,很适合 传输一些大数据,或者 服务端 和 客户端 长时间 数据交互,比如 客户端 可以向 服务端 订阅 一个数据,服务端 就 可以利用 stream ,源源不断地 推送数据。若有错误与不足请指出,关注DPT一起进步吧!
2025-02-09 11:37:25
297
原创 Python 实现 gRPC 与 原始 RPC 的对比:理解 RPC 的基本功能
之间像调用本地函数一样执行远程函数的技术。本地进程(客户端)调用远程服务器上的方法,服务器执行方法后将结果返回给客户端。是一项关键技术,它允许不同计算机之间像调用本地函数一样进行通信。若有错误与不足请指出,关注DPT一起进步吧!来分析 RPC 的基本功能。进行序列化,并自动生成。来模拟 RPC 机制。接下来,我们分别实现。
2025-02-07 16:55:35
1018
原创 一个RPC框架应该解决哪些问题?
简化远程调用:让开发者像调用本地方法一样轻松进行远程调用。高效的网络通信:通过高效的序列化和传输协议,优化性能和可靠性。服务发现与负载均衡:确保系统扩展时服务的自动发现与负载均衡。容错与错误处理:通过重试、熔断等机制应对网络问题和服务故障。安全性:保障数据传输的安全性和服务的身份验证。版本兼容性:支持接口的向后兼容和版本管理。监控与追踪:提供对 RPC 调用的实时监控和故障追踪。若有错误与不足请指出,关注DPT一起进步吧!!!
2025-02-06 13:41:34
541
原创 Go 中 defer 的机制
是 Go 语言中用于延迟执行函数调用的关键字,常用于资源清理(如关闭文件、释放锁)和异常处理。但其行为机制存在一些隐蔽的细节,稍有不慎可能导致难以察觉的 Bug。本文通过多个直观示例,深入剖析。中修改返回值的行为取决于返回值的定义方式(值返回 vs 指针返回)。若有错误与不足请指出,关注DPT一起进步吧!函数若使用外部变量(闭包),会引用变量的。,类似于栈的“后进先出”原则。,而非执行时动态获取。
2025-02-02 18:32:07
750
原创 Python 中 `finally` 的执行时机与 `return` 的微妙关系
执行顺序try/except → 暂存返回值 → 执行 finally → 返回暂存值。返回值规则finally中的修改直接影响返回值(返回的是引用)。finally中的修改不影响返回值(返回的是副本)。避坑指南禁止在finally中使用return,除非有明确需求。若需返回可变对象,优先返回其副本(如在finally中仅处理资源释放,避免业务逻辑。若有错误与不足请指出,关注DPT一起进步吧!!!
2025-02-02 17:41:56
735
原创 Python 类型注解
可以使用编写运行时类型检查装饰器。if param!raise TypeError(f"参数= 'return' and not isinstance(arg , expected_type) : raise TypeError(f"参数 {param } 应该是 {expected_type } , 但接收到 {
2025-01-29 17:59:50
1432
原创 Python中的海象运算符(:=):让代码更简洁高效
海象运算符(:=)是Python 3.8版本引入的新特性,因其符号:=形似海象的眼睛和牙齿而得名。它的主要功能是在表达式中同时完成赋值和返回值操作,简化需要重复计算的场景。为什么要用它?传统写法中,若需要在条件判断或循环中使用某个表达式的值,可能需要先计算并赋值,再使用变量。而海象运算符允许将两步合并为一步,减少代码冗余。
2025-01-29 17:17:53
320
原创 分布式事务有哪些常见的实现方案
2PC,两阶段提交,将事务的提交过程分为资源准备和资源提交两个阶段,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源。由事务协调者询问通知各个事务参与者,是否准备好了执行事务,具体流程图如下:① 协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复② 各参与者执行本地事务操作,将 undo 和 redo 信息记入事务日志中(但不提交事务)③ 如参与者执行成功,给协调者反馈同意,否则反馈中止,表示事务不可以执行协
2025-01-25 23:21:42
649
原创 哨兵机制:redis主库挂了如何不间断服务?
这节课,我提到,通过哨兵机制,可以实现主从库的自动切换,这是实现服务不间断的关键支撑,同时,我也提到了主从库切换是需要一定时间的。一旦哨兵判断主库下线了,就会开始选择新主库,并让从库和新主库进行数据同步,这个过程本身就会有开销,例如,哨兵要花时间选出新主库,从库也需要花时间和新主库同步。上节课,我们学习了主从库集群模式。在这个模式下,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,进行相关的操作,但是如果主库发生故障了,那就直接会影响到从库的同步,因为从库没有相应的主库可以进行数据复制操作了。
2025-01-16 11:29:01
966
原创 数据同步:redis主从库如何实现数据一致?
你可以设想一下,如果在上图中,不管是主库还是从库,都能接收客户端的写操作,那么,一个直接的问题就是:如果客户端对同一个数据(例如 k1)前后修改了三次,每一次的修改请求都发送到不同的实例上,在不同的实例上执行,那么,这个数据在这三个实例上的副本就不一致了(分别是 v1、v2 和 v3)。那么,一旦主从库完成了全量复制,它们之间就会一直维护一个网络连接,主库会通过这个连接将后续陆续收到的命令操作再同步给从库,这个过程也称为基于长连接的命令传播,可以避免频繁建立连接的开销。否则,新写的命令就会覆盖掉旧操作了。
2025-01-16 11:07:41
1450
1
原创 内存快照:宕机后Redis如何实现快速恢复?
那么,有什么其他好方法吗?而且,有的时候,键值对非常小,比如只有 32 字节,而记录它被修改的元数据信息,可能就需要 8 字节,这样的画,为了“记住”修改,引入的额外空间开销比较大。到这里,你可以发现,虽然跟 AOF 相比,快照的恢复速度快,但是,快照的频率不好把握,如果频率太低,两次快照间一旦宕机,就可能有比较多的数据丢失。Redis 的数据都在内存中,为了提供所有数据的可靠性保证,它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中,这就类似于给 100 个人拍合影,把每一个人都拍进照片里。
2025-01-15 17:01:07
1187
原创 AOF日志:宕机了Redis如何避免数据丢失?
这样一来,一个键值对在重写日志中只用一条命令就行了,而且,在日志恢复时,只用执行这条命令,就可以直接完成这个键值对的写入了。三是,如果发生宕机,AOF 中记录的命令要一个个被重新执行,用于故障恢复,如果日志文件太大,整个恢复过程就会非常缓慢,这就会影响到 Redis 的正常使用。当我们对一个列表先后做了 6 次修改操作后,列表的最后状态是[“D”, “C”, “N”],此时,只用 LPUSH u:list “N”, “C”, “D”这一条命令就能实现该数据的恢复,这就节省了五条命令的空间。
2025-01-15 16:29:49
1190
原创 高性能IO模型:为什么单线程Redis能那么快?
因为这个机制的实现有很多种,既有基于 Linux 系统下的 select 和 epoll 实现,也有基于 FreeBSD 的 kqueue 实现,以及基于 Solaris 的 evport 实现,这样,你可以根据 Redis 实际运行的操作系统,选择相应的多路复用实现。并发访问控制一直是多线程开发中的一个难点问题,如果没有精细的设计,比如说,只是简单地采用一个粗粒度互斥锁,就会出现不理想的结果:即使增加了线程,大部分线程也在等待获取访问共享资源的互斥锁,并行变串行,系统吞吐率并没有随着线程的增加而增加。
2025-01-15 15:50:41
736
原创 redis底层数据结构——快速的Redis有哪些慢操作?
第二,范围操作,是指集合类型中的遍历操作,可以返回集合中的所有数据,比如 Hash 类型的 HGETALL 和 Set 类型的 SMEMBERS,或者返回一个范围内的部分数据,比如 List 类型的 LRANGE 和 ZSet 类型的 ZRANGE。这样一来,对于 List 类型的 LPOP、RPOP、LPUSH、RPUSH 这四个操作来说,它们是在列表的头尾增删元素,这就可以通过偏移量直接定位,所以它们的复杂度也只有 O(1),可以实现快速操作。而这里,我们说的数据结构,是要去看看它们的底层实现。
2025-01-15 15:06:09
857
原创 Learning Git Branching
想当年我用 Git 就会 add .,clone,push,pull,commit 几个命令,其他的命令完全不会,Git 就是一个下载器,Github 就是个资源网站加免费图床,命令能不能达成目的都是靠运气。所有 Git 分支都被可视化了,你只要在左侧的命令行输入 Git 命令,分支会进行相应的变化,只要达成任务目标,你就过关啦!总之,这个教程很适合初学和进阶,如果你觉得自己对 Git 的掌握还不太好,用 Git 命令还是有运气成分,就可以玩玩这个教程,相信能够让你更熟练地使用 Git。
2025-01-13 16:20:17
371
原创 redis——无锁的原子操作Lua
否则,如果客户端使用多线程访问,访问次数初始值为 0,第一个线程执行了 INCR(ip) 操作后,第二个线程紧接着也执行了 INCR(ip),此时,ip 对应的访问次数就被增加到了 2,我们就无法再对这个 ip 设置过期时间了。但是,单命令原子操作的适用范围较小,并不是所有的 RMW 操作都能转变成单命令的原子操作(例如 INCR/DECR 命令只能在读取数据后做原子增减),当我们需要对读取的数据做更多判断,或者是我们对数据的修改不是简单的增减时,单命令操作就不适用了。
2025-01-13 16:09:59
814
原创 pyhton函数中的默认参数只会在函数定义时被创建一次
注意:默认参数 在函数定义时只会被创建一次,后续调用中如果没有显式传递 参数,会共享同一个列表对象。默认参数在函数定义时就被创建,而且只创建一次函数 接受两个参数::要添加到列表中的值。:默认参数,默认值为一个空列表 。注意:默认参数 在函数定义时只会被创建一次,后续调用中如果没有显式传递 参数,会共享同一个列表对象。2. 执行过程(1) 调用 ,没有传递 参数,因此使用默认的空列表 。将 添加到默认列表中。返回的列表为 。 的值为 。(2) 调用 ,
2025-01-05 22:32:27
391
原创 Pandas08
首先,什么是生命周期模型呢?其实本质上,就是用户的一种分层、分类的方法论。是按照用户在产品中的阶段进行的划分,反映了用户从接触产品到离开产品的整个过程。从技术层面,可以理解成一个用户标签,标签值有新用户、成长期用户、流失用户等。用户生命周期的概念,在用户增长系统中会用的比较多,后面会针对用户生命周期的应用、落地进行详细分享。这里进行概要的阐述。引入期:用户刚刚开始使用产品或者服务,初步建立起品牌的认知成长期:用户对产品服务开始逐渐信任,使用频次、深度不断加强。
2024-12-28 21:13:37
944
原创 Pandas07
TGI(Target Group Index,目标群体指数)用于反映目标群体在特定研究范围内强势或者弱势的程度。我们可以结合TGI公式来理解:TGI = 目标群体中具有某一特征的群体所占比例/总体中具有相同特征的群体所占比例 × 100当前案例要解决的问题, 找到合适的5个城市做新产品的首发城市, 产品的特点高利润, 高品质, 低性价比计算步骤:① 高客单价 定义 什么算是高客单价② TGI 高客单价 城市计算每个城市高客单价用户的占比计算总体的高客单价用户占比。
2024-12-28 21:08:51
681
原创 Pandas06
产品设计, 功能, 算法进行调整的时候, 为了避免错误的调整损害用户体验, 往往在正式上线之前都要经历(大厂的主要产品)AB测试AB测试的目的, 让一小部分用户作为所有用户的代表来体验新的设计/功能/算法如何确定参与实验的人数, 是AB测试的关键, 参与实验的人数太少, 实验结果可信度太低, 参与实验人数过多, 设计如果不尽人意, 影响会变大AB测试的流程明确KPI 当前的调整的目的是啥?比如 通过调整头图, 提升当前产品的点击率/转化率当前的转化率是多少 12%目标转化率是多少 15%
2024-12-28 21:06:20
915
原创 Pandas05
团队数据挖掘团队, 后面的业务做机器学习或者深度学习建模, 我们做数据处理的业务, 我们写的代码作为整个过程的一个环节, 这样的场景, 整个的环节都是Python技术栈, 这个时候, 用pandas做数据处理也是很常见的。开发的过程, 梳理思路可以再Notebook里进行, 最后把写好的逻辑, 保存到.py文件, 后续再有相同的需求, 可以直接运行.py文件。处理的思路, 多张Excel表中, 每张表的处理逻辑相同,先把一张表处理的逻辑梳理清楚, 再循环做其它的表。
2024-12-28 21:04:26
946
原创 Pandas04
作用类似于散点图, 可以看两个连续性变量的关系, 通过蜂巢图可以表示出数据的分布情况, 颜色较深的区域分布的数据量比较大, 颜色浅的区域分布的数据量比较小。在6~8分, 收入在1一个亿一下, 的区域, 分布了很多数据, 只通过散点图, 无法反应数据量的分布情况, 此时可以再绘制一个蜂巢图。anscombe 一共四份, 通过describe()方法, 发现经常查看的几个统计量, 大小差不多, 似乎数据的分布是差不多的。画图的时候, 默认是使用index作为X轴的坐标, 也可以指定, x,y。
2024-12-28 20:59:29
1116
原创 Pandas03
当常规的聚合函数不能满足业务需求的时候, 需要自己来写聚合的逻辑, 就是自定义聚合函数举例子, 按照区域进行分组, 计算不同区域的平均房租 计算价格均值的时候, 需要过滤掉价格低于3000的print(s)# 每一组选出价格>3000的 对这部分求平均## 自定义聚合函数df.groupby(['区域'])['价格'].agg(func)自定义聚合函数, 一定要有返回值, 返回的是一个值, 不能是多个值分组聚合, 每组应该只有一个聚合结果。
2024-12-28 20:52:14
725
原创 Pandas02
先定义一个方法(函数) 这个方法要有返回值print('调用了func方法====',area_str)if area_str =='广安门租房':return '西城租房'elif area_str =='天通苑租房':return '昌平租房'else:通过series.apply(方法对象)temp_df['区域'].apply(func)
2024-12-28 20:43:53
926
原创 Pandas01
Pandas环境搭建起来 AnacondaSeriesDataFrame增加 删除 修改 查询数据修改表结构 常用的方法日期时间类型, 分组聚合, 表连接数据可视化直方图 折线图 柱状图 散点图 饼图 箱线图 热力图…业务常见指标数据分析工作基本技能取数, 做报表专题/专项分析数据分析的思维 分群, 下钻, 漏斗…数据分析模型 规则模型指标异常波动分析报告能力AB测试 (中 大公司)
2024-12-28 20:39:56
681
原创 任务调度利器:Celery
Celery是一个专注于实时处理和任务调度的分布式任务队列。所谓任务就是消息,消息中的有效载荷中包含要执行任务需要的全部数据。Celery是用Python编写的,但该协议可以在任何语言实现。它也可以与其他语言通过webhooks实现。Celery建议的消息队列是RabbitMQ,但提供有限支持Redis, Beanstalk, MongoDB, CouchDB, 和数据库(使用SQLAlchemy的或Django的 ORM)。
2024-12-27 10:16:46
976
1
原创 常用的定时任务执行方式
Celery:适用于复杂的任务队列和分布式任务调度。:适合轻量级定时任务调度,灵活性强。Cron:适合简单的、系统级的定时任务。Django Q:如果使用 Django 开发应用,Django Q 提供了简单的定时任务功能。:适用于 Kubernetes 容器化环境中的定时任务。你可以根据自己的项目需求和架构,选择最适合的定时任务工具。
2024-12-27 09:37:37
946
原创 Elasticsearch 数据存储底层机制详解
Elasticsearch 的底层存储机制依赖。若有错误与不足请指出,关注DPT一起进步吧!来实现数据的组织和管理。两个方面来详细说明。
2024-12-26 16:11:44
1091
原创 Hive存储与压缩对比(强烈推荐)
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。大数据项目 => ODS、RPT层喜欢采用TEXTFILE,如果引入了Sqoop工具,则两端也可以采用ORC格式。
2024-12-22 16:33:38
763
原创 ZooKeeper分布式协调工具
ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。ZooKeeper结构: 采用树形层次结构,ZooKeeper树中的每个节点被称为—Znode。且树中的每个节点可以拥有子节点。
2024-12-18 20:04:17
1240
原创 zookepper安装部署
以上操作完成后,把/export/server同步到其他所有的机器上,针对其他的两台机器也要进行环境变量配置。查看节点状态,到底是leader领导者角色,还是follower追随者角色。问题:如果配置完成后,如何查看环境变量是否配置成功。若有错误与不足请指出,关注DPT一起进步吧!
2024-12-18 19:58:06
497
原创 这些MapReduce&YARN高阶原理你都知道吗?
dev的maximum-capacity属性被设置成了75%,所以即使prod队列完全空闲dev也不会占用全部集群资源,也就是说,prod队列仍有25%的可用资源用来应急。逻辑层面引入角色:AppMaster角色(任务管理者),随任务而来随任务而走,运行在NodeManager。在这个配置中,在root队列下面定义了两个子队列prod和dev,分别占40%和60%的容量。下面是一个简单的Capacity调度器的配置文件,文件名为。若有错误与不足请指出,关注DPT一起进步吧!参数进行配置的,默认采用。
2024-12-16 22:34:54
1040
原创 Hive高级查询
不论是Hive中的JSON函数还是自带的JSONSerde,都可以实现对于JSON数据的解析,工作中一般根据数据格式以及对应的需求来实现解析。如果数据中每一行只有个别字段是JSON格式字符串,就可以使用JSON函数来实现处理,但是如果数据加载的文件整体就是JSON文件,每一行数据就是一个JSON数据,那么建议直接使用JSONSerde来实现处理最为方便。窗口函数如果在MySQL中使用,必须把MySQL版本升级到8.0以上!
2024-12-15 14:24:06
1040
go基础知识资料.zip
2025-02-06
企业内部整理-ClickHouse数据库特性及其Python实现方法
2024-12-27
Python Celery分布式异步任务队列详解与应用
2024-12-27
某马最新大数据面试总结笔记
2024-12-15
大数据面试必备-Spark、Hive、HDFS、YARN和Kafka面试知识点总结
2024-12-15
某马24年最新-Prometheus+Grafana构建企业级监控系统-详细教程
2024-12-03
某马24年最新-Ansible配置自动化文档
2024-12-03
Docker 技术及其在企业级前后端分离项目中的应用实战
2024-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人