【Hadoop大数据技术】——Hive数据仓库(学习笔记)

📖 前言: Hive起源于Facebook,Facebook公司有着大量的日志数据,而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架,可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发,但对于其他语言使用者则难度较大。因此Facebook开发团队想设计一种使用SQL语言对日志数据查询分析的工具,而Hive就诞生于此,只要懂SQL语言,就能够胜任大数据分析方面的工作,还节省了开发人员的学习成本。

在这里插入图片描述


目录

  • 🕒 1. 数据仓库简介
    • 🕘 1.1 什么是数据仓库
    • 🕘 1.2 数据仓库的结构
    • 🕘 1.3 数据仓库的数据模型
  • 🕒 2. Hive简介
    • 🕘 2.1 什么是Hive
    • 🕘 2.2 Hive系统架构
    • 🕘 2.3 Hive工作原理
    • 🕘 2.4 Hive数据模型
  • 🕒 3. Hive环境搭建
    • 🕘 3.1 Hive的安装
    • 🕘 3.2 安装并配置mysql
    • 🕘 3.3 配置MySQL JDBC
    • 🕘 3.4 配置Hive
    • 🕘 3.5 启动Hive
  • 🕒 4. Hive的常用HiveQL操作
    • 🕘 4.1 Hive基本数据类型
    • 🕘 4.2 常用的HiveQL操作命令
  • 🕒 5. 课后习题

🕒 1. 数据仓库简介

🕘 1.1 什么是数据仓库

数据仓库是一个面向主题的、集成的、随时间变化的,但信息本身相对稳定的数据集合,它用于支持企业或组织的决策分析处理。

🕘 1.2 数据仓库的结构

数据仓库的结构是由数据源、数据存储及管理、OLAP服务器和前端工具四个部分组成。

在这里插入图片描述

  • 数据源:数据源是数据仓库的基础,即系统的数据来源,通常包含企业的各种内部信息和外部信息
  • 数据存储及管理:数据存储及管理是整个数据仓库的核心,数据仓库的组织管理方式决定了对外部数据的表现形式,针对系统现有的数据,进行抽取、转换和装载,按照主题进行组织数据。
  • OLAP服务器:OLAP服务器对需要分析的数据按照多维数据模型进行重组,以支持用户随时进行多角度、多层次的分析,并发现数据规律和趋势。
  • 前端工具:前端工具主要包含各种数据分析工具、报表工具、查询工具、数据挖掘工具以及各种基于数据仓库或数据集市开发的应用。

🕘 1.3 数据仓库的数据模型

数据模型(Data Model)是数据特征的抽象,在数据仓库建设中,一般围绕星型模型和雪花模型来设计数据模型。

星型模型是以一个事实表和一组维度表组合而成,并以事实表为中心,所有维度表直接与事实表相连。

在这里插入图片描述

雪花模型是当有一个或多个维表没有直接连到事实表上,而是通过其他维表连到事实表上,其图解像多个雪花连在一起,故称雪花模型。雪花模型是对星型模型的扩展,原有的各维表可被扩展为小的事实表,形成一些局部的 "层次 " 区域,被分解的表都连主维度表而不是事实表。

在这里插入图片描述

🕒 2. Hive简介

🕘 2.1 什么是Hive

Hive是建立在Hadoop文件系统上的数据仓库,它提供了一系列工具,能够对存储在HDFS中的数据进行数据提取、转换和加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的工具。Hive定义简单的类SQL查询语言(即HQL),可以将结构化的数据文件映射为一张数据表,允许熟悉SQL的用户查询数据,允许熟悉MapReduce的开发者开发mapper和reducer来处理复杂的分析工作,与MapReduce相比较,Hive更具有优势。

Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处,MySQL与Hive对比如下所示。

对比项HiveMySQL
查询语言Hive QLSQL
数据存储位置HDFS块设备、本地文件系统
数据格式用户定义系统决定
数据更新不支持支持
事务不支持支持
执行延迟
可扩展性
数据规模

🕘 2.2 Hive系统架构

Hive是底层封装了Hadoop的数据仓库处理工具,运行在Hadoop基础上,其系统架构组成主要包含4部分,分别是用户接口、跨语言服务、底层驱动引擎及元数据存储系统

在这里插入图片描述

🕘 2.3 Hive工作原理

Hive建立在Hadoop系统之上,因此Hive底层工作依赖于Hadoop服务,Hive底层工作原理如下所示。

