当前位置: 首页 > news >正文

Hadoop三 分布式sql计算hive入门

一 分布式SQL计算

在这里插入图片描述
对数据进行统计分析,SQL是目前最为方便的编程工具。

大数据体系中充斥着非常多的统计分析场景,所以,使用SQL去处理数据,在大数据中也是有极大的需求的。MapReduce支持程序开发(Java、Python等),但不支持SQL开发。

二 分布式SQL计算 - Hive

Apache Hive是一款分布式SQL计算的工具, 其主要功能是:将SQL语句 翻译成MapReduce程序运行
在这里插入图片描述
基于Hive为用户提供了分布式SQL计算的能力,写的是SQL、执行的是MapReduce

为什么使用Hive
使用Hadoop MapReduce直接处理数据所面临的问题

  • 人员学习成本太高 需要掌握java、Python等编程语言
  • MapReduce实现复杂查询逻辑开发难度太大

使用Hive处理数据的好处

  • 操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)
  • 底层执行MapReduce,可以完成分布式海量数据的SQL处理

总结

  1. 什么是分布式SQL计算?
    以分布式的形式,执行SQL语句,进行数据统计分析。
  2. Apache Hive是做什么的?
    很简单,将SQL语句翻译成MapReduce程序,从而提供用户分布式SQL计算的能力。

传统MapReduce开发:写MR代码->得到结果
使用Hive开发:写SQL->得到结果
底层都是MR在运行,但是使用层面上更加简单了。

hive和mysql的区别有

1、查询语言不同:hive是hql语言,mysql是sql语句;

2、数据存储位置不同:hive是把数据存储在hdfs上,而mysql数据是存储在自己的系统中;

3、数据格式:hive数据格式可以用户自定义,mysql有自己的系统定义格式;

4、数据更新:hive不支持数据更新,只可以读,不可以写,而sql支持数据更新;

5、索引:hive没有索引,因此查询数据的时候是通过mapreduce很暴力的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引;

6、延迟性:hive延迟性高,原因就是上边一点所说的,而mysql延迟性低;

7、数据规模:hive存储的数据量超级大,而mysql只是存储一些少量的业务数据;

8、底层执行原理:hive底层是用的mapreduce,而mysql是excutor执行器

三 模拟实现hive功能

场景,模拟体验设计一款Hive工具需要哪些不可或缺的功能?如果让你设计Hive这款软件,要求能够实现

  • 用户只编写sql语句
  • Hive自动将sql转换MapReduce程序并提交运行
  • 处理位于HDFS上的结构化数据。

元数据管理
假设有如下结构化文本数据存储在HDFS中
在这里插入图片描述
假设要执行: SELECT city, COUNT(*) FROM t_user GROUP BY city;
对这个SQL翻译成MapReduce程序,会出现哪些困难?有如下问题

  • 数据文件在哪里?
  • 使用什么符号作为列的分隔符?
  • 哪些列可以作为city使用?
  • city列是什么类型的数据?

在这里插入图片描述
这些信息同时也需要有地方存储起来,方便多次使用。如何存储最好呢?很简单,找一个数据库即可,比如MySQL。

所以,我们可以总结出来第一个点, 即构建分布式SQL计算, 需要拥有:
元数据管理功能,即:

  • 数据位置
  • 数据结构
  • 等对数据进行描述

在这里插入图片描述
解析器

解决了元数据管理后,我们还有一个至关重要的步骤, 即完成SQL到MapReduce转换的功能。
在这里插入图片描述
我们称呼它为:SQL解析器,期待它能做到:

  • SQL分析
  • SQL到MapReduce程序的转换
  • 提交MapReduce程序运行并收集执行结果

基础架构

所以,当解析器也拥有了之后,我们就完成了一款基于MapReduce的,分布式SQL执行引擎的基础构建。即,核心组件需要有:

  • 元数据管理,帮助记录各类元数据
  • SQL解析器,完成SQL到MapReduce程序的转换

