【Elasticsearch 】 聚合分析:聚合概述
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea
【Elasticsearch 】 聚合分析:聚合概述
引言
在当今数字化时代,数据如同浩瀚的海洋,蕴含着无尽的价值。然而,如何从海量的数据中提取出有意义的信息,成为了众多开发者和数据分析师面临的重要挑战。Elasticsearch
作为一款强大的分布式搜索引擎,不仅提供了高效的搜索功能,其聚合分析功能更是为我们在数据海洋中挖掘宝藏提供了有力的工具。
Elasticsearch
的聚合分析功能允许我们对存储在其中的数据进行深入的统计分析和分组计算。想象一下,你拥有一个包含数百万条用户行为记录的数据集,你可能想知道不同年龄段的用户购买了哪些产品,或者某个时间段内网站的平均访问时长是多少。这些看似复杂的问题,通过 Elasticsearch
的聚合功能都能轻松解决。
聚合分析就像是一个智能的数据洞察引擎,它能够将无序的数据转化为有价值的统计结果。通过对数据进行分组、计算各种度量值以及对聚合结果进行进一步处理,我们可以揭示数据背后隐藏的模式、趋势和关系。这不仅有助于我们做出更明智的决策,还能为业务的发展提供有力的支持。
在接下来的内容中,我们将探讨 Elasticsearch
聚合分析的各个方面,从基本概念到实际应用,通过丰富的案例和详细的代码示例,带你全面掌握这一强大的功能。
一、Elasticsearch 聚合分析概述
(一)聚合的概念
聚合,简单来说,就是对数据进行统计分析、分组计算的操作。在 Elasticsearch 中,它提供了一种强大的方式来处理存储在索引中的大量文档。通过聚合,我们可以将数据按照特定的规则进行分组,并对每个分组的数据进行各种计算,例如求和、求平均值、计数等。这使得我们能够从宏观角度了解数据的分布和特征,提取出对业务有重要意义的信息。
(二)聚合的作用
- 数据洞察:帮助我们快速了解数据的整体情况,发现数据中的规律和趋势。例如,在电商数据中,通过聚合分析可以了解不同商品类别的销售情况,找出热门和冷门商品。
- 决策支持:为业务决策提供数据支持。通过对用户行为数据的聚合分析,可以了解用户的偏好和行为模式,从而优化产品设计和营销策略。
- 性能优化:在某些情况下,聚合分析可以帮助我们发现数据存储和查询中的性能瓶颈,从而进行针对性的优化。
二、聚合的分类
(一)桶聚合
- 概念
桶聚合就像是一个个“桶”,它将数据按照特定的条件分组到不同的桶中。每个桶都代表了一个具有相同特征的数据子集。例如,我们可以按照商品类别将销售数据分组到不同的桶中,每个桶就是一个商品类别,桶中的文档就是该类别下的销售记录。 - 常见的桶聚合类型
- Terms 聚合:这是最常用的桶聚合之一,它根据文档中某个字段的值进行分组。例如,在一个包含用户信息的索引中,我们可以使用 Terms 聚合按照用户的性别进行分组,统计男性和女性用户的数量。
// 使用 Java API 进行 Terms 聚合 TermsAggregationBuilder termsAggregation = AggregationBuilders.terms("gender_aggregation").field("gender"); SearchRequest searchRequest = new SearchRequest("user_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.aggregation(termsAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Terms terms = searchResponse.getAggregations().get("gender_aggregation"); for (Terms.Bucket bucket : terms.getBuckets()) {String gender = bucket.getKeyAsString();long docCount = bucket.getDocCount();System.out.println("Gender: " + gender + ", Doc Count: " + docCount); }
- Date Histogram 聚合:用于按照日期对数据进行分组。在处理时间序列数据时非常有用,比如按天、按周统计网站的访问量。
// 使用 Java API 进行 Date Histogram 聚合 DateHistogramAggregationBuilder dateHistogramAggregation = AggregationBuilders.dateHistogram("date_histogram_aggregation").field("visit_date").calendarInterval(CalendarInterval.DAY); SearchRequest searchRequest = new SearchRequest("website_visits_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.aggregation(dateHistogramAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); DateHistogram dateHistogram = searchResponse.getAggregations().get("date_histogram_aggregation"); for (DateHistogram.Bucket bucket : dateHistogram.getBuckets()) {String key = bucket.getKeyAsString();long docCount = bucket.getDocCount();System.out.println("Date: " + key + ", Doc Count: " + docCount); }
(二)度量聚合
- 概念
度量聚合是对数据进行数值计算的聚合类型。它基于桶聚合的结果,对每个桶中的数据进行具体的数值计算,如求和、平均值、最大值、最小值等。例如,在按照商品类别分组后,我们可以使用度量聚合计算每个类别商品的平均价格、总销售额等。 - 常见的度量聚合类型
- Avg 聚合:计算平均值。例如,计算所有产品的平均价格。
// 使用 Java API 进行 Avg 聚合 AvgAggregationBuilder avgAggregation = AggregationBuilders.avg("average_price_aggregation").field("price"); SearchRequest searchRequest = new SearchRequest("products_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.aggregation(avgAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Avg avg = searchResponse.getAggregations().get("average_price_aggregation"); double averagePrice = avg.getValue(); System.out.println("Average Price: " + averagePrice);
- Sum 聚合:计算总和。比如,计算某个时间段内的总销售额。
// 使用 Java API 进行 Sum 聚合 SumAggregationBuilder sumAggregation = AggregationBuilders.sum("total_sales_aggregation").field("sales_amount"); SearchRequest searchRequest = new SearchRequest("sales_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.aggregation(sumAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Sum sum = searchResponse.getAggregations().get("total_sales_aggregation"); double totalSales = sum.getValue(); System.out.println("Total Sales: " + totalSales);
(三)管道聚合
- 概念
管道聚合是对其他聚合的结果进行再聚合处理的聚合类型。它允许我们基于已有的聚合结果构建更复杂的分析逻辑。例如,我们可以对桶聚合的结果进行排序、计算百分比等操作。 - 常见的管道聚合类型
- Percentiles 聚合:计算百分位数。在分析数据的分布情况时非常有用,比如了解用户响应时间的分布,找出 95% 响应时间的阈值。
// 使用 Java API 进行 Percentiles 聚合 PercentilesAggregationBuilder percentilesAggregation = AggregationBuilders.percentiles("response_time_percentiles_aggregation").field("response_time").percentiles(50, 75, 95); SearchRequest searchRequest = new SearchRequest("user_responses_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.aggregation(percentilesAggregation); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); Percentiles percentiles = searchResponse.getAggregations().get("response_time_percentiles_aggregation"); Map<Double, Double> percentileValues = percentiles.getValuesAsMap(); for (Map.Entry<Double, Double> entry : percentileValues.entrySet()) {System.out.println("Percentile: " + entry.getKey() + ", Value: " + entry.getValue()); }
三、相关 Maven 依赖
在使用 Elasticsearch 的 Java API 进行聚合分析时,我们需要引入相关的 Maven 依赖。这些依赖将提供我们操作 Elasticsearch 所需的类和方法。
(一)Elasticsearch 客户端依赖
首先,我们需要引入 Elasticsearch 客户端依赖。这是与 Elasticsearch 集群进行通信的基础。
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.4</version>
</dependency>
这个依赖提供了高级 REST 客户端,它基于 Elasticsearch 的 REST API 构建,提供了更方便、更面向对象的方式来与 Elasticsearch 进行交互。通过这个客户端,我们可以发送搜索请求、执行聚合操作等。
(二)Elasticsearch 核心依赖
还需要引入 Elasticsearch 的核心依赖,它包含了 Elasticsearch 的基本功能和数据结构。
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.4</version>
</dependency>
这个依赖是 Elasticsearch 的核心库,它提供了索引管理、文档存储和检索等功能。在进行聚合分析时,我们依赖这个库来处理底层的数据操作。
(三)其他依赖
根据具体的需求,可能还需要引入其他依赖。例如,如果我们需要处理 JSON 数据,可能需要引入 Jackson 相关的依赖。
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.4</version>
</dependency>
Jackson 库用于将 Java 对象转换为 JSON 格式,以及将 JSON 数据转换为 Java 对象。在与 Elasticsearch 进行数据交互时,JSON 是一种常用的数据格式,因此 Jackson 库非常有用。
四、原理深入剖析
(一)桶聚合原理
桶聚合的实现基于倒排索引的结构。当我们执行 Terms 聚合时,Elasticsearch 会遍历倒排索引,根据指定字段的值将文档分配到不同的桶中。每个桶对应一个唯一的值,桶中的文档都具有相同的该字段值。对于 Date Histogram 聚合,Elasticsearch 会根据日期字段的值,按照指定的时间间隔将文档分组到不同的桶中。这个过程涉及到日期的解析和范围匹配,通过高效的算法实现快速分组。
(二)度量聚合原理
度量聚合是在桶聚合的基础上进行的。一旦文档被分组到不同的桶中,度量聚合会对每个桶中的文档进行具体的数值计算。例如,Avg 聚合会计算桶中所有文档指定字段值的总和,然后除以文档数量得到平均值。Sum 聚合则直接计算字段值的总和。这些计算过程利用了 Elasticsearch 的分布式计算能力,在多个节点上并行处理数据,提高计算效率。
(三)管道聚合原理
管道聚合是对已有的聚合结果进行处理。它通过读取其他聚合的输出,应用特定的算法进行再聚合。例如,Percentiles 聚合会对已有的数值数据进行排序,然后根据指定的百分位数计算相应的值。这个过程需要对聚合结果进行有效的数据处理和分析,以确保得到准确的结果。
五、实际应用案例
(一)电商数据分析
在电商领域,我们可以使用 Elasticsearch 聚合分析来了解商品销售情况。例如,按照商品类别统计销售额和销售量。首先,我们使用 Terms 聚合按照商品类别进行分组,然后在每个桶中使用 Sum 聚合计算销售额和销售量。
// 按照商品类别统计销售额和销售量
TermsAggregationBuilder categoryTermsAggregation = AggregationBuilders.terms("category_aggregation").field("category");
SumAggregationBuilder salesSumAggregation = AggregationBuilders.sum("sales_amount_sum_aggregation").field("sales_amount");
SumAggregationBuilder quantitySumAggregation = AggregationBuilders.sum("quantity_sum_aggregation").field("quantity");
categoryTermsAggregation.subAggregation(salesSumAggregation);
categoryTermsAggregation.subAggregation(quantitySumAggregation);SearchRequest searchRequest = new SearchRequest("products_sales_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.aggregation(categoryTermsAggregation);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);Terms categoryTerms = searchResponse.getAggregations().get("category_aggregation");
for (Terms.Bucket bucket : categoryTerms.getBuckets()) {String category = bucket.getKeyAsString();Sum salesSum = bucket.getAggregations().get("sales_amount_sum_aggregation");Sum quantitySum = bucket.getAggregations().get("quantity_sum_aggregation");double salesAmount = salesSum.getValue();long quantity = quantitySum.getValue();System.out.println("Category: " + category + ", Sales Amount: " + salesAmount + ", Quantity: " + quantity);
}
(二)日志分析
在日志分析场景中,我们可以使用 Elasticsearch 聚合分析来了解系统的运行情况。例如,按照时间统计不同类型日志的数量。我们使用 Date Histogram 聚合按照时间进行分组,然后在每个桶中使用 Terms 聚合按照日志类型进行进一步分组,最后使用 ValueCount 聚合统计每个日志类型的数量。
// 按照时间统计不同类型日志的数量
DateHistogramAggregationBuilder dateHistogramAggregation = AggregationBuilders.dateHistogram("date_histogram_aggregation").field("log_timestamp").calendarInterval(CalendarInterval.HOUR);TermsAggregationBuilder logTypeTermsAggregation = AggregationBuilders.terms("log_type_aggregation").field("log_type");
ValueCountAggregationBuilder logCountAggregation = AggregationBuilders.valueCount("log_count_aggregation").field("log_id");
logTypeTermsAggregation.subAggregation(logCountAggregation);
dateHistogramAggregation.subAggregation(logTypeTermsAggregation);SearchRequest searchRequest = new SearchRequest("system_logs_index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.aggregation(dateHistogramAggregation);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);DateHistogram dateHistogram = searchResponse.getAggregations().get("date_histogram_aggregation");
for (DateHistogram.Bucket timeBucket : dateHistogram.getBuckets()) {String time = timeBucket.getKeyAsString();Terms logTypeTerms = timeBucket.getAggregations().get("log_type_aggregation");for (Terms.Bucket logTypeBucket : logTypeTerms.getBuckets()) {String logType = logTypeBucket.getKeyAsString();ValueCount logCount = logTypeBucket.getAggregations().get("log_count_aggregation");long count = logCount.getValue();System.out.println("Time: " + time + ", Log Type: " + logType + ", Count: " + count);}
}
六、总结
Elasticsearch 的聚合分析功能为我们提供了强大的数据处理和洞察能力。通过桶聚合、度量聚合和管道聚合的组合使用,我们可以从海量数据中提取出丰富的有价值信息。在实际应用中,无论是电商数据分析、日志分析还是其他领域,聚合分析都能发挥重要作用。同时,合理选择和使用相关的 Maven 依赖,深入理解聚合的原理,能够帮助我们更高效地利用 Elasticsearch 进行数据处理和分析。希望本文的介绍和案例能够帮助读者更好地掌握 Elasticsearch 聚合分析,在实际项目中取得更好的成果。
参考资料文献
- Elasticsearch 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- 《Elasticsearch in Action》,作者:Radu Gheorge
- Elasticsearch 官方博客:https://www.elastic.co/blog/
相关文章:
【Elasticsearch 】 聚合分析:聚合概述
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【算法】二分
二分 1.二分查找1.在排序数组中查找元素的第一个和最后一个位置2.牛可乐和魔法封印3.A-B 数对4.烦恼的高考志愿 2.二分答案1.木材加工2.砍树3.跳石头 1.二分查找 当我们的解具有二段性(根据最终答案所在的位置判断是否具有二段性)时,就可以使…...
如何将自己本地项目开源到github上?
环境: LLMB项目 问题描述: 如何将自己本地项目开源到github上? 解决方案: 步骤 1: 准备本地项目 确保项目整洁 确认所有的文件都在合适的位置,并且项目的 README.md 文件已经完善。检查是否有敏感信息࿰…...
编辑器Vim基本模式和指令 --【Linux基础开发工具】
文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...
Scade 表达式 - 使用索引的迭代器
Scade 表达式中的 map, fold, mapfold,会对输入数组参数中的元素逐个作处理,不需要数组元素的索引信息。若在处理数组元素时,需要数组元素相应的索引信息,则可使用迭代器算子 mapi, foldi, mapfoldi。 mapi 算子 mapi 算子的行为…...
K8s学习
Kubernetes 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点…...
面试--你的数据库中密码是如何存储的?
文章目录 三种分类使用 MD5 加密存储加盐存储Base64 编码:常见的对称加密算法常见的非对称加密算法https 传输加密 在开发中需要存储用户的密码,这个密码一定是加密存储的,如果是明文存储那么如果数据库被攻击了,密码就泄露了。 我们要对数据…...
微服务学习-快速搭建
1. 速通版 1.1. git clone 拉取项目代码,导入 idea 中 git clone icoolkj-microservices-code: 致力于搭建微服务架构平台 1.2. git checkout v1.0.1版本 链接地址:icoolkj-microservices-code 标签 - Gitee.com 2. 项目服务结构 3. 实现重点步骤 …...
兼职全职招聘系统架构与功能分析
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...
【云岚到家】-day03-门户缓存实现实战
【云岚到家】-day03-门户缓存实现实战 1.定时任务更新缓存 1.1 搭建XXL-JOB环境 1.1.1 分布式调度平台XXL-JOB介绍 对于开通区域列表的缓存数据需要由定时任务每天凌晨更新缓存,如何实现定时任务呢? 1.使用jdk提供的Timer定时器 示例代码如下…...
Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问
Ubuntu 24.04 LTS 背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装,运行以下命令进行安装ÿ…...
“AI人工智能内容辅助创作平台:让创意不再“卡壳”
在如今这个信息爆炸的时代,内容创作成了每个人的“必修课”。无论是自媒体大V、文案策划,还是普通学生写作文,大家都会遇到一个让人抓狂的问题——“创意枯竭”。有时候,脑袋里空空如也,一个字都写不出来,那…...
mac 安装 node
brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...
VUE之Router使用及工作模式
1、路由的使用 【两个注意点】 1)路由组件通常放在pages 或 views文件夹,一般组件通常放在components文件夹。 2)通过点击导航,视觉效果上"消失"了的路由组件,默认是被"卸载"掉的,需要的时候再去挂载。 // 创建一个路由器,并暴露出去// 第一步:…...
day25_HTML
今日内容 零、 复习昨日 一、HTML 零、 复习昨日 一、Web开发 前端 HTML ,页面展现CSS , 样式JS (JavaScript) , 动起来 二、HTML 2.1 HTML概念 网页,是网站中的一个页面,通常是网页是构成网站的基本元素,是承载各种网站应用的平台。通俗…...
(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台
1 项目简介(开源地址在文章结尾) 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频,甄别分类、实况分析鸟类保护动物,与全世界各地的用户&…...
【AI日记】25.01.20
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:自由宪章阅读原因:作者哈耶克,诺贝尔经济学奖得主,之前读过他的 《通往奴役…...
基于机器学习的用户健康风险分类及预测分析
完整源码项目包获取→点击文章末尾名片! 背景描述 在这个日益注重健康与体能的时代,健身已成为许多人追求健康生活的重要组成部分。 本数据集包含若干健身房会员的详细信息,包括年龄、性别、体重、身高、心率、锻炼类型、身体脂肪比例等多项关…...
AI生成内容——JavaScript中的Promise、async和wait
一、Promise *1. 概念: Promise 是 JavaScript 中处理异步操作的一种对象,它表示一个异步操作的最终完成(或失败)及其结果值。一个 Promise 对象处于以下三种状态之一: Pending(进行中)&#…...
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
Java基于SSM框架的社区团购系统小程序设计与实现 博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 Ǵ…...
Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】
Git 理解分布式版本控制系统远程仓库新建远程仓库克隆远程仓库向远程仓库推送配置Git忽略特殊文件 标签管理理解标签创建标签操作标签删除标签 理解分布式版本控制系统 我们⽬前所说的所有内容(工作区,暂存区,版本库等等)&#x…...
【esp32小程序】小程序篇02——连接git
一、创建仓库 进入gitee官网,登录(如果没有gitee账号的就自行注册一下)。 点击号-->新建仓库 填写好必填信息,然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…...
MongoDB基本操作
一、实验目的 1. 熟悉MongoDB的基本操作,包括CRUD(增加、读取、更新、删除)。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…...
Brooks MagnaTran LEAP User Manual 指导半导体机械手
Brooks MagnaTran LEAP User Manual 指导半导体机械手...
【Red Hat8】:搭建DHCP服务器
1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 (搭建的时候用vim 自行定义文件名.repo或者是vi 自行定义文件名.repo) 5、安装dhcp-server 6、复制模板文件 dhcpd.conf 是DHCP服务的配置文件,DHCP服务所有参数都是通过修改dhcpd.co…...
JupyterLab 安装以及部分相关配置
安装 JupyterLab pip install jupyter启动 JupyterLab jupyter lab [--port <指定的端口号>] [--no-browser] # --port 指定端口 # --no-browser 启动时不打开浏览器安装中文 首先安装中文包 pip install jupyterlab-language-pack-zh-CN安装完成后重启 JupyterLab 选…...
深圳桂湾公园的花海
工作日的午休时间我经常骑行到桂湾公园,时不时都能碰上一些阿姨问:小伙子你知道桂湾公园的花海在哪里吗?我找了半天了哈。我发现不少找花海的人是从桂湾地铁或前湾地铁下车,然后在偌大的桂湾公园找寻。其实只要定位前海紫荆园就好…...
寒假刷题Day10
一、220. 存在重复元素 III 两种解法:并没有弄懂,待复盘 class Solution { public:bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {set<long> st;for (int i 0; i < nums.size(); i) {auto lb st.lower_…...
【Java-图片存储方案】
Java功能相关文章 一、Minio存储大体量图片 上传到Minio指定路径,前端预览时,需要生成临时访问凭证的URL import io.minio.MinioClient; import io.minio.errors.MinioException; import io.minio.http.Method; import io.minio.GetPresignedObjectUrlArgs; impo…...
机器人传动力系统介绍
以下是对机器人驱动系统的分析、最新科技应用以及世界顶级公司机器人型号使用的技术: 机器人驱动系统分析 液压驱动:利用液体压力来传递动力,通过液压泵将液压油从油箱抽出,送至液压缸,推动活塞运动,进而…...
DDD - 微服务落地的技术实践
文章目录 Pre概述如何发挥微服务的优势怎样提供微服务接口原则微服务的拆分与防腐层的设计 去中心化的数据管理数据关联查询的难题Case 1Case 2Case 3 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服…...
《Vue3 十》Vue 底层原理
命令式编程和声明式编程: 以计时器为例: // 原生 JavaScript 实现计数器,是命令式编程 <div><h1>当前数字:<span class"count"></span></h1><button class"add" click&qu…...
GMM高斯混合聚类算法(Matlab)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GMM高斯混合聚类算法 matlab2023b语言,一键出图,直接运行 1.代码注释清晰,自行解读容易。 2…输出图例如图所示包括:聚类图(聚类结果图),协方差矩阵类型…...
【Leetcode 每日一题】2266. 统计打字方案数
问题背景 Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母,Alice 需要 按 对应字母 i i i 次, i i i 是该字母在这个按键上所处的位置。 比方说,为了按出字母 ‘s’ ,Alice 需要按 ‘7’ 四次…...
多线程杂谈:惊群现象、CAS、安全的单例
引言 本文是一篇杂谈,帮助大家了解多线程可能会出现的面试题。 目录 引言 惊群现象 结合条件变量 CAS原子操作(cmp & swap) 线程控制:两个线程交替打印奇偶数 智能指针线程安全 单例模式线程安全 最简单的单例&…...
Nginx调优
Nginx 是一个高性能的反向代理服务器和负载均衡器,在处理大量并发请求时表现出色。但是,随着系统负载的增加,Nginx 的性能可能受到多方面的影响,因此进行适当的调优至关重要。以下是 Nginx 调优的几个方向和关键点: 1…...
自定义UITableViewCell
很多时候,我们是不能直接使用系统自带的UITableViewCell,因为自带的比较简单只有一个UIImageView和两个UILabel,假设需要多个UIImageView或者两个以上UILabel,那就需要自定义了。本文就实现如何自定义UITableViewCell。 假设我们现…...
Java 基于微信小程序的原创音乐小程序设计与实现(附源码,部署,文档)
大家好,我是stormjun,今天为大家带来的是Java实战项目-基于微信小程序的原创音乐小程序设计与实现。该系统采用 Java 语言 开发,MySql 作为数据库,系统功能完善 ,实用性强 ,可供大学生实战项目参考使用。 博…...
MySQL —— 事务
概念 事务把组SQL语句打包成为个整体,在这组SQL的执行过程中,要么全部成功,要么全部失败。 这组SQL语句可以是条也可以是多条。 ACID 特性 原子性 Atomicity(原子性):一个事务中的所有操作,要么全部成功࿰…...
【大模型】ChatGPT 高效处理图片技巧使用详解
目录 一、前言 二、ChatGPT 4 图片处理介绍 2.1 ChatGPT 4 图片处理概述 2.1.1 图像识别与分类 2.1.2 图像搜索 2.1.3 图像生成 2.1.4 多模态理解 2.1.5 细粒度图像识别 2.1.6 生成式图像任务处理 2.1.7 图像与文本互动 2.2 ChatGPT 4 图片处理应用场景 三、文生图操…...
SpringBoot注入配置文件application.properties中的信息
问题:将可能会变动的配置信息硬编码在代码中,在修改时难以定位,且过于繁琐,怎么办? 解决:自定义application.properties配置文件中的信息,注意严格遵循ab的形式,不要加引号…...
大数据,Hadoop,HDFS的简单介绍
大数据 海量数据,具有高增长率、数据类型多样化、一定时间内无法使用常规软件工具进行捕捉、管理和处理的数据集 合 大数据的特征: 4V Volume : 巨大的数据量 Variety : 数据类型多样化 结构化的数据 : 即具有固定格式和有限长度的数据 半结构化的数据 : 是…...
第15章:Python TDD应对货币类开发变化(二)
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
黑马点评之导入初始项目(java)
!!!由于我一开始是在网盘上下载的资源,后面忙活半天,发现代码是不完整的,才知道需要在github上面拉取初始代码。 然后第二点是我的本地环境是jdk21,但是他原本的代码为jdk8,所以在换…...
Erlang语言的语法糖
Erlang语言的语法糖:简化编程的灵活工具 Erlang是一种功能强大的编程语言,最初由爱立信(Ericsson)为电信系统开发。它以其高并发性、容错性和分布式特性而闻名,特别适合构建实时系统。然而,Erlang的语法相…...
数据库基础知识:记录、表、字段、数据类型、约束、主键、外键、规范化、索引、序列
数据库是由一个或多个有组织的数据集合组成,而数据库管理系统(DBMS)是操作数据库的软件,包括很多人本科上课学过的SQL Server,现在常用的MySQL、Postgresql等,用于提供数据的存储、访问、运行和维护等。学习…...
Centos 8 交换空间管理
新增swap 要增加 Linux 系统的交换空间,可以按照以下步骤操作: 1. 创建一个交换文件 首先,选择文件路径和大小(例如,增加 1 GB 交换空间)。 sudo fallocate -l 1G /swapfile如果 fallocate 不可用&…...
迈向 “全能管家” 之路:机器人距离终极蜕变还需几步?
【图片来源于网络,侵删】 这是2024年初Figure公司展示的人形机器人Figure 01,他可以通过观看人类的示范视频,在10小时内经过训练学会煮咖啡,并且这个过程是完全自主没有人为干涉的! 【图片来源于网络,侵删】…...
Data Filtering Network 论文阅读和理解
目录 一、TL;DR 二、Introduction 2.1 apple的结论 2.2 业界做法: 2.3 我们的做法(Apple) 2.4 如何获取好的DFN 三、未完待续(这周出去购物了,下周继续补充) 一、TL;DR 核心…...
KMP算法
KMP算法详解 KMP(Knuth-Morris-Pratt)算法是一种用于在大串中寻找小串的字符串匹配算法。它通过在字符串匹配过程中避免不必要的重复比较,显著提高了效率。KMP算法的核心思想是利用字符串中已经匹配的部分信息来优化匹配过程,减少…...