随着互联网的技术高速发展,越来越多的应用层出不穷,伴随着数据应用的需求变多,为快速响应业务需求,很多企业在初期没有很好的规划的情况下,存在不同程度的烟囱式的开发模式,这样会导致企业不同业务线的数据割裂,造成了数据的重复加工、数据重复清理、数据冗余存储和计算资源和开发效率的严重浪费,大数据开发的成本越来越高,同时也带来指标口径不一致等一系列的问题,数据中台应运而生。数据中台的核心工作并不是将企业的数
在这种欢呼声之下,“数据飞轮”的概念也随之兴起——可以围绕业务进行数据驱动消费,从以前的“重点关注数据资产”,转变到“同步关注数据流与业务流的融合”,即充分考虑数据在业务中的应用,数据资产与业务应用形成闭环,从而实现数据驱动。
从数据仓库的兴起,到数据中台的构建,再到数据飞轮模式的探索,数据飞轮的关键在于反馈循环,利用数据驱动业务创新和优化,从而形成一个良性循环,通过将业务应用的数据结果反哺到数据分析中,形成一个“数据收集-分析-决策-行动-反馈”的PDCA闭环,数据驱动的决策能够即时影响业务,形成持续优化的动态循环,通过不断的输入和输出,推动系统的自我增强和增长。
数据飞轮能够实现数据的持续循环利用和业务价值的快速迭代。在数据飞轮模型中,数据不仅被收集和存储,而且被不断地用于驱动业务流程的优化、创新和增长。最重要的是数据飞轮在数据平台的基础上,体现数据消费的重要性,帮助企业形成数据应用和业务价值提升的良性循环。
概念 我们知道,事件流分两个阶段,在捕获阶段,事件从最外层盒子传到最内层了;在冒泡阶段,事件从最内层 传到最外层。有没有办法阻止事件流传播呢? 我们可以使用 event.stopPropagation()来阻止事件继续传播。event 对象是任何事件处理函数中的事件 对象。 看一个例子: <!DOCTYPE html> <html lang="en"> <head&g
冒泡阶段和捕获阶段 想象一个场景:在纸上画三个同心圆,然后手指按住最内层的同心圆。此时你只按住了最内层的同心圆吗? 当然不是,你的手指同时按住了三个圆。 JavaScript 也有类似的规定。两个 div 嵌套,内层 div 中放置一个 button 按钮,点击这个按钮之后,并 不仅触发了这个按钮的点击事件,而且也触发了两个 div 的点击事件,甚至也触发了 body 和 window 的点击事
实现批量添加监听 使用循环语句为元素逐一添加事件监听,称为批量添加监听。例如: //得到页面上所有盒子数组 var oDivs = document.getElementsByTagName("div"); //使用循环语句为它们依次添加监听 for(var i = 0 ; i < oDivs.length ; i++){ oDivs[i].onclick = function(){ thi
事件是由访问 Web 页面的用户引起的操作,比如鼠标点击按钮、滑过某个图片都可能会触发事件。 JavaScript 中通过给 HTML 元素添加“事件监听”,从而让此元素对各种事件作出反应。 题目:点击按钮,弹出对话框,显示“你好,JavaScript!”。 案例代码如下: <!DOCTYPE html > <html lang="en"> <head> <
正则表达式简介 正则表达式是很多高级语言都拥有的功能,用来对字符串进行验证、检索、替换操作等。正则表达式让字符 串处理如虎添翼。 JavaScript 中,正则表达式用两个正斜杠当做字面量,比如/abc/就是一个正则表达式。用 typeof 检测 正则表达式的类型将得到“object”,因为正则表达式是一个引用类型值正则表达式单独使用没有意义,它的功能只体现在对字符串的操作上。比如/abc/可以作
JSON(JavaScript Object Notation,即 JavaScript 对象表示法)是一种跨语言的、用于信息交换的 数据格式。它本质上是语法更为严格的 JavaScript 对象。 我们知道对象的属性名并不规定要被引号包裹,并且属性名不一定要复合标识符命名规范。但 JSON 对语法 有明确要求:属性名都必须严格地用双引号包裹 属性名都必须复合标识符命名规范比如: var obj
splice()方法功能非常多,可以说是一个“多功能”方法。 项的替换 splice()方法用来替换数组中的指定项。 比如数组: var arr = ["A", "B", "C", "D", "E", "F", "G"]; 我们调用 arr.splice()方法,它在英语中是“拼接”的意思: arr.splice(3 , 2 , "X" , "Y" , "Z"); 这条语句的意思是:从数
斐波那契数列是这样的数列:1、1、2、3、5、8、13、21,你找到规律了么? 数列前 2 项都是 1,从第 3 项开始,每项等于前面两项的和。我们的任务是编写程序输出斐波那契数列的前20 项。 用递归思想解决本题:书写函数 fib(n)可以返回斐波那契数列第 n 项,项数从 1 开始数。根据数列定义, 当调用 fib(a)时,将返回 fib(a - 1) + fib(a -2)的值。其中 fib
业务描述 让计算机和我们玩个游戏:随机生成一个 1 到 100 的数字,让用户猜测这个数字是几,用户输入自己的猜 测之后,提示“输入的数字太大了”或“输入的数字太小了”,直到用户准确猜到这个数字。随机数的生成 JavaScript 中提供了一个生成随机数的函数 Math.random()。它能随机产生一个大于 0 且小于 1 的小数, 即产生的数字的区间为(0,1)。 在 chrome 浏览器的控
JavaScript 中提供了一种叫做“三元运算”的语法形式,让我们可以方便地实现选择。 三元运算是一个固定格式,语法是: 条件表达式 ? 表达式 1 :表达式 2 问号前面是判断的条件,问号后面用冒号隔开两个表达式。当条件表达式为 true 时调用表达式 1,为 false 时调用表达式 2。因为它每次需要三个操作数,所以这个语法格式就被叫做“三元运算”,问号和冒号就共同被 称为“三元运算符”。
代码中我们分别将两条输入语句的值进行了 Number()或者 parseFloat(),然后进行求和。 初学者错误地将代码写成这样: var a = prompt("请输入第 1 个数字");var b = prompt("请输入第 2 个数字"); var result = Number(a + b); alert(result); 程序将两条 Number()语句合并写在了一起,这是错误的。因
JavaScript 中提供了比较运算符用来比较值的关系。比较运算的结果都是布尔类型值。表 2-3 列出了常见的比较运算符。意义 运算符 大于 > 小于 < 大于或等于 >= 小于或等于 <= 等于 == 不等于 != 全等于 === 不全等于 !== 大于小于 我们先来看大于、小于两个符号,这两个符号和数学中的表示法是相同的。例如: 8 > 5; //tr
正如上小节所说,JavaScript 可以运行在浏览器中,也可以运行在服务器上和手机中,本书仅讨论浏览器 中的JavaScript。我们在丛书《Node.js实战教程》和《React和Vue实战开发中》两书中将详细介绍JavaScript 的其他应用。 对于浏览器中的 JavaScript,它由语言核心、DOM 和 BOM 三部分组成我们用简单的代码来分别认知这三部分是什么。这些示例代码看不懂是正
提到持续集成(CI---Continuous integration)的概念,相信读者并不陌生,但真正在项目中用起来的并 不多,持续集成的作用以及给项目带来的好处是值得被推广和使用。当然,并不是好的技术和工具就适合 所以的项目。这一章我将带领读者一起领略持续集成的面纱。这里我们将选用当前主流的持续集成工具 ---Jenkins。 什么是 持续集成 ? 集成软件的过程不是新问题,如果项目开发的规模比
我们以 126 邮箱登录为例,通过 Page Object 设计模式来实现:login126_po.py #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep class Page(object): ''' 基本类,用于所页面的继
multiprocessing 提供了 threading 包中没有的 IPC,效率上更高。应优先考虑 Pipe 和 Queue,避免 使用 Lock/Event/Semaphore/Condition 等同步方式 (因为它们占据的不是用户进程的资源)。 multiprocessing 包中有 Pipe 类和 Queue 类来分别支持这两种 IPC 机制。Pipe 和 Queue 可以用来传 送常
Selenium 分 1.0 与 2.0 两个版本,这在本书第一章中已经介绍了,简单区分一下这两个版本工作原理。 m Selenium 1 1 工作原理 Selenium1 中除了使用 Selenium-Core 以外,进行自动化测试时都需要使用 Selenium-RC 来作为代理 (不管是本机还是远程),目的是为了解决同源问题;而造成同源问题的原因是因为 Selenium1.0 中是使 用 Ja
#搜索邮件 def test_search_mail(self): driver = self.driver driver.get(self.base_url) #调用登录模块login.login(self,'testingwtb','a123456') #搜索邮件 driver.find_element_by_xpath("//input[@class='nui-ipt-input' and
学以致用是本书的出发点,我们用了相当篇幅来详细学习了 unittest 单元测试框架,目的是将其应 用到 web 自动化测试中,用它来组织运行自动化测试脚本是一个不错搭配。 在动手写脚本之后前,我们先来简单的规划一个测试项目的目录: .../test_project/all_test.py /test_case/test_baidu.py /test_case/test_youdao.py /re
在编写用例的过程中,不管用例的执行过程是怎样的,最初都会有一个预期结果,用例的执行就是通 过执行用例的步骤,验证实际的结果是否与预期结果相等。unittest 框架的 TestCase 类提供一些方法用 检查比较和报告失败。 方法 检查 版本 assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) bool(x) is
一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库、测试数据源、测试对 象识别标准,以及种可重用的模块。自动化测试框架在发展的过程中经历了几个阶段,线性测试、模块驱 动测试、数据驱动测试、关键字驱动测试。本章就带领读者了解这几种测试模型。自动化测试模型介绍 自动化测试模型是自动化测试架构的基础,自动化测试的发展也经历的不同的阶段,不断有新的模型 (概念)被提出,了解和使用这些自动
AutoIt 目前最新是 v3 版本,这是一个使用类似 BASIC 脚本语言的免费软件,它设计用于 Windows GUI( 图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。AutoIt Windows Info 用于帮助我们识 Windows 控件信息。 Compile Script to.exe 用于将 AutoIt 生成 exe 执行文件。 R
如果一个属性不能唯一的区分一个元素,我们还可以使用逻辑运算符连接多个属性来区别于其它属 性。 …… <input id="kw" class="su" name="ie"> <input id="kw" class="aa" name="ie"> <input id="bb" class="su" name="ie"> …… 如上面的三行元素,假如我们现在要定位
循环一个字符串中的每一个字符。 xx.py strings = "hello world" for 1 in req strings: print 1 打印结果: >>> ================================ RESTART ================================ >>> h e l l o w o r l
虽然,在你拿到这本书时已经对要测试的项目做了一些分析和考量,但笔者还是有必要在这里啰 嗦一下不是所有项目都适合实施自动化测试的,以免读者对项目实施自动化过程中感到困难重重,浪 费了大量的人力和时间而没有得到应有的收益。 1、任务测试明确,不会频繁变动 2、每日构建后的测试验证 3、比较频繁的回归测试 4、软件系统界面稳定,变动少 5、需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任
super 是一个内置类,可用于访问属于某个对象的超类的属性。如果你已经习惯于通过直接调用父类并传入 self 作为第一个参数来访问类的属性或 方法,那么 super 的用法会有些令人困惑。这是非常陈旧的模式,但仍然可以在一些代码 库中找到(特别是遗留项目)。参见以下代码: class Mama: # 旧的写法 def says(self): print('do your homework') c
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号