四、数据仓库详细介绍(规范)

大家好,这是数据仓库系列的第三个话题,排序在架构之后、建模之前。为什么会提的这么靠前呢?

因为规范约束的是数仓建设的全流程,以及后续的迭代和运维。事实上,数仓规范文档,应该随着架构设计文档,在数仓开发启动之前,分发给所有相关人员,且是所有人都必须严格遵守的约定。

     有人会问,没有规范直接开干,行吗?当然可以,在一些临时的短期项目,为了快速出活尽快看到效果,没有必要强制执行规范而影响了效率。但从个人专业素养的角度看,即使项目没有规范,该有的约定俗成的好习惯还是得有的,比如缩进、换行、空行、注释......

网上搜索,大家可以搜到很多相关文章,但碎片化严重。本文争取说透数仓规范,让大家不仅能了解到数仓规范的目的、内容、边界,更会给大家介绍相关规范如何在企业落地。

      欢迎大家参考此文,结合自己公司的实际情况,构建、完善自己的数仓规范体系。然后大家多多交流,共同进步。

01

为什么要有规范?

俗话说的好,无规矩不成方圆,没有规范岂不乱套了? 个人觉得,规范是为了解决团体作战中的效率和协同问题,是对最终交付质量的有力保证。

大家工作中有没有遇到类似的问题?

  • 接到了一个需求,不知道该从那张表出数,表A貌似可以,表B好像也行。问了同事甲,他说他每次都是从C表出的。对着三张表探索了好久,发现谁跟谁都对不上,算了吧,我从源头再算一次吧,结果又变出来一张表D。

  • 数据库里几千张表,好像我用到的也就那么十几张,其它的都是干啥用的呢,问了一圈没有人知道,删掉吧?更没有人敢动。

  • 有个流程报错了,领导让我去看一下,点进去后,屎一样的代码完全看不懂,另外,找了好久死活找不到上游依赖。

  • 有位同事要离职,他负责的那部分内容,换了一个人接手,累死累活好多天依然捋不出个所以然,一气之下又走了一个人。

由于以上种种问题,造成数仓团队的整体开发效率、产出质量、工作幸福感、数仓维护成本等等越来越差。随着人员流动,通常受累的往往是那些任劳任怨、对公司忠诚的员工。

相信做过数据开发的人,多多少少都会有过上边提到的部分苦恼。我觉得问题的根源通常在于没有规范或者规范没有得到贯彻。大家有时候为了按时完成业务侧的需求,走些捷径也是可以理解的,但是欠下的技术债应该尽早还上,并且组织不应该苛责员工,这个锅应该领导来背。领导重视大家就都重视,领导不重视,岂不各个放飞自我了?

数据仓库,是我们数据工程师的无形产品。数据规范是数仓体系建设的"语言",是数据使用的说明书和翻译官,同时也是数据质量的保驾护航者。为了数据体系能够长久健康的发展,数仓管理,应该从人治逐步转变到制度化、规范化、工具化的道路上了来。

02

  规范该怎么落地?

  1. 规范制定

从 0 到 1,从无到有,这个环节应该有 Leader 或架构师,充分考虑公司实际情况,参考行业标准或约定俗成的规范,综合统一制定。

     也可以将规范拆分后交由各个部分核心开发人员编写, Leader 或架构师统一整合。比如我们之前的团队就是,模型设计师负责模型设计规范,ETL 工程师负责 ETL 开发规范,BI 开发人员制定前端开发规范,部署上线规范直接采用项目上已有的即可。

     总体上,初稿应该尽量保证规范的完整性和各个部分间的兼容性。

  1. 规范讨论

初稿完成后,难免有考虑不周的情况,这时候最好有 Leader  牵头,组织部分核心成员(人数不易太多,三五个即可。人多容易造成混乱、决策困难、没有人提意见造成 Leader 一言堂等等问题。)进一步完善各个细节,纠正初稿的不足。

多人共同完善的规范,理论上来讲不会有什么大问题了。

  1. 规范推行