当拥有这2个组件, 基本上分布式SQL计算的能力就实现了

那么,大家猜一猜,Hive是否也包含这两个组件呢?

Hive架构

Apache Hive其2大主要组件就是:SQL解析器以及元数据存储, 如下图
在这里插入图片描述

四 Hive基础架构

Hive架构图

在这里插入图片描述
Hive组件

元数据存储

通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
– Hive提供了 Metastore 服务进程提供元数据管理功能

在这里插入图片描述
Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器

完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。
这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar文件即Java代码中。
在这里插入图片描述

用户接口

包括 CLI、JDBC/ODBC、WebGUI。其中,CLI(command line interface)为shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。WebGUI是通过浏览器访问Hive。

– Hive提供了 Hive Shell、 ThriftServer等服务进程向用户提供操作接口
在这里插入图片描述

总结
Hive的核心架构包含哪些?

  • 元数据管理,称之为Metastore服务
  • SQL解析器(Driver驱动程序),完成SQL解析、执行优化、代码提交等功能
  • 用户接口:提供用户和Hive交互的功能

在这里插入图片描述

五 Hive部署

Hive是分布式运行的框架还是单机运行的?

Hive是单机工具,只需要部署在一台服务器即可。Hive虽然是单机的,但是它可以提交分布式运行的MapReduce程序运行。

规划

我们知道Hive是单机工具后,就需要准备一台服务器供Hive使用即可。
同时Hive需要使用元数据服务,即需要提供一个关系型数据库,我们也选择一台服务器安装关系型数据库即可。

所以:为了简单起见,都安装到node1服务器上。
在这里插入图片描述
安装MySQL数据库
我们在node1节点使用yum在线安装MySQL5.7版本
在这里插入图片描述
具体命令如下

# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm# yum安装Mysql
yum -y install mysql-community-server# 启动Mysql设置开机启动
systemctl start mysqld
systemctl enable mysqld# 检查Mysql服务状态
systemctl status mysqld# 第一次启动mysql,会在日志文件中生成root用户的一个随机密码,使用下面命令查看该密码
grep 'temporary password' /var/log/mysqld.log# 修改root用户密码
mysql -u root -p -h localhost
Enter password:mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root!@#$';# 如果你想设置简单密码,需要降低Mysql的密码安全级别
set global validate_password_policy=LOW; # 密码安全级别低
set global validate_password_length=4;	 # 密码长度最低4位即可# 然后就可以用简单密码了(课程中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';/usr/bin/mysqladmin -u root password 'root'grant all privileges on *.* to root@"%" identified by 'root' with grant option;  
flush privileges;

配置Hadoop
Hive的运行依赖于Hadoop(HDFS、MapReduce、YARN都依赖),同时涉及到HDFS文件系统的访问,所以需要配置Hadoop的代理用户,即设置hadoop用户允许代理(模拟)其它用户

配置如下,内容在Hadoop的core-site.xml中,并分发到其它节点,且重启HDFS集群
在这里插入图片描述
下载解压Hive

# 切换到hadoop用户
su - hadoop
# 下载Hive安装包:
http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
# 解压到node1服务器的:/export/server/内
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/
# 设置软连接
ln -s /export/server/apache-hive-3.1.3-bin /export/server/hive

提供MySQL Driver包
下载MySQL驱动包:
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar

将下载好的驱动jar包,放入:Hive安装文件夹的lib目录内

mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/

配置Hive
在Hive的conf目录内,新建hive-env.sh文件,填入以下环境变量内容:

export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib

在Hive的conf目录内,新建hive-site.xml文件,填入以下内容:

<configuration><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>123456</value></property><property><name>hive.server2.thrift.bind.host</name><value>node1</value></property><property><name>hive.metastore.uris</name><value>thrift://node1:9083</value></property><property><name>hive.metastore.event.db.notification.api.auth</name><value>false</value></property></configuration>