在这里插入图片描述
(1) CLI将用户提交的HiveQL语句发送给DRIVER。
(2) DRIVER将HiveQL语句发送给COMPILER获取执行计划。
(3) COMPILER从METASTORE获取HiveQL语句所需的元数据。
(4) METASTORE将查询到的元数据信息发送给COMPILER。
(5) COMPILER得到元数据后,首先将HiveQL语句转换为抽象语法树,然后将抽象语法树转换为查询块,接着将查询块转换为逻辑执行计划,最后将逻辑执行计划转换为物理执行计划,并将物理执行计划解析为MapReduce任务发送给DRIVER。
(6) DRIVER将MapReduce任务发送给EXECUTION ENGINE(执行引擎)执行。
(7) CLI向DRIVER发送获取HiveQL语句执行结果的请求。
(8) DRIVER与EXECUTION ENGINE进行通信,请求获取HiveQL语句执行结果的请求。
(9) EXECUTION ENGINE向NameNode发送请求获取HiveQL语句执行结果的请求。

🕘 2.4 Hive数据模型

Hive中所有的数据都存储在HDFS中,它包含数据库(Database)、(Table)、分区表(Partition)和桶表(Bucket)四种数据类型。
在这里插入图片描述

  • 数据库:数据库用于存储与同一业务相关的一组表,可以有效隔离不同业务的表。
  • :表是数据库中用来存储数据的对象,对象以二维表格的形式组织数据。Hive中的表分为内部表和外部表这两种类型。
  • 分区:根据分区规则将表的整体数据划分为多个独立的数据进行存储,每个独立的数据看做是一个分区,每个分区存储在HDFS文件系统的不同目录中。
  • :根据指定分桶规则将表的数据随机、均匀的划分到不同的桶进行存储,每个桶存储在HDFS文件系统的不同文件中。

🕒 3. Hive环境搭建

🕘 3.1 Hive的安装

Hive的安装模式分为三种,分别是嵌入模式、本地模式和远程模式

  1. 嵌入模式
    使用内嵌Derby数据库存储元数据,这是Hive的默认安装方式,配置简单,但是一次只能连接一个客户端,适合用来测试,不适合生产环境。
  2. 本地模式
    采用外部数据库存储元数据,该模式不需要单独开启Metastore服务,因为本地模式使用的是和Hive在同一个进程中的Metastore服务。
  3. 远程模式
    与本地模式一样,远程模式也是采用外部数据库存储元数据。不同的是,远程模式需要单独开启Metastore服务,然后每个客户端都在配置文件中配置连接该Metastore服务。远程模式中,Metastore服务和Hive运行在不同的进程中。

本文采用本地模式配置:

1、下载并解压Hive安装包

🔎 Hive下载官网

在这里插入图片描述

在这里插入图片描述

sudo tar -zxvf ./apache-hive-3.1.3-bin.tar.gz -C /usr/local   # 解压到/usr/local中
cd /usr/local/
sudo mv apache-hive-3.1.3-bin hive       # 将文件夹名改为hive
sudo chown -R hadoop:hadoop hive            # 修改文件权限

2、配置环境变量

vim ~/.bashrc

在该文件最前面一行添加如下内容:

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export HADOOP_HOME=/usr/local/hadoop

HADOOP_HOME需要被配置成你机器上Hadoop的安装路径,比如这里是安装在/usr/local/hadoop目录。

保存退出后,运行如下命令使配置立即生效:

source ~/.bashrc

3、修改/usr/local/hive/conf下的hive-site.xml
执行如下命令:

cd /usr/local/hive/conf
mv hive-default.xml.template hive-default.xml

然后,使用vim编辑器新建一个配置文件hive-site.xml,命令如下:

cd /usr/local/hive/conf
vim hive-site.xml

在hive-site.xml中添加如下配置信息:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;allowPublicKeyRetrieval=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>

🕘 3.2 安装并配置mysql

这里我们采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据。

使用以下命令即可进行mysql安装,注意安装前先更新一下软件源以获得最新版本:

sudo apt-get update  #更新软件源
sudo apt-get install mysql-server  #安装mysql

上述命令会安装以下包:
libaio1 libcgi-fast-perl libcgi-pm-perl libevent-core-2.1-7
libevent-pthreads-2.1-7 libfcgi-bin libfcgi-perl libfcgi0ldbl
libhtml-template-perl libmecab2 libprotobuf-lite23 mecab-ipadic
mecab-ipadic-utf8 mecab-utils mysql-client-8.0
mysql-client-core-8.0 mysql-common mysql-server mysql-server-8.0
mysql-server-core-8.0

因此无需再安装mysql-client等。安装过程会提示设置mysql root用户的密码,设置完成后等待自动安装即可。默认安装完成就启动了mysql。

启动服务器:

service mysql start

