Hive基础概论

news2025/2/28 23:13:48

HIVE 基础

  • Hive基础
    • 什么是Hive?
    • 为什么用Hive?
    • Hive与Hadoop的关系
    • Hive架构、组件
      • 组件
        • 用户接口
        • 元数据存储
        • Driver驱动程序,包括语法解析器、计划编译器。优化器、执行器
        • 执行引擎
    • 数据模型
      • Data Model
      • DataBase 数据库
      • Tables 表
      • Partitions 分区
      • Buckets分桶
    • Hive与MySQL的区别
    • Hive元数据
    • Metastore配置方式
      • 需知
      • 内嵌模式
          • 安装
      • 本地模式
        • 安装
          • MySQL安装
          • 安装
      • 远程模式
        • 安装
    • bin/hive 、bin/beeline
      • bin/hive 客户端
        • bin/beeline 客户端
    • 初体验


Hive基础

什么是Hive?

Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,简称为Hive语言查询(HQL),用于访问和分析存储在Hadoop文件中的大型数据集

hive核心是将HQL转换为MapReduce程序,然后将程序提交给Hadoop集群执行.

为什么用Hive?

使用Hadoop MapReduce直接处理数据面临着以下问题:

  1. 人员学习成本高,需要掌握Java语言 (阿哲0.0这个没话说,因为MR或者说Hadoop自身是Java实现)
  2. MR实现复杂查询开发难度太大(MR虽然说是模板代码,但是如果复杂查询可能单个MR程序远远不够)

使用Hive处理数据的好处:

  1. 操作接口采用类似于SQL的语法,提供快速开发的能力(简单、容易上手)
  2. 避免直接写MR。减少开发人员学习成本
  3. 支持自定义函数,功能扩展方便
  4. 背靠Hadoop,擅长存储分析海量数据集

Hive与Hadoop的关系

从功能上说,数据仓库软件至少具备两种能力:存储数据能力、分析数据能力

Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力,只不过hive并不是自己实现了上述的两种能力,而是借助了Hadoop。Hive利用HDFS存储数据,借助MapReduce 查询分析数据,看上去好像全是Hadoop,实际上hive最大的魅力在于用户专注于编写HQL,hive帮你转换成MapReduce程序完成对数据的分析

Hive架构、组件

架构图

image-20230521114716961

组件

用户接口

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

元数据存储

通常是存储在关系数据库如MySQL/derby中,hive中的元数据包括表的名字、表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录

Driver驱动程序,包括语法解析器、计划编译器。优化器、执行器

完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成,生成查询计划存储在HDFS中,并在随后由执行引擎调用执行

执行引擎

Hive本身并不直接处理数据文件,而是通过执行引擎处理,当下Hive支持MapReduce、Tez、Spark 3中执行引擎

数据模型

Data Model

数据模型: 用来描述数据、组织数据和对数据进行操作,是对显示时间数据特征的描述,Hive的数据模型类似于RDBMS库表结构的模型,此外还有自己特有的模型。Hive数据可以在粒度级别上分为三类:

  • Table 表
  • Partition 分区
  • Bucket 分桶

image-20230521152404386

DataBase 数据库

Hive 作为一个数据仓库,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成,默认数据库default

Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中由参数 hive.metastore.warehousr.dir指定,默认值为/user/hive/warehouse

因此Hive中的数据库在HDFS上的存储路径为: ${hive.metastore.warehouse.dir}/databasename.db

Tables 表

Hive表与关系数据库中的表相同,Hive中的表所对应的数据通常是存储在HDFS中,而表相关的元数据锁是存储在RDBMS中
Hive中表结构存储在HDFS上的存储路径为${hive.metastore.warehouse.dir}/databasename.db/tablename

Partitions 分区

Partition 分区时Hive的一种优化手段表,分区是指根据分区列(例如 日期 day)的值将表划分为不同的分区,这样子可以更快的对指定分区数据进行查询
分区在存储层面上的表现为:table表目录下以子文件夹形式存在,一个文件夹表示一个分区,子文件夹命名标准: 分区列=分区值
Hive还支持分区下继续创建分区,所谓的多重分区。

Buckets分桶

Bucket分桶表时Hive的一种优化手段,分桶是指根据表中字段(例如 标号ID)的值经过hash计算规则将数据文件划分成指定的若干个小文件,

