数仓建模分层理论

2023-11-07

分层建设理论

简单点儿,直接ODS+DM就可以了,将所有数据同步过来,然后直接开发些应用层的报表;当DM层的内容多了以后,想要重用,就会再拆分一个公共层出来,变成3层架构,这个过程有点类似代码重构,就是在实践中不断的进行抽象、总结

数仓的建模或者分层,其实都是为了更好的去组织、管理、维护数据,所以当你站在更高的维度去看的话,所有的划分都是为了更好的管理。小到JVM 内存区域的划分,JVM 中堆空间的划分(年轻代、老年代、方法区等),大到国家的省市区的划分,无一例外的都是为了更好的组织管理

所以数仓分层是数据仓库设计中十分重要的一个环节,优秀的分层设计能够让整个数据体系更容易理解和使用

分层的意义

清晰数据结构体系

每一个数据分层都有它的作用域,这样在使用表的时候能更方便的定位和理解。

数据血缘追踪

由于最终给业务呈现的是一个能直接使用的业务表,但是表的数据来源有很多,如果有一张来源表出问题了,希望能够快速准确的定位到问题,并清楚它的影响范围,从而及时给到业务方反馈,从而将损失降到最低

减少重复开发和资源浪费

  • 规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
  • 清晰明了的结构使得开发、维护的成本降低
  • 减少重复计算和存储的资源浪费

复杂问题简单化

将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

在实际的建设过程中,由于业务使用数据非常紧急以及统一数仓层建设跟不上业务的需要,所以DIM和ADS层可能直接使用ODS层进行快速的业务响应,但是这种不规范的操作可能导致数据口径不一致,所以待数仓建设完毕,要切换到统一数仓层和DIM层

统一数据口径

数据分层提供统一的数据出口,统一对外输出的数据口径

关于分层的一点思考

分层其实是为了更好更快更准的组织管理,但是这个是从宏观上来说的,接下来从微观上也来看一下分层

越靠上的层次,对应用越友好,比如ADS层,基本是完全为应用设计,从数据聚合程度来讲,越上层的聚合程度越高,当然聚合程度越高可理解程度就越低

数仓层内部的划分不是为了分层而分层,分层是为了解决 ETL 任务及工作流的组织、数据的流向、读写权限的控制、不同需求的满足等各类问题,当然分层也是面向行业而言的,也是常用分层方法,但是需要注意的是分层仅仅是手段而已

数仓的分层

ods 操作数据层

ODS 全称是 OperationalDataStore,操作数据层存储的是面向业务系统的数据,也是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。

其实这里说ETL 有点不合适了,其实更准确的是ELT,细细品品

本层的数据,总体上大多是按照源头业务系统的分类方式而分类的,为什么在数仓主要用维度建模的情况下,依然要学习范式建模呢,因为数据源是范式建模的,所以学习范式建模可以帮助我们更好的理解业务系统,理解业务数据,所以你可以认为ODS 层其实就是用的实范式建模

但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是300岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一ID却有两条重复数据,在接入的时候需要做一步去重)、字段命名规范等一系列操作 这里的数据处理,并不涉及业务逻辑,仅仅是针对数据完整性以及重复值和空值的处理,其实就是做的是数据规约,数据清洗,但是为了考虑后续可能追溯数据源问题,因此对这一层不建议做过多的数据清洗工作,原封不动接入源数据即可,至于数据的去噪,去重,异常值处理等过程可以放在后面的DW层
其实关于这一层,很多人的理解不太一样,那就是是否要进行数据清洗,其实还是取决于公司的使用习惯,其实有很多公司在这一层之前也会形成一个层,名字千奇百怪,但是它的目的是数据缓冲,然后进行清洗,清洗之后的数据存入ODS ,而这个时候缓冲层数据存放一般为一周左右,几乎不会超过一个月;而ODS则永久存放。

设计原则

