Hive 的函数介绍

news2024/9/27 12:15:45

目录

​编辑

一、内置运算符

1.1 关系运算符

1.2算术运算符

1.3逻辑运算符

1.4复杂类型函数

1.5对复杂类型函数操作

二、内置函数

2.1数学函数

2.2收集函数

2.3类型转换函数

2.4日期函数

2.5条件函数

2.6字符函数

三、内置的聚合函数

四、内置表生成函数

五、自定义函数

5.1 自定义函数分类

5.2 自定义函数开发

5.2.1 开发UDF函数

5.2.1.1 开发流程步骤

5.2.1.1.1 继承Hive提供的类

5.2.1.1.2 实现类中的抽象方法

5.2.1.1.3 将jar包上传到虚拟机中

5.2.1.1.4 将jar包上传到hdfs集群中

5.2.1.2 实现UDF函数

5.2.1.2.1 创建Maven工程,导入依赖

5.2.1.2.2 创建函数类实现GenericUDF类

5.2.1.2.3 函数的使用

5.2.1.2.3.1 临时函数

5.2.1.2.3.2 永久函数

5.2.2 开发UDTF函数

5.2.2.1 开发流程

5.2.2.2 实现UDTF函数

5.2.2.2.1 创建Mvaen工程,导入依

5.2.2.2.2 创建函数类实现GenericUDTF类

5.2.2.2.3 函数的使用


一、内置运算符

1.1 关系运算符