分桶规则hashfunc(字段)%桶的个数 ,余数相同的分到同一个文件中
image-20230521154757131

分桶的好处时可以优化join查询和方便抽样查询。Bucket分桶表在HDFS中的表现为 同一个目录下数据根据hash散列之后编程若干个文件

Hive与MySQL的区别

hive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都十分相似,但是应用场景却完全不同,Hive适合用来做海量数据的离线分析,Hive的定位是数据仓库,分析面向OLAP系统

HiveMySQL
定位数据仓库数据库
查询语言HQLSQL
使用场景离线数据分析业务数据事务处理
数据存储HDFSLocal FileSystem
执行引擎MR、Tez、SparkExcutor
执行延迟
处理数据规模
常见操作导入数据、查询增删改查

Hive元数据

什么是元数据? 元数据,是描述数据的数据。主要是描述属性的信息,用来支持如指示存储位置、历史数据、资源查询、文件记录等功能

Hive Metadata
即Hive的元数据,包括用hive创建的database、table、表的位置、类型、属性、字段顺序类型等元信息。元数据存储在关系型数据库中,如hive内置的Derby或者第三方,如MySQL。

Hive Metastore
即Hive元数据服务,Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。
有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore服务即可。某种程度上也保证了hive元数据的安全性

image-20230522132838375

Metastore配置方式

metastore服务配置有三种模式:内嵌模式、本地模式、远程模式,区分三种配置方式的关键未提示弄清楚两个问题:

  1. Metastore服务是否需要单独配置、单独启动?
  2. Metastore是存储在内置derby中。还是第三方RDBMS,比如说MySQL中
内嵌模式本地模式远程模式
Metastore单独配置、启动
Metadata存储介质DerbyMySQLMySQL

需知

在这里我们省略了一些前置步骤,比如说Hadoop分布式集群搭建等操作

内嵌模式

内嵌模式是metastore默认的部署模式,这种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都内嵌在HiveServer进程中,当启动HiveServer进程时,Derby和metastore都会启动,不需要额外启动Metastore服务,但是一次只能支持一个活动用户,适用于测试体验,不适用于开发环境

image-20230522133801406

安装

内嵌模式特征就是不需要安装数据库,不需要配置启动Metastore服务,解压安装包初始化即可。
需要注意的是Hive版本需要手动进行元数据初始化操作

hive需要根据自己的版本进行选择,我这里的Hadoop版本是3.3.1,可以使用hive3.x版本,所以在这里选择了hive3.1.1
image-20230522170255156
解压

tar -zxvf apache-hive-3.1.3-bin.tar.gz

查看解压出来的成果:
image-20230522170407073
由于个人习惯,我需要把他给移动/复制到其他路径下

cp -r apache-hive-3.1.3-bin /opt/module/hive

去查看是否复制成功
image-20230522170606275

解决Hadoop、Hive之间guava版本差异问题
直接移除hive下lib中的guava,然后将Hadoop目录下share/hadoop/common/lib下的guava复制过来即可,我在这里直接全部完成

# 移除hive中的guava
rm -rf lib/guava-19.0.jar
# 将Hadoop中的guava给复制过来
cp ../hadoop-3.3.1/share/hadoop/common/lib/guava-27.0-jre.jar lib/
# 查询是否已经复制过去了
ls lib  |grep gua

image-20230522172455446

修改hive的配置文件
hive3.0以上的版本,配置文件大多数都是给你一个模板,然后你自己进去配置,在这里我们需要修改hive的环境变量,就需要先拿到他的配置文件

cp hive-env.sh.template hive-env.sh

image-20230522172915113
随后我们在配置文件中指定JAVA_HOME、HADOOP_HOME、HIVE_AUX_JARS_PATH(jar包路径)和HIVE_CONF_DIR(配置文件路径)即可

export HIVE_CONF_DIR=/opt/module/hive/conf
export JAVA_HOME=/opt/module/jdk1.8.0_301
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export HIVE_AUX_JARS_PATH=/opt/module/hive/lib

初始化
现在我们回到我们的hive的路径下,然后开始进行初始化

bin/schematool -dbType derby -initSchema

image-20230522173412536
最后可以看到说编译成功,那么jiu’zhen’de’c就真的成功了
尝试
在这里如果想要运行hive,必须先启动Hadoop! 必须先启动Hadoop!必须先启动Hadoop!后续全是在Hadoop正常运行的情况下操作的,不再进行提示

