⏰序言
对于刚学习 react 的小伙伴来说,总是从基础开始学习,周一自然也不例外捏。那在下面的文章中,将讲解 react 的基本使用和高级特性,更有周边插件 Redux 和 React-router 待你来探寻。
在本文中,融合大量案例🌰和动图🕹️进行展示。可以把它当成是 react 的入门宝库,有不懂的语法知识点时或许在这里可以寻找到你的答案并且通过例子运用起来。
叮,废话不多说,下面来开始探索 react 的奥秘吧👏
📝一、React的基本使用
1、JSX基本使用
(1)变量、表达式
在 react 中,最基础的内容便是变量和表达式,具体形式如下:
第一种类型:获取变量、插值
12345678910111213141516171819 import React from 'react'class JSXBaseDemo extends React.Component { constructor(props) { super(props) this.state = { ...
Vue中父子组件通信方法详解
在Vue.js中,组件是构建用户界面的一个重要部分。然而,在开发过程中,我们经常需要处理组件之间的通信问题。本篇文章将阐述如何在Vue.js中进行父子组件通信。
1. 使用 props 下发数据
Vue.js允许我们通过props(属性)将数据由父组件传入子组件。以下是一个简单的例子:
123456789101112131415161718192021// 父组件<template> <div class="parent"> <child :message="parentMsg"></child> </div></template><script>import Child from './Child.vue'export default { data() { return { parentMsg: '来自父组件的消息' } ...
什么是装饰器
在 JavaScript 中,装饰器其实就是一个函数,它可以改变或修饰类、类的方法、属性、参数等的行为。装饰器以 @ 符号开始,紧跟着是装饰器函数的名字。
需要注意的是,目前 JavaScript 的装饰器还处于提案阶段,因此不能在所有的环境下使用。但我们可以通过 Babel 或 TypeScript 这类工具来支持它。
如何使用装饰器
以下是一个简单的装饰器示例:
12345678910// 定义一个装饰器function log(target) { console.log(`${target} has been decorated`);}// 使用装饰器@logclass ExampleClass { //...}
在这个例子中,log 是一个装饰器函数,它在 ExampleClass 被定义时会被调用,并且它的参数 target 就是被修饰的 ExampleClass。
装饰器的种类
JavaScript 中主要有三种类型的装饰器:
类装饰器:应用于类构造函数,用于监视,修改或替换类定义。传入的参数是 ...
在前端开发中,我们经常遇到这样的情况:用户连续多次点击按钮,造成多个并发的网络请求,然后由于网络延迟或服务器处理速度等问题,可能出现后先发后至的情况。这就可能导致页面显示的数据不正确,因为我们通常期望的是显示最后一次点击时请求的响应结果。这篇博客将会分析该问题,并提出一些解决方案。
后发先至问题的原因及解决方案
问题分析
为了理解这个问题,让我们设想一个场景:我们有一个按钮,每次点击都会向服务器发送一个请求获取数据。如果用户连续点击两次,那么就会发送两个请求。但由于网络状况或者服务器处理速度的不同,有可能第二个请求先于第一个得到响应。如果我们的代码是简单地将每个响应的数据显示在页面上,那么就可能出现后发请求的响应数据先于先发请求的响应数据显示的情况。
这就是所谓的"后先发后至"问题。即使第一个请求的响应数据后来到达,用户看到的仍然是第二个请求的数据,这显然不是我们想要的。
解决方案
解决这个问题的关键在于区分哪个响应对应于最新的用户操作。我们需要一个机制来"取消"或者"忽略"旧的请求。这里有几种可能的方法:
方法一:防抖( ...
窗口函数又叫 OLAP 函数/分析函数,窗口函数兼具分组和排序功能.
语法:over (partition by xxx order by xxx)
sum、avg、min、max
sum函数和窗口函数配合使用,结果和order by 相关,默认为升序
Juicy-Bigdata
未读Hive千亿级数据倾斜
从本质上说,发生数据倾斜的原因有两种:一是任务重需要处理大量相同的key的数据;二是任务读取不可分割的大文件
解决方案
空值引发的数据倾斜
表中有大量的 null 值,如果表之间进行 join 操作,就会有 shuffle 产生,这样所有的 null 值都会被分配到一个 reduce 中,必然产生数据倾斜
解决方案:
不让null值参与join操作
123456789select *from log ajoin users bon a.user_id is not null and a.user_id = b.user_idunion allselect * from log awhere a.user_id is null;
给null随机赋值,这样他们的hash结果不一样,便会分配到不同的reduce中
12345678select * from log a left join users b on case when a.user_id is null then concat('hive',rand())else a.use ...
Juicy-Bigdata
未读Hive底层执行架构
基本流程
UI调用DIRVE接口
DRIVE创建会话句柄,发送到编译器
编译器从元数据存储中获取本次查询所需要的元数据,该元数据用
于对查询树中的表达式进行类型检查,以及基于查询谓词修建分区;
:编译器生成的计划是分阶段的DAG,每个阶段要么是map/reduce 作业,
要么是一个元数据或者HDFS 上的操作。将生成的计划发给DRIVER。
如果是map/reduce 作业,该计划包括map operator trees 和一个reduce
operator tree,执行引擎将会把这些作业发送给MapReduce :
步骤6、6.1、6.2 和6.3:执行引擎将这些阶段提交给适当的组件。在每个
task(mapper/reducer) 中,从HDFS 文件中读取与表或中间输出相关联的数据,
并通过相关算子树传递这些数据。最终这些数据通过序列化器写入到一个临时
HDFS 文件中(如果不需要reduce 阶段,则在map 中操作)。临时文件用于向
计划中后面的map/reduce 阶段提供数据。
步骤7、8 和9:最终的临时文件将移动 ...
Juicy-Bigdata
未读
Hive SQL的执行计划能了解SQL程序在转换成相应计算引擎的执行逻辑,从而有针对性的调优。
explain的用法
explain介绍
1234explain query-- 举例explain select sum(score) from student_score;
一个HIVE查询会被转换为一个或多个stage组成的序列(有向无环图DAG),可以是MR stage,负责元素存储的stage,负责文件系统的操作的stage
查询结果包含两个大的部分
stage dependencies,各个stage的依赖关系
stage plan:各个stage的执行计划
1234567891011121314151617181920212223242526272829303132333435363738394041STAGE PLANS: Stage: Stage-1 Map Reduce Map Operator Tree: TableScan alias: student_score Stat ...
Juicy-Bigdata
未读数据仓库概念
数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策
面相主题
传统数据库主要是为应用程序进行数据处理,未必会按照同一主题存储数据;
数据仓库侧重于数据分析工作,是按照主题存储的。
集成
传统数据库通常与某些特定的应用相关,数据库之间相互独立。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
稳定
传统数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析使用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
变化
数据仓库中的数据通常包含历史信息,它里面记录了企业从过去某一时间点(如开始应用数据仓库的时间)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出分析和预测。
数据仓库不是静 ...