确认是否启动成功,mysql节点处于LISTEN状态表示启动成功:

sudo netstat -tap | grep mysql

在这里插入图片描述

进入mysql shell界面:

mysql -u root -p

注:在新版Ubuntu下安装 MySQL8.0 之后没有提示输入初始密码从而导致无法进入mysql root账户,解决方案如下:

执行下面命令,查看user和password

sudo cat /etc/mysql/debian.cnf

在这里插入图片描述

执行下面命令,登录MySQL

mysql -u debian-sys-maint -p

在这里插入图片描述

执行下面SQL命令

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1111';
quit;

在这里插入图片描述

之后重启MySQL,以root登录,密码就是我们之前设的,这里是1111

sudo service mysql restart
mysql -u root -p

在这里插入图片描述

成功以root身份进入mysql shell界面。

检查一个MySQL的编码设置(一般没问题, 是utf8就正常,utf8mb4是utf8的超集)

在这里插入图片描述

退出和关闭mysql服务器:

mysql> quit;
service mysql stop

🕘 3.3 配置MySQL JDBC

下载MySQL JDBC连接驱动JAR包

🔎 JDBC官网

在这里插入图片描述

sudo tar -zxvf mysql-connector-j-8.3.0.tar.gz   #解压
cp mysql-connector-j-8.3.0/mysql-connector-j-8.3.0.jar  /usr/local/hive/lib 	
# 将mysql-connector-j-8.3.0.jar拷贝到/usr/local/hive/lib目录下

启动并登陆MySQL Shell:

service mysql start 
mysql -u root -p  

🕘 3.4 配置Hive

新建hive数据库:

mysql> create database hive;    # 这个hive数据库与hive-site.xml中localhost:3306/hive的hive对应,两者名称必须一致,用来保存hive元数据

配置MySQL允许Hive接入:

# 创建hive用户
mysql> create user 'hive'@'localhost' identified by 'hive';
# 将所有数据库的所有表的所有权限赋给hive用户,后面的hive是配置hive-site.xml中配置的连接密码
mysql> grant all privileges on *.* to 'hive'@'localhost'; 
mysql> flush privileges;  # 刷新mysql系统权限关系表

升级元数据:
使用Hive自带的schematool工具升级元数据,也就是把最新的元数据重新写入MySQL数据库中。
可以在终端中执行如下命令

cd /usr/local/hive
./bin/schematool -initSchema -dbType mysql

在这里插入图片描述

🕘 3.5 启动Hive

启动hive之前,请先启动hadoop集群

start-dfs.sh  # 启动Hadoop的HDFS
hive   # 启动Hive

注意,如果没有配置PATH,需加上路径才能运行命令,比如,本文Hadoop安装目录是“/usr/local/hadoop”,Hive的安装目录是“/usr/local/hive”,因此,启动hadoop和hive,要使用下面带路径的方式:

cd /usr/local/hadoop #进入Hadoop安装目录
./sbin/start-dfs.sh
cd /usr/local/hive
./bin/hive

启动进入Hive的交互式执行环境以后,会出现如下命令提示符:

hive>

此时如遇到下图提示:
在这里插入图片描述

是报jar包冲突,进入hive的lib包下,删除log4j-slf4j-impl-2.17.1.jar即可。

在这里插入图片描述

可以在里面输入SQL语句,如果要退出Hive交互式执行环境,可以输入如下命令:

hive>exit;

🕒 4. Hive的常用HiveQL操作

🕘 4.1 Hive基本数据类型

Hive支持基本数据类型和复杂类型,基本数据类型主要有数值类型(INT、FLOAT、DOUBLE) 、布尔型和字符串,复杂类型有三种:ARRAY、MAP 和 STRUCT。

🕘 4.2 常用的HiveQL操作命令

Hive常用的HiveQL操作命令主要包括:数据定义、数据操作

更多关于HiveQL的使用指南可查看林子雨老师的博客

🔎 Hive3.1.3安装和使用指南

🕒 5. 课后习题

一、填空题
1、Hive建表时设置分割字符命令__________
2、Hive查询语句select ceil(2.34)输出内容是______。
3、Hive创建桶表关键字_____,且Hive默认分桶数量是_______。

二、判断题
1、Hive使用length()函数可以求出输出的数量。
2、再创建外部表的同时要加载数据文件,数据文件会移动到数据仓库指定的目录下。
3、Hive是一款独立的数据仓库工具,因此在启动前无需启动任何服务。
4、Hive默认不支持动态分区功能,需要手动设置动态分区参数开启功能。
5、Hive分区字段不能与已存在字段重复,且分区字段是一个虚拟的字段,它不存放任何数据,该数据来源于装载分区表时所指定的数据文。