直接bin/hive启动hive
HQL的语法与SQL语法很相似,在这里我直接查看数据库

show databases;

image-20230522173921913
那么我们在这里创建一个数据库

create database wxk;

现在我们创建一个为wxk的数据库
image-20230522174052265
现在已经创建成功了,出去后发现了一个log文件
image-20230522174338139

我们在上文说它适合单用户,现在我们去另一个地方,我们进入到bin下直接启动hive,发现正常启动,现在我们尝试执行命令:

show databases;

image-20230522174626007
发现报错了,说无法实例化,应该是我们没有进行初始化,那么我在这里在进行一次初始化

./schematool -dbType derby -initSchema

我们在进入到hive中,查看数据库发现:
image-20230522175117826
wxk这个数据库没有了,这就是hive内嵌模式的问题,在哪里初始化,元数据文件就存放在哪里,当我们换个目录启动hive 他就说说不存在元数据,初始化之后必然找不到元数据


本地模式

本地模式下,Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBC与metastore数据库进行通信。
本地模式采用外部数据库来存储元数据,这里使用的是MySQL

hive根据hive.metastore.uris参数值来判断,如果为空,则表示本地模式,缺点是每次启动hive服务,都内置启动了一个metastore

image-20230522134041103

安装

本地模式和远程模式都需要MySQL,MySQL安装仅在此处进行一个演示

MySQL安装

在这里我们去MySQL 官网下载一个相关的rpm包,但是我不想一点点安装,我直接偷懒,我这里选择yum安装,主打一个省事,剩下的根据自己的版本进行一个选择
image-20230522190238606

接下来就简单了

 rpm -ivh mysql80-community-release-el7-7.noarch.rpm

image-20230522190815795

yum install mysql-server

image-20230522192017983
如果中间需要输入,直接y即可,现在我们查看MySQL服务是否启动

systemctl status mysqld.service

image-20230522193344754
现在还没有启动,启动MySQL

systemctl start mysqld

现在我们要进入到MySQL中,为其设置密码、远程登录用户,但是MySQL在安装成功后就会自己生成一个密码,我们需要这个临时密码邓丽

grep "password" /var/log/mysqld.log

image-20230522193705967

OK 现在可以进入到MySQL中

mysql -uroot -p
# 然后输入这个临时密码就行 建议复制,因为省事, xshell复制 ctrl+insert 粘贴 shift + insert

# 进入后修改密码
alter user 'root'@'localhost' identified by '密码 大小写+数字';
# 进入到mysql 数据库
use mysql;
# 设置远程访问账号
create user 'root'@'%' identified with mysql_native_password by '密码 大小写+数字'; 
# 分配权限
grant all on *.* to 'root'@'%';
# 刷新权限
FLUSH PRIVILEGES

OK,接下来尝试远程连接,如果成功,那就算大事完成,使用Navicat 或者DataGrip都可以
image-20230522194811556
远程连接成功

安装

兄弟们,我们在上面已经进行过内嵌模式的安装了,在这里就稍微省略一点,这里无非就是多了一个配置文件hive-site.xml

   <configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://hadoop133: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.cj.jdbc.Driver</value>
    </property>

	<property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>Wxk.20020219</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 关闭元数据存储版本的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

因为要连接MySQL,需要用到JDBC,我们就需要下载对应的JDBC驱动放入到lib中,我们驱动下载页选择我们需要下载的驱动,这里使用的是Java,俺么我们到这里去找
image-20230522203008954
进去后下载解压,把里面的jar包拖到hive的lib下即可
随后我们在hive目录下输入一下命令

bin/schematool -initSchema -dbType mysql -verbos

出现这个表明初始化完成
image-20230522203410175
也可以查看MySQL中是否存在hive这个库
image-20230522203501674
我这里已经出现了这个库,表明已经成功
接下来直接启动即可。
image-20230522203612747

远程模式

远程模式下,Metastore服务在其自己的单独JVM上运行,并不在HiveServer的JVM上运行,如果其他进程希望与Metastore服务器通信,则可以使用Thrift Network API进行通信

远程模式下,需要配置hive.metastore.uris参数来指定metastore服务运行的机器IP和端口,并且需要单独手动启动metastore服务,元数据也采用外部数据库来存储元数据,推荐使用MySQL。

