ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想
目录
主要是包含搜推广系统的基本模块简单介绍,另有一些流程、设计思想的分析。
- 搜索引擎
- 基本模块
- 检索流程
- 查询分析
- 查询纠错
- 广告引擎
- 基于标签倒排索引召回
- 基于向量ANN检索召回
- 打分机制:非精确打分+精准深度学习模型打分
- 索引精简:必要的数据构建索引
- 推荐引擎
- 基本模块
- 基于内容的召回
- 基于协同过滤的召回
- 基于用户的协同过滤
- 基于物品的协同过滤
- 混合召回+分层打分
搜索引擎
搜索引擎的任务是从万亿级别的网页快速查找需要信息,搜索引擎的检索技术是所有基于文本和关键词的检索系统都是可以学习和参考的。
整个检索系统会设计很多技术,比较重要的有网页抓取、文本分析、检索模型、索引技术、链接分析、反作弊、云存储和云计算等,非常复杂。
基本模块
整个检索系统可以按照功能结构分为3部分,分别是爬虫系统、索引系统、检索系统。
- 爬虫系统:要求能高效爬取数据,并选用高效的存储,如基于LSM的HBase高效的进行写入和读取。
- 索引系统:为相关文档建立索引,主要包含3个阶段,
- 1是文档的预处理,包括相似网页去重、网页质量分析、分词处理这些工作。
- 2是对文档进行反作弊的处理,来避免一些作弊网页干扰搜索结果。
- 3是生成索引,生成过程包含三个步骤:索引拆分、索引构建、索引更新
- 索引拆分:文档数据量很大,全部生成索引不太现实,可以根据离线阶段的文档预处理,区分文档质量,比如高质量和低质量,采用分层思想建立索引,另外尽管区分高低质量数据量比较还是比较大需要索引分片。
- 索引构建:确认了索引的分片机制之后,可以使用Map Reduce服务,为每个索引分片生成对应的任务,然后生成相应的倒排索引文件,每个倒排索引代表一个分片,支持加载到线上服务器。
- 索引更新:全量索引结合增量索引的机制完成索引更新,一般使用滚动合并法更新。
- 检索系统:查询分析、查询纠错、查询推荐、召回、打分选取TopK。
检索流程
查询分析
查询词是搜索引擎进行检索的最核心的信息,但是有时候关键词会有错别字,或者是含糊的不精准的,或者查询的关键词不在建立的索引中,如何保证能较准确的检索?
查询分析就是通过输入的查询词理解用户意图,进行查询词纠正,以及对查询意图不明的查询词进行查询推荐,可以分为三个粒度的分析
- 分词粒度分析:最基础的查询分析,根据查询词按照不同的粒度分词,影响跟索引key匹配的效果,中文搜索中特有的一个环节。一般采用混合粒度分词,也就是标准的分词 + 整个查询词短语 来取匹配索引中的key,比如疾风亦有归途,会被分词 [疾风、归途、疾风亦有归途]
- 属性分析:数据的某些属性、权重
- 需求分析:语意级别的意图分析等
关键词位置信息关联性窗口
思考:中文短语是如何检索的?比如查询 “疾风亦有归途”,在构建倒排索引的时候并没有把这个词当作key,直接搜索倒排索引的时候就会找不到,按照混合分词粒度,会接着按照 [疾风,归途] 检索,如果只是简单地将这两个关键词检索出来的文档列表求交集合并,那我们最终得到的结果并不一定会包含带有"疾风亦有归途"的文档,比如搜索到了"xxxx疾风来了,xxxx很多字xxxx,归途",这种并不是期望的结果。
一种解决方案就是记录 关键词出现在文档中的位置,取交集的时候判断一下两个关键词在同一个文档中的距离,距离越小相关性就越小。比如就像包含两个关键词的内容划进去一个窗口,窗口越小,那么证明越相关。
思考:如果是一个查询词被分为了三个关键词?多个关键词,使用查询窗口如何保证顺序?
一种解决方案是两两进行多次计算,最后累加得到一个值。
查询纠错
查询词有错别字,使用查询纠错以及查询推荐优化搜索结果集,查询纠错一般分为三个步骤
- 错误判断,主要有下面两种方式
- 基于规则的错误判断:一般根据人工打标的或者搜索日志进行数据挖掘,得到常见的字典和混淆字典,字典的结构可以是哈希表、前缀树等结构保证高效率检索。按照分词结果,如果无法在字典查到,或者出现在混淆字典里面,那么就认为这个查询词是错误的,需要进行下面的步骤。
- 基于机器学习和语言模型的错误判断,给查询的词一个上下文置信度,置信度低的话判断为错误,需要进行下面的步骤。
- 候选召回:得到纠错集合,中文的错误一般两种,同音、形近,根据多个同音、形近字典找出多个匹配的key,查询返回候选集合。还有方式是根据编辑距离、根据机器学习等找出候选集的。
- 打分排序
广告引擎
广告系统是一个典型的高并发低延迟系统,请求量大,对工程和算法有着强烈的依赖,需要做到千人千面。广告系统中负责检索功能的广告引擎架构。
广告引擎处理一个广告请求的过程,本质上就是根据用户的广告请求信息,找出标签匹配的广告设置,并将广告进行排序返回的过程。
广告基本可以分为两类,搜索类广告、展示类广告
- 搜索类广告:和搜索词关联性比较紧密,类似上面的搜索
- 展示类广告:请求主要包含手机用户标签,标签和广告匹配,然后投放推送广告。
以展示类广告为例,用户访问网页的时候,这个时候期望在网页推送广告,从用户访问的请求信息能拿到用户ID、网站地址、广告位置ID等,接着广告系统服务端利用之前收集的用户信息标签(喜好、年龄等),从提前分析构建好的标签-具体广告信息设置key-value索引查出相应的广告,然后排序返回,之后就是监测广告的效果如展示、点击等埋点。
基本的流程和上面搜素引擎流程类似,包含构建索引、召回候选集、排序返回TopK,不同的是广告(展示类)没有关键词限制,因此在构建倒排索引上,更加灵活。
基于标签倒排索引召回
按照标签-广告文档构建倒排索引,如某个广告设置的标签是 “地区:开封”,“年龄:25-30”,“性别:男” 这些,那么key就可以为每个标签项设置一个32为ID,前xxx位表示标签名称(定向类型),后xxx为表示标签具体值,这样上面的三个标签以及值分别对应3个32位的ID,可以用作倒排索引的key。
思考:所有的标签(定向类型)都作为key放入倒排索引吗?
这样做会有个问题,就是对于那些区分度不高的标签,往往倒排索引挂的posting list都是很长的,这样多个posting list取交集的时候效率会比较低。
因此一种解决方案是使用TF-IDF(词频逆文档频率)中计算IDF的方式,找出区分度比较低的标签,不将他们加入到倒排索引,而是将这些标签以及下面的广告单独列表存储,在倒排索引求完差集之后,在使用这个 “过滤列表” 对检索结果进行结果过滤。
思考:标签太多归并的效率低?
按照上面的策略,当前倒排索引key是区分度比较大的标签,比如需要推送 “媒体类型:APP” 和 “媒体类型:PC” 两种标签下的广告,并且这两种标签下的广告基本占了全部广告,此时如果想要推送两种标签的广告,归并的效率不是很高。
因此考虑到方案做一个标签树的结构,将树的子节点是哪些具有少量广告的标签,进一步划分父节点标签的广告集,从而进行倒排索引分片。
下面就是 树 + 倒排索引 的结构,我们根据广告请求上的标签,就能快速定位要找的索引分片,之后,再查分片中的倒排索引就能缩小候选集。
思考:如果使用"媒体类型"作为树形检索的节点,"PC网站"和"APP"作为两个分叉,并且允许广告主选择 “既在PC网站投放,又在APP上投放”,如果少量的广告主使用这种投放,索引分片应该如何调整?
不变的策略,每次都需要归并排序求交集。
或者是单独创建一个分片,把归并的数据存起来,不用每次时时归并。
基于向量ANN检索召回
使用广告引擎摆脱传统的标签模式,可以将广告标识转为向量,同时把用户兴趣也转化为一个向量,这样使用ANN紧邻搜索找到最近的点当作结果返回就可以了。
对于传统标签模式,是不具有语义上下文的,比如 标签为 “喜欢篮球的人” 时,如果一个用户身上的标签只有 “喜欢运动” ,那这个广告不会投放给这个用户,会漏掉一些数据,对于向量的ANN,能弥补这个问题。
向量检索同时也会带来性能的压力,可以使用聚类(用于缩小候选集合,减少计算量) + 倒排索引 + 乘积量化(用于压缩存储空间) 的实现方案优化向量检索的效率
参考往期博客:ElasticSearch学习篇17_《检索技术核心20讲》最邻近检索-局部敏感哈希、乘积量化PQ思路-CSDN博客
打分机制:非精准打分 + 精准的深度学习模型打分
相比于搜索引擎期望最后的TopK结果,区别就是广告引擎期望最后的结果一条最相关的即可,因此对于广告引擎的打分机制,我们会使用复杂的深度学习模型来打分。
往往深度学习模型的任务会比较耗时,而广告引擎又要求很高的性能,因此打分之前的候选集不能太大,为了解决这个问题,使用非精准打分 + 深度学习模型精确打分机制进行打分,合理的使用资源。
具体来说,可以基于简单的机器学习模型(如逻辑回归LR,梯度提升决策树GBDT,因子分解机FM等)配合少量的特征,完成这个非精准打分环节,将候选广告的数量限制在几十的量级,然后在使用深度学习模型来进行精准打分,最后选出分数最高的广告。
索引精简:必要的数据构建索引
一般某个广告的生命周期变化非常快,比如广告会设置限定投放的时间段,所以相比于搜索引擎的数据,往往变化更快。
因此除了在线的召回、打分环节的检索效率之外,广告业务的特点使得我们可以在离线的索引构建环节,通过精简索引来优化效率,比如将所有的广告(不考虑时效性)全部都加载到系统中进行检索,然后后面再来一遍遍历过滤判断,就会带来大量的判断开销。
因此一种解决思路就是把在线的开销挪到离线的索引构建环节,这些过滤条件和广告定向类型(标签)并没有联系,完全可以先把不相关的广告不构建索引,这样在线召回、打分的候选集就会减少。
比如下面的经过一系列过滤条件,最下层的索引是需要当前用到的,这个过程是在离线环节完成的。
这种机制的前提是广告引擎需要提供实时高效的索引更新能力,广告投放的数量不想搜索引擎网页数量那个量级,一般可以全部加载到内存,一般使用全量索引结合增量索引的更新机制,就可以对线上的索引进行实时的更新了。
推荐引擎
不同于搜索、广告系统,可以依靠关键词、广告主创建检索约束条件,推荐系统的外界约束条件非常少,比如只有一个下拉刷新的动作,因此搜索引擎的灵活程度更高。
基本模块
- 用户画像:离线挖掘用户的兴趣标签,生成完整的用户画像,不通的标签有不同的权重,所有的权重会随着时间的变化衰减,比如用户长时间没有这个行为,标签就会逐渐弱化。
- 文章画像:给文章打标签,除了提取文章的关键词,还需要对文章的语义内容做分析,比如文章分类、主题提取等
- 推荐算法:主要的算法基本为两类,分别是基于统计的静态召回算法和个性化召回算法。
- 基于统计的静态召回算法:比如热文推荐,根据离线对文章的统计数据来进行推荐,比如点击两、评论、收藏、收藏率等,然后在线环节推给用户,比较适合个性化召回算法结果不足时候的补充数据。
- 个性化召回算法:分为基于内容的召回、基于协同过滤的召回。
基于内容的召回
判断文章内容是否符合用户画像,主要就是对比标签了,参考广告引擎的基于标签倒排索引召回。
另外就是使用向量ANN将标签匹配改为高纬向量空间的最近邻检索,弥补标签匹配检索可能漏掉数据的问题。
优缺点
基于协同过滤的召回
协同过滤是推荐系统中代表性方法,协同过滤和基于内容的召回方法最大的区别就是不依赖内容本身来进行推荐,而是基于大众用户和这篇文章的互动关系来推荐。
分为两大类
- 传统的基于数据统计的“Memory-based 的协同过滤算法”,也叫做基于邻域的算法,代表算法有基于用户的、基于物品的协同过滤。
- 基于模型的 “Model-based的协同过滤算法”
基于用户的协同过滤
简单来说就是给用户A推送相似用户B的内容。
举个例子比如将用户A画像相似的用户B看过的文章也推荐给用户A,主要操作是找到和用户A 画像相似的B、C、D、E等,找出他们阅读的文章集合TopK推送给用户A。
具体的流程
- 对于寻找画像相似的用户集合,可以将画像的各个标签值转为向量,然后ANN搜索,或者计算余弦相似度。
- 然后从相似画像用户集合找出具体的文章,然后按照用户喜欢的程度(点赞、收藏、评论等)加权计算找出TopK然后在推送。
问题:计算找出画像相似用户会非常耗时,如何解决?
推荐系统有两种方案
- 相似计算放在离线环节:离线为每个用户计算出一个推荐文章列表,然后使用key-value数据库快速查询,优点是比较简单效率比较高,缺点是更新不够及时。
- 实时阶段使用向量检索来近似地完成更新:第一步寻找相似用户的时候先非精确检索,借助 聚类 + 倒排 + 乘积量化 方案快速检索TopK,然后将这些用户对应的文章列表加权打分排序等。优点:时时性比较好,缺点是检索过程比较复杂,结果不够准确。
基于物品的协同过滤
简单来说就是给用户推送物品的A的相似物品B。
具体的流程
- 离线寻找相似物品:根据上面矩阵将物品专为向量,纬度按照用户,各纬度值按照用户喜欢的数量作为值转为向量,然后ANN搜索,根据ItemID为key,相似物品列表为posting list。
- 在线推送:只要是用户看过的key,就查倒排列表,然后归并计算TopK。
混合召回+分层打分
采用多种方式
首先,每一个召回通路都会使用自己的非精准打分算法,截取千级别之内的候选集。然后,推荐引擎会合并这多个召回通路截取的几千个结果,也就是使用简单的机器学习模型进行非精准打分,选出最好的上百个结果。最后,推荐引擎会使用精准的深度学习模型,选出最好的几十个结果返回给用户。这就是用户看到的最终的推荐结果了。
相关文章:
ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想
目录 主要是包含搜推广系统的基本模块简单介绍,另有一些流程、设计思想的分析。 搜索引擎 基本模块检索流程 查询分析查询纠错 广告引擎 基于标签倒排索引召回基于向量ANN检索召回打分机制:非精确打分精准深度学习模型打分索引精简:必要的…...
IPv6 NA RTR/SOL/OVR标志位,单播多播选择,ndppd代理和kernel配置
NA消息用单播还是多播的判断理由 单播回复(Unicast): 如果客户端发送 RS 消息时,使用的是一个全局地址或链路本地地址作为源地址,则 RA 消息会单播回复到客户端的源地址。这种方式减少了网络中的广播流量,…...
LearnOpenGL 学习(入门--三角形,着色器,纹理)
你好,三角形 下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。 图形渲染管线的第一个部分是顶点着色器(Vertex Shader),它把一个单独的顶点作为输入。顶点着色器主要的目的是…...
前端开发入门指南Day12:ES6进阶:面向对象的编程(Class类、继承、模块化)
今天,让我们探索ES6中面向对象编程的革新。想象一下,如果传统的JavaScript是一个手工作坊,那么ES6的类和模块化就是一个现代化工厂,让代码的组织和复用变得更加规范和高效。 一、为什么需要Class类的革新 🎯 在ES6之…...
深入探索进程间通信:System V IPC的机制与应用
目录 1、System V概述 2.共享内存(shm) 2.1 shmget — 创建共享内存 2.1.2 ftok(为shmmat创建key值) 2.1.3 为什么一块共享内存的标志信息需要用户来传递 2.2 shmat — 进程挂接共享内存 2.3 shmdt — 断开共享内存连接 2.4…...
跨 CA 签发多个证书的 Nginx mTLS 配置
研究过用同一个 CA 签发的服务端和客户端证书的 Nginx mTLS 配置,本文要试验一番服务端和客户端证书由不同 CA 机构签发的情形。这是常有事,比如与客户间采用 mTLS 加密方式,需要文件交付可能是 客户端证书由甲方生成,发送客户端…...
CentOS7 虚拟机 双网卡绑定
一、网卡绑定模式 模式类型特点mode0round-robin(平衡轮询策略)基于per packet方式,轮询往每条链路发送报文。提供负载均衡和容错的能力,当有链路出问题,会把流量切换到正常的链路上。交换机端需要配置聚合口。mode1a…...
设计模式——方法链or流式接口
方法链或流式接口是一种编程模式或设计模式。核心思想是通过返回对象自身的应用,使得可以在一个表达式中连续调用多个方法。 c中实现这种模式 1.基本语法规则 (1)每个可链接的方法都返回对象自身的引用(通常是*this)…...
BioDeepAV:一个多模态基准数据集,包含超过1600个深度伪造视频,用于评估深度伪造检测器在面对未知生成器时的性能。
2024-11-29, 由罗马尼亚布加勒斯特大学创建BioDeepAV数据集,它专门设计来评估最先进的深度伪造检测器在面对未见过的深度伪造生成器时的泛化能力,这对于提高检测器的鲁棒性和适应性具有重要意义。 数据集地址:biodeep 一、研究背景࿱…...
winform 程序添加API接口
假定你有这么一个winform程序,现在有需求开放一个接口,供外部调用,则你可以这样实现 安装需要的依赖包 Microsoft.AspNetCore.App 2.1.34 Microsoft.Extensions.Hosting 8.0.1使用线程在主窗体loading时候启动webhost publi…...
vscode 怎么下载 vsix 文件?
参考:https://marketplace.visualstudio.com/items?itemNameMarsCode.marscode-extension 更好的办法:直接去相关插件的 github repo 下载老版本 https://github.com/VSCodeVim/Vim/releases?page5 或者,去 open-vsx.org 下载老版本 点击这…...
jupyter-lab 环境构建
我平时用来调试各种代码的。 创建环境,安装库 conda create --name jupyterlab python3.12 -y conda activate jupyterlab conda install -c conda-forge jupyterlab nodejs之前用的是3.10的,但是最近安装的时候,发现3.10的python里面的jup…...
Mysql事务常见面试题 -- 事务的特性 ,并发事务问题 , undo_log和redo_log , 分布式事务
一. 事务的特性 ACID 原子性 --> 事务操作被视为一个整体 , 要么全部成功 , 要么全部失败一致性 --> 事务操作前后数据的变化是一致的隔离性 --> 事务的执行不受其他事务的影响持久性 --> 事务执行完毕会对数据永久保存 比如我们在转账的过程中 , A给B转账1000元…...
C# 线程--Thread类
目录 什么是线程? Thread类的定义 创建和启动线程 使用 ThreadStart 委托 使用 ParameterizedThreadStart 委托 Lambda简写 使用线程池(ThreadPool) 使用线程池的优点 使用 ThreadPool 的一般步骤 常用方法 Start() Join() Slee…...
【RK3588 Linux 5.x 内核编程】-内核高分辨率定时器
内核高分辨率定时器 文章目录 内核高分辨率定时器1、高分辨率定时器介绍2、高分辨率定时器API2.1 初始化定时器2.2 启动定时器2.3 停止定时器2.4 改变定时器超时时间2.5 定时器状态检查3、驱动实现4、驱动验证在前面的文章中,我们知道了如果在Linux内核中使用定时器。本文将详…...
论文阅读与源码解析:MogaNet
论文阅读与源码解析:MogaNet: Multi-order Gated Aggregation Network 论文地址:https://arxiv.org/pdf/2211.03295 GitHub项目地址:https://github.com/Westlake-AI/MogaNet 源码:https://github.com/Westlake-AI/MogaNet/blob/…...
长、宽数据表格转换
excel数据读取 使用 readxl 包读取 Excel 文件 library(readxl) 读取 Excel 文件: 使用 read_excel() 函数读取 .xlsx 或 .xls 格式的文件。可以选择指定工作表名或工作表索引。 # 读取 Excel 文件的默认工作表 data <- read_excel("path_to_y…...
华为 Mate 70 系列智能手机将运行不兼容 Android 的鸿蒙
华为宣布其 Mate 70 系列新智能手机将搭载不兼容 Android 的 HarmonyOS Next 操作系统。虽然是基于安卓系统的,但是该分叉树将正式分离。以后将不再兼容安卓系统软件。 HarmonyOS Next 可运行的应用数量仍然远远逊于 Android。华为表示 HarmonyOS Next 获得了逾 1.…...
【Halcon】 derivate_gauss
1、derivate_gauss Halcon中的derivate_gauss算子是一个功能强大的图像处理工具,它通过将图像与高斯函数的导数进行卷积,来计算各种图像特征。这些特征在图像分析、物体识别、图像增强等领域具有广泛的应用。 参数解释 Sigma:高斯函数的标准差,用于控制平滑的程度。Sigma…...
原型模式的理解和实践
引言 在软件开发中,我们经常需要创建具有相同属性或状态的对象。如果采用传统的构造函数或工厂模式来创建对象,那么每次创建对象时都需要重新设置对象的属性,这无疑增加了代码的冗余和复杂性。为了解决这一问题,原型模式ÿ…...
封装loding加载动画的请求
图片 /*** Loading 状态管理类*/ export class Loading {constructor(timer300) {this.value falsethis.timer timer}/*** 执行异步操作并自动管理 loading 状态* param {Promise|Function|any} target - Promise、函数或其他值* returns {Promise} - 返回请求结果*/async r…...
特种设备相关管理A全国通用试题
1.下列()类型的起重机械的定期检验每年1次。 A.机械式停车设备 B.施工升降机 C.门式起重机 D.桅杆式起重机 答案:B 2.压力容器安全技术监察规程中所指的容积,应为( )。 A.应当扣除永久连接在压力容器内部的内件…...
ES语法(一)概括
一、语法 1、请求方式 Elasticsearch(ES)使用基于 JSON 的查询 DSL(领域特定语言)来与数据交互。 一个 ElasticSearch 请求和任何 HTTP 请求一样由若干相同的部件组成: curl -X<VERB> <PROTOCOL>://&l…...
反射的作用
只要不是写死在程序里的对象的创建和调用,都可以用反射来实现。 例如,依据注解或配置信息动态生成并注入对象的需求场景,生成动态代理的需求场景。...
KARE:知识图谱社区级检索,增强 LLM 推理能力的医疗预测框架
KARE:知识图谱社区级检索,增强 LLM 推理能力的医疗预测框架 论文大纲理解要点全流程分析核心模式解法拆解知识图谱社区检索和普通检索有什么本质区别?为什么要同时使用专家LLM和本地LLM?动态知识检索中的评分机制是如何平衡多个因…...
LabVIEW氢气纯化控制系统
基于LabVIEW的氢气纯化控制系统满足氢气纯化过程中对精确控制的需求,具备参数设置、过程监控、数据记录和报警功能,体现了LabVIEW在复杂工业控制系统中的应用效能。 项目背景 在众多行业中,尤其是石油化工和航天航空领域,氢气作为…...
数据分析案例-笔记本电脑价格数据可视化分析
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
CSS函数
目录 一、背景 二、函数的概念 1. var()函数 2、calc()函数 三、总结 一、背景 今天我们就来说一说,常用的两个css自定义属性,也称为css函数。本文中就成为css函数。先来看一下官方对其的定义。 自定义属性(有时候也被称作CSS 变量或者级…...
Linux网络——传输层
目录 1. 再谈端口号 2. UDP ① UDP 协议的报文 ② UDP 协议报头的本质 3. TCP ① TCP 缓冲区的理解 ② TCP 协议的报文 1. 16位源端口号 && 16位目的端口号 && 4位首部长度 2. 16位窗口大小 3. 32位序号 && 32位确认序号 4. 六个标记位 ③…...
2024年认证杯SPSSPRO杯数学建模A题(第一阶段)保暖纤维的保暖能力全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 A题 保暖纤维的保暖能力 原题再现: 冬装最重要的作用是保暖,也就是阻挡温暖的人体与寒冷环境之间的热量传递。人们在不同款式的棉衣中会填充保暖材料,从古已有之的棉花、羽绒到近年来各种各样的人造纤维。不…...
采药 刷题笔记 (动态规划)0/1背包
P1048 [NOIP2005 普及组] 采药 - 洛谷 | 计算机科学教育新生态 动态规划 0/1背包 的本质在于继承 一行一行更新 上一行是考虑前i个物品的最优情况 当前行是考虑第i1个物品的情况 当前行的最优解 来自上一行和前i个物品的最优解进行比较 如果当前装了当前物品ÿ…...
LabVIEW MathScript工具包对运行速度的影响及优化方法
LabVIEW 的 MathScript 工具包 在运行时可能会影响程序的运行速度,主要是由于以下几个原因: 1. 解释型语言执行方式 MathScript 使用的是类似于 MATLAB 的解释型语言,这意味着它不像编译型语言(如 C、C 或 LabVIEW 本身的 VI&…...
大数据新视界 -- Hive 数据湖架构中的角色与应用(上)(25 / 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
电脑关机的趣味小游戏——system函数、strcmp函数、goto语句的使用
文章目录 前言一. system函数1.1 system函数清理屏幕1.2 system函数暂停运行1.3 system函数电脑关机、重启 二、strcmp函数三、goto语句四、电脑关机小游戏4.1. 程序要求4.2. 游戏代码 总结 前言 今天我们写一点稍微有趣的代码,比如写一个小程序使电脑关机…...
elasticsearch是如何进行搜索的?
请求与转发 协调节点确定参与搜索的目标索引,及其通过分片路由表确定分片对索引所在分片中选择任意节点并发请求多个分片的副本分片 副本选择策略 副本选择主要考虑 分片健康状态:选择状态为 green 或 yellow 的副本节点负载情况:避免查询…...
【Linux课程学习】:站在文件系统之上理解:软硬链接,软硬链接的区别
🎁个人主页:我们的五年 🔍系列专栏:Linux课程学习 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 Linux学习笔记: https://blog.csdn.net/d…...
如何做好一份技术文档
要做好一份技术文档,你需要遵循以下步骤: 1. 明确文档目标: 确定文档的目的和受众。 了解受众的技术水平和背景,以便调整内容的深度和语言风格。 2. 收集信息: 搜集所有与主题相关的技术细节、数据、图表和…...
优雅关闭进程
原文地址:优雅关闭进程 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 介绍 本文涉及到进程对信号的响应,关于信号的一些基本知识,可以参考往期文章:linux系统信号简介 – 无敌牛 一个进程正常…...
【WEB开发.js】addEventListener事件监听器的绑定和执行次数的问题(小心踩坑)
假设我们有一个按钮,用户点击该按钮后,会选择一个文件,且我们希望每次点击按钮时只触发一次文件处理。下面我会给你一个简单的例子,展示放在函数内部和放在函数外部的区别。 1. 将事件监听器放在函数内部(问题的根源&…...
将 x 减到 0 的最小操作数 C++滑动窗口
给你一个整数数组 nums 和一个整数 x 。每一次操作时,你应当移除数组 nums 最左边或最右边的元素,然后从 x 中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。 如果可以将 x 恰好 减到 0 ,返回 最小操作数 &#x…...
深入解析 C++ 中的 common_reference_with 和 common_with:设计原理与复杂性
在 C 标准库的设计中,类型之间的兼容性和安全性是至关重要的,尤其是在泛型编程中。为了实现高效且安全的类型推导和转换,C 提供了一些复杂的概念和工具来确保不同类型之间能够正确协同工作。common_reference_with 和 common_with 这两个概念…...
从CPU缓存与指令重排序探讨JMM
目录 问题背景 解决思路 hb关系的应用 原子性问题 问题背景 1. 编译器和CPU优化: 编译器和CPU为了提升单线程程序的性能,会对代码进行优化,如指令重排序、延迟计算等。这些优化在单线程环境下不会影响程序的最终结果,但在多线…...
ETSI EN 300328 标准的一些笔记
ETSI - European Telecommunications Standards Institute 欧洲电信标准化协会 ETSI EN 300328 是欧洲协调标准,此标准适用于工作在2.4G频段范围内运行的宽频传输系统和设备的无线电频谱。 例如 WIFI、Zigbee、蓝牙、 (国内的星闪)。不涵盖UWB。 符合了EN 300328标…...
各大浏览器(如Chrome、Firefox、Edge、Safari)的对比
浏览器如Chrome、Firefox、Edge等在功能、性能、隐私保护等方面各有特点。以下是对这些浏览器的详细对比,帮助你选择合适的浏览器。 1. Google Chrome 市场份额:Chrome是目前市场上最流行的浏览器,约占全球浏览器市场的65%以上。 性能&#…...
AD7606使用方法
AD7606是一款8通道最高16位200ksps的AD采样芯片。5V单模拟电源供电,真双极性模拟输入可以选择10 V,5 V两种量程。支持串口与并口两种读取方式。 硬件连接方式: 配置引脚 引脚功能 详细说明 OS2 OS1 OS2 过采样率配置 000 1倍过采样率 …...
双向长短期记忆(Bi-LSTM)神经网络介绍
长短期记忆(Long Short-Term Memory, LSTM)神经网络: 1.是Hochreiter和Schmidhuber设计的循环神经网络(Recurrent Neural Network, RNN)的改进版本。LSTM模型借鉴了人类大脑的选择性输入和选择性遗忘机制,获取序列中的关键信息,遗忘和当前预测…...
openGauss开源数据库实战十八
文章目录 任务十八 openGauss逻辑结构:构:用户和权眼管理任务目标实施步骤一、准备工作二、用户和角色管理1.使用CREATE USER语句创建用户2.使用CREATE ROLE语句创建用户3.删除用户和角色 三、权限管理1.系统权限清理工作 任务十八 openGauss逻辑结构:构:用户和权眼管理 任务目…...
JVM 性能调优 -- JVM 调优常用网站
前言: 上一篇分享了 JDK 自带的常用的 JVM 调优命令和图形化界面工具,本篇我们分享一下常用的第三方辅助 JVM 调优网站。 JVM 系列文章传送门 初识 JVM(Java 虚拟机) 深入理解 JVM(Java 虚拟机) 一文搞…...
现在的电商风口已经很明显了
随着电商行业的不断发展,直播带货的热潮似乎正逐渐降温,而货架电商正成为新的焦点。抖音等平台越来越重视货架电商,强调搜索功能的重要性,预示着未来的电商中心将转向货架和搜索。 在这一转型期,AI技术与电商的结合为…...
基于AT89C52单片机的电子时钟与温湿度检测系统
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...