定稿后,规范已经具备了全面推广的条件,可以下发所有团队成员。

    

  • 可以通过群聊天,也可以通过正式回邮件的方式,当然为了引起大家的重视,可以专门组会宣讲。

  • 分发宣讲后进入执行阶段,所有人必须严格遵守,如有违犯给予警告,严重的给予惩罚,屡劝不改的取消年终调级调薪等。

     为了确保规范的贯彻落实,除了通过以上两点引起全员重视外,还需要组织、制度、流程上的多方面保障。

  • 数据模型应该有统一归口,比如数据架构师,架构师定期检查模型是否合理合规。

  • 组织数据开发人员,定期 Review 每个人的代码,但不必针对个人更不要上纲上线,目的是通过对比和讨论让大家明白什么样的才是好代码,最终使“写好代码”成为基本素养。没有条件的话就有 Leader 负责定期检查,有问题的私下指出来帮助组员逐渐规范。

  • 入职新人,熟读规范后,还应该安排专人指导,是合规性检查的重点关注对象。

讲到这里,大家有没有看出来一个问题?

     规范的执行监督,上边提到的,更多是依靠制度流程以及相关人的自觉性,制度流程又依赖于人。这会带来如下几个问题:

  • 短期坚持还好,但长期的专注很难。

  • 有时候人忙起来了,快速产出和规范该选哪个?代码 Review 还要不要做?新建的表要不要找数据架构师审核?

  • 数据建模最好是有专门的人或者小团队去做,其他人使用,这往往会影响整体效率,所以通常都是谁用谁建,但撒出去后再想靠人去检查合规性,真的就太难了。

有条件的最好引入相应的工具加强监管。

      比如,我们有指标体系元数据、有词根库元数据、有建表的元数据、有 ETL 流程的元数据等等。

     那我们是否可以开发部分报表或其它页面,通过 UI 辅助人去检查,或者通过校验元数据的方法去监管(比如备注是否为空、字段或表命名里的词根是否都在词根库里存在、表或页面等用到的指标是否都存在于指标体系、数据血缘中是否存在闭环或者孤立的节点)。

哈哈,讲了这么多,了解过数据治理的读者,会不会感觉很熟悉?数仓建设的一开始就需要考虑这些的,最好的管理在于治未病。

  1. 规范完善

发行稿,从大面上应该不会有啥问题,但细节上可能会有考虑不周的情况,在宣讲阶段、执行阶段遇到问题阻碍的时候,应该根据实际情况对规范做出调整,唯有经过实践检验才能愈发完善,相信经过一段时间的持续实践,规范会成为组织文化的一部分,进而降低沟通成本、提高开发效率、保证交付质量,从而实现团队和个人的双赢。

 如果能完全按照上篇中的流程落地,就能够保障数仓建设、迭代的整体质量。

      在实际操作中往往会事不由人,但是基于规范的重要性,有些事情我们还是必须要要去做的。

  • 如果你是管理者,就要定期的抽查团队成员的工作产出、发现问题及时更正、对入职新人前期的重点关注等等。

  • 如果你是一线开发,应该对自己有所约束。如果团队整体混乱,管理者对规范又不太重视,那么调整心态、适应环境就好,切不可因此与同事发生冲突,圈子很小大家以和为贵嘛。 


      在上篇内容中有说过如今网络上流传的数仓规范,碎片化严重。

      本篇,我会根据过往实践经验,结合网络文章,尽量给大家提供一套完整的规范范本,供大家学习参考。   

01

数仓规范有哪些?

      为了让大家了解到数仓规范全貌,特意花大力气整理出以上分类。欢迎大家推广普及运用。由于只是一家之言,大家如有不同的见解、更好的方案或者有可以再补充的,欢迎拉到文章底部,加我微信,大家共同研究。

      

      这里,我把数仓规范,一共分为四大类:设计规范、流程规范、质量管理规范、安全规范。

      

  • 设计规范,又划分为四部分:数据模型设计、命名规范、指标体系设计、词根库。

  • 流程规范,主要是从数仓管理的角度,对数仓场景下的各种流程进行约束。核心流程一共提炼出来五类:需求提交、模型设计、ETL开发、前端开发、上线流程。

  • 质量管控规范,之所以单独列出来,是因为数据质量,跟模型设计一样,对数仓建设的成败关系极大。试想下,一个数据质量都无法保证的数据仓库,有谁会用?  数据质量规范,主要是从数据流动的角度分为三类:源端管控、数仓管理、应用管控。

  • 安全规范,随着国家、社会、企业对数据的越来越重视,另一方面随着互联网的普及使得个人隐私变的越来越难以保证,数据泄露时有发生。数据安全对于数据仓库的重要程度急速提升,所以安全规范被单列了出来。从大的层面上安全规范分为三类:网络安全、账号安全、数据安全。

      

02

  设计规范

数据模型设计