三、选择题
1、Hive是建立在()之上的一个数据仓库
A、HDFS
B、MapReduce
C、Hadoop
D、HBase
2、Hive查询语言和SQL的一个不同之处在于()操作
A、Group by
B、Join
C、Partition
D、Union
3、Hive最重视的性能是可测量性、延展性、()和对于输入格式的宽松匹配性
A、较低恢复性
B、容错性
C、快速查询
D、可处理大量数据
4、以下选项中,哪种类型间的转换是被Hive查询语言所支持的()
A、Double—Number
B、BigInt—Double
C、Int—BigInt
D、String–Double
5、按粒度大小的顺序,Hive数据被分为:数据库、数据表、()、桶?
A、元祖
B、栏
C、分区
D、行

四、简答题
1、简述Hive的特点是什么。
2、简述Hive中内部表与外部表区别。

五、编程题
1、创建字段为id、name的用户表,并且以性别gender为分区字段的分区表。


解答:
一、填空题
1、row format delimited fields terminated by char
2、3
3、clustered by、-1

二、判断题(AI解析)

  1. 错误。Hive中的length()函数用于计算字符串的长度,而不是输出的数量。
  2. 错误。在创建外部表时加载数据文件,数据文件不会移动到数据仓库指定的目录下,而是保留在原来的位置。
  3. 错误。虽然Hive是一款数据仓库工具,但在启动Hive之前需要启动Hadoop服务,因为Hive运行在Hadoop之上。
  4. 正确。Hive默认不支持动态分区,需要通过设置参数hive.exec.dynamic.partitionhive.exec.dynamic.partition.mode来开启动态分区功能。
  5. 正确。Hive分区字段不能与已存在的字段重复,且分区字段是一个虚拟的字段,它不存放任何数据,该数据来源于装载分区表时所指定的数据值。

三、选择题
1、C 2、C 3、B 4、D 5、C

四、简答题
1、Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

2、创建表阶段:
外部表创建表的时候,不会移动数到数据仓库目录中(/user/hive/warehouse),只会记录表数据存放的路径,内部表会把数据复制或剪切到表的目录下。
删除表阶段:
外部表在删除表的时候只会删除表的元数据信息不会删除表数据,内部表删除时会将元数据信息和表数据同时删除。

五、编程题

create table t_user (id int, name string) 
partitioned by (gender string) 
row format delimited fields terminated by ',';

在这里插入图片描述

在这里插入图片描述


OK,以上就是本期知识点“Hive数据仓库”的知识啦~~ ,感谢友友们的阅读。后续还会继续更新,欢迎持续关注哟📌~
💫如果有错误❌,欢迎批评指正呀👀~让我们一起相互进步🚀
🎉如果觉得收获满满,可以点点赞👍支持一下哟~

❗ 转载请注明出处
作者:HinsCoder
博客链接:🔎 作者博客主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/502007.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

还在问要不要学Python?看完这篇你就知道了

前不久教育界的一个消息&#xff0c;引发了广泛的关注。 今年9月开学后&#xff0c;浙江三到九年级信息技术课将替换新教材&#xff0c;八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python&#xff0c;大数据、人工智能、程序设计与算法按照教材规划五六年级…

抽象类和接口(java初识)

1.抽象类 1.1抽象类的概念 在面向对象中&#xff0c;所有对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息描绘一个具体的对象&#xff0c;这样的类就是抽象类。 例子&#xff1a; 说明…

【C语言终章】预处理详解(上)

【C语言终章】预处理详解&#xff08;上&#xff09; 当你看到了这里时&#xff0c;首先要恭喜你&#xff01;因为这里就是C语言的最后一站了&#xff0c;你的编程大能旅途也将从此站开始&#xff0c;为坚持不懈的你鼓个掌吧&#xff01; &#x1f955;个人主页&#xff1a;开敲…

代码随想录算法训练营三刷 day38 | 动态规划之 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

三刷day38 509. 斐波那契数1 确定dp数组以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组 70. 爬楼梯1 确定dp数组以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组 746. 使用最小花费爬楼梯1 确定dp数组以及下标…

经验分享:开源知识库才是企业低成本搭建的最佳选择!

身为企业所有者的你&#xff0c;是否为建设企业的知识库而头疼&#xff1f;想要一个功能全面而又简单易用的知识库&#xff0c;但又担心成本过高&#xff1f;那我今天要分享的内容&#xff0c;可能会给你带来一些启示。那便是&#xff1a;开源知识库便是你企业低成本搭建的最佳…