初始化元数据库

Hive的配置已经完成,现在在启动Hive前,需要先初始化Hive所需的元数据库。

  • 在MySQL中新建数据库:hive
CREATE DATABASE hive CHARSET UTF8;
  • 执行元数据库初始化命令:
cd /export/server/hive
bin/schematool -initSchema -dbType mysql -verbos

初始化成功后,会在MySQL的hive库中新建74张元数据管理的表。

启动Hive(使用Hadoop用户)

  • 确保Hive文件夹所属为hadoop用户
  • 创建一个hive的日志文件夹:
mkdir /export/server/hive/logs
  • 启动元数据管理服务(必须启动,否则无法工作)
    前台启动:bin/hive --service metastore
    后台启动:nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
  • 启动客户端,二选一(当前先选择Hive Shell方式)
    • Hive Shell方式(可以直接写SQL): bin/hive
    • Hive ThriftServer方式(不可直接写SQL,需要外部客户端链接使用): bin/hive --service hiveserver2

六 Hive初体验

体验在Hive中使用SQL来处理数据

首先,确保启动了Metastore服务。
可以执行:bin/hive,进入到Hive Shell环境中,可以直接执行SQL语句。
创建表

CREATE TABLE test(id INT, name STRING, gender STRING);

插入数据

INSERT INTO test VALUES(1, ‘王力红’, ‘男’), (2, ‘周杰轮’, ‘男’), (3, ‘林志灵’, ‘女’);

查询数据

SELECT gender, COUNT(*) AS cnt FROM test GROUP BY gender;

通过YARN控制台可以看到,Hive是将SQL翻译成MapReduce程序运行在YARN中

验证Hive的数据存储

Hive的数据存储在HDFS的:hdfs://node1:8020/user/hive/warehouse

验证SQL语句启动的MapReduce程序

打开YARN的WEB UI页面查看任务情况:http://node1:8088

七 Hive客户端

7.1 HiveServer2 & Beeline

HiveServer2服务

在启动Hive的时候,除了必备的Metastore服务外,我们前面提过有2种方式使用Hive:

  • 方式1: bin/hive 即Hive的Shell客户端,可以直接写SQL
  • 方式2: bin/hive --service hiveserver2
    后台执行脚本:nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

bin/hive --service metastore,启动的是元数据管理服务
bin/hive --service hiveserver2,启动的是HiveServer2服务

HiveServer2是Hive内置的一个ThriftServer服务,提供Thrift端口供其它客户端链接,可以连接ThriftServer的客户端有:

  • Hive内置的 beeline客户端工具(命令行工具)
  • 第三方的图形化SQL工具,如DataGrip、DBeaver、Navicat等

Hive的客户端体系如下
在这里插入图片描述
启动

在hive安装的服务器上,首先启动metastore服务,然后启动hiveserver2服务。

#先启动metastore服务 然后启动hiveserver2服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

beeline

  • 在node1上使用beeline客户端进行连接访问。需要注意hiveserver2服务启动之后需要稍等一会才可以对外提供服务。
  • Beeline是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,协议的地址是:jdbc:hive2://node1:10000
[root@node1 ~]# /export/server/hive/bin/beeline  
Beeline version 3.1.2 by Apache Hive
beeline> ! connect jdbc:hive2://node1:10000
Connecting to jdbc:hive2://node1:10000
Enter username for jdbc:hive2://node1:10000: root
Enter password for jdbc:hive2://node1:10000: 
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://node1:10000>

在这里插入图片描述

7.2 DataGrip & DBeaver

Hive第三方客户端

DataGrip、Dbeaver、SQuirrel SQL Client等可以在Windows、MAC平台中通过JDBC连接HiveServer2的图形界面工具;这类工具往往专门针对SQL类软件进行开发优化、页面美观大方,操作简洁,更重要的是SQL编辑环境优雅;SQL语法智能提示补全、关键字高亮、查询结果智能显示、按钮操作大于命令操作;