横向分层

  • 说明

  • 分层设计是数据架构设计的产出之一,在模型设计环节做为强制规范遵守。

  • 分层规范

  • ODS

  • 贴源层,原始数据不做变化或者仅做最简单的补全后存入。

  • 数据域划分,依据是数据源。

  • DWD

  • 对数据源做清洗、转换、补全、编码转换后加载到明细数据层。

  • 数据域划分,依据参考下边的纵向分域。

  • DWS

  • 汇总数据层+主题宽表。

  • 数据域划分,依据参考下边的纵向分域。

  • ADS

  • 应用层,面向最终应用。

  • 主题域划分,依据是最终应用。生命周期也与应用同步。

  • 层次调用规范

  • 禁止反向调用

  • ODS 只能被 DWD 调用。

  • DWD 可以被 DWS 和 ADS 调用。

  • DWS 只能被 ADS 调用。

  • 数据应用可以调用 DWD、DWS、ADS,但建议优先考虑使用汇总度高的数据。

  • ODS->DWD->DWS>ADS

  • ODS->DWD->ADS

纵向分域

  • 定义

  • 主题域通常是联系较为紧密的数据主题的集合,方便寻找和使用数据。

  • 基本原则

  • 高内聚、低耦合。

  • 数量不能太多。建议不超过十个。

  • 必须保持稳定。既能涵盖当 前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中或扩展新的数据域。

  • 需要结合团队和业务的实际情况,比如业务是否稳定、团队成员建模水平等。

  • 适度的抽象。太低不好适应变化,太高不易于理解使用。

  • 分类

  • 数据/业务主题域

  • 依据业务流程划分,实现相对容易。

  • 分析主体域

  • 面向分析场景,实现较难,对业务理解、抽象能力等要求高。

  • 划分依据

  • 按照业务或业务过程划分:比如一个靠销售广告位置的门户网站主题域可能会有广告域,客户域等,而广告域可能就会有广告的库存,销售分析、内部投放分析等主题。

  • 根据需求方划分:比如需求方为财务部,就可以设定对应的财务主题域,而财务主题域里面可能就会有员工工资分析,投资回报比分析等主题。

  • 按照功能或应用划分:比如微信中的朋友圈数据域、群聊数据域等,而朋友圈数据域可能就会有用户动态信息主题、广告主题等。

  • 按照部门划分:比如可能会有运营域、技术域等,运营域中可能会有工资支出分析、活动宣传效果分析等主题。

基本原则

  • 高内聚和低耦合

  • 核心模型与扩展模型分离

  • 公共处理逻辑下沉及单一

  • 成本与性能平衡

  • 数据可回滚

  • 一致性

  • 命名清晰、可理解

附加字段

  • 维表:创建时间、更新时间

  • 事实表:ETL 日期、更新时间

其它要求

  • 表、字段的备注信息,必须言简意赅,在描述清楚的前提下尽量简洁。

  • 字段类型的约束:比如字符串用 String,数值用 Int,年月日都用 String 比如 yyyyMMdd 等。

命名规范

统一规范

  • 采用蛇形命名法,即采用一个下划线分隔词根。

  • 优先使用词根中已有关键字(数仓标准配置中的词根管理),定期 Review 新增命名的不合理性。

  • 禁止采用非标准的缩写。

  • 命名一律采用小写,只能以字母开头。

  • 命名不宜过长。

专有规范

  • 分层-分域-分词根-分时间周期

  • 正式表,所在层级名称+数据域+表描述+时间周期或加载策略,如增量、快照、拉链/小时、日、周、月、季、年

  • 中间表,对应正式表+_mid+阿拉伯数字

  • 临时表,z+创建者姓名检查+表名

  • 视图

  • 参照表命名规范+_v

  • 字段

  • 优先从词根中取,多次出现的要增加到词根库

  • 任务

  • 与目标表名相同

  • 指标

  • 原子指标

  • 业务修饰词 + 词根

  • 衍生指标

  • 原子指标+时间周期(可选)

  • 派生指标

  • 一个原子指标+多个修饰词(可选)+时间周期