运算符类型说明
A = B所有原始类型如果A与B相等,返回TRUE,否则返回FALSE
A == B失败,因为无效的语法。 SQL使用”=”,不使用”==”
A <> B所有原始类型如果A不等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
A < B所有原始类型如果A小于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
A <= B所有原始类型如果A小于等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
A > B所有原始类型如果A大于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”。
A >= B所有原始类型如果A大于等于B返回TRUE,否则返回FALSE。如果A或B值为”NULL”,结果返回”NULL”
A IS NULL所有类型如果A值为”NULL”,返回TRUE,否则返回FALSE
A IS NOT NULL所有类型如果A值不为”NULL”,返回TRUE,否则返回FALSE
A LIKE B字符串如 果A或B值为”NULL”,结果返回”NULL”。字符串A与B通过sql进行匹配,如果相符返回TRUE,不符返回FALSE。B字符串中 的”_”代表任一字符,”%”则代表多个任意字符。例如: (‘foobar’ like ‘foo’)返回FALSE,( ‘foobar’ like ‘foo_ _ _’或者 ‘foobar’ like ‘foo%’)则返回TURE
A RLIKE B字符串如 果A或B值为”NULL”,结果返回”NULL”。字符串A与B通过java进行匹配,如果相符返回TRUE,不符返回FALSE。例如:( ‘foobar’ rlike ‘foo’)返回FALSE,(’foobar
A REGEXP B字符串与RLIKE相同。

1.2算术运算符

运算符类型说明
A + B所有数字类型A和B相加。结果的与操作数值有共同类型。例如每一个整数是一个浮点数,浮点数包含整数。所以,一个浮点数和一个整数相加结果也是一个浮点数。
A – B所有数字类型A和B相减。结果的与操作数值有共同类型。
A * B所有数字类型A和B相乘,结果的与操作数值有共同类型。需要说明的是,如果乘法造成溢出,将选择更高的类型。
A / B所有数字类型A和B相除,结果是一个double(双精度)类型的结果。
A % B所有数字类型A除以B余数与操作数值有共同类型。
A & B所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”与”操作。两个表达式的一位均为1时,则结果的该位为 1。否则,结果的该位为 0。
A\|B所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”或”操作。只要任一表达式的一位为 1,则结果的该位为 1。否则,结果的该位为 0。
A ^ B所有数字类型运算符查看两个参数的二进制表示法的值,并执行按位”异或”操作。当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1。否则结果的该位为 0。

1.3逻辑运算符

运算符类型说明
A AND B布尔值A和B同时正确时,返回TRUE,否则FALSE。如果A或B值为NULL,返回NULL。
A && B布尔值与”A AND B”相同
A OR B布尔值A或B正确,或两者同时正确返返回TRUE,否则FALSE。如果A和B值同时为NULL,返回NULL。
A\| B布尔值与”A OR B”相同
NOT A布尔值如果A为NULL或错误的时候返回TURE,否则返回FALSE。
! A布尔值与”NOT A”相同

1.4复杂类型函数

函数类型说明
map(key1, value1, key2, value2, …)通过指定的键/值对,创建一个map。
struct(val1, val2, val3, …)通过指定的字段值,创建一个结构。结构字段名称将COL1,COL2,…
array(val1, val2, …)通过指定的元素,创建一个数组。

1.5对复杂类型函数操作

函数类型说明
A[n]A是一个数组,n为int型返回数组A的第n个元素,第一个元素的索引为0。如果A数组为['foo','bar'],则A[0]返回’foo’和A[1]返回”bar”。
M[key]M是Map<K, V>,关键K型返回关键值对应的值,例如mapM为\{‘f’ -> ‘foo’, ‘b’ -> ‘bar’, ‘all’ -> ‘foobar’\},则M['all'] 返回’foobar’。
S.xS为struct返回结构x字符串在结构S中的存储位置。如 foobar\{int foo, int bar\} foobar.foo的领域中存储的整数。

二、内置函数

2.1数学函数

函数返回类型说明
Tround(double a)BIGIN四舍五入
round(double a, int d)DOUBLE小数部分d位之后数字四舍五入,例如round(21.263,2),返回21.26
floor(double a)BIGINT对给定数据进行向下舍入最接近的整数。例如floor(21.2),返回21。
ceil(double a), ceiling(double a)BIGINT将参数向上舍入为最接近的整数。例如ceil(21.2),返回23.
rand(), rand(int seed)double返回大于或等于0且小于1的平均分布随机数(依重新计算而变)
exp(double a)double返回e的n次方
ln(double a)double返回给定数值的自然对数
log10(double a)double返回给定数值的以10为底自然对数
log2(double a)double返回给定数值的以2为底自然对数
log(double base, double a)double返回给定底数及指数返回自然对数
pow(double a, double p), power(double a, double p)double返回某数的乘幂
sqrt(double a)double返回数值的平方根
bin(BIGINT a)string返回二进制格式
hex(BIGINT a), hex(string a)string将整数或字符转换为十六进制格式
unhex(string a)string十六进制字符转换由数字表示的字符。
conv(BIGINT num, int from_base, int to_base)string将 指定数值,由原来的度量体系转换为指定的数值体系。例如CONV(‘a’,16,2),返回。
abs(double a)double取绝对值
pmod(int a, int b), pmod(double a, double b)

int,

double

返回a除b的余数的绝对值
sin(double a)double返回给定角度的正弦值
asin(double a)double返回x的反正弦,即是X。如果X是在-1到1的正弦值,返回NULL。
cos(double a)double返回余弦
acos(double a)double返回X的反余弦,即余弦是X,,如果-1<= A <= 1,否则返回null.
positive(int a), positive(double a)

int,

double

返回A的值,例如positive(2),返回2。
negative(int a), negative(double a)

int,

double

返回A的相反数,例如negative(2),返回-2。

2.2收集函数

函数返回类型说明
size(Map<K.V>)int返回的map类型的元素的数量
size(Array<T>)int返回数组类型的元素数量

2.3类型转换函数

函数返回类型说明
cast(expr as<type>)指定 “type”类型转换。例如将字符”1″转换为整数:cast(’1′ as bigint),如果转换失败返回NULL。

2.4日期函数

函数返回类型说明
from_unixtime(bigint unixtime[, string format])stringUNIX_TIMESTAMP参数表示返回一个值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,这取决于是否是在一个字符串或数字语境中使用的功能。该值表示在当前的时区。
unix_timestamp()bigint如果不带参数的调用,返回一个Unix时间戳(从’1970- 01 – 0100:00:00′到现在的UTC秒数)为无符号整数。
unix_timestamp(string date)bigint指定日期参数调用UNIX_TIMESTAMP(),它返回参数值’1970- 01 – 0100:00:00′到指定日期的秒数。
unix_timestamp(string date, string pattern)bigint指定时间输入格式,返回到1970年秒数:unix_timestamp(’2009-03-20′, ‘yyyy-MM-dd’) = 1237532400
to_date(string timestamp)string返回时间中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″
to_dates(string date)string给定一个日期date,返回一个天数(0年以来的天数)
year(string date)int返回指定时间的年份,范围在1000到9999,或为”零”日期的0。
month(string date)int返回指定时间的月份,范围为1至12月,或0一个月的一部分,如’0000-00-00′或’2008-00-00′的日期。
day(string date) dayofmonth(date)int返回指定时间的日期
hour(string date)int返回指定时间的小时,范围为0到23。
minute(string date)int返回指定时间的分钟,范围为0到59。
second(string date)int返回指定时间的秒,范围为0到59。
weekofyear(string date)int返回指定日期所在一年中的星期号,范围为0到53。
datediff(string enddate, string startdate)int两个时间参数的日期之差。
date_add(string startdate, int days)int给定时间,在此基础上加上指定的时间段。
date_sub(string startdate, int days)int给定时间,在此基础上减去指定的时间段。

2.5条件函数

函数返回类型说明
if(boolean testCondition, T valueTrue, T valueFalseOrNull)T判断是否满足条件,如果满足返回一个值,如果不满足则返回另一个值。
COALESCE(T v1, T v2, …)T返回一组数据中,第一个不为NULL的值,如果均为NULL,返回NULL。
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] ENDT当a=b时,返回c;当a=d时,返回e,否则返回f。
CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] ENDT当值为a时返回b,当值为c时返回d。否则返回e。

