当前位置: 首页 > news >正文

【Elasticsearch】实现用户行为分析

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

【Elasticsearch】实现用户行为分析

一、引言

在当今数字化时代,移动应用和网站成为企业与用户交互的重要平台。用户在这些平台上的每一个操作,无论是点击一个按钮、滑动屏幕浏览内容,还是完成一次购买交易,都蕴含着宝贵的信息。这些用户行为数据就像是一座尚未被充分挖掘的宝藏,隐藏着用户的兴趣偏好、使用习惯以及决策过程等关键洞察。

以电商应用为例,每天都有成千上万的用户在平台上浏览商品、将心仪的物品加入购物车,但最终却有相当一部分用户在结算前放弃购物车。这一现象背后可能涉及多种因素,如价格过高、购物流程繁琐、竞品对比后改变主意等。通过深入分析用户在电商应用中的购物流程,精准找出用户放弃购物车的环节,企业能够有针对性地优化购物体验,例如简化结账步骤、提供个性化的折扣优惠或者改善商品展示信息,从而提高转化率,增加销售额。

用户行为分析不仅仅局限于电商领域,在社交媒体、在线教育、金融服务等众多行业也具有极其重要的意义。它能够帮助企业更好地了解用户需求,实现精准营销、个性化推荐、产品优化以及风险预测等多项目标。然而,面对海量且复杂的用户行为数据,如何高效地存储、检索和分析成为了一个巨大的挑战。

Elasticsearch 作为一款强大的分布式搜索和分析引擎,为解决用户行为分析难题提供了理想的解决方案。它具备高可扩展性实时数据处理能力以及丰富的查询功能,能够轻松应对大规模用户行为数据的存储与分析需求。

在本文,我们将深入探讨如何利用 Elasticsearch 实现用户行为分析,从应用场景分析原理思路阐述到具体的实现步骤,逐步揭开这一场景实现的神秘面纱,助力企业在数据驱动的时代中挖掘用户行为数据的无限价值。

二、应用场景分析

(一)电商购物流程分析

在电商应用场景中,用户的购物流程通常包含多个环节:首页浏览搜索商品查看商品详情加入购物车进入结算页面填写收货信息选择支付方式以及最终完成支付。每个环节都伴随着用户的特定操作行为,而这些行为数据被记录下来后,可以进行多维度的分析。

例如,分析用户从搜索商品到加入购物车的转化率,能够了解商品展示和搜索功能的有效性;研究用户在结算页面的停留时间和操作频率,可以判断结账流程是否便捷;通过对比不同用户群体(如新老用户、不同地域用户等)在购物流程各环节的行为差异,企业可以制定更加精准的营销策略和个性化的用户体验优化方案。

(二)用户留存与流失分析

除了购物流程分析,用户行为分析对于用户留存流失的研究也至关重要。通过跟踪用户在一段时间内的登录频率、操作活跃度以及参与特定功能(如社区互动、积分兑换等)的情况,可以识别出高留存潜力的用户群体,并针对他们提供更多的增值服务和个性化推荐,增强用户粘性。

同时,对于那些逐渐减少使用频率甚至流失的用户,分析其在流失前的行为模式,例如是否频繁遭遇系统错误、是否对某些新功能不感兴趣或者是否受到竞争对手的吸引等,企业可以及时采取措施进行挽回,如修复系统漏洞、优化功能设计或者推出针对性的召回活动。

(三)产品功能优化

用户在应用或网站中的操作行为数据还能为产品功能优化提供有力依据。例如,如果发现大量用户在某个特定功能页面的跳出率较高,可能意味着该功能的设计存在问题,如界面不友好、操作复杂或者提供的信息不符合用户期望。通过深入分析用户在该页面的点击路径、停留时间以及与其他功能的交互情况,可以针对性地进行改进,提高产品的整体可用性和用户满意度。

三、Elasticsearch 实现思路原理

(一)数据存储与索引设计

Elasticsearch 使用索引来组织和存储数据。对于用户行为分析,我们可以设计一个专门的索引来存储用户行为数据。在索引结构方面,需要考虑以下关键数据类型和字段:

  • 用户标识字段:如用户 ID,用于唯一标识每个用户。这通常是一个关键字类型(keyword)字段,因为它不需要进行全文搜索,但需要精确匹配以区分不同用户。
  • 行为时间字段:记录用户行为发生的时间戳,数据类型可以是日期类型(date)。这对于分析行为的时序性非常重要,例如按照时间范围查询用户在特定时间段内的行为数据。
  • 行为类型字段:描述用户执行的具体行为,如点击、滑动、购买等。可以使用关键字类型字段来存储行为类型,方便进行行为分类统计和筛选。
  • 相关对象字段:例如在电商场景中,涉及商品 ID页面 URL 等与行为相关的对象信息。这些字段同样可以是关键字类型,用于关联用户行为与具体的业务对象,以便进行深入分析,如查询特定商品相关的所有用户行为。

通过合理设计索引结构和选择合适的数据类型,能够提高数据存储的效率和查询的性能,为后续的用户行为分析奠定坚实的基础。

(二)数据查询与分析

Elasticsearch 提供了丰富多样的查询 API,能够满足用户行为分析中的各种查询需求。例如:

  • 布尔查询(Bool Query):可以组合多个查询条件,实现复杂的筛选逻辑。比如查询在特定时间范围内且行为类型为“购买”的用户行为数据,就可以使用布尔查询将时间范围查询和行为类型查询组合起来。
  • 聚合查询(Aggregation):用于对查询结果进行统计分析。在用户行为分析中,可以利用聚合查询计算不同行为类型的数量占比、按照用户群体或时间维度进行行为数据的分组统计等。例如,通过聚合查询统计每个用户在一天内的点击次数分布,或者计算不同地区用户的购买转化率。

通过灵活运用这些查询 API,能够从海量的用户行为数据中快速提取有价值的信息,深入洞察用户行为模式和趋势。

四、实现步骤

(一)环境搭建与 Maven 依赖配置

首先,我们需要搭建 Elasticsearch 环境。可以从官方网站下载并安装 Elasticsearch 服务器。

在项目中,使用 Maven 管理依赖。以下是相关的关键 Maven 依赖:

<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.9</version> <!-- 使用最新的稳定版本 -->
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.9</version>
</dependency>

elasticsearch 依赖提供了核心的 Elasticsearch 功能,而 elasticsearch-rest-high-level-client 则方便我们在 Java 应用中与 Elasticsearch 进行交互,使用高级别的 REST API 进行数据操作。

(二)数据索引创建