在这里插入图片描述

Hive可视化工具客户端 - DataGrip

DataGrip是由JetBrains公司推出的数据库管理软件,DataGrip支持几乎所有主流的关系数据库产品,如DB2、Derby、MySQL、Oracle、SQL Server等,也支持几乎所有主流的大数据生态圈SQL软件,并且提供了简单易用的界面,开发者上手几乎不会遇到任何困难。
在这里插入图片描述
DataGrip使用教程

step1:windows创建工程文件夹
在这里插入图片描述
step2:DataGrip中创建新Project
在这里插入图片描述

step3:关联本地工程文件夹
在这里插入图片描述
step4:DataGrip连接Hive
在这里插入图片描述
step5:配置Hive JDBC连接驱动
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
step6:返回,配置Hiveserver2服务连接信息
在这里插入图片描述
step6:返回,配置Hiveserver2服务连接信息
在这里插入图片描述

相关文章:

Hadoop三 分布式sql计算hive入门

一 分布式SQL计算 对数据进行统计分析&#xff0c;SQL是目前最为方便的编程工具。 大数据体系中充斥着非常多的统计分析场景&#xff0c;所以&#xff0c;使用SQL去处理数据&#xff0c;在大数据中也是有极大的需求的。MapReduce支持程序开发&#xff08;Java、Python等&#…...

【C++】C++中的动态内存分配(new和delete)

C中的动态内存分配&#xff08;分配堆空间&#xff09; 1. C语言与C动态内存分配2. 使用3.malloc和new有什么区别示例代码&#xff1a; 1. C语言与C动态内存分配 C语言 malloc calloc realloc free 函数 C new关键字分配堆空间 delete关键字释放堆空间 2. 使用 第一种&#…...

Go 代理爬虫

现在注册&#xff0c;还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器&#xff0c;通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支&#xff1a; basic 分支包含供 Go Proxy Servers 这篇文章改动的基础代码…...

推陈换新系列————java8新特性(编程语言的文艺复兴)

文章目录 前言一、新特性秘籍二、Lambda表达式2.1 语法2.2 函数式接口2.3 内置函数式接口2.4 方法引用和构造器引用 三、Stream API3.1 基本概念3.2 实战3.3 优势 四、新的日期时间API4.1 核心概念与设计原则4.2 核心类详解4.2.1 LocalDate&#xff08;本地日期&#xff09;4.2…...

蓝桥杯算法实战分享

蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛&#xff0c;涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧&#xff0c;帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...

树莓集团园区运营案例:成都国际数字影像产业园的运营逻辑​

成都国际数字影像产业园的成功运营&#xff0c;是树莓集团在产业园运营领域的典型案例。其运营逻辑可以归纳为以下几点&#xff1a; 一、政企合作&#xff0c;优势互补 园区由树莓集团与金牛区政府合作共建&#xff0c;这种模式充分利用双方的优势。政府提供政策支持、土地资…...

【动态规划】最长公共子序列问题 C++

问题描述 子序列&#xff1a;序列Z是原序列X的子序列&#xff0c;当且仅当Z的元素在X中按严格递增的下标顺序出现&#xff08;不要求连续&#xff09;。例如X{A,B,C,B,D,A,B}中&#xff0c;Z{B,C,D,B}是子序列&#xff0c;对应X的下标2→3→5→7。公共子序列&#xff1a;若序列…...

K8s故障排查手册:从Pod崩溃到网络不通

本文基于数百个真实生产环境案例&#xff0c;系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景&#xff0c;结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段&#xff0c;为企业运维团…...

HTML DOM 基础:用「家族树」理解网页操控术

HTML DOM 基础:用「家族树」理解网页操控术 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),也就是DOM。 DOM 是JavaScript 操作网页的接口,它的作用是将网页转为一个JavaScript 对象,从而可以用脚本进行各种操作(比如对元素增删内容)。 浏览…...