2.6字符函数

函数返回类型说明
length(string A)int返回字符串的长度
reverse(string A)string返回倒序字符串
concat(string A, string B…)string连接多个字符串,合并为一个字符串,可以接受任意数量的输入字符串
concat_ws(string SEP, string A, string B…)string链接多个字符串,字符串之间以指定的分隔符分开。
substr(string A, int start), substring(string A, int start)string从文本字符串中指定的起始位置后的字符。
substr(string A, int start, int len), substring(string A, int start, int len)string从文本字符串中指定的位置指定长度的字符。
upper(string A) ucase(string A)string将文本字符串转换成字母全部大写形式
lower(string A) lcase(string A)string将文本字符串转换成字母全部小写形式
trim(string A)string删除字符串两端的空格,字符之间的空格保留
ltrim(string A)string删除字符串左边的空格,其他的空格保留
rtrim(string A)string删除字符串右边的空格,其他的空格保
regexp_replace(string A, string B, string C)string字符串A中的B字符被C字符替代
regexp_extract(string subject, string pattern, int index)string通过下标返回正则表达式指定的部分。regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 2) returns ‘bar.’
parse_url(string urlString, string partToExtract [, string keyToExtract])string返回URL指定的部分。parse_url(‘http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1′, ‘HOST’) 返回:’facebook.com’
get_json_object(string json_string, string path)stringselect a.timestamp, get_json_object(a.appevents, ‘$.eventid’), get_json_object(a.appenvets, ‘$.eventname’) from log a;
space(int n)string返回指定数量的空格
repeat(string str, int n)string重复N次字符串
ascii(string str)int返回字符串中首字符的数字值
lpad(string str, int len, string pad)string返回指定长度的字符串,给定字符串长度小于指定长度时,由指定字符从左侧填补。
rpad(string str, int len, string pad)string返回指定长度的字符串,给定字符串长度小于指定长度时,由指定字符从右侧填补。
split(string str, string pat)array将字符串转换为数组。
find_in_set(string str, string strList)int返回字符串str第一次在strlist出现的位置。如果任一参数为NULL,返回NULL;如果第一个参数包含逗号,返回0。
sentences(string str, string lang, string locale)array<array<string>>将字符串中内容按语句分组,每个单词间以逗号分隔,最后返回数组。 例如sentences(‘Hello there! How are you?’) 返回:( (“Hello”, “there”), (“How”, “are”, “you”) )
ngrams(array<array<string>>, int N, int K, int pf)array<struct<string,double>>SELECT ngrams(sentences(lower(tweet)), 2, 100 [, 1000]) FROM twitter;
context_ngrams(array<array<string>>, array<string>, int K, int pf)array<struct<string,double>>SELECT context_ngrams(sentences(lower(tweet)), array(null,null), 100, [, 1000]) FROM twitter;