表名的设计 ODS_业务系统_表名_标记,这样的设计可以保持与业务表名一致,又可以有清晰的层次,还可以区分来源。标记一般指的是其他数仓特有的属性,例如表是天级的还是小时的,是全量的还是增量的

  • ods 层不做字段名归一和字段类型统一的操作,如果需要则使用兼容的数据类型
  • 对于增量表,需要设计增量表(ODS_业务系统_表名_delta)和全量表,然后将增量表合并成全量表数据
  • 对于半结构化数据需要设计解析
  • 由于业务数据库(OLTP)基本按照维度模型建模,因此ODS层中的建模方式也是维度模型

ods 的设计可以保证所有的数据按照统一的规范进行存储。

DW 统一数仓层

DW是数据仓库的核心,从ODS层中获得的数据按照主题建立各种数据模型。DW又细分数据明细层DWD 和轻度汇总层DWS

这一层和维度建模会有比较深的联系,业务数据是按照业务流程方便操作的角度来组织数据的,而统一数仓层是按照业务易理解的角度或者是业务分析的角度进行数据组织的,定义了一致的指标、维度,各业务板块、数据域都是按照统一的规范来建设,从而形成统一规范的标准业务数据体系,它们通常都是基于Kimball的维度建模理论来构建的,并通过一致性维度和数据总线来保证各个子主题的维度一致性

如果 ods 层的数据就非常规整,基本能满足绝大部分的需求,这当然是好的,这时候dwd层其实就简单了很多,但是现实中接触的情况是 ods 层的数据很难保证质量,毕竟数据的来源多种多样,推送方也会有自己的推送逻辑,在这种情况下,就需要通过额外的一层 dwd 来屏蔽一些底层的差异。有没有很像JVM

设计原则

一致性维度规范

公共层的维度表中相同维度属性在不同物理表中的字段名称、数据类型、数据内容必须保持一致,因为这样可以降低在使用过程中犯错误的概率,例如使用了不正确的字段,或者因为数据类型的原因导致了一些奇怪的错误

维度的组合与拆分

将维度所描述业务相关性强的字段在一个物理维表实现。相关性强是指经常需要一起查询或进行报表展现、两个维度属性间是否存在天然的关系等。例如,商品基本属性和所属品牌。

DWD 明细数据层

公告明细数据层,可以说是数仓建设的核心了

DWD层要做的就是将数据清理、整合、规范化、脏数据、垃圾数据、规范不一致的、状态定义不一致的、命名不规范的数据都会被处理。然后加工成面向数仓的基础明细表,这个时候可以加工一些面向分析的大宽表

DWD层应该是覆盖所有系统的、完整的、干净的、具有一致性的数据层。在DWD层会根据维度模型,设计事实表和维度表,也就是说DWD层是一个非常规范的、高质量的、可信的数据明细层。

DWS 轻度汇总层

DWS层为公共汇总层,这一层会进行轻度汇总,粒度比明细数据稍粗,基于DWD层上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是也是面向分析宽表或者是面向某个注意的汇总表。DWS层应覆盖80%的应用场景,这样才能快速响应数据需求,否则的话,如果很多需求都要从ods 开始做的话,那说明我们的数仓建设是不完善的

例如按照业务划分,例如流量,订单,用户等,生成字段比较多的宽表,用于后续的业务查询,OLAP分析,数据分析等。

一般采用维度模型方法作为理论基础,更多的采用一些维度退化手法,将维度退化至事实表中,减少维度表与事实表的关联,提高明细数据表的易用性;同时在汇总数据层要加强指标的维度退化,采用更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工

DIM 维度层

维表层,所以其实维度层就是大量维表构成的,为了统一管理这些维度表,所以就建设维度层,维度表本身也有很多类型,例如稳定维度维表,渐变维度维表

维度指的是观察事物的角度,提供某一业务过程事件涉及用什么过滤和分类的描述属性,"谁、什么时候、什么地点、为什么、如何"干了什么,维度表示维度建模的基础和灵魂

比如,“小文早上在小卖部花费5元钱购买了包子”,时间维度——早上,地点维度——小卖部,商品维度——包子 那么事实表呢?