扩展卡尔曼滤波

1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统&#xff0c;扩展卡尔曼滤波 则扩展到了非线性系统&#xff0c;核心原理就是将非线性系统线性化&#xff0c;主要用的的知识点是 泰勒展开&#xff08;我另外一篇文章的链接&#xff09;&#xff0c;如下是泰勒展开的公式…...

【AI News | 20250326】每日AI进展

AI News 1、Gemini 2.5&#xff1a;谷歌DeepMind最智能AI模型亮相 谷歌DeepMind推出Gemini 2.5&#xff0c;其最智能AI模型。首款实验版本Gemini 2.5 Pro在多项基准测试中领先&#xff0c;登顶LMArena榜首&#xff0c;展现卓越的推理与编码能力。该模型为“思考模型”&#xf…...

智能汽车图像及视频处理方案,支持视频星轨拍摄能力

美摄科技作为智能汽车图像及视频处理领域的先行者&#xff0c;正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案&#xff0c;一个集高效性、智能化、画质增强于一体的创新解决方案&#xff0c;旨在重塑智能汽车图像画质的新标准&#xff0c;并支持前…...

AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问

环境&#xff1a; AI-Sphere-Butler WSL2 Ubuntu22.04 Nginx 问题描述&#xff1a; AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理&#xff0c;并将HTTP升级成HTTPS&#xff0c;用于移动设备访问 解决方案&#xff1a; 一、生成加密证书 1.配置OpenSSL生成本地不加…...

SpringBoot项目图片上传成功,访问404

1. 配置文件&#xff0c;静态资源访问路径&#xff0c;记得加上file: 2.上传文件路径 以上配置是正确的&#xff0c;这样才可以正确映射 之前我再配置文件写的是,这是错的&#xff0c; 因为&#xff1a;classpath写法和绝对路径无法匹配 .addResourceLocations("classpat…...

鸿蒙学习笔记(2)-国际化配置、ArkTS简述

一、国际化配置 根据操作系统语言实现手动或者自动切换中英文&#xff0c;提供了多套语言包。编写过程中注意不要将文字写死&#xff0c;将文本放在指定的语言包文件夹中来保存&#xff0c;鸿蒙开发中默认实现中英文的国际化配置。若要实现中英文转化&#xff0c;需要在三个地…...

ES 字段的映射定义了字段的类型及其行为

在 Elasticsearch 中&#xff0c;字段的映射定义了字段的类型及其行为。你提供的 content_answer 字段映射如下&#xff1a; Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …...

游戏引擎学习第183天

回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题&#xff0c;但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作&#xff0c;我们正在把一些内容整合进来&#xff0c;甚至是之前通过不同方式记录时间戳的旧平台层部分&#xff0c;现在也…...

未来二十年的量子计算

在未来二十年间&#xff0c;量子计算领域将迎来翻天覆地的变革&#xff0c;从实验室走向更广阔的应用舞台&#xff0c;重塑众多行业的格局。 在硬件层面&#xff0c;量子芯片的研发将持续精进。超导量子比特技术会不断突破&#xff0c;进一步提升比特数量与质量。当前&#xff…...

SpringBoot通过Map实现天然的策略模式

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBoot通过Map实现天然的策略模式 ⏱️ 创作时间&#xff1a; 202…...

MTKAndroid12 解决SystemUI下拉框中,长按WIFI图标会导致崩溃问题

解决SystemUI下拉框中&#xff0c;长按WIFI图标会导致崩溃问题 文章目录 场景参考资料修改文件解决方案日志源码分析 总结 场景 在部分产品中偶发性发现&#xff0c; SystemUI下拉框下拉后长按WIFI图标会导致崩溃问题&#xff0c;有时候是截屏、点击Home 按键后&#xff0c;长…...

Springboot 学习 之 Shardingsphere 按照日期水平分表(二)

