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处理
总结
- 什么是分布式SQL计算?
以分布式的形式,执行SQL语句,进行数据统计分析。 - 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&useSSL=false&useUnicode=true&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 Shell方式(可以直接写SQL):
六 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计算 对数据进行统计分析,SQL是目前最为方便的编程工具。 大数据体系中充斥着非常多的统计分析场景,所以,使用SQL去处理数据,在大数据中也是有极大的需求的。MapReduce支持程序开发(Java、Python等&#…...
【C++】C++中的动态内存分配(new和delete)
C中的动态内存分配(分配堆空间) 1. C语言与C动态内存分配2. 使用3.malloc和new有什么区别示例代码: 1. C语言与C动态内存分配 C语言 malloc calloc realloc free 函数 C new关键字分配堆空间 delete关键字释放堆空间 2. 使用 第一种&#…...
Go 代理爬虫
现在注册,还送15美金注册奖励金 --- 亮数据-网络IP代理及全网数据一站式服务商 使用代理服务器,通过 Colly、Goquery、Selenium 进行网络爬虫的基础示例程序 本仓库包含两个分支: 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(本地日期)4.2…...
蓝桥杯算法实战分享
蓝桥杯算法实战分享 蓝桥杯是国内知名的程序设计竞赛,涵盖算法、数据结构、编程技巧等多个领域。本文将从实战角度分享蓝桥杯算法竞赛的常见题型、解题思路和优化技巧,帮助参赛者更好地备战。 1. 常见题型与解题思路 蓝桥杯的题型主要包括以下几类&…...
树莓集团园区运营案例:成都国际数字影像产业园的运营逻辑
成都国际数字影像产业园的成功运营,是树莓集团在产业园运营领域的典型案例。其运营逻辑可以归纳为以下几点: 一、政企合作,优势互补 园区由树莓集团与金牛区政府合作共建,这种模式充分利用双方的优势。政府提供政策支持、土地资…...
【动态规划】最长公共子序列问题 C++
问题描述 子序列:序列Z是原序列X的子序列,当且仅当Z的元素在X中按严格递增的下标顺序出现(不要求连续)。例如X{A,B,C,B,D,A,B}中,Z{B,C,D,B}是子序列,对应X的下标2→3→5→7。公共子序列:若序列…...
K8s故障排查手册:从Pod崩溃到网络不通
本文基于数百个真实生产环境案例,系统化梳理Kubernetes集群的故障排查方法论。涵盖Pod生命周期异常、服务发现失效、存储卷挂载失败、网络策略冲突等核心故障场景,结合Prometheus监控指标、eBPF深度追踪、CNI插件分析等技术手段,为企业运维团…...
HTML DOM 基础:用「家族树」理解网页操控术
HTML DOM 基础:用「家族树」理解网页操控术 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),也就是DOM。 DOM 是JavaScript 操作网页的接口,它的作用是将网页转为一个JavaScript 对象,从而可以用脚本进行各种操作(比如对元素增删内容)。 浏览…...
扩展卡尔曼滤波
1.非线性系统的线性化 标准卡尔曼滤波 适用于线性化系统,扩展卡尔曼滤波 则扩展到了非线性系统,核心原理就是将非线性系统线性化,主要用的的知识点是 泰勒展开(我另外一篇文章的链接),如下是泰勒展开的公式…...
【AI News | 20250326】每日AI进展
AI News 1、Gemini 2.5:谷歌DeepMind最智能AI模型亮相 谷歌DeepMind推出Gemini 2.5,其最智能AI模型。首款实验版本Gemini 2.5 Pro在多项基准测试中领先,登顶LMArena榜首,展现卓越的推理与编码能力。该模型为“思考模型”…...
智能汽车图像及视频处理方案,支持视频星轨拍摄能力
美摄科技作为智能汽车图像及视频处理领域的先行者,正以革新性的技术引领着行业的未来发展。美摄科技智能汽车图像及视频处理方案,一个集高效性、智能化、画质增强于一体的创新解决方案,旨在重塑智能汽车图像画质的新标准,并支持前…...
AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问
环境: AI-Sphere-Butler WSL2 Ubuntu22.04 Nginx 问题描述: AI-Sphere-Butler之Ubuntu服务器如何部署Nginx代理,并将HTTP升级成HTTPS,用于移动设备访问 解决方案: 一、生成加密证书 1.配置OpenSSL生成本地不加…...
SpringBoot项目图片上传成功,访问404
1. 配置文件,静态资源访问路径,记得加上file: 2.上传文件路径 以上配置是正确的,这样才可以正确映射 之前我再配置文件写的是,这是错的, 因为:classpath写法和绝对路径无法匹配 .addResourceLocations("classpat…...
鸿蒙学习笔记(2)-国际化配置、ArkTS简述
一、国际化配置 根据操作系统语言实现手动或者自动切换中英文,提供了多套语言包。编写过程中注意不要将文字写死,将文本放在指定的语言包文件夹中来保存,鸿蒙开发中默认实现中英文的国际化配置。若要实现中英文转化,需要在三个地…...
ES 字段的映射定义了字段的类型及其行为
在 Elasticsearch 中,字段的映射定义了字段的类型及其行为。你提供的 content_answer 字段映射如下: Json 深色版本 "content_answer": { "type": "text", "fields": { "keyword": { …...
游戏引擎学习第183天
回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题,但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作,我们正在把一些内容整合进来,甚至是之前通过不同方式记录时间戳的旧平台层部分,现在也…...
未来二十年的量子计算
在未来二十年间,量子计算领域将迎来翻天覆地的变革,从实验室走向更广阔的应用舞台,重塑众多行业的格局。 在硬件层面,量子芯片的研发将持续精进。超导量子比特技术会不断突破,进一步提升比特数量与质量。当前ÿ…...
SpringBoot通过Map实现天然的策略模式
😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: SpringBoot通过Map实现天然的策略模式 ⏱️ 创作时间: 202…...
MTKAndroid12 解决SystemUI下拉框中,长按WIFI图标会导致崩溃问题
解决SystemUI下拉框中,长按WIFI图标会导致崩溃问题 文章目录 场景参考资料修改文件解决方案日志源码分析 总结 场景 在部分产品中偶发性发现, SystemUI下拉框下拉后长按WIFI图标会导致崩溃问题,有时候是截屏、点击Home 按键后,长…...
Springboot 学习 之 Shardingsphere 按照日期水平分表(二)
文章目录 业务场景依赖配置特别注意优劣参考资料 业务场景 在 报表 等 大数据量 且需要 按照日期显示 的业务场景下,按照 日期水平分表 是一个不错的选择 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-b…...
WordPress超级菜单插件UberMenu v3.78汉化版
一、插件介绍 UberMenu 是一款功能强大的 WordPress 超级菜单插件,能够帮助站长创建响应式、可自定义的多级菜单。该插件支持动态内容加载、图标、图片、搜索框等丰富功能,并且兼容大多数 WordPress 主题。 UberMenu v3.78 经过完整汉化,适用于中文站点用户,让操作更加直观…...
观成科技:海莲花利用MST投递远控木马
概述 “海莲花”,又名“OceanLotus”,该APT组织是长期针对中国境内,且攻击活动十分活跃的组织。近期发现该组织使用了MSI文件滥用的新手法,将远程控制木马植入MST文件来修改MSI文件安装时的执行流程,在安装期间运行恶…...
Node.js系列(5)--数据库操作指南
Node.js数据库操作指南 💾 引言 数据库操作是Node.js应用开发中的关键环节。本文将深入探讨Node.js数据库操作的实现方案,包括连接管理、查询优化、事务处理等方面,帮助开发者构建高效可靠的数据访问层。 数据库操作概述 Node.js数据库操…...
最大异或对 The XOR Largest Pair
题目来自洛谷网站: 思路: 两个循环时间复杂度太高了,会超时。 我们可以先将读入的数字,插入到字典树中,从高位到低位。对每个数查询的时候,题目要求是最大的异或对,所以我们选择相反的路径&am…...
简单介绍My—Batis
1.什么是My—Batis? My—Batis是一个持久层框架,提供了sql映射功能,能方便的将数据库表和java对象进行映射,通过My—Batis可以将项目中的数据存储在数据库中,以便我们进行调用。值得注意的是My—Batis和spring不是一回…...
案例分享|树莓派媒体播放器,重构商场广告的“黄金三秒”
研究显示,与传统户外广告相比,数字户外广告在消费者心中的记忆率提高了17%,而动态户外广告更是能提升16%的销售业绩,整体广告效率提升了17%。这一显著优势,使得越来越多资源和技术流入数字广告行业。 户外裸眼3D广告 无…...
硬件基础(5):(3)二极管的应用
文章目录 [toc]1. **整流电路****功能**:**工作原理**:**应用实例**:电路组成:整流过程:电路的应用: 2. **稳压电路****功能**:**工作原理**:**应用实例**:电路组成及功能…...
数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)
对于逻辑关系为“一对一”的数据,除了用顺序表和链表存储外,还可以用栈结构存储。 栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方: 1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的…...
vscode终端不识别npm 无法解析npm
vscode 用以管理员打开识别npm vscode 用普通用户打开不识别npm 刚换了一台新电脑,寻思安装各种环境,一顿操作猛如虎,当最后一个打开vscode后,运行项目发现,新建终端>npm run dev 无法识别。 在cmd 中 打node -…...
java泛型的协变、逆变和不变
引言 我们在看开源框架经常会看到泛型来定义数据类型。 有时候, <? extends T> 和 <? super T> 这样带通配符的泛型参数。 这种通配符的泛型是什么意思怎么用???? 概念 型变: 用来描述类…...
effective Java 学习笔记(第二弹)
effective Java 学习笔记(第一弹) 整理自《effective Java 中文第3版》 本篇笔记整理第3,4章的内容。 重写equals方法需要注意的地方 自反性:对于任何非空引用 x,x.equals(x) 必须返回 true。对称性:对于…...
Spring BeanFactoryPostProcessor 和 BeanPostProcessor有什么用?
BeanFactoryPostProcessor 和 BeanPostProcessor 都是 Spring 框架中非常重要的扩展点,我们在开发中可以利用 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在工业制造领域的应用
引言 在当今数字化浪潮席卷全球的背景下,各个行业都在积极寻求创新与变革,工业制造领域也不例外。然而,传统工业制造在生产效率、质量控制、成本管理等方面面临着诸多挑战。在这一关键时期,人工智能技术的兴起为工业制造带来了新的…...
基于动态 FOF(基金中的基金)策略的基金交易推荐系统的设计与实现思路
下面为你呈现一个基于动态 FOF(基金中的基金)策略的基金交易推荐系统的设计与实现思路,同时给出一个简单的 Python 示例代码。 系统设计 1. 需求分析 收集各类基金的历史数据,涵盖净值、收益率、风险指标等。依据动态 FOF 策略…...
第一次程序Hello Python
Python环境安装 安装地址 安装地址 https://www.python.org/ 1. 安装Python 下载完成后,双击安装包(如python-3.13.2.exe),按照提示进行安装。在安装过程中,确保勾选“Add Python to PATH”选项,以便在命…...
nvm 切换node 版本 但是没有带星号*
在 Windows 系统中配置 NVM_SYMLINK 环境变量的步骤如下: 1️⃣ 设置变量路径 变量名:NVM_SYMLINK 变量值:建议设置为 C:\Program Files\nodejs(需与后续步骤中 NVM 配置的符号链接路径一致) 2️⃣ 配置系统环境变量…...
Java定时任务的三重境界:从单机心跳到分布式协调
《Java定时任务的三重境界:从单机心跳到分布式协调》 本文将以生产级代码标准,揭秘Java定时任务从基础API到分布式调度的6种实现范式,深入剖析ScheduledThreadPoolExecutor与Quartz Scheduler的线程模型差异,并给出各方案的性能压…...
1.NextJS基础
NextJS注意要点 文件用来定义路由,folder name becomes the route name注意区分客户端渲染和服务器渲染 html渲染完成后给到客户端(此时网页内容已经全部提供),有利于crawler和优化seo逻辑更简单request deduplication减少API请求…...
晶晨/全志/联发科芯片系列电视盒子改固件包教程
声明:对电视盒子进行改包(修改固件包)是一项有一定技术门槛且存在风险的操作,可能会导致盒子变砖、失去保修等问题,同时私自修改固件可能违反相关法律法规和使用协议。以下为你提供一个通用的大致改包教程,…...
2025最新3个wordpress好用的主题
红色大气的wordpress企业主题,适合服务行业的公司搭建企业官方网站使用。是一款专为中小企业和个人开发者设计的WordPress主题,旨在提供专业的网站构建解决方案。 通过此WordPress主题,用户可以轻松创建和维护一个专业的企业网站,…...
GZCTF平台搭建及题目上传
前言 我用手里的Ubuntu虚拟机搭建的,大家根据自己的实际情况来吧 安装及部署 首先,你的虚拟机需要有Docker和Docker-Compose,前者可以看我之前的文章,另外一个可以输入下面的命令安装,注意先获取管理员权限ÿ…...
openGauss关联列数据类型不一致引起谓词传递失败
今天分享一个比较有意思的案例 注意:因为原始SQL很长,为了方便排版,简化了SQL 下面SQL跑60秒才出结果,客户请求优化 select dtcs.owner, dtcs.table_name, dtcs.column_name, dct.commentsfrom dba_tab_columns dtcsleft outer j…...
【网络安全基础学习】渗透测试工具--Burp Suite详细教程
Burp Suite与SniffMaster:网络安全工具的双剑合璧 Burp Suite(简称BP)是一款用于攻击web应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。然而,除了Burp…...
手机测试,工作中学习
要学习各种机型的截图方式、开发模式在哪。 荣耀机型:截图:关节快速敲两下。开发者模式在“系统和更新”里。 1.出现缺陷,需要获取日志。 学习adb生成日志:当测试中出现缺陷的,使用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,所以先安装了这个Aliyun.OSS.SDK.NetCore 下面是后端生成上传Url的参考代码,主意request.ContentType,如果这里要是设置了,那么前端也要设置成一样的,如果前端是获取文件的contentType&…...
Java基础 3.22
1.break练习 //1-100之内的数求和,求当和第一次大于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…...