Stable Diffusion 模型下载:epiCPhotoGasm(真实、照片)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型对照片是什么有很高的了解&#xff0c;所以…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界&#xff08;2023年&#xff09;&#xff0c;如何获取其中的自己所需的子区域&#xff08;一个小镇&#xff09;呢&#xff1f; 可以先去查一下自己的镇代码&#xff0c;我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…

武汉星起航:引领跨境电商新纪元,助力卖家实现全球业务飞跃

在全球化的时代背景下&#xff0c;越来越多的中国卖家正选择跨境电商作为他们拓展国际市场的重要途径。然而&#xff0c;对于许多新手卖家而言&#xff0c;如何进入海外市场、如何运营店铺、如何推广产品&#xff0c;都是一道道难以逾越的难题。在这个关键时刻&#xff0c;武汉…

词令用户常说的:词令关键词口令直达与词令关键词直达口令有什么区别?

词令是一种通过输入特定关键词令&#xff0c;直达该词令关联的网站、页面、程序、应用、功能、服务或目标的工具。词令可以帮助用户更快速、更便捷的直达目标的提效软件。而词令用户常说的&#xff1a;词令关键词口令直达与词令关键词直达口令有什么区别&#xff1f; 词令关键词…

【多模态对比学习】我遇到的坑

对比学习踩坑记录 本文是对过去几个月来利用对比学习的思想来优化多模态学习任务的思路的总结&#xff0c;主要包含以下几个方面&#xff1a;为什么要用对比学习、跨模态中对比学习怎么用、对比的过程中负样本是不是越多越好、要不要推远所有的负样本、样本之间的语义碰撞如何缓…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

【Go】二、Go的基本数据类型

文章目录 0、进制1、变量的声明2、数据类型3、整型4、浮点型5、字符类型6、布尔类型7、字符串类型8、基本数据类型的默认值9、类型转换10、基本类型转String11、String转其他类型 0、进制 N进制&#xff0c;逢N进一 1、变量的声明 //声明 赋值 var age int 18//声明、赋值、…

基于单片机20v数字电压表仿真系统设计

**单片机设计介绍&#xff0c;基于单片机20v数字电压表仿真系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机20V数字电压表仿真系统设计是一个结合了硬件与软件设计的综合性项目。以下是对该设计概要的详细描述…

使用 CSS 实现多立方体悬停颜色效果实现

使用 CSS 实现多立方体悬停效果实现 效果展示 CSS 知识点 filter 属性的 hue-rotate 值运用使用 CSS 实现立方体 场景布局分析 从效果图可以看出&#xff0c;要实现 3*3 的立方体集合&#xff0c;我们需要考虑一下怎么安排小立方体的布局。我这里的做法是使用span实现单个小…

账号微服务短信验证码发送工具单元测试

账号微服务短信验证码发送工具单元测试 注意sms的 app-code #----------sms短信配置-------------- sms:app-code: dd7829bedfaf4373875aa91abba82523template-id: JM1000372package net.xdclass.config;import org.springframework.context.annotation.Bean; import org.spri…

klmanga 章节链接获取

两年前还是可以直接爬的&#xff0c;现在章节不显示了 直接爬取下来的源码章节显示loading&#xff0c;在源码中可以看到是通过js加载出来的&#xff0c;搜索loadChapterDate dataFile atob(FR)&#xff0c;这是将FR的值用base64解码赋予dataFile 根据这段var paramsnew …

原生JS/JQuery封装请求工具类

原生JS的用途 原生 JavaScript 是一种用于开发网络应用程序的编程语言。它可以用于网页开发、服务器端开发和移动应用开发等多个方面。以下是原生 JavaScript 的一些主要用途&#xff1a; 网页开发&#xff1a;原生 JavaScript 可用于处理 DOM&#xff08;文档对象模型&#x…

指针知识大礼包,让你的编程之路更顺畅(四)

1. 回调函数是什么&#xff1f; 2. qsort使⽤举例 3. qsort函数的模拟实现 4. sizeof和strlen的对⽐ 5. 数组和指针笔试题解析 6. 指针运算笔试题解析 正文开始&#xff1a; 1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过 函数指针 调⽤的函数。 如果你把函数的…

【JavaSE】一维数组和二维数组详解

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 一维数组…

动态表情包怎么制作?超简单的gif动画制作方法

动态gif表情包非常的收大众欢迎&#xff0c;小编也不例外。日常聊天斗图中都少不了它们的存在&#xff0c;gif表情包能够调节聊天的氛围。那么&#xff0c;这种gif表情包是怎么做的呢&#xff1f;下面就跟着小编一起来看看制作gif动画图片的方法&#xff0c;不需要下载任何软件…