代码设计规范

  • 脚本是否有备注、复杂计算逻辑是否有注释释。

  • 任务是否支持多次重跑而输出不变,不能有 insert into 语句。

  • 分区表是否使用分区键过滤并且有有效裁剪。

  • 外连接的过逑条件是否使用正确,例如在左连接的 where 语句存在右表的过滤条件。

  • 关联小表,是否使用/*+ map join * /。

  • 不允许引用别的计算任务临时表。

  • 原则上不允许存在一个任务更新多个目标表。

  • 是否存在笛卡尔积。

  • 禁止在代码里面使用 drop、create、rename 等 DDL 语句。

  • 使用动态分区时,有没有检查分区键值为 NULL 的情况。

  • 对于重要的任务 DQC 质量监控规则是否配置,严禁裸奔。

  • 代码中有没有进行适当的规避数据倾斜语句。



     

指标体系建设

  • 指标层级划分方式

  • 按分析主题

  • 一级分类

  • 二级分类

  • 按业务过程

  • 一级分类

  • 二级分类

  • 三级分类

  • 指标定义

  • 内容

  • 所属分类

  • 指标类别

  • 名称

  • 描述

  • 口径/算法

  • 计量单位

  • 适用维度

  • ...

  • 原则

  • 唯一性

  • 可扩展

  • 易理解

  • 类别

  • 原子指标(某一业务事件行为下的度量,不可再拆分的指标) 例如:订单金额

  • 衍生指标(对原子指标进行四则运算)

  • 派生指标(统计周期+统计粒度+业务限定+原子指标)例如:最近一天+新创建的+订单个数(阿里大数据之路对于派生指标的定义:派生指标=原子指标+时间周期修饰词+其它修饰词。唯一归属于某一个原子指标,继承原子指标的数据域)

  • 说明:网上对于指标分类说法不统一,大家知道咋回事儿就行了。搜了一下阿里的大数据之路,没有衍生指标的概念。说法一:衍生指标=派生指标。那么用我上边派生指标的定义即可。说法二:衍生指标是对原子指标进行四则运算得到的。那么衍生指标就是原子指标增加减少几个修饰词或者时间周期扩大缩小后得到的。所以感觉衍生指标有点鸡肋搞不好就变成原子/派生指标了。

  • 指标管理流程

  • 指标新增申请

  • 初审:明确指标口径,检查指标库是否包含

  • 二审:审核指标定义需要的各项元素是否准确完备

  • 入指标库

词根库

  • 定义

  • 把可能会多次用到的短语,集中命名,保证全局范围内的命名含义一致性。

  • 内容

  • 所属分类

  • 名称

  • 英文简称

  • 数据类型

  • 备注

  • 分类

  • 普通词根:描述事物的最小单元体,如:交易-trade。

  • 专有词根:具备约定成俗或行业专属的描述体,如:美元-USD。

  • 公共字段

  • 公共字段=词根组合+其它关键词

  • 公共字段放入词根库不太严谨,但字段命名时候可以直接取用,降低了命名不一致的风险,所以工具化不太完善的公司推荐这样使用。

03

  流程规范

需求提交流程

  • 提出需求

  • 需求提出人:以文档的形式提出需求(写清楚需求内容、交付物、期望交付日期),发给数仓 Leader。

  • 沟通需求

  • 数仓 Leader 将需求分配给相关人承接,同时协商好实际交付日期。

  • 如果需求提出人的交付日期与数仓 Leader 的交付日期不一致,双方需要进一步协商一致。

  • 开发交付

  • 需求承接人,需按照协商一致的交付日期,按期交付。

模型设计流程

  • 数据调研、业务调研、需求调研

  • 数据建模

  • 总体思路

  • 根据已有的分层分域,分治、各个击破。

  • 多种方式结合使用

  • 确定业务过程->声明粒度->确定维度->确定事实

  • 业务建模->逻辑建模->物理建模

  • 构建总线矩阵

  • 构建指标体系

  • 评审

  • 除了模型设计,还需要拉上必要的开发、业务、分析师、产品经理、数仓运维等。

  • 上线、迭代、完善

ETL开发流程

(这个在后续章节-ETL篇-会详细介绍)

  • 需求理解

  • 数据探查

  • 程序开发

  • 流程依赖

  • 配置调度

前端开发规范

(这个在后续章节-应用篇-会详细介绍)

  • 接口规范

  • 代码部署规范

上线流程

  • 申请

  • 上线时间

  • 上线功能范围

  • 对其它模块、上下游依赖的影响

  • 上线支持团队清单

  • 上线详细操作步骤

  • 测试报告

  • 回滚方案

  • 评审

  • 代码 Review

  • 上下游影响分析

  • 上线

  • 上线支持团队就绪

  • 严格按照上线操作步骤执行

  • 失败回滚

04

  质量管控规范

源端管控

  • 源端变动,必须提前通知数仓侧。

  • 有条件的话,使用工具监控源端重点内容的变动。

数仓管理

  • 对已有规范没有贯彻的给予警告、处罚:建模规范、开发规范、上线规范

  • 使用工具加强数据质量监控,发现问题及时通知、告警。

  • 建立数据质量解决机制,责任到人。

  • 定期复盘

  • 重要常见问题入告警规则

  • 源端数据质量问题,协调源端解决

  • 存储模型、ETL开发、上线流程等引起的问题,需要制定合适的解决方案

应用管控

  • 统一指标定义

  • 统一指标口径

  • 统一外部数据输出归口

05

  安全规范

网络安全

  • 内外网隔离,外网环境访问内网需要登录 VPN

  • 核心数据存储、功能模块,只开放给特定的少部分人。

账号安全

  • 每个人分配独立的账号,赋予合理的权限,禁止相互借用。

  • 数据库、大数据组件开通多个角色账号。比如只读、部分表读写、管理员等。当然还可以按实际需求细分。Hive、ODPS 的话也是可以实现单人单号的。

  • 服务器登录。也是单人单号

  • 公司内部应用账号。单人单号。

数据安全

  • 至少做到表级别的权限控制,实在不行就分库。

  • ODS 层不对外开放,只对 ODS-DWD 层相关部分开发人员可见。

  • 特别敏感数据,如用户年龄、号码、身份证好、地址等,应该放到专门的数据库里,数仓主库只存放用户 ID 和其它必须字段。例如年龄应该脱敏成年龄区间或开发特定的 UDF 转化函数。

06

总结

      我们分别从设计规范、流程规范、质量管控、数据安全四个方面,详细阐述了数仓规范。应该已经涵盖了数仓规范的方方面面。如有遗漏或者更好的分类方法,欢迎加我微信详聊。 

      本篇写作的初衷,就是找到一种合理的分类方式,把数据规范详尽穷举的罗列给大家,让大家了解全貌。但是,在实际落地实践中不一定能用到这么多,没有最好的只有最合适的,大家需要结合现实场景选取需要的子集落地即可。

     在我经历过的几家公司、好多个项目里,也没有哪个项目完整的使用过以上所有规范,互联网大数据公司比之前的传统数仓项目用到的规范还更少些而且侧重点也不太一样。大数据公司可能由于互联网基因吧,更加侧重数据安全、工具化等,对数据质量、数据模型等要求不太高。而传统数仓对数据建模、数据质量的要求很高(我有一位同事,曾因为一块钱,被甲方财务主管扣下,对了一整天的数据~),内网环境数据安全被提的不是很多,另外可能是由于做项目的原因吧,工具化不太被人关注,管理基本靠人治,元数据基本靠文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22212.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 与排序算法(5):归并排序

一、归并排序 归并排序(Merge Sort)是一种基于分治思想的排序算法。它将待排序的数组分成两个长度相等的子数组,然后对这两个子数组分别进行归并排序,最后将两个排好序的子数组合并成一个有序的数组。 具体实现过程如下&#xf…

要做存储业务,我解析了一个项目的源码

最近在做存储相关的业务,更具体的来说是存储相关的研发,于是就上网查了一下相关的资料,思虑再三打算从最简单的 Json 数据交换格式开始研究。 JSON是独立于编程语言的数据交换格式,几乎所有与网络开发相关的语言都有JSON函数库&am…

基于Java+SpringMvc+vue+element实现高效学生社团平台管理

基于JavaSpringMvcvueelement实现高效学生社团平台管理 博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式…

oracle数据库当中用户的创建,添加,授权,以及表的创建与表的简单介绍,以及在oracle数据库当中的约束以及约束条件的简单介绍

系列文章目录 (3条消息) oracle数据库简介 文章目录 系列文章目录 前言 一、用户的创建 1.1、创建命令 1.2、给予scott用户权限 1.3、以scott用户进行连接登录 二、表和表的设计原则 2.1、表的概念 2.1.1、表是从属于用户的 2.1.2、表是逻辑表(概念表),不…

gpt.4.0-gpt 国内版

gpt 使用 GPT(Generative Pre-trained Transformer)是一种预训练的语言模型,可用于多种自然语言处理任务,如情感分析、文本分类、文本生成等。下面是使用GPT的一些步骤和建议: 确定任务和数据集:首先&…

Hibernate 快速入门

Hibernate 快速入门 〇、前言一、搭建 Hibernate 项目步骤1:新建 Java 项目附录1:新建Java项目中的相关文件信息步骤2:添加 Hibernate 框架支持附录2:添加Hibernate框架支持后,Java项目中的相关文件信息步骤3:其他关键配置1、添加数据库驱动包(本文以MySQL为例)2、配置…

C++11 列表初始化initializer_list

引子 C11,是继C98后的一次有力更新,引进了很多好用的语法,STL也添加了几个新容器,也解决了很多的问题。本篇博客就学习一下C11列表初始化的新语法和 initializer_list 文章目录 引子一. 列表初始化二. initializer_list结束语 一…

计算机底层知识

汇编语言(机器语言)的执行过程 汇编语言的本质:机器语言的助记符 其实他就是机器语言 计算机通电->CPU读取内存中程序(电信号输入) ->时钟发生器不断震荡通电 ->推动CPU内部一步一步执行(执行多…

安卓开发 | 将Vue项目打包为app

知识目录 一、写在前面✨二、Hbuilder X准备💕2.1 Hbuilder X简介2.2 下载 三、打包💕3.1 获取dist目录3.2 新建5app3.3 替换文件3.4 编写manifast.json文件3.5 app云打包 四、总结撒花😊 一、写在前面✨ 大家好!我是初心&#xf…

OJ练习第107题——二叉搜索子树的最大键值和

二叉搜索子树的最大键值和 力扣链接:1373. 二叉搜索子树的最大键值和 题目描述 给你一棵以 root 为根的 二叉树 ,请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下: 任意节点的左子树中的键值都 小于 此节点的键值。 任意…

龙蜥白皮书精选:利用 io_uring 提升数据库系统性能

文/高性能存储 SIG 01 背景介绍 传统的 IO 软件栈已经无法完全释放出高性能存储设备的性能,高性能 IO 栈是当前存储领域重点研究的课题之一,代表性的如用户态方案 SPDK,以及标准的内核态方案 io_uring。 02 关键技术 Linux 社区从零开始设…

SeaweedFs使用-通过http接口实现文件操作

通过http接口实现文件操作 SeaweedFs可通过filer的http接口/master中的http接口来进行文件上传 1.通过master的接口进行上传文件 通过各种方式进行请求接口:http://localhost:9333/submit, ip和端口号是master服务的信息。此接口通过post请求方式将文件的二进制流…

esp32CAM环境安装教程---串口驱动安装

前言 (1)本人安装好arduino 的ESP32环境之后, 发现一直下载不进去程序。一直说Cannot configure port, something went wrong. Original message: PermissionError。 (2)查阅了很多资料,用了各种办法&#…

自动生成测试用例_接口测试用例自动生成工具

前言 写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 har2case 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP A…

图片模块封装:Glide高级使用+使用设计模式图片框架封装+Bitmap尺寸压缩和质量压缩+Bitmap加载大图长图

图片模块封装:Glide高级使用使用设计模式图片封装Bitmap尺寸压缩和质量压缩Bitmap加载大图长图 一.如何更换图片框架二.策略模式构建者模式图片框架搭建1.ImageOptions图片参数设置2.IImageLoader接口以及实现子类3.图片加载策略4.ImageLoaderManager6.业务模块中使…

tcp/ip

这里写自定义目录标题 线程 防止阻塞 123 windows下4 https://zhuanlan.zhihu.com/p/139454200 https://www.bilibili.com/video/BV1eg411G7pW/?spm_id_from333.337.search-card.all.click&vd_sourcee7d12c9f66ab8294c87125a95510dac9 with socket.socket() as s:s.bind(…

小航编程题库2022年NOC决赛图形化(小高组)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题3.0分 删除编辑 答案:A 第1题运行下面的程序,最终“我的变量”的值是多少? A、5B、10C、25D、30 答案…

计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

南京邮电大学算法与设计实验三:动态规划法(最全最新,与题目要求一致)

实验原理: 1、用动态规划法和备忘录方法实现求两序列的最长公共子序列问题。要求掌握动态规划法思想在实际中的应用,分析最长公共子序列的问题特征,选择算法策略并设计具体算法,编程实现两输入序列的比较,并输出它们的…

编译原理之词法分析实验(附完整C/C++代码与总结)

一、实验内容 通过完成词法分析程序,了解词法分析的过程。编制一个读单词程序,对PL/0语言进行词法分析,把输入的字符串形式的源程序分割成一个个单词符号,即基本保留字、标识符、常数、运算符、分界符五大类。 对PL/0语言进行词法…