函数依赖

C++ 编程规范

谁说我不能喝 提交于 2020-04-07 10:08:19
组织和策略问题 第0条 不要拘泥于小节(又名:了解哪些东西不应该标准化) 无需在多个项目或者整个公司范围内强制实施一致的编码格式。 第1条 在高警告级别干净利落地进行编译 高度重视警告:使用编译器的最高警告级别。通过修改代码而不是降低警告级别来排除警告。 第2条 使用自动构建系统 一键构建。 第3条 使用版本控制系统 svn。 第4条 在代码审查上投入 做好同行评审。 设计风格 第5条 一个实体应该只有一个紧凑的职责 一次只解决一个问题。一个实体(变量、类、函数、名称空间、模块和库)或一个模块,只赋予一个良好的职责,不要乱发散。 第6条 正确、简单和清晰第一 代码是写给人看的,要简单、清晰、可靠。 第7条 编程中应知道何时和如何考虑可伸缩性 关注算法的优化,注意复杂性。 第8条 不要进行不成熟的不要进行不成熟的优化,优化应该使代码更清晰易读,易理解,易重构,而不要为了所谓的性能,让代码变得更复杂和更差的可读性。 第9条 不要进行不成熟的劣化 不要使用低效的用法,比如++,应倾向于使用前++,而不是会产生临时变量的后++。 第10条 尽量减少全局和共享数据 全局和共享数据,会增加耦合度,降低可维护性。 第11条 隐藏信息 模块或对象设计,内部实现与外部接口要分离,减少依赖性。 第12条 懂得何时和如何进行并发性编程 多线程,与平台相关。小心使用各种多线程技术。 尽量减少共享对象

Vue2.0源码阅读笔记(二):响应式原理

夙愿已清 提交于 2020-03-27 11:45:22
  Vue是数据驱动的框架,在修改数据时,视图会进行更新。数据响应式系统使得状态管理变的简单直接,在开发过程中减少与DOM元素的接触。而深入学习其中的原理十分有必要,能够回避一些常见的问题,使开发变的更为高效。 一、实现简单的数据响应式系统   Vue使用 观察者模式 (又称 发布-订阅模式 )加 数据劫持 的方式实现数据响应式系统,劫持数据时使用 Object.defineProperty 方法将 数据属性 变成 访问器属性 。Object.defineProperty 是 ES5 中一个无法 shim 的特性,因此Vue 不支持 IE8 以及更低版本浏览器。   Vue源码中对数据响应式系统的实现比较复杂,在深入学习这部分源码之前,先实现一个较为简单的版本更有助于后续的理解。代码如下所示: let uid = 0 // 容器构造函数 function Dep() { // 收集观察者的容器 this.subs = [] this.id = uid++ } Dep.prototype = { // 将当前观察者收集到容器中 addSub: function(sub) { this.subs.push(sub) }, // 收集依赖,调用观察者的addDep方法 depend: function() { if(Dep.target){ Dep.target.addDep(this)

Spark之RDD

送分小仙女□ 提交于 2020-03-25 21:26:40
一:RDD简介 (一)RDD概念 RDD(Resilient Distributed DataSet),弹性分布式数据集, 是Spark中最基本,也是最重要的数据抽象, 它 代表一个不可变、可分区、里面的元素可并行计算的集合 。RDD具有数据流模型的特点:自动容错、位置感知度调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能重用工作集,这极大地提升了查询速度。因为有RDD,所以Spark才支持分布式的计算。RDD由分区组成。 (二)RDD的五个特性 (1)一组分片( Partition ),即数据集的基本组成单位。---RDD会被分片处理,用于并行计算 对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。 (2)一个计算每个分区的函数。---一个对每个split(数据分区)进行计算的函数,也称为RDD的算子 Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 (3)RDD之间的依赖关系。(DAG有向无环图调度构造依赖关系) RDD的每次转换都会生成一个新的RDD

AMD规范与CMD规范

馋奶兔 提交于 2020-03-25 15:36:19
JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发? 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式。可以想象一个巨大的系统代码,被整合优化分割成逻辑性很强的模块时,对于软件是一种何等意义的存在。对于软件行业来说:解耦软件系统的复杂性,使得不管多么大的系统,也可以将管理,开发,维护变得“有理可循”。 还有一些对于模块化一些专业的定义为:模块化是软件系统的属性,这个系统被分解为一组高内聚,低耦合的模块。那么在理想状态下我们只需要完成自己部分的核心业务逻辑代码,其他方面的依赖可以通过直接加载被人已经写好模块进行使用即可。 首先,既然是模块化设计,那么作为一个模块化系统所必须的能力: 1. 定义封装的模块。 2. 定义新模块对其他模块的依赖。 3. 可对其他模块的引入支持。 好了,思想有了,那么总要有点什么来建立一个模块化的规范制度吧,不然各式各样的模块加载方式只会将局搅得更为混乱。那么在JavaScript中出现了一些非传统模块开发方式的规范 CommonJS的模块规范,AMD(Asynchronous Module Definition),CMD(Common Module Definition)等

40行程序把Vue3的响应式集成进React做状态管理

痞子三分冷 提交于 2020-03-24 11:47:42
本文参考原文- http://bjbsair.com/2020-03-22/tech-info/2095/ 前言 vue-next是Vue3的源码仓库,Vue3采用lerna做package的划分,而响应式能力@vue/reactivity被划分到了单独的一个package中。 如果我们想把它集成到React中,可行吗?来试一试吧。 使用示例 话不多说,先看看怎么用的解解馋吧。 // store.ts import { reactive, computed, effect } from '@vue/reactivity'; export const state = reactive({ count: 0, }); const plusOne = computed(() => state.count + 1); effect(() => { console.log('plusOne changed: ', plusOne); }); const add = () => (state.count += 1); export const mutations = { // mutation add, }; export const store = { state, computed: { plusOne, }, }; export type Store = typeof store;