所以可以看出,维度表包含了业务过程记录的业务过程度量的上下文和环境。维度表都包含单一的主键列,维度表设计的核心是确定维度字段,维度字段是查询约束条件(where)、分组条件(group)、排序(order),与报表标签的基本来源

维度表一般为单一主键,在ER模型中,实体为客观存在的事务,会带有自己的描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。维度建模的核心是数据可以抽象为事实和维度,维度即观察事物的角度,事实某一粒度下的度量词,维度一定是针对实体而言的

每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表行完全对应。 维度表通常比较宽,是扁平型非规范表,包含大量的低粒度的文本属性。例如customer(客户表)、goods(商品表)、d_time(时间表)这些都属于维度表,这些表都有一个唯一的主键,然后在表中存放了详细的数据信息。

设计原则

维度表通常比较宽,包含多个属性、是扁平的规范表,实际应用中包含几十个或者上百个属性的维度并不少见,所以维度表应该包括一些有意义的描述,方便下游使用

维度表的维度属性,应该尽可能的丰富,所以维度表中,经常出现一些反范式的设计,把其他维度属性并到主维度属性中,达到易用少关联的效果。

维度表的设计包括维度选择,主维表的确定,梳理关联维度,定义维度属性的过程

维度的选择一般从报表需求和从业务人员的交谈中发现,主要用于过滤、分组、排序,主维度表一般从业务库直接同步,比如用户表,但是数仓的本身也会有自己的维度,这是因为数仓是面向分析的,所以会有很多从分析的角度出发的维度

关联维度主要是不同业务系统或者同一业务系统的表之间存在关联性(范式建模),根据对业务表的梳理,确定哪些表和主维度表之间存在关联关系,并选择其中的某些表用于生成维度属性。

TDM 标签数据层

随着互联网的普及,获客成本越来越高,这也使得公司对用户运营提出了更高的要求,不仅需要精细化更需要个性化。解决这一问题的办法之一就是建立相对完备的标签系统,而数仓的标签层对于标签系统而言就像数据仓库对于数据系统一样,有着举足轻重的地位,这样的标签系统需要与业务进行紧密结合,从业务中获取养分—用户标签,同时也要服务于业务—给用户提供更加精准和个性的服务

底层的标签系统就像一个索引,层层展示大千世界,而用户就从这大千世界中不断选择一些东西表明自己的身份和喜好,也不断反哺,使得这个大千世界更加丰富多彩。其实到最后用户就是一些标签的集合。

对跨业务板块、跨数据域的特定对象进行数据整合,通过统一的ID-Mapping 把各个业务板块,各个业务过程中同一对象的数据打通,形成对象的全域数据标签体系,方便深度分析、挖掘、应用。ID-Mapping 可以认为是通过对象的标识对不同数据体系下相同对象进行关联和识别。 对象的标识可以标识一个对象,一般是对象的ID,比如手机号,身份证,登录账号

一个自然人他有身份证号码进行唯一标识,但是在医保的时候他使用的实医保账号,缴纳水电费的时候又是不同的账号,使用手机的时候又是设备账号,上网的时候是网商账号。在确认对象后,由于同一对象在不同的业务体系中的对象标识是不一样的,因此需要将同一对象上的不同ID 标识打通,以便所有的业务数据都能够在该对象上打通。这就是ID-Mapping

完成对象的ID 打通需要给对象设置一个超级ID,需要根据对象当前业务体系的ID和获取得到或者计算得到超级ID,进而完成所有业务标识的ID打通一般来说ID 打通是建设标签体系的前提,如果没有ID打通就无法收集到一个对象的全面信息,也就无法对这个对象进行全面的标签刻画。

传统的计算方法要有 ID-ID 之间的两两关系,例如邮箱和手机号可以打通,手机号和身份证号可以打通,那么邮箱就和身份证号可以打通,但是当数据量非常大,且业务板块非常多的时候,例如有上一个对象,每个对象有数十种ID,这个时候打通就需要非常漫长的计算

那么什么是标签呢,利用原始数据,通过一定的逻辑加工产出直接能被业务所直接使用的、可阅读的,有价值的数据。标签类目,是标签的分类组织方式,是标签信息的一种结构化描述,目的是管理、查找,一般采用多级类目,一般当一个对象的标签个数超过50个的时候,业务人员查找标签就会变得非常麻烦,这个时候往往会通过标签类目进行组织管理

标签的分类

标签按照产生和计算方式的不同可分为属性标签,统计标签,算法标签,关联标签

属性标签

对象本身的性质就是属性标签,例如用户画像的时候打到用户身上的标签

统计标签

对象在业务过程中产生的原子指标,通过不同的计算方法可以生成统计标签

算法标签

对象在多个业务过程中的特征规律通过一定的算法产出的标签

关联标签

对象在特定的业务过程会和其他对象关联,关联对象的标签也可以打在主对象上

设计原则

标签一定是针对用户的,而不是一些虚假、高大上、无用的标签,一定要真实反映用户行为喜好的,所以不能只依赖人工智能算法的分析,来完成对一个用户标签的建立与定期维护,需要走出去和用户交互,引导用户使用,要抓住用户痛点,及时获取用户反馈,形成闭环

ADS 层

数据应用层ApplicationDataService面向业务定制的应用数据,主要提供给数据产品和数据分析使用的数据,一般会放在ES,MYSQL,Redis等系统供线上系统使用,也可以放在Hive中供数据分析和数据挖掘使用,或者使用一下其他的大数据工具进行存储和使用

数仓层,DIM 层,TDM 层是相对稳定的,所以无法满足灵活多变业务需求,所以这和数仓层的规范和划分相矛盾,所以在此基础上建立了另外一个层,这就是ADS 层,解决了规划稳定和灵活多变之间的矛盾。分层和分类其实没多大差别,其实就是相似的放在一起,有点代码重构的意味。

数据应用层,按照业务的需要,然后从统一数仓层和DIM进行取数,并面向业务的特殊需求对数据进行加工,以满足业务和性能的需求。ADS 层因为面向的实众多的需求,所以这一层没有太多的规范,只需要按照命名规范来进行就可以了

设计原则

ADS 层因为面向的实众多的需求,所以这一层没有太多的规范,但是ADS 层的建设是强业务推动的,业务部门需要参与到ADS 的建设中来(了解用户痛点)。

实现流程

  • 理清需求,了解业务方对数据内容、使用方式(怎么交互的,报表、接口、即席查询、在线查询、指标查询、搜索)、性能的要求
  • 盘点现有的数仓表是否可以支持,看以前有没有类似的需求,有没有可以复用的接口、报表什么的
  • 代码实现,选择合适的存储引擎和查询引擎,配置线上监控然后交付

使用场景与性能

  • 针对业务方的使用场景,需要设计出高效,满足要求的ADS 层表
  • 如果是多维分析,为了减少连接,提升性能,一般采用大宽表设计,使用高性能引擎支撑
  • 如果是特定指标查询,一般采用KV的形式组织
  • 如果是搜索场景,一般采用搜索引擎

DM 数据集市层

主要是提供数据产品和数据分析的数据,一般会存放在ES、Mysql、也可能直接存储在hive中或者druid供数据分析和数据挖掘使用。主要解决部门用户报表和分析需求而建立数据库,数据集市就代表数据仓库的主题域