三、内置的聚合函数

函数返回类型说明
count(*) , count(expr), count(DISTINCT expr[, expr_., expr_.])bigint返回记录条数。
sum(col), sum(DISTINCT col)double求和
avg(col), avg(DISTINCT col)double求平均值
min(col)double返回指定列中最小值
max(col)double返回指定列中最大值
var_pop(col)double返回指定列的方差
var_samp(col)double返回指定列的样本方差
stddev_pop(col)double返回指定列的偏差
stddev_samp(col)double返回指定列的样本偏差
covar_pop(col1, col2)double两列数值协方差
covar_samp(col1, col2)double两列数值样本协方差
corr(col1, col2)double返回两列数值的相关系数
percentile(col, p)double返回数值区域的百分比数值点。0<=P<=1,否则返回NULL,不支持浮点型数值。
percentile(col, array(p~1,,\ [, p,,2,,]…))array<double>返回数值区域的一组百分比值分别对应的数值点。0<=P<=1,否则返回NULL,不支持浮点型数值。
percentile_approx(col, p[, B])doubleReturns an approximate p^th^ percentile of a numeric column (including floating point types) in the group. The B parameter controls approximation accuracy at the cost of memory. Higher values yield better approximations, and the default is 10,000. When the number of distinct values in col is smaller than B, this gives an exact percentile value.
percentile_approx(col, array(p~1,, [, p,,2_]…) [, B])array<double>Same as above, but accepts and returns an array of percentile values instead of a single one.
histogram_numeric(col, b)array<struct\{‘x’,'y’\}>Computes a histogram of a numeric column in the group using b non-uniformly spaced bins. The output is an array of size b of double-valued (x,y) coordinates that represent the bin centers and heights
collect_set(col)array返回无重复记录

四、内置表生成函数

函数返回类型说明
explode(array<TYPE> a)数组数组一条记录中有多个参数,将参数拆分,每个参数生成一列。

五、自定义函数

5.1 自定义函数分类

自定义函数包括三种UDF、UDAF、UDTF

UDF(User-Defined-Function) :一进一出

UDAF(User- Defined Aggregation Funcation) :用户自定义聚合函数,多进一出。Count/max/min

UDTF(User-Defined Table-Generating Functions) :用户自定义表生成函数,一进多出,如explore()

聚合函数 UDAF 能够满足我们使用的基本都已经内置了,本文就重点介绍一下UDF和UDTF函数的实现。

5.2 自定义函数开发

5.2.1 开发UDF函数

5.2.1.1 开发流程步骤
5.2.1.1.1 继承Hive提供的类

org.apache.hadoop.hive.ql.udf.generic.GenericUDF;

5.2.1.1.2 实现类中的抽象方法
public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {

}

public Object evaluate(DeferredObject[] arguments) throws HiveException {

}

public String getDisplayString(String[] children) {

}
5.2.1.1.3 将jar包上传到虚拟机中

a)把程序打包放到目标机器上去;

b)进入hive客户端,添加jar包:hive>add jar /run/jar/udf_test.jar;

c)创建临时函数:hive>CREATE TEMPORARY FUNCTION add_example AS 'hive.udf.Add';

d)查询HQL语句:

SELECT add_example(xx, xx) FROM scores;

e)销毁临时函数:hive> DROP TEMPORARY FUNCTION add_example;

注意:此种方式创建的函数属于临时函数,当关闭了当前会话之后,函数会无法使用,因为jar的引用没有了,无法找到对应的java文件进行处理,因此不推荐使用。

5.2.1.1.4 将jar包上传到hdfs集群中

a)把程序打包上传到hdfs的某个目录下

b)创建函数:hive>CREATE FUNCTION add_example AS 'hive.udf.Add' using jar "hdfs://mycluster/jar/udf_test.jar";

d)查询HQL语句:

SELECT add_example(xx, xx) FROM scores;

e)销毁临时函数:hive> DROP  FUNCTION add_example;

5.2.1.2 实现UDF函数

自定义一个UDF实现计算给定基本数据类型的长度,例如:

select my_len("abcd");

5.2.1.2.1 创建Maven工程,导入依赖
<dependencies><dependency><groupId>org.apache.hive</groupId>、

<artifactId>hive-exec</artifactId>