文章目录 业务场景依赖配置特别注意优劣参考资料 业务场景 在 报表 等 大数据量 且需要 按照日期显示 的业务场景下&#xff0c;按照 日期水平分表 是一个不错的选择 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…...

WordPress超级菜单插件UberMenu v3.78汉化版

一、插件介绍 UberMenu 是一款功能强大的 WordPress 超级菜单插件,能够帮助站长创建响应式、可自定义的多级菜单。该插件支持动态内容加载、图标、图片、搜索框等丰富功能,并且兼容大多数 WordPress 主题。 UberMenu v3.78 经过完整汉化,适用于中文站点用户,让操作更加直观…...

观成科技:海莲花利用MST投递远控木马

概述 “海莲花”&#xff0c;又名“OceanLotus”&#xff0c;该APT组织是长期针对中国境内&#xff0c;且攻击活动十分活跃的组织。近期发现该组织使用了MSI文件滥用的新手法&#xff0c;将远程控制木马植入MST文件来修改MSI文件安装时的执行流程&#xff0c;在安装期间运行恶…...

Node.js系列(5)--数据库操作指南

Node.js数据库操作指南 &#x1f4be; 引言 数据库操作是Node.js应用开发中的关键环节。本文将深入探讨Node.js数据库操作的实现方案&#xff0c;包括连接管理、查询优化、事务处理等方面&#xff0c;帮助开发者构建高效可靠的数据访问层。 数据库操作概述 Node.js数据库操…...

最大异或对 The XOR Largest Pair

题目来自洛谷网站&#xff1a; 思路&#xff1a; 两个循环时间复杂度太高了&#xff0c;会超时。 我们可以先将读入的数字&#xff0c;插入到字典树中&#xff0c;从高位到低位。对每个数查询的时候&#xff0c;题目要求是最大的异或对&#xff0c;所以我们选择相反的路径&am…...

简单介绍My—Batis

1.什么是My—Batis&#xff1f; My—Batis是一个持久层框架&#xff0c;提供了sql映射功能&#xff0c;能方便的将数据库表和java对象进行映射&#xff0c;通过My—Batis可以将项目中的数据存储在数据库中&#xff0c;以便我们进行调用。值得注意的是My—Batis和spring不是一回…...

案例分享|树莓派媒体播放器,重构商场广告的“黄金三秒”

研究显示&#xff0c;与传统户外广告相比&#xff0c;数字户外广告在消费者心中的记忆率提高了17%&#xff0c;而动态户外广告更是能提升16%的销售业绩&#xff0c;整体广告效率提升了17%。这一显著优势&#xff0c;使得越来越多资源和技术流入数字广告行业。 户外裸眼3D广告 无…...

硬件基础(5):(3)二极管的应用

文章目录 [toc]1. **整流电路****功能**&#xff1a;**工作原理**&#xff1a;**应用实例**&#xff1a;电路组成&#xff1a;整流过程&#xff1a;电路的应用&#xff1a; 2. **稳压电路****功能**&#xff1a;**工作原理**&#xff1a;**应用实例**&#xff1a;电路组成及功能…...

数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)

对于逻辑关系为“一对一”的数据&#xff0c;除了用顺序表和链表存储外&#xff0c;还可以用栈结构存储。 栈是一种“特殊”的线性存储结构&#xff0c;它的特殊之处体现在以下两个地方&#xff1a; 1、元素进栈和出栈的操作只能从一端完成&#xff0c;另一端是封闭的&#xf…...

vscode终端不识别npm 无法解析npm

vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑&#xff0c;寻思安装各种环境&#xff0c;一顿操作猛如虎&#xff0c;当最后一个打开vscode后&#xff0c;运行项目发现&#xff0c;新建终端>npm run dev 无法识别。 在cmd 中 打node -…...

java泛型的协变、逆变和不变