在生产环境中,建议使用远程模式来配置Hive Metastore,这种情况下,其他依赖hive的软件都可以通过metastore 访问hive,由于还可以完全屏蔽数据库层,也带了更好的可管理性/安全性

image-20230522134458530

安装

这里的安装和本地安装大同小异,区别在于配置文件hive-site.xml不同,以及多了一个步骤,新的hive-site.xml文件:

<configuration>
    <!-- 存储元数据mysql相关配置 -->
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value> jdbc:mysql://hadoop133: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.cj.jdbc.Driver</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>

    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>Wxk.20020219</value>
    </property>

    <!-- H2S运行绑定host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>hadoop133</value>
    </property>

    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop133:9083</value>
    </property>

    <!-- 关闭元数据存储授权  -->
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>

    <!-- 关闭元数据存储版本的验证 -->
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
</configuration>

整体看下来多了一个远程模式部署metastore 服务地址

我们在上文中说到,远程连接的话metastore需要自己单独启动,随后所有的依赖于hive的软件都通过metastore进行访问,这样子一定程度上可以提高安全性

那么如何启动metastore呢?

nohup bin/hive --service metastore &

这样子就可以启动,启动成功后会有相应的日志输出文件,如果不启动metastore直接启动hive,会发生什么?

image-20230522205231934
直接在这里说没有找到元数据存储服务,说明我们需要开启
我们输入指令后会多出来一个日志文件:
image-20230522205443249
我们重新启动hive并尝试输入指令:
image-20230522205539732
OK安装完成

bin/hive 、bin/beeline

hive发展至今,总共经历了两代客户端工具:

  1. 第一代客户端(deprecated 不推荐使用):bin/hive,是一个shellUtil,主要功能是:
    1. 可用于以交互或者批处理模式运行hive查询
    2. 用于hive相关服务的启动,比如说metastore服务
  2. 第二代客户端(recommended 推荐使用):bin/beeline,是一个JDBC客户端,是官方强烈推荐使用的hive命令工具,与第一代客户端相比较,性能加强安全性提高

BeanLine在内嵌模式还是远程模式都可以工作。在内嵌模式下,它运行嵌入式hive(类似于hive client),而在远程模式下beeline通过Thrift连接到单独的HiveServer2服务上.

HiveServer、HiveServer2都是Hive自带的两种服务,允许客户端再不启动CLI(命令行)的情况下对Hive中的数据进行操作,并且两个都允许远程客户端使用多种编程语言如Java、python等想hive提交请求,取回结果,但是HiveServer不能处理多于一个客户端的并发请求,于是被重写得到了HiveServer2,HiveServer已经被舍弃。HiveServer2支持多客户端的并发和身份认证,旨在为开放API客户端如JDBC、ODBC提供更好的支持。Hive通过Metastore服务读写元数据,所以在远程模式下,启动HiveServer2之前必须先要启动metastore服务。

需要注意的是,远程模式下,Beeline客户端只能通过HiveServer2服务访问Hive,而bin/hive是通过Metastore服务访问的
image-20230522211445253

bin/hive 客户端

在hive安装包的bin目录下,有hive提供的第一代客户端bin/hive,该客户端可以通过hive的metastore服务,从而达到操作hive的目的。

我们在远程启动玩hive metastore服务之后,可以在其他机器上直接使用不需要任何的配置:
在这里做一个演示:
在hadoop134上创建新的hive

# 从 Hadoop133 上拷贝过来
rsync apache-hive-3.1.3-bin.tar.gz  root@hadoop134:/opt/software/

# 在 hadoop134 上进行解压
tar -zxvf  apache-hive-3.1.3-bin.tar.gz
# 移动位置
cp -r apache-hive-3.1.3-bin /opt/modul/hive
#  消除hadoop与hive之间guava的差异
cd /opt/modul/hive/lib
rm -r guava-19.0.jar
cp /opt/module/hadoop-3.3.1/share/hadoop/common/lib/guava-27.0-jre.jar  ../lib/
# 修改环境变量
cd /opt/modul/hive/conf
cp hive-env.sh.template hive-env.sh
vim hive-env.sh

# 修改hive-site.xml 指向远程服务
vim hive-site.xml

# #####环境变量相关配置
export HIVE_CONF_DIR=/opt/module/hive/conf
export JAVA_HOME=/opt/module/jdk1.8.0_301
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export HIVE_AUX_JARS_PATH=/opt/module/hive/lib