<version>3.1.3</version>

</dependency></dependencies>
5.2.1.2.2 创建函数类实现GenericUDF类
package com.atguigu;

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;

import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;

import org.apache.hadoop.hive.ql.metadata.HiveException;

import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;

import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;

import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;

public class LengthUDFTest extends GenericUDF {

//initialize方法,全局执行一次(一般做一些校验)

@Override

public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {

// 判断输入参数的个数

if (arguments.length != 1) {

throw new UDFArgumentException("输入参数长度异常,只允许输入1个参数");

}

// 判断输入参数的类型(是否是基本类型)

// Category 共定义了5种类型:基本类型(Primitive),集合(List),键值对映射(Map),结构体(Struct),联合体(Union)

if(!arguments[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)){

throw new UDFArgumentTypeException(0,"输入参数类型异常");

}

// 函数本身返回值为 int,需要返回 int 类型的鉴别器对象

return PrimitiveObjectInspectorFactory.javaIntObjectInspector;

}

//evaluate方法,函数的逻辑处理方法,进来一条执行一次

@Override

public Object evaluate(DeferredObject[] arguments) throws HiveException {

if (arguments[0].get() == null) {

return 0;

} else {

return arguments[0].get().toString().length();

}

}

//getDisplayString 方法,在使用explain 查看SQL执行计划时,会显示(一般直接返回null即可)

@Override

public String getDisplayString(String[] strings) {

return null;

}

}
5.2.1.2.3 函数的使用
5.2.1.2.3.1 临时函数

1)打成jar包上传到服务器/hive/datas/myudf.jar。

2)将jar包添加到hive的classpath,临时生效。

add jar /hive/datas/myudf.jar;

3)创建临时函数与开发好的java class关联。

create temporary function my_len as "com.atguigu.LengthUDFTest";

4)即可在hql中使用自定义的临时函数

select ename, my_len(ename) ename_lenfrom emp;

5)删除临时函数

drop temporary function my_len;

提示:临时函数只跟会话有关系,跟库没有关系。只要创建临时函数的会话不断,在当前会话下,任意一个库都可以使用,其他会话全都不能使用。

5.2.1.2.3.2 永久函数

1)创建永久函数

create function my_len2 as "hive.udf.MyUDF" using jar "hdfs://hadoop:8020/udf/myudf.jar";

提示:

因为add jar本身也是临时生效,所以在创建永久函数的时候,需要制定路径(并且因为元数据的原因,这个路径还得是HDFS上的路径)。

2)即可在hql中使用自定义的永久函数。

select ename, my_len2(ename) ename_lenfrom emp;

3)删除永久函数

drop function my_len2;

提示:

永久函数跟会话没有关系,创建函数的会话断了以后,其他会话也可以使用。

永久函数创建的时候,在函数名之前需要自己加上库名,如果不指定库名的话,会默认把当前库的库名给加上。

永久函数使用的时候,需要在指定的库里面操作,或者在其他库里面使用的话加上,库名.函数名。

5.2.2 开发UDTF函数

5.2.2.1 开发流程

和开发UDF函数流程差不多,不同的是,需要继承

org.apache.hadoop.hive.ql.udf.generic.GenericUDTF;

同时,需要实现的方法为:

@Override

public StructObjectInspector initialize(StructObjectInspector argOIs) throws UDFArgumentException {

}

public void process(Object[] args) throws HiveException {

}

public void close() throws HiveException {

}
5.2.2.2 实现UDTF函数
5.2.2.2.1 创建Mvaen工程,导入依
<dependencies><dependency><groupId>org.apache.hive</groupId>、

<artifactId>hive-exec</artifactId>

<version>3.1.3</version>

</dependency></dependencies>
5.2.2.2.2 创建函数类实现GenericUDTF类
package com.atguigu;

import org.apache.hadoop.hive.ql.exec.UDFArgumentException;

import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException;

import org.apache.hadoop.hive.ql.metadata.HiveException;

import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;

import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;