引言 我们在看开源框架经常会看到泛型来定义数据类型。 有时候&#xff0c; <? extends T> 和 <? super T> 这样带通配符的泛型参数。 这种通配符的泛型是什么意思怎么用&#xff1f;&#xff1f;&#xff1f;&#xff1f; 概念 型变&#xff1a; 用来描述类…...

effective Java 学习笔记(第二弹)

effective Java 学习笔记&#xff08;第一弹&#xff09; 整理自《effective Java 中文第3版》 本篇笔记整理第3&#xff0c;4章的内容。 重写equals方法需要注意的地方 自反性&#xff1a;对于任何非空引用 x&#xff0c;x.equals(x) 必须返回 true。对称性&#xff1a;对于…...

Spring BeanFactoryPostProcessor 和 BeanPostProcessor有什么用?

BeanFactoryPostProcessor 和 BeanPostProcessor 都是 Spring 框架中非常重要的扩展点&#xff0c;我们在开发中可以利用 Spring 容器实例化 Bean、配置 Bean 以及初始化 Bean 的过程中进行自定义的干预。但它们的作用时机和作用对象不同。 1. BeanFactoryPostProcessor: 作用…...

Centos7 Gitlab17部署

确保你的安装源正常 1.安装依赖项 sudo yum install -y curl policycoreutils-python openssh-server openssh-clients postfix 2.安装Gitlab (1)添加仓库 curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash (2) 安装Gitl…...

一文解读DeepSeek在工业制造领域的应用

引言 在当今数字化浪潮席卷全球的背景下&#xff0c;各个行业都在积极寻求创新与变革&#xff0c;工业制造领域也不例外。然而&#xff0c;传统工业制造在生产效率、质量控制、成本管理等方面面临着诸多挑战。在这一关键时期&#xff0c;人工智能技术的兴起为工业制造带来了新的…...

基于动态 FOF(基金中的基金)策略的基金交易推荐系统的设计与实现思路

下面为你呈现一个基于动态 FOF&#xff08;基金中的基金&#xff09;策略的基金交易推荐系统的设计与实现思路&#xff0c;同时给出一个简单的 Python 示例代码。 系统设计 1. 需求分析 收集各类基金的历史数据&#xff0c;涵盖净值、收益率、风险指标等。依据动态 FOF 策略…...

第一次程序Hello Python

Python环境安装 安装地址 安装地址 https://www.python.org/ 1. 安装Python 下载完成后&#xff0c;双击安装包&#xff08;如python-3.13.2.exe&#xff09;&#xff0c;按照提示进行安装。在安装过程中&#xff0c;确保勾选“Add Python to PATH”选项&#xff0c;以便在命…...

nvm 切换node 版本 但是没有带星号*

在 Windows 系统中配置 NVM_SYMLINK 环境变量的步骤如下&#xff1a; 1️⃣ 设置变量路径 变量名&#xff1a;NVM_SYMLINK 变量值&#xff1a;建议设置为 C:\Program Files\nodejs&#xff08;需与后续步骤中 NVM 配置的符号链接路径一致&#xff09; 2️⃣ 配置系统环境变量…...

Java定时任务的三重境界:从单机心跳到分布式协调

《Java定时任务的三重境界&#xff1a;从单机心跳到分布式协调》 本文将以生产级代码标准&#xff0c;揭秘Java定时任务从基础API到分布式调度的6种实现范式&#xff0c;深入剖析ScheduledThreadPoolExecutor与Quartz Scheduler的线程模型差异&#xff0c;并给出各方案的性能压…...

1.NextJS基础

NextJS注意要点 文件用来定义路由&#xff0c;folder name becomes the route name注意区分客户端渲染和服务器渲染 html渲染完成后给到客户端&#xff08;此时网页内容已经全部提供&#xff09;&#xff0c;有利于crawler和优化seo逻辑更简单request deduplication减少API请求…...

晶晨/全志/联发科芯片系列电视盒子改固件包教程

