我的笔记本

主要记录技术,其他杂七杂八也偶尔发,看心情

流水记录

2020-10-07今天开始看《编程珠玑》第二版。前言值得一看,我们可以知道另外两本书《人月神话》和《代码大全》。人月神话已经看完,感觉还没有达到那个高度,所以没有太大的感同身受。代码大全的表驱动法前段时间略有耳闻,之前觉得这本书应该是枯燥无味的大部头,但是这么多人推荐了,抽时间还是看一下吧。

章节详解

第一章

讲了归并排序用于外部排序,并且讲了bitmap用来排序。第一次接触这个方法,感觉很棒。然后根据习题查阅了位图的实现,联想到了c++里面bitmap的实现,感觉突然清晰了很多。果然经典会让人越来越好,而且进步速度还很快。

  1. 从数列中挑出一个元素,称为 “基准”(pivot);

  2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Paritition1(int A[], int low, int high) {
    int pivot = A[low];
    while (low < high) {
    while (low < high && A[high] >= pivot) {
    --high;
    }
    A[low] = A[high];
    while (low < high && A[low] <= pivot) {
    ++low;
    }
    A[high] = A[low];
    }
    A[low] = pivot;
    return low;
    }

    void QuickSort(int A[], int low, int high) //快排母函数
    {
    if (low < high) {
    int pivot = Paritition1(A, low, high);
    QuickSort(A, low, pivot - 1);
    QuickSort(A, pivot + 1, high);
    }
    }

堆的性质

堆从0开始标号

  • 索引为i的左孩子的索引是 (2*i+1);
  • 索引为i的左孩子的索引是 (2*i+2);
  • 索引为i的父结点的索引是 floor((i-1)/2);

堆是完全二叉树

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<iostream>
#include<vector>
using namespace std;

// 递归方式构建大根堆(len是arr的长度,index是第一个非叶子节点的下标)
void adjust(vector<int> &arr, int len, int index)
{
int left = 2*index + 1; // index的左子节点
int right = 2*index + 2;// index的右子节点

int maxIdx = index;
if(left<len && arr[left] > arr[maxIdx]) maxIdx = left;
if(right<len && arr[right] > arr[maxIdx]) maxIdx = right;

if(maxIdx != index)
{
swap(arr[maxIdx], arr[index]);
adjust(arr, len, maxIdx);
}

}

// 堆排序
void heapSort(vector<int> &arr, int size)
{
// 构建大根堆(从最后一个非叶子节点向上)
for(int i=size/2 - 1; i >= 0; i--)
{
adjust(arr, size, i);
}

// 调整大根堆
for(int i = size - 1; i >= 1; i--)
{
swap(arr[0], arr[i]); // 将当前最大的放置到数组末尾
adjust(arr, i, 0); // 将未完成排序的部分继续进行堆排序
}
}

int main()
{
vector<int> arr = {8, 1, 14, 3, 21, 5, 7, 10};
heapSort(arr, arr.size());
for(int i=0;i<arr.size();i++)
{
cout<<arr[i]<<endl;
}
return 0;
}

数据管理的内容

数据管理的内容可以分为三大类:有些注重数据治理活动(GovernanceActivities),确保组织对数据做出合理、一致的决策;有些注重数据的生命周期活动(Lifecycle Activities),管理从数据的获取到数据的消除整个过程;有些注重数据的基础活动(Foundational Activities),包括数据的管理、维护和使用

数据治理活动

1)建立数据战略;2)设置相关原则;3)数据管理专责(Stewarding);4)定义数据在组织中的价值;5)为组织能从数据中获取更多价值做准备,从而可借助数据管理实践的不断成熟和企业文化变革影响组织对数据的认知方式。

数据生命周期活动

1)数据架构;2)数据建模;3)构建和管理数据仓库和数据集市;4)集成数据,为商务智能分析师和数据科学家使用;5)管理关键的共享数据的生命周期,如参考数据和主数据。

数据基础活动

1)确保数据受到保护;2)管理元数据(理解和使用数据所需的知识);3)管理数据质量。

元数据管理

元数据类别业务元数据(Business)、技术元数据(Technical)和操作元数据(Operational)。
**业务元数据**主要关注数据的内容和状态,以及与数据治理相关的细节。业务元数据包括概念、主题域、实体和属性等非技术性的名称和定义;属性类型和其他属性特征;范围的描述;计算规则;算法和业务规则;有效的域值及其定义。业务元数据的例子包括:(1)数据模型、数据集的定义和描述、表和列。(2)业务规则、数据质量规则、转换规则、计算和派生数据。(3)数据来源和数据继承。(4)数据标准和约束。(5)安全/隐私级别的数据。(6)数据中存在的已知问题。(7)数据的备注或说明。
技术元数据提供关于数据的技术细节、存储数据的系统,以及在系统内部和系统之间迁移数据的过程信息。技术元数据的例子包括:(1)物理数据库表、列名和属性。(2)数据访问权限、组、角色。(3)数据CRUD(创建、替换、更新和删除)规则。(4)数据ETL(抽取、转换和加载)任务细节。(5)数据继承文档,包括在上游和下游更改影响信息。(6)内容更新周期、作业进度和依赖项。
操作元数据描述处理和访问数据的详细信息。例如:(1)批处理程序的作业执行日志。(2)审计结果、平衡、控制测量和错误日志。(3)报告和查询访问模式、频率和执行时间。(4)补丁和版本维护计划及执行,当前补丁级别。(5)备份、保留、创建日期、灾难恢复的相关规定。
关于元数据的类别,应该从元数据来源的角度去考虑,而不是从元数据使用方式的角度去考虑。在使用方面,元数据类型之间的区别并不严格。技术人员和操作人员都可以使用“业务”元数据,反之亦然