import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
public class SplitUDTFTest extends GenericUDF {

//initialize方法,全局执行一次(一般做一些校验)

@Override

public ObjectInspector initialize(ObjectInspector[] arguments) throws UDFArgumentException {

// 判断输入参数的个数

if (arguments.length != 1) {

throw new UDFArgumentException("输入参数长度异常,只允许输入1个参数");

}

// 判断输入参数的类型(是否是基本类型)

// Category 共定义了5种类型:基本类型(Primitive),集合(List),键值对映射(Map),结构体(Struct),联合体(Union)

if(!arguments[0].getCategory().equals(ObjectInspector.Category.PRIMITIVE)){

throw new UDFArgumentTypeException(0,"输入参数类型异常");

}

// 函数本身返回值为 int,需要返回 int 类型的鉴别器对象

return PrimitiveObjectInspectorFactory.javaIntObjectInspector;

}

//evaluate方法,函数的逻辑处理方法,进来一条执行一次

@Override

public Object evaluate(DeferredObject[] arguments) throws HiveException {

if (arguments[0].get() == null) {

return 0;

} else {

return arguments[0].get().toString().length();

}

}

//getDisplayString 方法,在使用explain 查看SQL执行计划时,会显示(一般直接返回null即可)

@Override

public String getDisplayString(String[] strings) {

return null;

}

}
5.2.2.2.3 函数的使用

和UDF函数的使用一致,也分临时函数和永久函数,具体可参考UDF函数的使用,这里不做重复说明。

好了,今天Hive函数的相关内容就分享到这里,如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

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

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

相关文章

msvcp120.dll丢失怎么办?(五种方法快速解决)

首先&#xff0c;让我们来了解一下msvcp120.dll这个文件。msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2012 Redistributable Package的一部分。这个文件的作用是支持一些应用程序的运行&#xff0c;例如游戏、办公软件等。当我们在使用这些软件时&am…

基于YOLOv8模型的水果目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的水果目标检测系统可用于日常生活中检测与定位苹果&#xff08;apple&#xff09;、香蕉&#xff08;banan&#xff09;、葡萄&#xff08;grape&#xff09;、橘子&#xff08;orange&#xff09;、菠萝&#xff08;pineapple&#xff09;和西…

2054. 两个最好的不重叠活动;1255. 得分最高的单词集合;858. 镜面反射

2054. 两个最好的不重叠活动 核心思想:枚举小堆。因为你最多可以参加两个时间不重叠活动&#xff0c;所以我们就枚举其中一个活动&#xff0c;用一个堆来维护右边界的最小值&#xff0c;因为我们的event是排序的&#xff0c;前面满足的max_r_v&#xff0c;后面的event也肯定满…

局域网下共享文件夹全流程

请注意&#xff1a;配置共享文件夹以便他人无需输入账户和密码访问可能带来安全风险。请确保你明白这一点并在适当的网络环境中操作。 以下说明是基于 Windows 系统的&#xff1a; 步骤 1&#xff1a;共享文件夹 找到你想要共享的文件夹&#xff0c;右击选择“属性”。 转到…

大并发下请求合并(并发处理技巧)

大并发下请求合并 一次请求消耗的资源旧的方式改造后批量请求处理器批量请求包装类使用 性能测试旧的改造后的 一次请求消耗的资源 我们经常碰到查询请求的操作&#xff0c;例如根据用户id查询该用户的信息&#xff0c;接口仓储层查询用户正常的做法是通过id去数据库查询该用户…

小县城蔬菜配送小程序

在这个数字化时代&#xff0c;越来越多的人选择在线上购物。而果蔬作为日常生活中不可或缺的一部分&#xff0c;也越来越多的人选择在线上进行购买。那么如何开发一个果蔬配送小程序&#xff0c;轻松开启线上销售呢&#xff1f;下面就让我们来一起探讨一下。 首先&#xff0c;为…

【JAVA-Day30】 为什么稀疏数组能在Java中有效地节省内存空间?

为什么稀疏数组能在Java中有效地节省内存空间&#xff1f; 为什么稀疏数组能在Java中有效地节省内存空间&#xff1f;摘要引言一、什么是稀疏数组二、稀疏数组的应用场景和优势2.1 应用场景2.2 优势 三、如何定义稀疏数组四、总结参考资料 博主 默语带您 Go to New World. ✍ 个…

python项目2to3方案预研