MySQL · 关系模型的基本术语

人盡茶涼 提交于 2020-03-20 08:30:43
关系:整个二维表 关系名:表格名称 元组:行数据(记录) 属性:列数据(字段/分量) 属性名:列名称(字段名) 主键:唯一确定元组的属性组(关键字) 域:属性的取值范围 关系模式:关系的描述,表示为:关系名(属性列表)     例如:学生(学号,姓名,性别,年龄,系别) 关系的约束:域完整性约束,实体完整性约束,参照完整性约束 一、关系依赖 函数依赖: X—>Y,即X函数决定Y,或Y函数依赖于X。 例:学号—>姓名      #学号决定姓名 平凡函数依赖: X—>Y,但X包含Y (Y包含于X)。 例:(学号,课号)—>课号   #课号存在于 (学号,课号) 之中。 非平凡函数依赖: X—>Y,但X不包含Y。 例:(学号,课号)—>成绩   #成绩不存在于 (学号,课号) 之中。 完全函数依赖: X—>Y,对于X的任意一个真子集X'都有X'不能函数决定Y。 例:(学号,课号)—>成绩   #只有学号或姓名无法决定成绩,二者缺一不可。 部分函数依赖: X—>Y,存在 X的某一个真子集X'能够函数决定Y。 例:(学号,课号) —>姓名  # 只有学号就能决定姓名,课号为冗余项。 传递函数依赖: X—>Y,X不包含Y,Y不函数决定X,Y—>Z, 即Z对X传递函数依赖。 例:学号—>系号,(系号不函数决定学号) ,系号—>系主任,则系主任传递函数依赖于学号。 多值依赖: X—>—>Y,设R

Vue的依赖收集、更新

拈花ヽ惹草 提交于 2020-03-12 12:21:00
我们都知道,只要在 Vue 实例中声明过的数据,那么这个数据就是响应式的。 什么是响应式,也即是说,数据发生改变的时候,视图会重新渲染,匹配更新为最新的值。 那么Vue如何监听数据变化? 数据变化后,如何通知视图更新? 数据变化后,视图怎么知道何时更新 思考以上3个问题 先介绍下Object.defineProperty(),因为这个方法是Vue实现响应式系统的重中之重 Object.defineProperty() MDN上的定义: Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。 语法: Object.defineProperty(obj, prop, desc) 使用: const obj = {name: 'Bob'} Object.defineProperty(obj, 'name', { get(){ console.log('get 被触发') }, set(val){ console.log('set 被触发') } }) obj.name //get 被触发 obj.name = 'Lily' //set 被触发 Object.defineProperty可以为对象属性设置get、set函数, get:属性被访问时触发 set:属性被赋值时触发 其实 Object

Makefile使用总结

99封情书 提交于 2020-03-06 22:44:12
1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目, 还可以用来组织我们平时的一些日常操作. 这个需要大家发挥自己的想象力. 本篇博客是基于 {精华} 跟我一起写 Makefile 而整理的, 有些删减, 追加了一些示例. 非常感谢 gunguymadman_cu 提供如此详尽的Makefile介绍, 这正是我一直寻找的Makefile中文文档. 1.1 Makefile 主要的 5个部分 (显示规则, 隐晦规则, 变量定义, 文件指示, 注释) Makefile基本格式如下: target ... : prerequisites ... command ... ... 其中, target - 目标文件, 可以是 Object File, 也可以是可执行文件 prerequisites - 生成 target 所需要的文件或者目标 command - make需要执行的命令 (任意的shell命令), Makefile中的命令必须以 [tab] 开头 显示规则 :: 说明如何生成一个或多个目标文件(包括 生成的文件, 文件的依赖文件,

Spark之RDD

允我心安 提交于 2020-03-02 22:58:43
一、什么是RDD RDD(Resilient Distributed Dataset)叫做 弹性分布式数据集 , 是Spark中最基本的数据抽象 ,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。 1.1 RDD属性 (1)Partition 即数据集的基本组成单位。对于RDD来说,每个分片都会被一个计算任务处理,并决定并行计算的粒度。用户可以在创建RDD时指定RDD的分片个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的集群的CPU Core的总数目。 (2)一个计算每个分区的函数。 Spark中RDD的计算是以分片为单位的,每个RDD都会实现compute函数以达到这个目的。compute函数会对迭代器进行复合,不需要保存每次计算的结果。 (3)RDD之间的依赖关系。 RDD的每次转换都会生成一个新的RDD,所以RDD之间就会形成类似于流水线一样的前后依赖关系。在部分分区数据丢失时,Spark可以通过这个依赖关系重新计算丢失的分区数据,而不是对RDD的所有分区进行重新计算。 (4)一个Partitioner,即RDD的分片函数。控制分区数和分区策略 当前Spark中实现了两种类型的分片函数

关系数据库中的函数依赖

旧巷老猫 提交于 2020-03-02 19:55:06
关系模式中的各属性之间的相互依赖,相互制约的联系称为数据依赖。 数据依赖一般分为函数依赖,多值依赖,连接依赖,最重要的是函数依赖。 1.函数依赖是关系模式中属性之间的一种逻辑依赖关系。 下面是展示的3个关系示例: 学生关系:S(SNO,SN,AGE,DEPT); 选课关系:SC(SNO,CNO,SCORE); 系关系:D(DEPT,MN); 平凡依赖与非平凡依赖 来源: https://www.cnblogs.com/anjingdian/p/12397550.html