使用 ElasticsearchJava API 创建用于存储用户行为数据的索引。以下是示例代码:

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;public class UserBehaviorIndexCreator {private final RestHighLevelClient client;public UserBehaviorIndexCreator(RestHighLevelClient client) {this.client = client;}public void createIndex() throws IOException {// 创建索引请求CreateIndexRequest request = new CreateIndexRequest("user_behavior_index");// 设置索引的设置,例如分片数量和副本数量request.settings(Settings.builder().put("index.number_of_shards", 3).put("index.number_of_replicas", 2));// 定义索引的映射,即字段类型和属性String mapping = "{\n" +"  \"properties\": {\n" +"    \"user_id\": {\n" +"      \"type\": \"keyword\"\n" +"    },\n" +"    \"behavior_time\": {\n" +"      \"type\": \"date\"\n" +"    },\n" +"    \"behavior_type\": {\n" +"      \"type\": \"keyword\"\n" +"    },\n" +"    \"related_object\": {\n" +"      \"type\": \"keyword\"\n" +"    }\n" +"  }\n" +"}";request.mapping(mapping, XContentType.JSON);// 执行索引创建操作CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);boolean acknowledged = createIndexResponse.isAcknowledged();if (acknowledged) {System.out.println("索引创建成功");} else {System.out.println("索引创建失败");}}
}

在上述代码中,我们首先创建了一个 CreateIndexRequest 对象,指定索引名称为 user_behavior_index。然后设置了索引的一些基本设置,如分片数量和副本数量。接着定义了索引的映射,明确了各个字段的数据类型,包括用户 ID、行为时间、行为类型和相关对象字段。最后通过 client.indices().create 方法执行索引创建操作,并根据响应结果判断是否创建成功。

(三)数据写入

当用户在应用或网站中产生行为数据时,需要将这些数据写入到 Elasticsearch 索引中。以下是数据写入的示例代码:

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class UserBehaviorDataWriter {private final RestHighLevelClient client;public UserBehaviorDataWriter(RestHighLevelClient client) {this.client = client;}public void writeData(String user_id, String behavior_type, String related_object, long behavior_time) throws IOException {// 创建数据写入请求IndexRequest request = new IndexRequest("user_behavior_index");// 构建要写入的数据文档Map<String, Object> data = new HashMap<>();data.put("user_id", user_id);data.put("behavior_type", behavior_type);data.put("related_object", related_object);data.put("behavior_time", behavior_time);request.source(data, XContentType.JSON);// 执行数据写入操作IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT);String index = indexResponse.getIndex();String id = indexResponse.getId();if (index.equals("user_behavior_index")) {System.out.println("数据写入成功,文档 ID:" + id);} else {System.out.println("数据写入失败");}}
}

在这段代码中,我们创建了一个 IndexRequest 对象,指定要写入的索引为 user_behavior_index。然后构建一个包含用户行为数据的 Map 对象,将用户 ID、行为类型、相关对象和行为时间等信息放入其中,并通过 request.source 方法将数据设置到请求中。最后使用 client.index 方法执行数据写入操作,并根据响应结果获取写入的文档 ID 以判断写入是否成功。

(四)数据查询与分析

以下是一些常见的数据查询与分析示例代码:

1. 简单查询

查询特定用户的所有行为数据:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;import java.io.IOException;public class UserBehaviorDataSearcher {private final RestHighLevelClient client;public UserBehaviorDataSearcher(RestHighLevelClient client) {this.client = client;}public void searchByUser(String user_id) throws IOException {// 创建搜索请求SearchRequest request = new SearchRequest("user_behavior_index");// 构建搜索源,设置查询条件SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.query(QueryBuilders.termQuery("user_id", user_id));request.source(sourceBuilder);// 执行搜索操作SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);SearchHit[] hits = searchResponse.getHits().getHits();for (SearchHit hit : hits) {System.out.println(hit.getSourceAsString());}}
}

在这个示例中,我们使用 QueryBuilders.termQuery 构建了一个基于用户 ID 的精确匹配查询条件,通过 SearchSourceBuilder 设置查询条件到搜索请求中,然后执行搜索操作并打印出搜索结果。

2. 聚合查询

统计不同行为类型的数量:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;import java.io.IOException;public class BehaviorTypeCountAggregator {private final RestHighLevelClient client;public BehaviorTypeCountAggregator(RestHighLevelClient client) {this.client = client;}public void countBehaviorTypes() throws IOException {// 创建搜索请求SearchRequest request = new SearchRequest("user_behavior_index");// 构建搜索源,设置聚合查询SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();TermsAggregationBuilder aggregationBuilder = AggregationBuilders.terms("behavior_type_count").field("behavior_type");sourceBuilder.aggregation(aggregationBuilder);request.source(sourceBuilder);// 执行搜索操作SearchResponse searchResponse = client.search(request, RequestOptions.DEFAULT);Terms terms = searchResponse.getAggregations().get("behavior_type_count");for (Terms.Bucket bucket : terms.getBuckets()) {System.out.println("行为类型:" + bucket.getKeyAsString() + ",数量:" + bucket.getDocCount());}}
}

这里我们使用 AggregationBuilders.terms 构建了一个基于行为类型字段的聚合查询,统计不同行为类型的文档数量。在执行搜索操作后,从聚合结果中获取每个行为类型的桶(Bucket)信息,并打印出行为类型及其对应的数量。

通过以上步骤,我们可以在 Java 项目中利用 Elasticsearch 实现用户行为数据的存储、写入、查询与分析,从而深入挖掘用户行为模式,为企业的决策提供有力的数据支持。

五、参考资料文献

  • Elasticsearch 官方文档:https://www.elastic.co/guide/index.html
  • Elasticsearch 实战》,拉斐尔·酷奇(Rafał Kuć)著
  • 深入理解 Elasticsearch》,克林顿·高斯(Clinton Gormley)等著

相关文章:

【Elasticsearch】实现用户行为分析

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

python字符串处理基础操作总结

1.去掉空格或者特殊符号 input_str.strip() #去掉所有空格 input_str.lstrip() #去掉左边空格 input_str.rstrip() #去掉右边空格 def print_hi():input_str 今天天气不错&#xff0c;风和日丽 out input_str.strip()print(input_str)print(out)if __name__ __main__:print…...

电子商务人工智能指南 6/6 - 人工智能生成的产品图像

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...

【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究

文章目录 概述&#xff1a;摘要1. 引言2. 相似误差订正算法&#xff08;核心&#xff09;3. 订正实验3.1 相似因子选取3.2 相似样本数试验3.3 时间窗时长实验 4. 订正结果分析4.1 评估指标对比4.2 风速曲线对比4.3 分风速段订正效果评估4.4 风速频率统计 5. 结论与讨论 概述&am…...

贪心算法 - 学习笔记 【C++】

2024-12-09 - 第 38 篇 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 贪心算法 学习课程&#xff1a; https://www.bilibili.com/video/BV1f84y1i7mv/?spm_id_from333.337.search-card.all.click&vd_source2683707f584c21c57616cc6ce8454e2b 一、基本…...

精确的单向延迟测量:使用普通硬件和软件

论文标题&#xff1a;Precise One-way Delay Measurement with Common Hardware and Software&#xff08;精确的单向延迟测量&#xff1a;使用普通硬件和软件&#xff09; 作者信息&#xff1a;Maciej Muehleisen 和 Mazen Abdel Latif&#xff0c;来自Ericsson Research Eri…...

【MySQL 进阶之路】存储引擎和SQL优化技巧分析

1.InnoDB和MyISAM存储引擎的区别是什么&#xff1f;你在哪些场景下选择InnoDB&#xff1f; Innodb是高并发&#xff0c;支持事务跟行级锁&#xff0c;myisam不支持事务和行级锁&#xff0c;支持表级锁&#xff0c;不支持高并发。innodb底层是B树&#xff0c;适合范围查询&#…...

vue+elementUI从B页面回到A页面并且定位到A页面的el-tabs的某个页签

场景 做项目碰到一个需求&#xff0c;不能使用组件缓存keep-alive&#xff0c;但是需要跳转到B页面后&#xff0c;点击B页面的返回回到A页面的某个页签&#xff0c;灵机一动利用路由拦截去判断即将要跳转的页面后&#xff0c;在获取vm里对应的标签变量进行赋值&#xff0c;实现…...

{结对编程/大模型} 实践营项目案例 | 基于RAG搭建政策问答智能聊天助手

在构建政策问答智能聊天助手的过程中&#xff0c;我们采用了 RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术。RAG 是一种结合了检索和生成的混合型自然语言处理技术&#xff0c;它通过检索相关信息来增强生成模型的上下文理解能力。RAG 的主要优点在于能够有…...

【Canvas与图标】乡土风金属铝边立方红黄底黑字图像处理图标

【成图】 120*120图标&#xff1a; 大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金属铝边立方红黄底黑…...

【开源】A064—基于JAVA的民族婚纱预定系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看项目链接获取⬇️&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600个选题ex…...

C++实现一个经典计算器(逆波兰算法)附源码

1、本篇要实现的内容 最近&#xff0c;大家讨论计算器的实现比较热&#xff0c;今天我也来用C和Visual Studio实现一个计算器的小程序。这里使用逆波兰算法&#xff0c;能够根据当前用户输入的算式表达式字符串&#xff0c;计算出所要的结果&#xff0c;算式字符串可以包括加、…...

Python知识分享第二十二天-数据结构入门

数据结构 “”" 基础概念: 程序 数据结构 算法 数据结构 存储和组织数据的方式. 算法 解决问题的思维, 思路, 方式. 算法的特性:独立性: 算法 思维, 是解决问题的思路和方式, 不依赖语言.5大特性: 有输入, 有输出, 有穷性, 确定性, 可行性.问: 如何衡量算法的优劣?…...

【WRF理论第十三期】详细介绍 Registry 的作用、结构和内容

目录 1. Introduction&#xff1a;介绍 Registry 的作用和功能。2. Registry Contents&#xff1a;详细描述 Registry 的结构和内容&#xff0c;包括各个部分的条目类型。2.1. DIMSPEC ENTRIES&#xff08;维度规格条目&#xff09;2.2. STATE ENTRIES&#xff08;状态变量条目…...

Android启动优化指南

文章目录 前言一、启动分类与优化目标1、冷启动1.1 优化思路1.2 延迟初始化与按需加载1.3 并行加载与异步执行1.4 资源优化与懒加载1.5 内存优化与垃圾回收控制 2. 温启动2.1 优化应用的生命周期管理2.2 数据缓存与懒加载2.3 延迟渲染与视图优化 3. 热启动3.1 保持应用的状态3.…...

【ETCD】【源码阅读】configureClientListeners () 函数解析

逐步解析 configureClientListeners 函数 configureClientListeners 是 ETCD 的一个重要函数&#xff0c;用于配置客户端通信的监听器&#xff08;Client Listeners&#xff09;。这些监听器主要负责处理外部客户端与 ETCD 服务之间的通信&#xff0c;包括 HTTP 和 gRPC 请求。…...

IO进程学习笔记

man手册 普通命令。系统调用的函数。库函数。特殊文件。文件格式。游戏。附加的一些变量 IO介绍 I&#xff1a;input 输入 O&#xff1a;output 输出 对文件的输入和输出 输入-》写文件&#xff0c;将文件中的内容写到内存中去 输出-》读文件&#xff0c;将内存中的内容读取到文…...

智能手机回暖:华为点火,小米荣耀OV拱火

进入11月中下旬&#xff0c;智能手机圈再度热闹起来。包括华为、小米、OPPO、vivo等诸多手机厂商&#xff0c;都在陆续预热发布新机&#xff0c;其中就包括华为Mate 70、小米Redmi K80、vivo的S20&#xff0c;IQOO Neo10等热门新机&#xff0c;这些热门新机的集中上市迅速吸引了…...

Sqoop导入数据(mysql---->>hive)

目录 数据传输流程脚本报错和异常说明1. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf2. 数据导入hive后显示NULL 数据传输流程 mysql---->>hdfs---->>hive 数据从mysql表中取出&#xff0c;放到hdfs上&#xff08;由targ…...

实验3-实时数据流处理-Flink

1.前期准备 &#xff08;1&#xff09;Flink基础环境安装 参考文章&#xff1a; 利用docker-compose来搭建flink集群-CSDN博客 显示为这样就成功了 &#xff08;2&#xff09;把docker&#xff0c;docker-compose&#xff0c;kafka集群安装配置好 参考文章&#xff1a; …...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...