声明&#xff1a;对电视盒子进行改包&#xff08;修改固件包&#xff09;是一项有一定技术门槛且存在风险的操作&#xff0c;可能会导致盒子变砖、失去保修等问题&#xff0c;同时私自修改固件可能违反相关法律法规和使用协议。以下为你提供一个通用的大致改包教程&#xff0c;…...

2025最新3个wordpress好用的主题

红色大气的wordpress企业主题&#xff0c;适合服务行业的公司搭建企业官方网站使用。是一款专为中小企业和个人开发者设计的WordPress主题&#xff0c;旨在提供专业的网站构建解决方案。 通过此WordPress主题&#xff0c;用户可以轻松创建和维护一个专业的企业网站&#xff0c…...

GZCTF平台搭建及题目上传

前言 我用手里的Ubuntu虚拟机搭建的&#xff0c;大家根据自己的实际情况来吧 安装及部署 首先&#xff0c;你的虚拟机需要有Docker和Docker-Compose&#xff0c;前者可以看我之前的文章&#xff0c;另外一个可以输入下面的命令安装&#xff0c;注意先获取管理员权限&#xff…...

openGauss关联列数据类型不一致引起谓词传递失败

今天分享一个比较有意思的案例 注意&#xff1a;因为原始SQL很长&#xff0c;为了方便排版&#xff0c;简化了SQL 下面SQL跑60秒才出结果&#xff0c;客户请求优化 select dtcs.owner, dtcs.table_name, dtcs.column_name, dct.commentsfrom dba_tab_columns dtcsleft outer j…...

【网络安全基础学习】渗透测试工具--Burp Suite详细教程

Burp Suite与SniffMaster&#xff1a;网络安全工具的双剑合璧 Burp Suite&#xff08;简称BP&#xff09;是一款用于攻击web应用程序的集成平台。它包含了许多工具&#xff0c;并为这些工具设计了许多接口&#xff0c;以促进加快攻击应用程序的过程。然而&#xff0c;除了Burp…...

手机测试,工作中学习

要学习各种机型的截图方式、开发模式在哪。 荣耀机型&#xff1a;截图&#xff1a;关节快速敲两下。开发者模式在“系统和更新”里。 1.出现缺陷&#xff0c;需要获取日志。 学习adb生成日志&#xff1a;当测试中出现缺陷的&#xff0c;使用adb logcat -d > d:/log.txt …...

ctfshow WEB web2

1.查当前数据库名称 or 11 union select 1,database(),3 limit 1,2;#-- 得到数据库名称web2 2.查看数据库表的数量 or 11 union select 1,(select count(*) from information_schema.tables where table_schema web2),3 limit 1,2;#-- 得到数据库表数量为2 3.查表的名字 第…...

大疆上云api介绍

概述 目前对于 DJI 无人机接入第三方云平台,主要是基于 MSDK 开发定制 App,然后自己定义私有上云通信协议连接到云平台中。这样对于核心业务是开发云平台,无人机只是其中一个接入硬件设备的开发者来说,重新基于 MSDK 开发 App 工作量大、成本高,同时还需要花很多精力在无人…...

ASP.NET Web API + VUE3 整合阿里云OSS,后端API生成预签名上传Url,前端VUE进行上传

1、后端API 我用的是.net sdk6&#xff0c;所以先安装了这个Aliyun.OSS.SDK.NetCore 下面是后端生成上传Url的参考代码&#xff0c;主意request.ContentType&#xff0c;如果这里要是设置了&#xff0c;那么前端也要设置成一样的&#xff0c;如果前端是获取文件的contentType&…...

Java基础 3.22

1.break练习 //1-100之内的数求和&#xff0c;求当和第一次大于20的当前数i public class Break01 {public static void main(String[] args) {int n 0;int count 0;for (int i 1; i < 100; i) {count i;System.out.println("当前和为" count);if (count &g…...