数据管理知识领域

11个
(1)数据治理(Data Governance)。通过建立数据决策的权限和责任,为数据管理活动和职能提供整体的指导和监督。这些权限和责任的建立应该考虑到组织的整体需求。
(2)数据架构(Data Architecture)。它是管理数据资产的“蓝图”,指基于组织的战略目标,建立符合战略需求的数据构架。
(3)数据建模和设计(Data Modeling and Design)。这些活动是探索、分析、表示和沟通数据需求的一个过程,最后表现为数据模型。
(4)数据存储和操作(Data Storage and Operations)。这些活动包括数据存储的设计、实施和支持,目的是达到利益最大化。这些活动服务于数据的整个生命周期——从数据规划到数据消除。
(5)数据安全(Data Security)。这一活动确保数据隐私和安全。数据的获得和使用必须要有安全的保障。
(6)数据整合与互操作(Data Integration&Interoperability)。这一领域包括存在于不同数据系统、应用程序和组织之内,以及组织之间的数据迁移和集成等。
(7)文档和内容管理(Document and Content Management)。通过规划、实施和监管活动,来管理那些存储于非结构化介质中的数据和它们的生命周期,尤其是那些与法律及合规性相关的文件的管理。
(8)参考数据和主数据管理(Reference and Master Data Management)。这一活动涉及对核心关键共享数据的持续更新和维护,以便得到最准确、及时并和基础业务相关的数据。
(9)数据仓库和商务智能(Data Warehousing and Business Intelligence)。通过计划、实施和对系统流程的控制活动,为管理决策提供数据量化支持,使相关工作人员能够通过数据分析和数据报告获取价值。
(10)元数据管理(Metadata Management)。通过规划、实施和控制活动,支持访问高质量的元数据集,包括定义、模型、数据流和其他对理解数据及其创建、维护和访问至关重要的信息。
(11)数据质量管理(Data Quality Management)。这一活动包括规划和实施质量管理技术,以衡量、评估和改善组织使用的数据。

有些生命周期规则仍适用于任何数据

(1)在数据生命周期中,数据的产生和使用是最主要的关键点。数据管理必须做到确定数据是怎样产生的,或者数据是怎样获取的,以及数据将如何被使用。(2)数据质量管理必须贯穿数据生命周期全过程。因为数据质量往往会受到数据生命周期内一些事件的影响,所以必须将其作为数据生命周期管理的一部分进行规划。数据质量不是“附加物”,也不能“事后补做”。(3)元数据管理必须贯穿数据生命周期全过程。元数据是用来描述其他数据的一类数据。同样的,元数据对于所有数据管理功能来说都是关键的。元数据通常是通过数据生命周期内的其他数据创建的,被看作是数据生命周期的产品(而不是副产品)。元数据要像其他数据一样进行质量管理。(4)数据安全管理必须贯穿数据生命周期全过程。数据管理包括确保数据是安全的,而且相关的风险得到有效控制。数据在贯穿整个生命周期过程中都要受到保护——从产生直到清除。(5)数据管理应该专注于最关键的数据。组织产生了大量的数据,其中有许多并未真正被使用过。管理所有数据,既是不可能的,也是不必要的。生命周期管理需要聚焦到组织最关键的数据上,并且要做到最小化ROT(Redundant,Obsolete,Trivial,即数据是过剩的、废弃的、琐碎的)

不同类型的数据会有不同的生命周期需求

数据可以进行多种分类:既可以根据数据提供的功能进行分类(如事务数据、参考数据、主数据、元数据、可变数据、源数据、事件数据、事务明细数据),也可以根据数据的内容进行分类(如数据域、主题域),或者根据数据格式进行分类,以及根据数据保护的等级进行分类。因为不同类型的数据会有不同的需求,关联到不同的风险,在同一个组织内会起到不同的作用,所以很多数据管理的工具都聚焦于数据的分类和管控。比如,主数据相对于事务型数据来说,会有不同的应用,因而就会有不同的管理需求。

DAMA数据管理原则

数据管理成熟度评估(Data Management MaturityAssessment,DMMA)定义了通过不断增加控制,提高数据质量的一个过程。当一个组织了解了过程的特征之后,就可以通过制订计划来提高它的能力。在模型的层次指引下,它也能用来度量改进程度,以及比较竞争对手或者合作伙伴。数据管理成熟度模型描述了可用于此类评估的数据管理过程的细节 。
第0级,缺乏能力。
第1级,初始级或临时级:成功取决于个人的能力。
第2级,可重复级:最小化的流程规则已经到位。
第3级,已定义级:相关标准已经设立并使用。
第4级,受管理级:流程已量化并可控。
第5级,优化级:过程改进的目标被量化。

● 数据是有价值的
● 数据管理需求是业务需求
  • 数据管理意味着管理数据的质量
  • 数据管理需要元数据
  • 数据管理需要规划
  • 数据管理需求必须推动信息技术决策
    ● 数据管理需要各种不同的技能
    ● 数据管理是生命周期管理
  • 数据管理是生命周期管理
  • 不同类型的数据具有不同的生命周期特征。
  • 管理数据包括管理与数据相关的风险

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment