es 3期 第23节-运用Pipeline实现二转聚合统计

#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。
#### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性,任何企图直接替代严格事务性场景的应用项目都会失败!!!
#### 3.Elasticsearch原则上适合一切非事务性应用场景或能够容许一定的延迟的事务性场景;能最大限度的替代mongodb与传统关系型数据库

##### 索引字段与属性都属于静态设置,若后期变更历史数据需要重建索引才可生效
##### 对历史数据无效!!!!
##### 一定要重建索引!!!!


#### 1、Pipeline聚合介绍

### Pipeline聚合
## 概念解释
# 每个数据聚合阶段是一个环节,多个环节串联一起来,形成一个管道模型,上一个环节的聚合结果是下一个环节的输入数据
# Pipeline执行过程
# 1.每个数据聚合阶段完成之后,将本次的聚合结果传入下一个聚合阶段,直到所有聚合完成;2.基于前置的分桶聚合,之后进行管道聚合
# ES聚合本质
# 1.ES聚合本质是属于查询性的聚合,不是内存式的计算,不支持多次迭代。
# 2.只能处理数值类型

### Pipeline聚合关系
## 聚合关系类型
# Parent,基于上下级,有父子关系
# Sibling,基于相同级,有兄弟关系

### Gap间隔异常
## Gaps概念
# 1.分桶数据会产生脏数据或者缺失,遇到此种情况需要设定一种模式;
# 2.类同与bucket聚合时字段确实missing属性
# 间隔处理方式skip,跳过,默认
# insert_zeros,基于0补足   

### Pipeline聚合便利
## Pipeline聚合便利
# 一次聚合,可以得到不同维度的聚合结果,相比传统统计,节约至少一次统计

#### 2、Pipeline常用聚合

### 数值pipeline聚合
## avg/sum/max/min
# 常用数值Pipeline聚合
# 1.max_bucket
# 2.avg_bucket
# 3.Sum_bucket
# 4.min_bucket
# 5.buckets_path,设定聚合直接的路径关系指向
## Pipeline聚合关系
# sibling 兄弟平等关系
 

## max_bucket使用
# 统计出发地国家的飞行时间stats

GET kibana_sample_data_flights/_search
{"track_total_hits": true,"size": 0,"aggs": {// 注意这个自定义名字,下面会用到"trems_OriginCountry": {"terms": {"field": "OriginCountry"},"aggs": {// 注意这个自定义名字,下面会用到"stats_FlightTimeMin": {// 注意,这里是stats"stats": {"field": "FlightTimeMin"}}}},"pipeline-max-FlightTimeMin": {"max_bucket": {// 外层的自定义名字 加上符号'>' 内层的自定义名字和统计名// 注意pipeline是属于那个aggs下的,从这一层开始取自定义名// stats的max值"buckets_path": "trems_OriginCountry>stats_FlightTimeMin.max"}}}
}

# 统计max值的话,下面就不用加max了

GET kibana_sample_data_flights/_search
{"track_total_hits": true,"size": 0,"aggs": {// 注意这个自定义名字,下面会用到"trems_OriginCountry": {"terms": {"field": "OriginCountry"},"aggs": {// 注意这个自定义名字,下面会用到"stats_FlightTimeMin": {// 注意,这里换了max"max": {"field": "FlightTimeMin"}}}},"pipeline-max-FlightTimeMin": {"max_bucket": {// 上面换了max后,结尾就不需要max了"buckets_path": "trems_OriginCountry>stats_FlightTimeMin"}}}
}

# 统计出发地国家+出发地城市的飞行时间stats,最大值

GET kibana_sample_data_flights/_search
{"track_total_hits": true,"size": 0,"aggs": {"trems_OriginCountry": {"terms": {"field": "OriginCountry","size": 10},"aggs": {"trems_OriginCityName": {"terms": {"field": "OriginCityName","size": 10},"aggs": {"stats_FlightTimeMin": {"stats": {"field": "FlightTimeMin"}}}},"pipeline-OriginCityName-max": {"max_bucket": {// 注意pipeline是属于那个aggs下的,从这一层开始取自定义名"buckets_path": "trems_OriginCityName>stats_FlightTimeMin.max"}}}}}
}

# 统计出发地国家+出发地城市的飞行时间stats,多种

GET kibana_sample_data_flights/_search
{"track_total_hits": true,"size": 0,"aggs": {"trems_OriginCountry": {"terms": {"field": "OriginCountry","size": 10},"aggs": {"trems_OriginCityName": {"terms": {"field": "OriginCityName","size": 10},"aggs": {"stats_FlightTimeMin": {"stats": {"field": "FlightTimeMin"}}}},// 统计出发地国家+出发地城市的飞行时间 其中的max值"pipeline-OriginCityName-max": {"max_bucket": {// 注意pipeline是属于那个aggs下的,从这一层开始取自定义名"buckets_path": "trems_OriginCityName>stats_FlightTimeMin.max"}},// 统计出发地国家+出发地城市的飞行时间 其中的min值"pipeline-OriginCityName-min": {"min_bucket": {// 注意pipeline是属于那个aggs下的,从这一层开始取自定义名"buckets_path": "trems_OriginCityName>stats_FlightTimeMin.min"}}}},// 在上面每个分组的max结果集在统计出其中的最大值"pipeline-OriginCountry-max-FlightTimeMin": {"max_bucket": {"buckets_path": "trems_OriginCountry>pipeline-OriginCityName-max"}},// 在上面每个分组的min结果集在统计出其中的最小值"pipeline-OriginCountry-min-FlightTimeMin": {"max_bucket": {"buckets_path": "trems_OriginCountry>pipeline-OriginCityName-min"}}}
}

### Stats/extended status
## 常用数值Pipeline聚合
# 1.stats bucket
# 2.extended stats bucket
## Pipeline聚合关系
# sibling 兄弟平等关系

# 扩展计算

GET kibana_sample_data_flights/_search
{"track_total_hits": true,"size": 0,"aggs": {"trems_OriginCountry": {"terms": {"field": "OriginCountry","size": 10},"aggs": {"trems_OriginCityName": {"terms": {"field": "OriginCityName","size": 10},"aggs": {"stats_FlightTimeMin": {// 扩展"extended_stats": {"field": "FlightTimeMin"}}}},"pipeline-OriginCityName-max": {// 扩展"extended_stats_bucket": {// 注意pipeline是属于那个aggs下的,从这一层开始取自定义名"buckets_path": "trems_OriginCityName>stats_FlightTimeMin.max"}}}}}
}


#### 3、Pipeline高级聚合

### Cumulative sum
## 概念解释
#累计汇总,基于分桶累计值汇总
## Pipeline聚合关系
# parent 父子上下级关系

# 统计电商购物数据,统计用户月维度消费金额,并算出每个月的累加值

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"terms_custom_id": {"terms": {"field": "customer_id","size": 10},"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "month","format": "yyyy-MM"},"aggs": {// 自定义key"stats_taxful_total_price": {// 统计订单价格"stats": {"field": "taxful_total_price"}},// 自定义key"cumulative_sum_taxful_total_price": {// 计算累加值"cumulative_sum": {"buckets_path": "stats_taxful_total_price.sum"}}}}}}}
}

### 滑动窗口概念介绍
# 滑动窗口概念解释基于一定的窗口函数,计算窗口内的数据值
# 在大数据分析场景中,经常出现如Flink/Spark中所谓的实时计算其实就是基于窗口理念
# Pipeline聚合关系
# parent 父子上下级关系


## 按照5个分桶跨度,计算平均值
## 分桶序号    分桶 value   窗口数为5,平均值
# 序号-1        10            10=10/1
# 序号-2        20            15=(10+20)/2
# 序号-3        30            20=(10+20+30)/3
# 序号-4        40            25=(10+20+30+40)/4
# 序号-5        50            30=(10+20+30+40+50)/5
# # 序号-6     60            40=(20+30+40+50+60)/5
# 序号-7        70            50=(30+40+50+60+70)/5
# 序号-8        80            60=(40+50+60+70+80)/5
# 序号-9        90            70=(50+60+70+80+90)/5
# 序号-10     100           80=(60+70+80+90+100)/5

## 参数
# moving_fn,函数窗口表达式
# window:窗口大小,表示要包含多少个桶(buckets)进行计算。
# script:自定义脚本,用于定义如何计算窗口内的值。可以是简单的求和、平均值等操作。
# shift(可选):偏移量,表示窗口相对于当前桶的位置。默认为 0,即窗口从当前桶开始

# 平均值,根据订单时间月维度分组统计价格,计算2个窗口的平均值

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"sum_taxful_total_price": {// 统计订单价格,"sum": {"field": "taxful_total_price"}},// 自定义key"moving_fn_avg_taxful_total_price": {// 计算平均值,"moving_fn": {"buckets_path": "sum_taxful_total_price",// 窗口数2"window": 2,// 使用脚本,使用内置的无权重平均函数"script": "MovingFunctions.unweightedAvg(values)"}}}}}
}

# 累加值,根据订单时间月维度分组统计价格,计算2个窗口的累加值

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"sum_taxful_total_price": {// 统计订单价格,"sum": {"field": "taxful_total_price"}},// 自定义key"moving_fn_sum_taxful_total_price": {// 计算平均值,"moving_fn": {"buckets_path": "sum_taxful_total_price",// 窗口数2"window": 2,// 使用脚本,使用内置的累加函数"script": "MovingFunctions.sum(values)"}}}}}
}

# 自定义脚本计算方式

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"sum_taxful_total_price": {// 统计订单价格,"sum": {"field": "taxful_total_price"}},// 自定义key"moving_fn_avg_taxful_total_price": {// 计算累加值,,"moving_fn": {"buckets_path": "sum_taxful_total_price",// 窗口数2"window": 2,// 使用脚本,自定义计算方式"script": """double sum = 0;double weightSum = 0;for (int i = 0; i < values.length; ++i) {// 权重从 1 开始递增double weight = i + 1; sum += values[i] * weight;weightSum += weight;}return sum / weightSum;"""}}}}}
}


### moving_percentiles
# 基于移动窗口,获取数据的百分位占比
# percentiles bucket
# 需要基于已有的分桶数据结果之后,在其中分析统计分桶的百分位占比
# Pipeline 关系
# sibling 兄弟平等关系

## 查询参数
# percentiles_bucket,百分位分桶占比管道聚合函数,擅长父子结构的分桶
# buckets_path,分桶字段指定,注意这里的路径指向
# percents,百分位段落划分。

# 每组最大值,计算数据所在的百分位

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"stats_taxful_total_price": {// 统计订单价格,,"stats": {"field": "taxful_total_price"}}}},// 自定义key"percentiles_bucket_taxful_total_price": {// 计算stats_taxful_total_price.max百分位"percentiles_bucket": {"buckets_path": "date_histogram_order_date>stats_taxful_total_price.max","percents": [1,5,10,15,25,35,45,55,65,75,85,95,99]}}}
}


### derivative
# 计算前后桶的差值,延伸值
# 此管道函数计算,必须基于 histogram 直方图分桶
# Pipeline 关系
# parent 父子先后上下级关系

## 查询参数
# derivative,管道查询函数
# buckets_path,指定统计字段
 

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"sum_taxful_total_price": {// 统计订单价格,"sum": {"field": "taxful_total_price"}},// 自定义key"derivative_taxful_total_price": {// 计算平均值,,"derivative": {"buckets_path": "sum_taxful_total_price"}}}}}
}


### Serial differencing
# 概念解释
# 基于一定的窗口,计算前后分桶数据差值,如:redis监控中,总命令数差值,默认是递增的
# Pipeline聚合关系
# sibling 兄弟平等关系

# 查询参数
# serial_diff,基于2个分桶值之间,计算前后的差值,一般用户直方图分桶聚合应用中
# buckets_path,指定字段路径
# lag,差值起始位置,默认1,表示从第2个分桶开始计算

# 计算一周的,lag=7

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"sum_taxful_total_price": {// 统计订单价格,"sum": {"field": "taxful_total_price"}},// 自定义key"serial_diff_taxful_total_price": {// 计算差值"serial_diff": {"buckets_path": "sum_taxful_total_price",// 每周增长情况,而不是每日增长,可以通过设置 lag 参数为7来实现"lag": 7}}}}}
}

## derivative 与 serial_diff 区别
# derivative 主要关注相邻桶之间值的变化率,适合用来观察短期内的变化趋势。
# serial_diff 则更加专注于去除数据中的趋势成分,通过计算与过去若干个桶值的差异来进行平稳化处理,适用于需要去除长期趋势或周期性影响的情况。

### selector分桶筛选
# 概念解释
# 有些应用场景,分桶聚合之后的数据需要进行一些过滤,基于管道聚合很容易实现,有点类似与数据库中的
# group-having组合
## Pipeline 关系
# parent 父子先后上下级关系

# 查询参数
# bucket_selector,分桶数据过滤表达式入口
# buckets_path,选择字段值,可以指定多个字段,采用键值方式{key:value(字段)}
# script,脚本计算表达式,返回的必须是 bool=true/false

# 按照日期统计每日的订单销售金额,并筛选出总金额大于13000小于13500的日期

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"sum_taxful_total_price": {// 统计订单价格,"sum": {"field": "taxful_total_price"}},// 自定义key"custom-pipeline-fliter": {"bucket_selector": {"buckets_path": {"sum":"sum_taxful_total_price"},"script": """params.sum>13000 && 13500>params.sum;"""}}}}}
}

### bucket_sort
# 分桶之后的数据结构,往往需要按照一定的统计值排序,甚至仅仅需要截取其中部分分桶结果
# Pipeline 关系
# parent 父子先后上下级关系
## 查询参数
# bucket sort,分桶结果排序管道
# sort,设定一个或多个排序值,分桶结果按照此规则排序
# from,分页起始分桶位置
# size,分页大小,单页返回分桶多少,类似与之前学习的composite 组合分桶聚合

# 返回前3

GET kibana_sample_data_ecommerce/_search
{"size": 0,"track_total_hits": true,"aggs": {"date_histogram_order_date": {// 根据订单时间,月维度"date_histogram": {"field": "order_date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {// 自定义key"stats_taxful_total_price": {// 统计订单价格,,"stats": {"field": "taxful_total_price"}},// 自定义key"custom-pipeline-sort": {"bucket_sort": {"from": 0,"size": 3, "sort": [{"stats_taxful_total_price.sum":{"order":"desc"}}]}}}}}
}


#### 4、Pipeline聚合建议以及经验分享
## 是否需要 流式计算Flink/Spark?(简单的数据可以直接使用es)
  
  
# Pipeline 聚合
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/search-aggregations-pipeline.html
# movavg 聚合
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/search-aggregations-pipeline-movavg-aggregation.html
# movfn 聚合
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/search-aggregations-pipeline-movfn-aggregation.html
# bucket_script 聚合
# https://www.elastic.co/guide/en/elasticsearch/reference/8.6/search-aggregations-pipeline-bucket-script-aggregation.html

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBuilderX打包ios保姆式教程

1、登录苹果开发者后台并登录已认证开发者账号ID Sign In - Apple 2、创建标识符&#xff08;App ID&#xff09;、证书&#xff0c;描述文件 3、首先创建标识符&#xff0c;用于新建App应用 3-1、App的话直接选择第一个App IDs&#xff0c;点击右上角继续 3-2、选择App&#x…

【PyTorch入门】使用PyTorch构建一个简单的图像分类模型

本次分享一个简单的使用PyTorch进行图像分类模型搭建的小案例&#xff0c;让大家对PyTorch的流程有一个认知。 1. 导入必要的库 import torch import torch.nn as nn import torchvision import numpy as np from torch.autograd import Variable import matplotlib.pyplot as…

【SpringAOP】Spring AOP 底层逻辑:切点表达式与原理简明阐述

前言 &#x1f31f;&#x1f31f;本期讲解关于spring aop的切面表达式和自身实现原理介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &am…

智慧公厕大数据驱动下的公共卫生管理与优化

在快速发展的城市化进程中&#xff0c;公共卫生问题日益凸显&#xff0c;成为城市管理的重要议题。智慧公厕&#xff0c;作为公共卫生设施的一次革命性创新&#xff0c;正借助物联网技术的东风&#xff0c;引领公共卫生进入一个全新的生态时代。本文将深入探讨智慧公厕如何利用…

Git:Cherry-Pick 的使用场景及使用流程

前面我们说了 Git合并、解决冲突、强行回退等解决方案 >> 点击查看 这里再说一下 Cherry-Pick功能&#xff0c;Cherry-Pick不是merge&#xff0c;只是把部分功能代码Cherry-Pick到远程的目标分支 git cherry-pick功能简介&#xff1a; git cherry-pick 是用来从一个分…

Windows 安装 Docker 和 Docker Compose

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

前端 图片上鼠标画矩形框,标注文字,任意删除

效果&#xff1a; 页面描述&#xff1a; 对给定的几张图片&#xff0c;每张能用鼠标在图上画框&#xff0c;标注相关文字&#xff0c;框的颜色和文字内容能自定义改变&#xff0c;能删除任意画过的框。 实现思路&#xff1a; 1、对给定的这几张图片&#xff0c;用分页器绑定…

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束&#xff0c;常见的Mapping属性包括&#xff1a; type&#xff1a;字段数据类…

在Jmeter中跨线程组传递变量(token)--设置全局变量

参考资料&#xff1a; Jmeter跨线程组传递参数(token)_jmeter获取token传递给下一个线程组详解-CSDN博客 最近工作中遇到一个问题&#xff0c;就是如何跨线程组传递变量&#xff0c;比如token,后来找到一些资料解决了该问题&#xff0c;目前有两种方式都可以解决&#xff0c;我…

【C++】揭开C++类与对象的神秘面纱(首卷)(类的基础操作详解、实例化艺术及this指针的深究)

文章目录 一、类的定义1.类定义格式2.类访问限定符3.类域 二、类的实例化1.实例化概念2.对象的大小 三、隐藏的this指针与相关练习1.this指针的引入与介绍练习1练习2练习3 一、类的定义 1.类定义格式 在讲解类的作用之前&#xff0c;我们来看看类是如何定义的&#xff0c;在C中…

前端JavaScript中some方法的运用

一&#xff0e;前言 在我们的日常工作中&#xff0c;有时候仅仅需要找到某个数组中的值&#xff0c;就可以返还结果的话&#xff0c;笔者建议就可以使用some方法&#xff0c;这比遍历整个数组高效一些。 二&#xff0e;应用 首先&#xff0c;看官方定义&#xff1a;JavaScri…

安装vue脚手架出现的一系列问题

安装vue脚手架出现的一系列问题 前言使用 npm 安装 vue/cli2.权限问题及解决方法一&#xff1a;可以使用管理员权限进行安装。方法二&#xff1a;更改npm全局安装路径 前言 由于已有较长时间未进行 vue 项目开发&#xff0c;今日着手准备开发一个新的 vue 项目时&#xff0c;在…

基于Python实现的通用小规模搜索引擎

基于Python实现的通用小规模搜索引擎 1.项目简介 1.1背景 《信息内容安全》网络信息内容获取技术课程项目设计 一个至少能支持10个以上网站的爬虫程序&#xff0c;且支持增量式数据采集;并至少采集10000个实际网页;针对采集回来的网页内容&#xff0c; 能够实现网页文本的分…

鸿蒙面试 2025-01-10

写了鉴权工具&#xff0c;你在项目中申请了那些权限&#xff1f;&#xff08;常用权限&#xff09; 位置权限 &#xff1a; ohos.permission.LOCATION_IN_BACKGROUND&#xff1a;允许应用在后台访问位置信息。 ohos.permission.LOCATION&#xff1a;允许应用访问精确的位置信息…

【硬件测试】基于FPGA的BPSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR

目录 1.硬件片内测试效果 2.算法涉及理论知识概要 2.1 bpsk 2.2 帧同步 3.Verilog核心程序 4.开发板使用说明和如何移植不同的开发板 5.完整算法代码文件获得 1.硬件片内测试效果 本文是之前写的文章 《基于FPGA的BPSK帧同步系统verilog开发,包含testbench,高斯信道,误…

MySQL 视图 存储过程与存储函数

第十四章_视图、第十五章 _存储过程与存储函数 1.常见的数据库对象 1. 表&#xff08;Table&#xff09; 用于存储结构化数据的基本对象&#xff0c;由行&#xff08;记录&#xff09;和列&#xff08;字段&#xff09;组成。 2. 视图&#xff08;View&#xff09; 基于一…

Chrome_60.0.3112.113_x64 单文件版 下载

单文件&#xff0c;免安装&#xff0c;直接用~ Google Chrome, 免費下載. Google Chrome 60.0.3112.113: Chrome 是 Google 開發的網路瀏覽器。它的特點是速度快,功能多。 下载地址: https://blog.s3.sh.cn/thread-150-1-1.htmlhttps://blog.s3.sh.cn/thread-150-1-1.html

CTFshow—文件包含

Web78-81 Web78 这题是最基础的文件包含&#xff0c;直接?fileflag.php是不行的&#xff0c;不知道为啥&#xff0c;直接用下面我们之前在命令执行讲过的payload即可。 ?filephp://filter/readconvert.base64-encode/resourceflag.php Web79 这题是过滤了php&#xff0c;…

python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像

【1】引言 前序已经学习了如何平移图像&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;二十七&#xff09;使用cv2.warpAffine&#xff08;&#xff09;函数平移图像-CSDN博客 在此基础上&#xff0c;我们尝试旋转图像的同时缩放图像。 【2】…

24下半年软考「单独划线」合格标准已公布!

2024年下半年计算机技术与软件专业技术资格考试单独划线地区合格标准已公布&#xff01; 其中初级和中级单独划线地区合格标准各科目均为39分&#xff0c;高级各科目为40分&#xff0c;符合单独划线地区的同学可以去申请证书了。 一、证书效力 在单独划线地区报名参加相关职业…