hive-site.xml配置文件

<configuration>
    <!-- 远程模式部署metastore 服务地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop133:9083</value>
    </property>
</configuration>

直接启动:

# 在hive目录下
bin/hive 

直接启动可以启动成功,我们在Hadoop133中曾创建一个wxk数据库,现在直接查看hadoop134中是否存在:
image-20230522215904998

bin/beeline 客户端

beeline客户端不是直接访问metastore服务的,而是需要单独启动hiveserver2服务。在hive安装的服务器上要首先启动metastore服务,然后启动hiveserver2服务

# 启动metastroe服务 
nohup bin/hive --service metastore &

#启动hiveserver2 服务
nohup bin/hive --service hiveserver2 &

我是在hadoop133客户端上启动的服务,现在通过hadoop134使用客户端进行访问,需要注意的是hiveserver2服务启动之后需要稍等一段时间才会对外提供服务

Bealine是JDBC的客户端,通过JDBC协议和Hiveserver2服务进行通信,通信地址是jdbc:hive2://hadoop133:10000

bin/beeline 

之后我们要输入命令进行连接

! connect jdbc:hive2://hadoop133:10000

之后我们可以看到他让我们输入用户名和密码,用户名我们输入root,密码直接回车,结束

随后就进入到了相关页面:
image-20230522222609573
我直接一个show databases;一看究竟:
image-20230522222701830
OK完成

初体验

在Hive 中,语法基本上和MySQL的一致,但是使用insert+values语句插入数据,底层由于是MapReduce执行的,效率十分低下,此时回到Hive的本质上:可以将结构化的数据文件映射成一张表,并提供基于表的SQL查询分析。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LIMUML04数据标注(note)

数据标注的思维导图 目标&#xff1a;是提升模型还是提升标注&#xff0c;本小节讨论提升标准&#xff0c;提升模型后面介绍。 如果有足够标注&#xff1a;使用半监督学习 没有足够标注&#xff0c;有足够预算&#xff1a;请人标注 没有足够预算&#xff1a;使用弱监督学习 问题…

每日学术速递5.22

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Drag Your GAN: Interactive Point-based Manipulation on the Generative Image Manifold(SIGGRAPH 2023) 标题&#xff1a;拖动你的 GAN&#xff1a;生成图像流形上基于点的交互…

基础IO(总)

接口介绍 open&#xff1a; #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); pathname&#xff1a;要打开或创建的目标文件 fla…

两数之和 C++实现(力扣题目1)

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值 target 的那两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案…

SQL案例-高校信息管理系统实现要求

SQL案例-高校信息管理系统实现要求 (1) 建表 stuInfo(学生信息表) 字段名称数据类型说明stuName字符学生姓名&#xff0c;该列必填&#xff0c;要考虑姓氏可能是两个字的&#xff0c;如欧阳俊雄stuNo字符学号&#xff0c;该列必填&#xff0c;学号不能重复&#xff0c;且必须…

AC规则-4-规则和冲突解决

3.3 Introduction to Access Control Rule Conflict Resolution 3.3 访问控制规则冲突解决简介 本节从高层次讨论访问控制规则冲突解决。 本文档稍后会提供更多详细信息。 规则的优先级不是基于它在其他规则中的阅读顺序。 管理冲突规则的策略基于三个基本原则&#xff08;…

linux中 list_entry 设计背景及原理解析

Linux 2.4.22 在这一版本中的 list_entry的宏定义实现如下&#xff1a; #define list_entry(ptr, type, member) \((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))乍一看&#xff0c;会觉得特别复杂&#xff0c;其实分析之后&#xff0c;会发现清晰…

LeetCode高频算法刷题记录8

文章目录 1. 零钱兑换【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 最小栈【最小栈】2.1 题目描述2.2 解题思路2.3 代码实现 3. 最长有效括号【困难】3.1 题目描述3.2 解题思路3.3 代码实现 4. 从前序与中序遍历序列构造二叉树【中等】4.1 题目描述4.2 解题思路4.3 代码实…

day8 域名解析与http服务器实现原理

域名解析gethostbyname函数 主机结构在 <netdb.h> 中定义如下 结构的成员包括&#xff1a; h_name &#xff1a;主机的正式名称 h_aliases&#xff1a;主机的备用名称数组&#xff0c;以 NULL 结尾指针 h_addrtype&#xff1a;地址类型;&#xff08;AF_INET或AF_INET…