目录 官方工具2to3工具安装参数解释基本使用工具缺陷 future工具安装参数解释基本使用工具缺陷 python-modernize工具安装参数解释基本使用工具缺陷 pyupgrade工具安装参数解释基本使用工具缺陷 对比 官方工具2to3 2to3 是Python官方提供的用于将Python 2代码转换为Python 3代…

滚雪球学Java(24):Java反射

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

【操作系统笔记】进程和线程

进程的组成 进程要读取 ELF 文件&#xff0c;那么&#xff1a; ① 要知道文件系统的信息&#xff0c;fs_struct② 要知道打开的文件的信息&#xff0c;files_struct 一个进程除了需要读取 ELF 文件外&#xff0c;还可以读取其他的文件中的数据。 进程中肯定有一个 mm_struct…

QGIS怎么修改源代码?持续更新...

修改配置文件保存位置 修改目的&#xff1a;放着和本地安装的其他QGIS共用一份配置文件 修改文件&#xff1a;core/qgsuserprofilemanager.cpp 修改位置&#xff1a;第37行 return basePath QDir::separator() "my_profiles";修改完毕后&#xff0c;再次生成一下…

MYSQL的多版本并发控制MVCC(Multi-Version Concurrency Control)

1、概述 MVCC是一种用于数据库管理系统的并发控制技术&#xff0c;允许多个事务同时访问数据库&#xff0c;而不会导致读写冲突。也就是说在读写的时候&#xff0c;线程不用去争抢读写锁。因为加锁的过程比较耗性能。 当然很多时候还是必须的&#xff0c;不能避免&#xff0c;…

Axure官网下载+使用技巧大揭秘,成为原型设计高手!

Axure 是一款高效的原型设计工具&#xff0c;可以用于创建应用程序和网页的原型、框架图和结构图等。Axure 内置了各种小部件&#xff0c;使用户能够轻松构建动态交互&#xff0c;即使是初学者&#xff0c;也可以在 Axure 中创建复杂、动态且功能丰富的原型&#xff0c;而无需了…

RT Preempt linux学习笔记

RT Preempt linux学习笔记 一、实时操作系统&#xff08;Realtime Operating System&#xff09; 1. 什么是实时操作系统 A real-time system is a time-bound system which has well-defined, fixed time constraints. Processing must be done within the defined constra…

win10系统 C++环境 安装编译GRPC

第一步 下载源码、更新、cmake编译&#xff1a; 为了依赖的成功安装&#xff0c;采用gitee进行下载与更新。记得需要安装git软件。 安装命令&#xff1a; 在自己指定的目录下&#xff0c;鼠标右键&#xff0c;选择 git Bash Here 打开命令行 git clone -b v1.34.0 https://gi…

[激光原理与应用-68]:如何消除50Hz工频干扰和差分信号应对工频干扰

目录 一、什么工频干扰 1.1 什么工频干扰 1.2 工频干扰的幅度 1.3 工频干扰如何进入设备 1.4 工频干扰的负面影响 二、如何消除工频干扰 2.1 要消除工频干扰&#xff0c;可以考虑以下方法&#xff1a; 2.2 要具体消除工频干扰&#xff0c;可以采取以下措施 2.3 使用差…

【探索C语言中VS调试技巧】:提高效率和准确性

文章目录 前言1. 什么是bug&#xff1f;2. 调试是什么&#xff1f;有多重要&#xff1f;2.1 调试是什么&#xff1f;2.2 调试的基本步骤2.3 Debug和Release的介绍 3. Windows环境调试介绍3.1 调试环境的准备3.2 学会快捷键3.3 调试的时候查看程序当前信息3.3.1 查看临时变量的值…

第 4 章 串(串的块链存储实现)

1. 背景说明 该实现和链表的实现极为相似&#xff0c;只是将链接的内存拆分为具体的大小的块。 2. 示例代码 1). status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncN…

Neoj4 cypher脚本基本操作

输入网址后&#xff0c;进入默认数据库 操作一&#xff0c;创建一个节点 CREATE (node:Label {property: value})#解释 CREATE (变量名:类名 {节点属性名: 属性值})#举例 CREATE (node1:Person {name: xiao ming}) CREATE (node2:Person {name: xiao hong}) 操作二&#xff0…

行业追踪,2023-09-20

自动复盘 2023-09-20 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…