DM 是面向单个主题的,所以它不会从全局考虑进行建设,只专注于自己的数据、往往是某个业务线,例如流量主题、社交主题、电商主题等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数仓建模分层理论 的相关文章

  • JPA 中的复合键

    我想创建一个具有自动生成的主键的实体 而且还有一个由其他两个字段组成的唯一复合键 我如何在 JPA 中执行此操作 我想这样做是因为主键应该用作另一个表中的外键 并且使其复合并不好 在下面的代码片段中 我需要命令和模型是唯一的 pk当然是主键
  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • 如何在代理后面安装 Eclipse Neon

    对于 Neon Eclipse 附带了一个安装程序 我在安装程序中找不到任何配置菜单 我的java版本是 java version java version 1 8 0 72 Java TM SE Runtime Environment b
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 如何在 Spring 属性中进行算术运算?

  • GWT 2.3 开发模式 - 托管模式 JSP 编译似乎不使用 java 1.5 兼容性

    无法编译 JSP 类 生成的 servlet 错误 DefaultMessage 上次更新 0 日期 中 0 时间 HH mm ss z 语法 错误 注释仅在源级别为 1 5 时可用 在尝试以开发模式在 Web 浏览器中打开我的 gwt 模
  • Freemarker 和 Struts 2,有时它计算为序列+扩展哈希

    首先我要说的是 使用 Struts2 Freemarker 真是太棒了 然而有些事情让我发疯 因为我不明白为什么会发生这种情况 我在这里问是因为也许其他人有一个想法可以分享 我有一个动作 有一个属性 说 private String myT
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • 如何使用play框架上传多个文件?

    我在用play framework 2 1 2 使用java我正在创建视图来上传多个文件 我的代码在这里 form action routes upload up enctype gt multipart form data
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException

随机推荐

  • CVE-2022-22965:Spring远程代码执行漏洞

    CVE 2022 22965 Spring Framework远程代码执行漏洞 本文仅为验证漏洞 在本地环境测试验证 无其它目的 漏洞编号 CVE 2022 22965 漏洞说明 Spring framework 是Spring 里面的一个
  • Mac下如何彻底删除IntelliJ IDEA

    有时候破解版idea 或者对idea进行各种操作后 idea 坏 掉了 那就要删除再重新安装一个 但是单纯的将整个idea移入废纸篓后 重新安装idea 会恢复到删除之前的状态 里面包含你写的代码啊 破解是改变的文件的 十分麻烦 今天老9教
  • 详解MySQL的三层架构(连接层、服务层、引擎层)

    首先来看一张很经典的图 连接层 Connectors 即为连接层 我们在访问MySQL服务前 第一件事就是建立TCP链接 经过三次握手建立连接成功后 MYSQL对TCP传输过来的账号密码做身份认证 权限获取 TCP链接收到请求后 必须要分配
  • 膜拜大佬!java设计模式刘伟课后答案

    一 先来解读 23种设计模式要点 1 单例模式 Singleton Pattern 2 工厂模式 3 抽象工厂模式 Abstract Factory Pattern 4 模板方法模式 Template Method Pattern 5 建造
  • 劳务派遣管理系统_适合人力资源外包、劳务派遣和劳务外包公司使用的人力资源管理系统有哪些?...

    人力资源外包 劳务派遣和劳务外包使用的管理系统有啥不一样 从区别上 人力资源外包里面的 包 指的是人力资源部门的职能 而劳务派遣则派的是 人 由劳务派遣单位与被派遣劳动者签订劳动合同 对于劳务外包而言 包的是 活儿 当然也包了 人 劳务外包
  • 飞书与德勤管理咨询达成战略合作,赋能企业实现智慧运营与管理

    3月19日 飞书宣布与德勤管理咨询达成战略合作 双方将携手整合资源 渠道以及解决方案 通过德勤管理咨询智慧运营方案 以及飞书高效 愉悦的一站式沟通与协作平台 为中国的各类企业客户提供高效管理 智慧管理解决方案 伴随着经济全球化与信息技术革新
  • 图像质量评估指标:PSNR / SSIM 原理及Python代码

    PSNR 峰值信噪比 Peak Signal to Noise Ratio 用于衡量两张图像之间差异 例如压缩图像与原始图像 评估压缩图像质量 复原图像与ground truth 评估复原算法性能等 公式 其中 MSE 为两张图像的均方误差
  • 【Spring Boot丨序列化、反序列化】

    序列化 反序列化 概述 Jackson 序列化和反序列化 简介 自定义序列化器 注册外部序列化程序 指定类的 Json 序列化 反序列化 主页传送门 传送 概述 序列化是将对象转换为字节序列的过程 而反序列化则是将字节序列恢复为对象的过程
  • Linux下实用批处理脚本

    本文首发在我的个人博客 https jlice top p 7q1p8 欢迎大家前去参观 么么哒 经常需要在Linux下批量处理图片 想了想 还是写个实用的批处理小脚本一劳永逸 代码 SRC为待处理目录 DST为目标目录 也就是保存处理后的
  • RedHat系统NetworkManage网络管理工具简介及相关命令(lspci、lshw)

    1 RedHat网络管理工具简介 在早期的Linux发行版本中几乎所有的网络服务都是network服务 从RHEL7开始 红帽官方建议采用NetworkManage方式配置网络 而不建议再使用network服务这种传统的方式配置网络 因为网
  • C++中对象的动态建立与释放详解

    我们知道可以用new运算符可以动态的分配内存 用delete运算符可以释放这些内存 当我们使用new运算符动态的分配一个内存之后 会自动返回一个该内存段的起始地址 也就是指针 下面先给出一个new和delete基本应用的例子 回顾一下它的基
  • Python自动化工具(自动化操作)

    一 多层目录的遍历 1 绝对路径和相对路径 相对路径 此路径下的 比绝对路径短 绝对路径 完整的路径 根目录开始 C盘等 C 或 开始 2 不同系统的路径问题 import os 来适应不同系统 版本windows和liunx 3 多层级的
  • 最大堆 和 优先队列

    最大堆 MaxHeap java import java util Random 后面测试用 public class MaxHeap
  • Gan学习

    参考博客 https blog csdn net u010678153 article details 54629393 https www cnblogs com Charles Wan p 6238033 html GAN原理介绍 说到
  • Java框架!mysqlmd5解密

    并发编程三大特性 原子性 一个操作或者多次操作 要么所有的操作全部都得到执行并且不会受到任何因素的干扰而中断 要么所有的操作都执行 要么都不执行 对于基本数据类型的访问 读写都是原子性的 long和double可能例外 如果需要更大范围的原
  • CTF从入门到提升(十一)文件包含

    Include stdio h Import request 很多网站的admin 管理员 入口和user 用户 入口是分开的 登陆过程所调用的函数可能都是同一个函数 最后操作的表不同 如果调用的是同一个函数 网站一般分开两个文件存储 ad
  • JetBrains 各 IDE 通用快捷键总结(包括 InteliJ idea,PyCharm,RubyMine,GoLand 等)

    JetBrains 全家桶 IDE 集成开发环境 用起来很方便 而且快捷键都是通用的 至少绝大部分常用的快捷键是通用的 功能十分强大 还可以安装 ideaVim 等各种插件 熟练掌握对提高效率很有帮助 我会把常用的命令用红色粗体标记一下 C
  • STM32中GPIO的8种工作模式!

    一 推挽输出 可以输出高 低电平 连接数字器件 推挽结构一般是指两个三极管分别受两个互补信号的控制 总是在一个三极管导通的时候另一个截止 高低电平由IC的电源决定 推挽电路是两个参数相同的三极管或MOSFET 以推挽方式存在于电路中 各负责
  • T1串口波特率的计算方法

    T1的波特率 2 SMOD指数 32 定时器T1的溢出率 TI溢出率 TI计数率 产生溢出所需的周期数 具体来说 一个机器周期是晶振的频率f除以12 标准模式 每当计数到256 TH1溢出一次 定时器1工作在方式2 8位 使用11 0592
  • 数仓建模分层理论

    分层建设理论 简单点儿 直接ODS DM就可以了 将所有数据同步过来 然后直接开发些应用层的报表 当DM层的内容多了以后 想要重用 就会再拆分一个公共层出来 变成3层架构 这个过程有点类似代码重构 就是在实践中不断的进行抽象 总结 数仓的建