基础知识6

知乎上的面试题&#xff1a;https://zhuanlan.zhihu.com/p/546032003 一、Topk问题以及变种&#xff0c;各种解法 微博的热门排行就属于 TopK 问题 TopK 一般是要求在 N 个数的集合中找到最小或者最大的 K 个值&#xff0c;通常 N 都非常得大。 算法的优点是不用在内存中读入全…

经典组件知识(kafka,ngix)

消息队列的作用 解耦、削峰、 异步&#xff08;非必要逻辑异步运行&#xff0c;加快响应速度&#xff09; kafka 首先有个topic的概念&#xff0c;类似于表。 Partition 分区&#xff1a;一个topic下面有多个分区&#xff0c;这些分区会存储到不同的服务器上面&#xff0c;或者…

如何使用 Django 进行测试驱动开发,我来告诉你

所谓测试驱动开发(TDD)&#xff0c;就是先编写测试用例&#xff0c;然后编写代码来满足测试用例&#xff0c;具体包含以下步骤&#xff1a; 编写测试用例。编写代码满足测试用例中的需求。运行测试用例。如果通过&#xff0c;说明代码满足了测试用例所定义的需求。如果未通过&…

armday2

.text .global _start _start: bl LED1_INITbl LED1_ONbl delay_1sbl LED1_OFFbl LED2_INITbl LED2_ONbl delay_1sbl LED2_OFFbl LED3_INITbl LED3_ONbl delay_1sbl LED3_OFFbl _start/**********LED1点灯PE10**************/ LED1_INIT:1.通过RCC_HB4_ENSETR寄存器设置GPIOE组…

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

自 PoseiSwap 在 Nautilus Chain 上线后&#xff0c;该 DEX 的整体市场进展十分顺利。我们看到&#xff0c;其不仅在 4 月&#xff0c;以 1000万美元的估值&#xff0c; 获得了来自于 Zebec Labs 的首轮 150 万美元的融资。而在本月&#xff0c;在 Zebec 生态的帮助下&#xff…

利用prusa 3d打印地形模型 如何合理切片并提高打印速度

如上图&#xff0c;我们选择打印一个宽10cm 的地形模型&#xff0c;通过prusa切片&#xff0c;显示时间为22小时31分钟。这个速度大概一天&#xff0c;确实不是我们要的速度&#xff0c;如何提高速度又不失去打印细节且不增加失败风险呢。 1.减少填充 10%的填充对于创想三维en…

RK3568平台开发系列讲解(驱动基础篇)RK平台UART的使用

🚀返回专栏总目录 文章目录 一、引脚定义1.1 UART91.2 RS232和RS485二、设备树配置三、调试3.1 连接硬件3.2 打开主机的串口终端3.3 板子发送数据3.4 板子接收数据3.5 主机退出kermit串口连接四、UART2普通串口配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇…

C++——模板初阶

文章目录 一.泛型编程二.函数模板1.函数模板的概念2.函数模板的格式3.函数模板的原理4.函数模板的实例化&#xff08;1&#xff09;隐式实例化&#xff08;2&#xff09;显式实例化 5.模板参数的匹配原 三.类模板1.类模板的定义格式2.类模板的实例化 前言&#xff1a; 本章我们…

Flutter问题记录 - Text组件设置不限行数无效

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 梳理Flutter项目的过程中发现还有一些遗留的TODO没处理&#xff0c;其中有一个和Text组件相关。 开发环境 Flutter: 3.7.12Dart: 2.19.6 问题描述 Text组件设置maxLines: null不限制行数&#xff1a; Text(The […

gradio入门示例

随着chat-gpt等机器人对话框架的流行&#xff0c;让一个名为gradio的框架也火热起来&#xff0c;这个框架可以开启一个http服务&#xff0c;并且带输入输出界面&#xff0c;可以让对话类的人工智能项目快速运行。 gradio号称可以快速部署ai可视化项目。 下面通过两个示例来感受…

C++学习记录——이십사 位图、布隆过滤器、哈希切割

文章目录 1、位图位图应用优缺点 2、布隆过滤器1、哈希函数2、删除 3、哈希切割应用 本篇gitee 1、位图 先看一个题目&#xff1a; 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个树是否在这40亿个数中&#xff1f; 这里可能…